|
¡¡
|
¡¡
|
|
µÚÊ®¶þÕ Perl5ÖеÄÒýÓÃ/Ö¸Õë
by chinacode
Ò»¡¢ÒýÓüò½é
¶þ¡¢Ê¹ÓÃÒýÓÃ
Èý¡¢Ê¹Ó÷´Ð±Ïß(\)²Ù×÷·û
ËÄ¡¢ÒýÓúÍÊý×é
Îå¡¢¶àάÊý×é
Áù¡¢×Ó³ÌÐòµÄÒýÓÃ
×Ó³ÌÐòÄ£°å
Æß¡¢Êý×éÓë×Ó³ÌÐò
°Ë¡¢Îļþ¾ä±úµÄÒýÓÃ
Ò»¡¢ÒýÓüò½é
ÒýÓþÍÊÇÖ¸Õ룬¿ÉÒÔÖ¸Ïò±äÁ¿¡¢Êý×é¡¢¹þÏ£±í£¨Ò²½Ð¹ØÁªÊý×飩ÉõÖÁ×Ó³ÌÐò¡£Pascal»òC³ÌÐòÔ±Ó¦¸Ã¶ÔÒýÓ㨼´Ö¸Õ룩µÄ¸ÅÄîºÜÊìϤ£¬ÒýÓþÍÊÇijֵµÄµØÖ·£¬¶ÔÆäµÄʹÓÃÔòÈ¡¾öÓÚ³ÌÐòÔ±ºÍÓïÑԵĹ涨¡£ÔÚPerlÖУ¬¿ÉÒÔ°ÑÒýÓóÆÎªÖ¸Õ룬¶þÕßÊÇͨÓõģ¬ÎÞ²î±ðµÄ¡£ÒýÓÃÔÚ´´½¨¸´ÔÓÊý¾Ý·½ÃæÊ®·ÖÓÐÓá£
Perl5ÖеÄÁ½ÖÖÒýÓÃÀàÐÍΪӲÒýÓúͷûºÅÒýÓ᣷ûºÅÒýÓú¬ÓбäÁ¿µÄÃû×Ö£¬Ëü¶ÔÔËÐÐʱ´´½¨±äÁ¿Ãû²¢¶¨Î»ºÜÓÐÓ㬻ù±¾ÉÏ£¬·ûºÅÒýÓþÍÏóÎļþÃû»òUNIXϵͳÖеÄÈíÁ´½Ó¡£¶øÓ²ÒýÓÃÔòÏóÎļþϵͳÖеÄÓ²Á´½Ó¡£
Perl4Ö»ÔÊÐí·ûºÅÒýÓ㬸øÊ¹ÓÃÔì³ÉһЩÀ§ÄÑ¡£ÀýÈ磬ֻÔÊÐíͨ¹ýÃû×Ö¶Ô°üµÄ·ûºÅÃû¹þÏ£±í£¨ÃûΪ_main{}£©½¨Á¢Ë÷Òý¡£Perl5ÔòÔÊÐíÊý¾ÝµÄÓ²ÒýÓ㬷½±ã¶àÁË¡£
Ó²ÒýÓøú×ÙÒýÓõļÆÊý£¬µ±ÆäÊýΪÁãʱ£¬Perl×Ô¶¯½«±»ÒýÓõÄÏîÄ¿ÊÍ·Å£¬Èç¹û¸ÃÏîÄ¿ÊǶÔÏó£¬ÔòÎö¹¹Êͷŵ½ÄÚ´æ³ØÖС£Perl±¾Éí¾ÍÊǸöÃæÏò¶ÔÏóµÄÓïÑÔ£¬ÒòΪPerlÖеÄÈκζ«Î÷¶¼ÊǶÔÏ󣬰üºÍÄ£¿éʹµÃ¶ÔÏó¸üÒ×ÓÚʹÓá£
¼òµ¥±äÁ¿µÄÓ²ÒýÓúܼòµ¥£¬¶ÔÓڷǼòµ¥±äÁ¿µÄÒýÓã¬Äã±ØÐëÏÔʽµØ½â³ýÒýÓò¢¸æË߯äÓ¦ÈçºÎ×ö£¬Ïê¼û¡¶µÚ ÕÂPerlÖеÄÃæÏò¶ÔÏó±à³Ì¡·¡£
¶þ¡¢Ê¹ÓÃÒýÓÃ
±¾ÕÂÖУ¬¼òµ¥±äÁ¿Ö¸Ïñ$pointerÕâÑùµÄ±äÁ¿£¬$pointer½öº¬Ò»¸öÊý¾ÝÏÆä¿ÉÒÔΪÊý×Ö¡¢×Ö·û´®»òµØÖ·¡£
Èκμòµ¥±äÁ¿¾ù¿É±£´æÓ²ÒýÓá£ÒòΪÊý×éºÍ¹þÏ£±íº¬Óжà¸ö¼òµ¥±äÁ¿£¬ËùÒÔ¿ÉÒÔ½¨Á¢¶àÖÖ×éºÏ¶ø³ÉµÄ¸´ÔÓµÄÊý¾Ý½á¹¹£¬ÈçÊý×éµÄÊý×é¡¢¹þÏ£±íµÄÊý×é¡¢×Ó³ÌÐòµÄ¹þÏ£±íµÈµÈ¡£Ö»ÒªÄãÀí½âÆäʵֻÊÇÔÚÓüòµ¥±äÁ¿ÔÚ¹¤×÷£¬¾ÍÓ¦¸Ã¿ÉÒÔÕýÈ·µÄÔÚ×ÔӵĽṹÖÐÕýÈ·µØ½â³ýÒýÓá£
Ê×ÏÈÀ´¿´Ò»Ð©»ù±¾Òªµã¡£
Èç¹û$pointerµÄֵΪһ¸öÊý×éµÄÖ¸Õ룬Ôòͨ¹ýÐÎʽ@$pointerÀ´·ÃÎÊÊý×éÖеÄÔªËØ¡£ÐÎʽ@$pointerµÄÒâÒåΪ¡°È¡³ö$pointerÖеĵØÖ·Öµµ±×÷Êý×éʹÓᱡ£ÀàËÆµÄ£¬%$pointerΪָÏò¹þÏ£±íÖеÚÒ»¸öÔªËØµÄÒýÓá£
ÓжàÖÖ¹¹½¨ÒýÓõķ½·¨£¬¼¸ºõ¿ÉÒÔ¶ÔÈκÎÊý¾Ý½¨Á¢ÒýÓã¬ÈçÊý×é¡¢¼òµ¥±äÁ¿¡¢×Ó³ÌÐò¡¢Îļþ¾ä±ú£¬ÒÔ¼°--C³ÌÐòÔ±»á¸ÐÐËȤµÄ--ÒýÓá£PerlʹÄãÓÐÄÜÁ¦Ð´³ö°Ñ×Ô¼º¶¼¸ãºýÍ¿µÄ¼«Æä¸´ÔӵĴúÂë¡£:)
ÏÂÃæ¿´¿´PerlÖд´½¨ºÍʹÓÃÒýÓõķ½·¨¡£
Èý¡¢Ê¹Ó÷´Ð±Ïß(\)²Ù×÷·û
·´Ð±Ïß²Ù×÷·ûÓëCÓïÑÔÖд«µÝµØÖ·µÄ²Ù×÷·û&¹¦ÄÜÀàËÆ¡£Ò»°ãÊÇÓÃ\´´½¨±äÁ¿ÓÖÒ»¸öеÄÒýÓá£ÏÂÃæÎª´´½¨¼òµ¥±äÁ¿µÄÒýÓõÄÀý×Ó£º
$variavle = 22;
$pointer = \$variable;
$ice = "jello";
$iceprt = \$ice;
ÒýÓÃ$pointerÖ¸Ïò´æÓÐ$variableÖµµÄλÖã¬ÒýÓÃ$iceptrÖ¸Ïò"jello"¡£¼´Ê¹×î³õµÄÒýÓÃ$variableÏú»ÙÁË£¬ÈÔÈ»¿ÉÒÔͨ¹ý$pointer·ÃÎʸÃÖµ£¬ÕâÊÇÒ»¸öÓ²ÒýÓã¬ËùÒÔ±ØÐëͬʱÏú»Ù$pointerºÍ$variableÒÔ±ã¸Ã¿Õ¼äÊͷŵ½ÄÚ´æ³ØÖС£
ÔÚÉÏÃæµÄÀý×ÓÖУ¬ÒýÓñäÁ¿$pointer´æµÄÊÇ$variableµÄµØÖ·£¬¶ø²»ÊÇÖµ±¾Éí£¬Òª»ñµÃÖµ£¬ÐÎʽΪÁ½¸ö$·ûºÅ£¬ÈçÏ£º
#!/usr/bin/perl
$value = 10;
$pointer = \$value;
printf "\n Pointer Address $pointer of $value \n";
printf "\n What Pointer *($pointer) points to $$pointer\n";
½á¹ûÊä³öÈçÏ£º
Pointer Address SCALAR(0x806c520) of 10
What Pointer *(SCALAR(0x806c520)) points to 10
ÿ´ÎÔËÐУ¬Êä³ö½á¹ûÖеĵØÖ·»áÓÐËù¸Ä±ä£¬µ«¿ÉÒÔ¿´µ½$pointer¸ø³öµØÖ·£¬¶ø$$pointer¸ø³ö$variableµÄÖµ¡£
¿´Ò»ÏµØÖ·µÄÏÔʾ£¬SCALARºóÃæÒ»´®Ê®Áù½øÖÆ£¬SCALAR˵Ã÷¸ÃµØÖ·Ö¸Ïò¼òµ¥±äÁ¿£¨¼´±êÁ¿£©£¬ºóÃæµÄÊý×ÖÊÇʵ¼Ê´æÖüÖµµÄµØÖ·¡£
×¢Ò⣺ָÕë¾ÍÊǵØÖ·£¬Í¨¹ýÖ¸Õë¿ÉÒÔ·ÃÎʸõØÖ·´¦´æÖüµÄÊý¾Ý¡£Èç¹ûÖ¸ÕëÖ¸ÏòÁËÎÞЧµÄµØÖ·£¬¾Í»áµÃµ½²»ÕýÈ·µÄÊý¾Ý¡£Í¨³£Çé¿öÏ£¬Perl»á·µ»ØNULLÖµ£¬µ«²»¸ÃÒÀÀµÓÚ´Ë£¬Ò»¶¨ÒªÔÚ³ÌÐòÖаÑËùÓеÄÖ¸ÕëÕýÈ·µØ³õʼ»¯£¬Ö¸ÏòÓÐЧµÄÊý¾ÝÏî¡£
ËÄ¡¢ÒýÓúÍÊý×é
¹ØÓÚPerlÓïÑÔÓ¦¸Ã¼ÇסµÄ×îÖØÒªµÄÒ»µã¿ÉÄÜÊÇ£ºPerlÖеÄÊý×éºÍ¹þÏ£±íʼÖÕÊÇһάµÄ¡£Òò´Ë£¬Êý×éºÍ¹þÏ£±íÖ»±£´æ±êÁ¿Öµ£¬²»Ö±½Ó´æÖüÊý×é»òÆäËüµÄ¸´ÔÓÊý¾Ý½á¹¹¡£Êý×éµÄ³ÉԱҪôÊÇÊý£¨»ò×Ö·û´®£©ÒªÃ´ÊÇÒýÓá£
¶ÔÊý×éºÍ¹þÏ£±í¿ÉÒÔÏó¶Ô¼òµ¥±äÁ¿Ò»ÑùʹÓ÷´Ð±Ïß²Ù×÷·û£¬Êý×éµÄÒýÓÃÈçÏ£º
1 #!/usr/bin/perl
2 #
3 # Using Array references
4 #
5 $pointer = \@ARGV;
6 printf "\n Pointer Address of ARGV = $pointer\n";
7 $i = scalar(@$pointer);
8 printf "\n Number of arguments : $i \n";
9 $i = 0;
10 foreach (@$pointer) {
11 printf "$i : $$pointer[$i++]; \n";
12 }
ÔËÐнá¹ûÈçÏ£º
$ test 1 2 3 4
Pointer Address of ARGV = ARRAY(0x806c378)
Number of arguments : 4
0 : 1;
1 : 2;
2 : 3;
3 : 4;
µÚ5Ðн«ÒýÓÃ$pointerÖ¸ÏòÊý×é@ARGV£¬µÚ6ÐÐÊä³öARGVµÄµØÖ·¡£$pointer·µ»ØÊý×éµÚÒ»¸öÔªËØµÄµØÖ·£¬ÕâÓëCÓïÑÔÖеÄÊý×éÖ¸ÕëÊÇÀàËÆµÄ¡£µÚ7Ðе÷Óú¯Êýscalar()»ñµÃÊý×éµÄÔªËØ¸öÊý£¬¸Ã²ÎÊýÒà¿ÉΪ@ARGV£¬µ«ÓÃÖ¸ÕëÔò±ØÐëÓÃ@$pointerµÄÐÎʽָ¶¨ÆäÀàÐÍΪÊý×飬$pointer¸ø³öµØÖ·£¬@·ûºÅ˵Ã÷´«µÝµÄµØÖ·ÎªÊý×éµÄµÚÒ»¸öÔªËØµÄµØÖ·¡£µÚ10ÐÐÓëµÚ7ÐÐÀàËÆ£¬µÚ11ÐÐÓÃÐÎʽ$$pointer[$i]ÁгöËùÓÐÔªËØ¡£
¶Ô¹ØÁªÊý×éʹÓ÷´Ð±Ïß²Ù×÷·ûµÄ·½·¨ÊÇÒ»ÑùµÄ--°ÑËùÓйØÁªÊý×éÃû»»³ÉÒýÓÃ$poniter¡£×¢ÒâÊý×éºÍ¼òµ¥±äÁ¿£¨±êÁ¿£©µÄÒýÓÃÏÔʾʱ¾ù´øÓÐÀàÐÍ--ARRAYºÍSCALAR£¬¹þÏ£±í£¨¹ØÁªÊý×飩ºÍº¯ÊýÒ²Ò»Ñù£¬·Ö±ðΪHASHºÍCODE¡£ÏÂÃæÊǹþÏ£±íµÄÒýÓõÄÀý×Ó¡£
#!/usr/bin/perl
1 #
2 # Using Associative Array references
3 #
4 %month = (
5 '01', 'Jan',
6 '02', 'Feb',
7 '03', 'Mar',
8 '04', 'Apr',
9 '05', 'May',
10 '06', 'Jun',
11 '07', 'Jul',
12 '08', 'Aug',
13 '09', 'Sep',
14 '10', 'Oct',
15 '11', 'Nov',
16 '12', 'Dec',
17 );
18
19 $pointer = \%month;
20
21 printf "\n Address of hash = $pointer\n ";
22
23 #
24 # The following lines would be used to print out the
25 # contents of the associative array if %month was used.
26 #
27 # foreach $i (sort keys %month) {
28 # printf "\n $i $$pointer{$i} ";
29 # }
30
31 #
32 # The reference to the associative array via $pointer
33 #
34 foreach $i (sort keys %$pointer) {
35 printf "$i is $$pointer{$i} \n";
36 }
½á¹ûÊä³öÈçÏ£º
$ mth
Address of hash = HASH(0x806c52c)
01 is Jan
02 is Feb
03 is Mar
04 is Apr
05 is May
06 is Jun
07 is Jul
08 is Aug
09 is Sep
10 is Oct
11 is Nov
12 is Dec
ÓëÊý×éÀàËÆ£¬Í¨¹ýÒýÓ÷ÃÎʹþÏ£±íµÄÔªËØÐÎʽΪ$$pointer{$index}£¬µ±È»£¬$indexÊǹþÏ£±íµÄ¼üÖµ£¬¶ø²»½öÊÇÊý×Ö¡£»¹Óм¸ÖÖ·ÃÎÊÐÎʽ£¬´ËÍ⣬¹¹½¨¹þÏ£±í»¹¿ÉÒÔÓÃ=>²Ù×÷·û£¬¿É¶ÁÐÔ¸üºÃЩ¡£ÏÂÃæÔÙ¿´Ò»¸öÀý×Ó£º
1 #!/usr/bin/perl
2 #
3 # Using Array references
4 #
5 %weekday = (
6 '01' => 'Mon',
7 '02' => 'Tue',
8 '03' => 'Wed',
9 '04' => 'Thu',
10 '05' => 'Fri',
11 '06' => 'Sat',
12 '07' => 'Sun',
13 );
14 $pointer = \%weekday;
15 $i = '05';
16 printf "\n ================== start test ================= \n";
17 #
18 # These next two lines should show an output
19 #
20 printf '$$pointer{$i} is ';
21 printf "$$pointer{$i} \n";
22 printf '${$pointer}{$i} is ';
23 printf "${$pointer}{$i} \n";
24 printf '$pointer->{$i} is ';
25
26 printf "$pointer->{$i}\n";
27 #
28 # These next two lines should not show anything
29 #
30 printf '${$pointer{$i}} is ';
31 printf "${$pointer{$i}} \n";
32 printf '${$pointer->{$i}} is ';
33 printf "${$pointer->{$i}}";
34 printf "\n ================== end of test ================= \n";
35
½á¹ûÊä³öÈçÏ£º
================== start test =================
$$pointer{$i} is Fri
${$pointer}{$i} is Fri
$pointer->{$i} is Fri
${$pointer{$i}} is
${$pointer->{$i}} is
================== end of test =================
¿ÉÒÔ¿´µ½£¬Ç°ÈýÖÖÐÎʽµÄÊä³öÏÔʾÁËÔ¤ÆÚµÄ½á¹û£¬¶øºóÁ½ÖÖÔòûÓС£µ±Äã²»Çå³þÊÇ·ñÕýȷʱ£¬¾ÍÊä³ö½á¹û¿´¿´¡£ÔÚPerlÖУ¬Óв»Ã÷È·µÄ´úÂë¾ÍÓÃprintÓï¾äÊä³öÀ´ÊµÑéһϣ¬ÕâÄÜʹÄãÇå³þPerlÊÇÔõÑù½âÊÍÄãµÄ´úÂëµÄ¡£
Îå¡¢¶àάÊý×é
Óï¾ä@array = list;¿ÉÒÔ´´½¨Êý×éµÄÒýÓã¬ÖÐÀ¨ºÅ¿ÉÒÔ´´½¨ÄäÃûÊý×éµÄÒýÓá£ÏÂÃæÓï¾äΪÓÃÓڻͼµÄÈýάÊý×éµÄÀý×Ó£º
$line = ['solid' , 'black' , ['1','2','3'] , ['4','5','6']];
´ËÓï¾ä½¨Á¢ÁËÒ»¸öº¬ËĸöÔªËØµÄÈýάÊý×飬±äÁ¿$lineÖ¸Ïò¸ÃÊý×顣ǰÁ½¸öÔªËØÊDZêÁ¿£¬´æÖüÏßÌõµÄÀàÐͺÍÑÕÉ«£¬ºóÁ½¸öÔªËØÊÇÄäÃûÊý×éµÄÒýÓ㬴æÖüÏßÌõµÄÆðµãºÍÖյ㡣·ÃÎÊÆäÔªËØÓï·¨ÈçÏ£º
$arrayReference->[$index] single-dimensional array
$arrayReference->[$index1][$index2] two-dimensional array
$arrayReference->[$index1][$index2][$index3] three-dimensional array
¿ÉÒÔ´´½¨ÔÚÄãµÄÖÇÁ¦¡¢Éè¼Æ¾ÑéºÍ¼ÆËã»úµÄÄÚ´æÔÊÐíµÄÇé¿öϼ«¾¡¸´ÔӵĽṹ£¬µ«×îºÃ¶Ô¿ÉÄܶÁµ½»ò¹ÜÀíÄãµÄ´úÂëµÄÈËÓѺÃһЩ--¾¡Á¿Ê¹´úÂë¼òµ¥Ð©¡£ÁíÒ»·½Ã棬Èç¹ûÄãÏëÏò±ðÈËìÅÒ«ÄãµÄ±à³ÌÄÜÁ¦£¬Perl¸øÄã×ã¹»µÄ»ú»áºÍÄÜÁ¦±àдÁ¬×Ô¼º¶¼ÄÑÃâºýÍ¿µÄ´úÂë¡£:)
½¨Ò飺µ±ÄãÏëʹÓöàÓÚÈýάµÄÊý×éʱ£¬×îºÃ¿¼ÂÇʹÓÃÆäËüÊý¾Ý½á¹¹À´¼ò»¯´úÂë¡£
ÏÂÃæÎª´´½¨ºÍʹÓöþάÊý×éµÄÀý×Ó£º
1 #!/usr/bin/perl
2 #
3 # Using Multi-dimensional Array references
4 #
5 $line = ['solid', 'black', ['1','2','3'] , ['4', '5', '6']];
6 print "\$line->[0] = $line->[0] \n";
7 print "\$line->[1] = $line->[1] \n";
8 print "\$line->[2][0] = $line->[2][0] \n";
9 print "\$line->[2][1] = $line->[2][1] \n";
10 print "\$line->[2][2] = $line->[2][2] \n";
11 print "\$line->[3][0] = $line->[3][0] \n";
12 print "\$line->[3][1] = $line->[3][1] \n";
13 print "\$line->[3][2] = $line->[3][2] \n";
14 print "\n"; # The obligatory output beautifier.
½á¹ûÊä³öÈçÏ£º
$line->[0] = solid
$line->[1] = black
$line->[2][0] = 1
$line->[2][1] = 2
$line->[2][2] = 3
$line->[3][0] = 4
$line->[3][1] = 5
$line->[3][2] = 6
ÄÇôÈýάÊý×éÓÖÈçºÎÄØ£¿ÏÂÃæÊÇÉÏÀýÂÔΪ¸Ä¶¯µÄ°æ±¾¡£
1 #!/usr/bin/perl
2 #
3 # Using Multi-dimensional Array references again
4 #
5 $line = ['solid', 'black', ['1','2','3', ['4', '5', '6']]];
6 print "\$line->[0] = $line->[0] \n";
7 print "\$line->[1] = $line->[1] \n";
8 print "\$line->[2][0] = $line->[2][0] \n";
9 print "\$line->[2][1] = $line->[2][1] \n";
10 print "\$line->[2][2] = $line->[2][2] \n";
11 print "\$line->[2][3][0] = $line->[2][3][0] \n";
12 print "\$line->[2][3][1] = $line->[2][3][1] \n";
13 print "\$line->[2][3][2] = $line->[2][3][2] \n";
14 print "\n";
½á¹ûÊä³öÈçÏ£º
$line->[0] = solid
$line->[1] = black
$line->[2][0] = 1
$line->[2][1] = 2
$line->[2][2] = 3
$line->[2][3][0] = 4
$line->[2][3][1] = 5
$line->[2][3][2] = 6
·ÃÎʵÚÈý²ãÔªËØµÄ·½Ê½ÐÎÈç$line->[2][3][0]£¬ÀàËÆÓÚCÓïÑÔÖеÄArray_pointer[2][3][0]¡£±¾ÀýÖУ¬Ï±ê¾ùΪÊý×Ö£¬µ±È»Òà¿ÉÓñäÁ¿´úÌæ¡£ÓÃÕâÖÖ·½·¨¿ÉÒÔ°ÑÊý×éºÍ¹þÏ£±í½áºÏÆðÀ´¹¹³É¸´ÔӵĽṹ£¬ÈçÏ£º
1 #!/usr/bin/perl
2 #
3 # Using Multi-dimensional Array and Hash references
4 #
5 %cube = (
6 '0', ['0', '0', '0'],
7 '1', ['0', '0', '1'],
8 '2', ['0', '1', '0'],
9 '3', ['0', '1', '1'],
10 '4', ['1', '0', '0'],
11 '5', ['1', '0', '1'],
12 '6', ['1', '1', '0'],
13 '7', ['1', '1', '1']
14 );
15 $pointer = \%cube;
16 print "\n Da Cube \n";
17 foreach $i (sort keys %$pointer) {
18 $list = $$pointer{$i};
19 $x = $list->[0];
20 $y = $list->[1];
21 $z = $list->[2];
22 printf " Point $i = $x,$y,$z \n";
23 }
½á¹ûÊä³öÈçÏ£º
Da Cube
Point 0 = 0,0,0
Point 1 = 0,0,1
Point 2 = 0,1,0
Point 3 = 0,1,1
Point 4 = 1,0,0
Point 5 = 1,0,1
Point 6 = 1,1,0
Point 7 = 1,1,1
ÕâÊÇÒ»¸ö¶¨ÒåÁ¢·½ÌåµÄÀý×Ó¡£%cubeÖб£´æµÄÊǵãºÅºÍ×ø±ê£¬×ø±êÊǸöº¬Èý¸öÊý×ÖµÄÊý×é¡£±äÁ¿$list»ñÈ¡×ø±êÊý×éµÄÒýÓãº$list = $$ pointer{$i}; È»ºó·ÃÎʸ÷×ø±êÖµ£º$x = $list->[0]; ... Ò²¿ÉÓÃÈçÏ·½·¨¸ø$x¡¢$yºÍ$z¸³Öµ£º($x,$y,$z) = @$list;
ʹÓùþÏ£±íºÍÊý×éʱ£¬ÓÃ$ºÍÓÃ->ÊÇÀàËÆµÄ£¬¶ÔÊý×é¶øÑÔÏÂÃæÁ½¸öÓï¾äµÈЧ£º
$$names[0] = "kamran";
$names->[0] = "kamran";
¶Ô¹þÏ£±í¶øÑÔÏÂÃæÁ½¸öÓï¾äµÈЧ£º
$$lastnames{"kamran"} = "Husain";
$lastnames->{"kamran"} = "Husain";
PerlÖеÄÊý×é¿ÉÒÔÔÚÔËÐÐÖд´½¨ºÍÀ©Õ¹¡£µ±Êý×éµÄÒýÓõÚÒ»´ÎÔÚµÈʽ×ó±ß³öÏÖʱ£¬¸ÃÊý×é×Ô¶¯±»´´½¨£¬¼òµ¥±äÁ¿ºÍ¶àάÊý×éÒ²ÊÇÒ»Ñù¡£ÈçϾ䣬Èç¹ûÊý×écontours²»´æÔÚ£¬Ôò±»´´½¨£º
$contours[$x][$y][$z] = &xlate($mouseX, $mouseY);
Áù¡¢×Ó³ÌÐòµÄÒýÓÃ
perlÖÐ×Ó³ÌÐòµÄÒýÓÃÓëCÖк¯ÊýµÄÖ¸ÕëÀàËÆ£¬¹¹Ôì·½·¨ÈçÏ£º
$pointer_to_sub = sub {... declaration of sub ...};
ͨ¹ýËù¹¹ÔìµÄÒýÓõ÷ÓÃ×Ó³ÌÐòµÄ·½·¨Îª£º
&$pointer_to_sub(parameters);
×Ó³ÌÐòÄ£°å
×Ó³ÌÐòµÄ·µ»ØÖµ²»½öÏÞÓÚÊý¾Ý£¬»¹¿ÉÒÔ·µ»Ø×Ó³ÌÐòµÄÒýÓ᣷µ»ØµÄ×Ó³ÌÐòÔÚµ÷Óô¦Ö´ÐУ¬µ«È´ÊÇÔÚ×î³õ±»´´½¨µÄµ÷Óô¦±»ÉèÖã¬ÕâÊÇÓÉPerl¶ÔClosure´¦ÀíµÄ·½Ê½¾ö¶¨µÄ¡£ClosureÒâ¼´Èç¹ûÄ㶨ÒåÁËÒ»¸öº¯Êý£¬Ëü¾ÍÒÔ×î³õ¶¨ÒåµÄÄÚÈÝÔËÐС£(ClosureÏê¼ûOOPµÄ²Î¿¼Êé)ÏÂÃæµÄÀý×ÓÖУ¬ÉèÖÃÁ˶à¸ö´íÎóÐÅÏ¢ÏÔʾ×Ó³ÌÐò£¬ÕâÑùµÄ×Ó³ÌÐò¶¨Òå·½·¨¿ÉÓÃÓÚ´´½¨Ä£°å¡£
#!/usr/bin/perl
sub errorMsg {
my $lvl = shift;
#
# define the subroutine to run when called.
#
return sub {
my $msg = shift; # Define the error type now.
print "Err Level $lvl:$msg\n"; }; # print later.
}
$severe = errorMsg("Severe");
$fatal = errorMsg("Fatal");
$annoy = errorMsg("Annoying");
&$severe("Divide by zero");
&$fatal("Did you forget to use a semi-colon?");
&$annoy("Uninitialized variable in use");
½á¹ûÊä³öÈçÏ£º
Err Level Severe:Divide by zero
Err Level Fatal:Did you forget to use a semi-colon?
Err Level Annoying:Uninitialized variable in use
ÉÏÀýÖУ¬×Ó³ÌÐòerrorMsgʹÓÃÁ˾ÖÓò±äÁ¿$lvl£¬ÓÃÓÚ·µ»Ø¸øµ÷ÓÃÕß¡£µ±errorMsg±»µ÷ÓÃʱ£¬$lvlµÄÖµÉèÖõ½·µ»ØµÄ×Ó³ÌÐòÄÚÈÝÖУ¬ËäÈ»ÊÇÓõÄmyº¯Êý¡£Èý´Îµ÷ÓÃÉèÖÃÁËÈý¸ö²»Í¬µÄ$lvl±äÁ¿Öµ¡£µ±errorMsg·µ»ØÊ±£¬$lvlµÄÖµ±£´æµ½Ã¿´Î±»ÉùÃ÷ʱËù²úÉúµÄ×Ó³ÌÐò´úÂëÖС£×îºóÈý¾ä¶Ô²úÉúµÄ×Ó³ÌÐòÒýÓýøÐе÷ÓÃʱ$msgµÄÖµ±»Ìæ»»£¬µ«$lvlµÄÖµÈÔÊÇÏàÓ¦×Ó³ÌÐò´úÂë´´½¨Ê±µÄÖµ¡£
ºÜ»ìÏýÊÇÂð£¿Êǵģ¬ËùÒÔÕâÑùµÄ´úÂëÔÚPerl³ÌÐòÖкÜÉÙ¼û¡£
Æß¡¢Êý×éÓë×Ó³ÌÐò
Êý×éÀûÓÚ¹ÜÀíÏà¹ØÊý¾Ý£¬±¾½ÚÌÖÂÛÈçºÎÏò×Ó³ÌÐò´«µÝ¶à¸öÊý×é¡£Ç°ÃæÎÒÃǽ²¹ýÓÃ@_´«µÝ×Ó³ÌÐòµÄ²ÎÊý£¬µ«ÊÇ@_ÊÇÒ»¸öµ¥Î¬Êý×飬²»¹ÜÄã´«µÝµÄ²ÎÊýÊǶàÉÙ¸öÊý×飬¶¼°´Ðò´æÖüÔÚ@_ÖУ¬¹ÊÓÃÐÎÈçmy(@a,@b)=@_; µÄÓï¾äÀ´»ñÈ¡²ÎÊýֵʱ£¬È«²¿Öµ¶¼¸³¸øÁË@a£¬¶ø@bΪ¿Õ¡£ÄÇôÔõô°ÑÒ»¸öÒÔÉϵÄÊý×é´«µÝ¸ø×Ó³ÌÐòÄØ£¿·½·¨ÊÇÓÃÒýÓ᣼ûÏÂÀý£º
#!/usr/bin/perl
@names = (mickey, goofy, daffy );
@phones = (5551234, 5554321, 666 );
$i = 0;
sub listem {
my ($a,$b) = @_;
foreach (@$a) {
print "a[$i] = " . @$a[$i] . " " . "\tb[$i] = " . @$b[$i] ."\n";
$i++;
}
}
&listem(\@names, \@phones);
½á¹ûÊä³öÈçÏ£º
a[0] = mickey b[0] = 5551234
a[1] = goofy b[1] = 5554321
a[2] = daffy b[2] = 666
×¢Ò⣺1¡¢µ±Ïë´«µÝ¸ø×Ó³ÌÐòµÄ²ÎÊýÊǶàÓÚÒ»¸öµÄÊý×éʱһ¶¨ÒªÊ¹ÓÃÒýÓá£
2¡¢Ò»¶¨²»ÒªÔÚ×Ó³ÌÐòÖÐʹÓÃÐÎÈç (@variable)=@_; µÄÓï¾ä´¦Àí²ÎÊý£¬³ý·ÇÄãÏë°ÑËùÓвÎÊý¼¯Öе½Ò»¸ö³¤µÄÊý×éÖС£
°Ë¡¢Îļþ¾ä±úµÄÒýÓÃ
ÓÐʱ£¬±ØÐ뽫ͬһÐÅÏ¢Êä³öµ½²»Í¬µÄÎļþ£¬ÀýÈ磬ij³ÌÐò¿ÉÄÜÔÚÒ»¸öʵÀýÖÐÊä³öµ½ÆÁÄ»£¬ÁíÒ»¸öÊä³öµ½´òÓ¡»ú£¬ÔÙÒ»¸öÊä³öµ½¼Ç¼Îļþ£¬ÉõÖÁͬʱÊä³öµ½ÕâÈý¸öÎļþ¡£Ïà±È½ÏÓÚÿÖÖ´¦Àíдһ¸öµ¥¶ÀµÄÓï¾ä£¬¿ÉÒÔÓиüºÃµÄʵÏÖ·½Ê½ÈçÏ£º
spitOut(\*STDIN);
spitOut(\*LPHANDLE);
spitOut(\*LOGHANDLE);
ÆäÖÐ×Ó³ÌÐòspitOutµÄ´úÂëÈçÏ£º
sub spitOut {
my $fh = shift;
print $fh "Gee Wilbur, I like this lettuce\n";
}
×¢ÒâÆäÖÐÎļþ¾ä±úÒýÓõÄÓ﷨Ϊ\*FILEHANDLE¡£
ÉÏÒ»Õ ÏÂÒ»Õ Ŀ¼
|
|