original in enGuido Socher
en to gb Xiang Hong
Guido��һ�����ʸ��Linux�Ժ�Perl�����ߡ� �������æ���޷��Ӻ��ڻ�԰���ֲ�ʲô�ġ�
Perl�ر��ʺ���������С�͵�ר�ó��� Ϊ�˼ӿ쿪�����ȣ�����һ�����ṩ���������Ҫ�õ��Ĺ��ܺͽṹ�Ļ�����ܣ� ������һ�������⡣ �����һ�δ����ṩ�˻�����������ѡ����������Լ�һ�� ��ӡ������Ϣ�������̡�
!/usr/bin/perl -w
# vim: set sw=8 ts=8 si et: # # uncomment strict to make the perl compiler very # strict about declarations: #use strict; # global variables: use vars qw($opt_h); use Getopt::Std; # &getopts("h")||die "ERROR: No such option. -h for help\n"; &help if ($opt_h); # #>>your code<< # #-=-=-=-=-=-=-=-=-=-=-=-=-=-=- sub help{ print "help message\n"; exit; } #-=-=-=-=-=-=-=-=-=-=-=-=-=-=- __END__ |
��������������δ��롣"&getopts()"�ǶԿ�"Getopt::Std"��һ�������̵ĵ��ã�����������ѡ�������
������ѡ������Ϊ��Ӧ��ȫ�ֱ���$opt_<ѡ��>��ֵ�����е�������ѡ���"-"�����ţ���ͷ��������λ�ڳ�����
����������֮�䣨����Unixϵͳ��һ��Լ������
����"&getopts"һ���ض����ַ�����������ij�������"h"�����г����пɽ��ܵ�ѡ�
��ijѡ��Ҫ��һ�����������ڸ�ѡ��֮��Ӧ����һ��ð�š�����˵��"&getsopt("d:x:h")"��ʾ���������ѡ��
"-d"��"-x"��"-h"������"-d"��"-x"��Ҫһ��������
�Ӷ�"-d something"��һ���ɽ��ܵ������У���"-d -x foo"�Ǵ���ģ���Ϊѡ��"-d"û�в�����
��������и�����"-h"�����������"$opt_h"����ֵ��"&help if ($opt_h);
"
������������help��
���"sub help{
"�Ƕ���������̵�������
��������ڻ�û����ȫ�˽����е�ϸ�ڣ���Ҫ��������԰���δ��뵱��һ��ģ�壬������������ϣ���еĹ��ܡ�
�������������ģ��дһ��СС��16����/10��������ת�����򣬲�������"numconv"��
"numconv -x 30
"�����10������30��16������ʽ��
"numconv -d 1A
"�����16������1A��10������ʽ��
"numconv -h
"���������Ϣ��
������Perl����"hex()"���16���Ƶ�10���Ƶ�ת��������"printf()"���10���Ƶ�16���Ƶ�ת����
�����Ǽ������ǵ�ģ���У��õ��������Ư���ij���
#!/usr/bin/perl -w
# vim: set sw=8 ts=8 si et: # # uncomment strict to make the perl compiler very # strict about declarations: #use strict; # global variables: use vars qw($opt_d $opt_x $opt_h); use Getopt::Std; # &getopts("d:x:h")||die "ERROR: No such option. -h for help\n"; &help if ($opt_h); if ($opt_d && $opt_x){ die "ERROR: options -x and -d are mutual exclusive.\n"; } if ($opt_d){ printf("decimal: %d\n",hex($opt_d)); }elsif ($opt_x){ printf("hex: %X\n",$opt_x); }else{ # wrong usage -d or -x must be given: &help; } #-=-=-=-=-=-=-=-=-=-=-=-=-=-=- sub help{ print "convert a number to hex or dec. USAGE: numconv [-h] -d hexnum umconv [-h] -x decnum OPTIONS: -h this help EXAMPLE: numconv -d 1af \n"; exit; } #-=-=-=-=-=-=-=-=-=-=-=-=-=-=- __END__ |
�����˴�����"numconv"����
������������ϸ�ķ����������
Perl�е�if�����������ʽ��
����ʽ if (����);
��
if (����) ��1 [[elsif (����) ��2 ...] else ��3]
����"��"�ɻ�����{}��Χ�������������ɡ�
���磺
printf("hello\n") if ($i);
if ($i == 2){ printf("i is 2\n"); }elsif ($i == 4){ printf("i is 4\n"); }else{ printf("i is neither 2 nor 4\n"); } |
������C��һ��������������"&&"��"||"��������"��·"���ԣ�
printf("hello\n") if ($i);
����д�ɣ�
($i) && printf("hello\n");
���ǵ�ģ���ж�"||"��ʹ�ÿ��Ա��ܺõķ���ɷ��Ͽ���ϰ�ߵľ��ӣ�
&getopts("d:x:h")||die "ERROR\n";
"�����߳ɹ��ģ����������ѡ������˳�"��
����"die"�൱��"printf"��"exit"�����������һ����Ϣ����ֹ����
&getopts("d:x:h")||die "ERROR\n";
�൱�ڣ�
die "ERROR\n"; if (! &getopts("d:x:h"));
����"!"���߼������������Ҳ�ɱ���дΪ��
die "ERROR\n"; unless (&getopts("d:x:h"));
"unless"�൱��"if(!..)".
����Դ�if������������д����ѡһ���������ϰ�ߵġ�
��Perl I�У� ������ʹ�ñ�����������$��ͷ�ı�����֮ǰ��û�������� �������ڱ�ʹ�õ�ʱ�򱻴����ġ� ����С������˵����������˾��úܷ��㣻�����ڴ�ij���������Ժ����׵���ijЩ���ڷ��ֵĴ��� ��������������ʹ���������ܹ�����ijЩ���ʹ���
|
#!/usr/bin/perl
use strict; my $i=1; print "i is $i\n"; |
�����������ȷ�ģ��������������"i is 1"�����ڼ����������ü���ʱ����İ� "i"�ó���"j"��
#!/usr/bin/perl
# $i=1; print "i is $j\n"; |
�������Ҳ�����еúܺã���������ǣ�"i is "�� �������"use strict;"��ʹ�����޷�ͨ�����롣 һ��ʹ����"strict"�����б�������Ҫ�����������򽫳��ֱ��������Ϣ��
#!/usr/bin/perl
use strict; my $i=1; print "i is $j\n"; |
����ij��򽫵������´�����Ϣ��ͬʱ��λ���������ʮ�����ף�
Global symbol "$j" requires explicit package name at ./vardec line 4. Execution of ./vardec aborted due to compilation errors. Exit 255
������"my"����һ�����ֲ���������Ҳ�����������ǵ�ģ����������
��"use vars qw()"���������磺
use vars qw($opt_h);
��"use var"������ȫ�ֱ�������Ч��Χ���쵽�������Ŀ��С�
�ڳ���Ŀ�ͷ���κ�������֮�⣩��"my"�����ı���ֻ�ڵ�ǰ����
�ļ����������ļ��е����������̣�����Ч��
�����̵ľֲ������ڸ�����������"my"��������
ϰ����shell��̵��˿��ܻ��������������������ֵʱ����"$"���š� ����һ�ִ�������������ۺ�ʱ��ֻҪ����ʹ��һ������������"$"���� ���DZ���ġ�
����������ʱҲ����ֱ�Ӹ�ֵ����"my $myvar=10;"�����˱���"$myvar" ͬʱΪ�丳��ֵ10��
�������"numconv"�����������Ѿ�ʹ����"help"�����̡�
�����̵�ʹ�ÿ���ʹ����ṹ��������
�����ڳ�����κεط����������̣��ڵ���֮ǰ��֮�󶼿��ԣ���
��������"sub name(){..."��ʼ���������ʽ��"$retval=&name(...arguments...)"��
�����̵ķ���ֵ�������һ����ִ�е����Ľ������������ͨ��һ�����������"@_"��ɡ�
���ǽ���Perl III����ϸ�������飬����ֻҪ֪�����������ڿ�����"shift"
���ж�������������ֵ�͹��ˡ�������һ��������
#!/usr/bin/perl
use strict; my $result; my $b; my $a; $result=&add_and_duplicate(2,3); print "2*(2+3) is $result\n"; $b=5;$a=10; $result=&add_and_duplicate($a,$b); print "2*($a+$b) is $result\n"; # add two numbers and multiply with 2: sub add_and_duplicate(){ my $locala=shift; my $localb=shift; ($localb+$locala)*2; } |
�����Ѿ�֪���˲��ٹ���Perl�Ļ���֪ʶ�����ڿ���дһ�����õij����ˡ�
Perl�����Ŀ���Ƿ����ı��ļ��Ĵ�����
���ǵĵ�һ��Perl���򽫴���һ����д���ʵ��б��������ҳ��ظ����
�����д���ʵ��б��������������ģ�
|
AC Access Class AC Air Conditioning AFC Automatic Frequency Control AFS Andrew File System ...
���Դ�����������������
�б��ļ��Ľṹ�ǣ�
������������һ���ı��ļ��أ�������һЩ���ж����ļ��Ĵ��룺
.... open(FD,"abb.txt")||die "ERROR: can not read file abb.txt\n"; while( #do something } close FD; .... |
"open"������Ҫһ���ļ���������һ���ļ�����Ϊ��������ļ���������һ���������͵ı�����
����Ҫ������"open"������ij�����ļ��ض�ȡ���ݵĺ������Լ�"close"������ʹ�����������
���ļ��ж�ȡ��������<FD>��ɵġ�<FD>���Ա��ŵ�һ��"while"Ñ������ʵ�ְ��ж�ȡ��
һ��ģ�Perl���ô�д��ĸ���б�ʾһ���ļ���������
��ô���������Ķ�ȥ�ˣ�Perl�в����������������Dz���Ҫ�������������Ǵ��ڵġ�"$_"��������֮һ��
�������"while"Ñ���У�����������������һ�ζ�����С�
���������ԣ������ش�������
#!/usr/bin/perl
use strict; my $i=0; open(FD,"abb.txt")||die "ERROR: can not read file abb.txt\n"; while(<FD>){ # increment the line counter. You probably # know the ++ from C: $i++; print "Line $i is $_"; } close FD; |
|
ע�⣬����û��д"print "Line $i is $_\n""�� ���ı��ļ��ж�����а����˻��з���"\n"����
�ã����������Ѿ�֪����ζ��ļ��ˣ���Ҫ������ǵij�����Ҫ֪����
�������ʽ�ṩ�����ı�������Ѱ�ض�ģʽ�����������������Ҫ�õ�
ÿ���е�һ���ո�֮ǰ���ַ��������仰˵������ҪѰ�ҵ�ģʽ�ǣ�"����-->�ǿո��ַ�����-->�ո�"��
��Perl���������ʽ����ʾ���ǣ�"^\S+\s"�������ŵ�"m//;"��ȥ��
Perl��������������ʽ��ƥ��"$_"�������������������ǰ�У����ǵ��𣿣�
���е�"\S+"����"�ǿո��ַ�����"��ƥ�䡣��������ţ�"()"����"\S+"��������
"�ǿո��ַ�����"������������"$1"��
����Щ�����ӵ����ǵ�������ȥ��
#!/usr/bin/perl -w
# vim: set sw=8 ts=8 si et: # use strict; # global variables: use vars qw($opt_h); my $i=0; use Getopt::Std; # &getopts("h")||die "ERROR: No such option. -h for help.n"; &help if ($opt_h); # open(FD,"abb.txt")||die "ERROR: can not read file abb.txt\n"; while(<FD>){ $i++; if (m/^(\S+)\s/){ # $1 holds now the first word (\S+) print "$1 is the abbreviation on line $i\n"; }else{ print "Line $i does not start with an abbreviation\n"; } } close FD; # #-=-=-=-=-=-=-=-=-=-=-=-=-=-=- sub help{ print "help text\n"; exit; } #-=-=-=-=-=-=-=-=-=-=-=-=-=-=- __END__ |
����������ʽ���뵱ǰ��ƥ�䣬ƥ���������m/ /��������1�����ǿ��԰�������һ��"if" ����С����"if"����DZ�Ҫ�ģ���Ϊ��Ҫ��֤����"$1"�к�����Ч�����ݡ�
�����Ѿ����Զ��ļ������л�õ�����д�ˡ�ʣ�µ������ǣ����ǻ���Ҫij�ַ������ж�
ij����д�Dz����Ѿ������ˡ�������Ҫһ���µ��������ͣ���ϣ����
��ϣ����һ�����ַ�����Ϊ���������顣��ʾ������ϣ���ı�����"%"��ͷ��
ͬʱ����ͨ��"$������{"�����ַ���"}"�����ñ��е�ij��Ԫ�ء�
�����"$"���Ÿ���������ǰ���"$"��һ���ģ���Ϊ��ϣ���е�һ��Ԫ��ʵ����
����һ����ͨ�ı���������
һ�����ӣ�
#!/usr/bin/perl -w
my %htab; my $index; # load the hash with data: $htab{"something"}="value of something"; $htab{"somethingelse"}=42; # get the data back: $index="something"; print "%htab at index \"$index\" is $htab{$index}\n"; $index="somethingelse"; print "%htab at index \"$index\" is $htab{$index}\n"; |
���������������ǣ�
%htab at index "something" is value of something %htab at index "somethingelse" is 42
���ˣ����������ij����ǣ�
1 #!/usr/bin/perl -w
2 # vim: set sw=4 ts=4 si et: 3 # 4 use strict; 5 # global variables: 6 use vars qw($opt_h); 7 my %htab; 8 use Getopt::Std; 9 # 10 &getopts("h")||die "ERROR: No such option. -h for help.n"; 11 &help if ($opt_h); 12 # 13 open(FD,"abb.txt")||die "ERROR: can not read file abb.txt\n"; 14 print "Abbreviations with several meanings in file abb.txt:\n"; 15 while(<FD>){ 16 if (m/^(\S+)\s/){ 17 # we use the first word as index to the hash: 18 if ($htab{$1}){ 19 # again this abbrev: 20 if ($htab{$1} eq "_repeated_"){ 21 print; # same as print "$_"; 22 }else{ 23 # this is the first duplicate we print first 24 # occurance of this abbreviation: 25 print $htab{$1}; 26 # print the abbreviation line that we are currently reading: 27 print; 28 # mark as repeated (= appears at least twice) 29 $htab{$1}="_repeated_"; 30 } 31 }else{ 32 # the first time we load the whole line: 33 $htab{$1}=$_; 34 } 35 } 36 } 37 close FD; 38 # 39 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 40 sub help{ 41 print "finddup -- Find abbreviations with several meanins in the 42 file abb.txt. The lines in this file must have the format: 43 abrev meaning 44 \n"; 45 exit; 46 } 47 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 48 __END__ |
����������������������������ô�����ģ�
���еĶ���һ���ļ�����һ����Ϊ"%htab"
�Ĺ�ϣ���������ݣ�33�У����ù�ϣ�����������ǵ�����д����Ϊ��ϣ����ij��Ԫ�ظ�ֵ֮ǰ��
����Ԫ���Dz����Ѿ�����ֵ�ˣ�����ǣ��������ֿ����ԣ�
�����������������Լ����ԡ�