ç¾ä»£çãªPerlã®è¨è¿°æ¹æ³ä¸è¦§
Perl
›
here
Perl5.8以éã«ãããæ¨æºçãªPerlã®æ¸ãæ¹ã解説ãã¾ãã
ã¤ã³ã¿ã¼ãããã§æ¤ç´¢ããã¨Perl4ã®ããã®å¤ãè¨è¿°ãããããããã¾ããã¾ãæ¸ç±ãªã©ã®å¤ããPerl4ã®è¨æ³ã§æ¸ããã¦ãã¾ããPerl4ã®è¨æ³ã¯è¤éã«ãªããããééããçã¿ãããã®ã§ããããPerlãæ¸ã人ã¯Perl5ã®ç¾ä»£çãªè¨æ³ã§è¨è¿°ãããã¨ãå¼·ããå§ããã¾ãã
strictãã©ã°ãã¨warningsãã©ã°ã (å¿ é )
ãstrictãã©ã°ãã¨warningsãã©ã°ããæå¹ã«ãã¾ãã
use strict; use warnings;
ãuse strict;ã¨use warnings;ã®ï¼è¡ã¯ã¹ã¯ãªããã®æåã«å¿ ãè¨è¿°ãã¦ãã ããããããã¯Perlã®ææ³ãã§ãã¯ãå³ããããããã®ãã®ã§ããé¢åã ã¨ãã軽ãæ°æã¡ã§ãããè¨è¿°ããªãã¨å¾ã æ¬å½ã«é¢åãªãã¨ã«ãªãã¾ãã
ãuse strict;ã¨use warningsãæ¸ããªãã¦ãããã®ã¯ã¯ã³ã©ã¤ãã¼ã¨å¼ã°ããã³ãã³ãã©ã¤ã³ã¹ã¯ãªãããè¨è¿°ããã¨ãã ãã ã¨ãã風ã«èãã¦ãã ããã
ãã¡ã¤ã«ãã³ãã«ã«ã¯ã¬ãã·ã«ã«å¤æ°ã使ãã㨠(æ¬å½ã«ç¹å¥ãªç¨éããªãéãã¯å¿ é )
ããã¡ã¤ã«ãã³ãã«ã«ã¯å®£è¨ããã°ããã®ã¬ãã·ã«ã«å¤æ°ã使ãã¾ããã¬ãã·ã«ã«å¤æ°ã宣è¨ãã¦ãããopené¢æ°ã®ç¬¬1å¼æ°ã«æå®ããã¨ã¬ãã·ã«ã«å¤æ°ã«ãã¡ã¤ã«ãã³ãã«ãè¨å®ããã¾ãã
# ã¬ãã·ã«ã«å¤æ° my $fh; my $file = 'file1'; open $fh, '<', $file or die "Cannot open '$file': $!"; while (my $lien = <$fh>) { ... }
ãã¬ãã·ã«ã«å¤æ°ã¯ã¹ã³ã¼ããæã¤ã¨ãããã¨ã¨ä»ã®é¢æ°ã«å¼æ°ã¨ãã¦æ¸¡ããã¨ãã§ããã¨ãã大ããªå©ç¹ãããã¾ããå¤ã解説ã«ãããããªFHã*FHãªã©ã®ã·ã³ãã«ã使ããªãããã«ãã¾ãã
ãã¾ãã¬ãã·ã«ã«å¤æ°ã®å®£è¨ãopené¢æ°ã®ä¸ã«ã¾ã¨ãã¦ãã¾ãã®ãããç¾ä»£çã§ããã¨ãããã§ãããã
open my $fh, '<', $file
3å¼æ°ã®opené¢æ°ã使ã (å¿ é )
ã3å¼æ°ã®opené¢æ°ã使ç¨ããããã«ãã¾ãã
open my $fh, '<', $file
ãå¤ã解説ã§ã¯2å¼æ°ã®opené¢æ°ã解説ãã¦ãããã®ãããã¾ãã使ããªãããã«ãã¾ãããã2å¼æ°ã®opené¢æ°ã¯ã»ãã¥ãªãã£çã«èãã®ã§ä½¿ç¨ãã¦ã¯ããã¾ããã
open my $fh, "< $file"; # 2å¼æ°ã®opené¢æ°ã使ç¨ãã¦ã¯ãããªã
ãããã¯ãã¤ãããªã¼ãã³ããã¨ãã«ãå½ã¦ã¯ã¾ãã¾ãã
# â (ä¸å¼æ°) open my $pipe, '-|', 'dir'; # à (äºå¼æ°) open my $pipe, 'dir |';
ãã¡ã¤ã«ãªã¼ãã³æã®ã¨ã©ã¼å¦çãè¡ã (å¿ é )
ããã¡ã¤ã«ãªã¼ãã³ãè¡ã£ãã¨ãã¯å¿ ãã¨ã©ã¼å¦çãè¡ãããã«ãã¾ãã
open my $fh, '<', $file or die "Cannot open '$file': $!";
ãopené¢æ°ã¯å¤±æããã¨undefãè¿ãã®ã§orã使ã£ã¦ã¨ã©ã¼å¦çãè¡ãã¾ãã$!ã«ã¯OSãè¿ããã¨ã©ã¼ã¡ãã»ã¼ã¸ãå«ã¾ãã¦ããã®ã§ã¦ã¼ã¶ã«è¦ããã¨ã©ã¼ã¡ãã»ã¼ã¸ã«å«ããããã«ãã¾ãã
ãããã°ã©ã ãã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ãã¦çµäºãããã«ã¯dieé¢æ°ã使ç¨ãã¾ããä»ã®ããã°ã©ã ããè¦ãå ´åã¯çµäºã³ã¼ãã¯255ã«ãªãã¾ãã
ããã¡ã¤ã«ãªã¼ãã³ã«éããããã°ã©ã ã®å¤é¨ã¨éä¿¡ããå ´åã¯ããªããã¨ã©ã¼å¦çãè¡ãããã«ãã¾ããå¤é¨ã¨ããã®ã¯ã¡ã¢ãªã®æä½ãé¤ããã¹ã¦ã§ãããã¡ã¤ã«ããããã¯ã¼ã¯ãªã©ãå¤é¨ã«ãªãã¾ãã
ã¬ãã·ã«ã«å¤æ°ã¨ãµãã«ã¼ãã³ã®ååã«ã¯å°æåã¨ã¢ã³ãã¼ãã¼ã使ç¨ãã (å¼·ãæ¨å¥¨)
ããmyã§å®£è¨ãããã¬ãã·ã«ã«å¤æ°ãã¨ããµãã«ã¼ãã³ãã®ååã«ã¯å°æåã¨ã¢ã³ãã¼ãã¼ã使ç¨ãã¾ãã
# ã¬ãã·ã«ã«å¤æ° my $user_name; my $search_word; my $max_database_connection; # ãµãã«ã¼ãã³ sub parse_data { ... } sub create_table { ... }
ããã®è¨æ³ãè¯ããæªããã¯å¥ã«ãã¦CPANã«ããæ°ããã¢ã¸ã¥ã¼ã«ã®ã»ã¨ãã©ã¯ãã®è¨æ³ã§æ¸ããã¦ãã¾ãããã®ç¿æ £ã«ãããã£ã¦ãããã»ããã¦ã¼ã¶ã«çµ±ä¸ãããã¤ã³ã¿ã¼ãã§ã¤ã¹ãæä¾ã§ããã¨ããç¹ã§é常ã«å¤ãã®çãããã¾ãã
ãå¤æ°ã®å½åæ¹æ³ã«ã¯å¥ã«è¨äºãæ¸ãã¦ãã¾ãã®ã§ãã¡ããåèã«ãã¦ãã ããã
<変数に適切な名前をつける>
ããµãã«ã¼ãã³ã®å½åæ¹æ³ã¯ååã¨ãã¦ãåè© + åè©ãã§ããæå³ãã¯ã£ããã¨ããããã®ã«ã¤ãã¦ã¯ã¦ã¼ã¶ã®å©ä¾¿æ§ãèãã¦ãåè©ãã ãã«ãã¦ãè¯ãããããã¾ããããã ãå¾ã§å°ããã¨ãããã®ã§ãåè© + åè©ãã«ãã¦ããã®ãç¡é£ã ã¨æãã¾ãã
ããã±ã¼ã¸å¤æ°ã«ã¯å¤§æåã¨ã¢ã³ãã¼ãã¼ã使ç¨ãã (å¼·ãæ¨å¥¨)
ãããã±ã¼ã¸å¤æ°ã«ã¯å¤§æåã¨ã¢ã³ãã¼ãã¼ã使ç¨ãã¾ãã
our $OBJECT_COUNT; our $CLASS_INFO;
ããã±ã¼ã¸å¤æ°ã¯ä½¿ããã«ã¬ãã·ã«ã«å¤æ°ã使ãããã«ãã (å¿ é )
ãããããªããã¢ã¸ã¥ã¼ã«ã®ä½è ã§ãªãã®ã§ããã°ããã±ã¼ã¸å¤æ°ã使ãæ©ä¼ã¯ããã¾ãããããåä½ã®ã¹ã¯ãªããã®ä¸ã§ããã±ã¼ã¸å¤æ°ã使ã£ã¦ããã¨ãããããã¯ééã£ã使ãæ¹ã§ããmyã使ã£ãã¬ãã·ã«ã«å¤æ°ã«å¤æ´ãã¾ãããã
æ¨æºç(?)ãªã³ã¼ãã®ãã©ã¼ãããã§æ¸ã (å°ãæ¨å¥¨)
ãã³ã¼ãã®æ¸ãæ¹ã«ã¯å¥½ãå«ããããã®ã§ãããPerlãã¹ããã©ã¯ãã£ã¹ã§ç´¹ä»ããã¦ããæ¸ãæ¹ãPerltidyã¨å¼ã°ããã³ã¼ãæ´å½¢ãã¼ã«ãåºåããå½¢å¼ã«ãããã¦ãããã»ããå¹¾åããã¨æãã¾ãã
ããµã³ãã«ã¨ãã¦Mojo::URLã®ã½ã¼ã¹ã³ã¼ãã®ãªã³ã¯ãå¼µã£ã¦ããã¾ãããããã¾ããã¦æ¸ãã°è¦ãããã¾ãã
ãã¾ããããã¤ã³ããå°ãã ãæ¸ãã¦ããã¾ãã
1. ifãforeachæããµãã«ã¼ãã³ãªã©ã®ã¹ãã¼ã¹ã®å ¥ãä½ç½®ãè¦ã
# ifã®ç´å¾ã«ã¹ãã¼ã¹ããã£ã¦ã()ã®ä¸ã«ã¯ã¹ãã¼ã¹ããªããªã© if ($flg) { ... }
2. ã³ã¡ã³ãã®æ¸ãæ¹ãã¹ãã¼ã¹ã®å ¥ãæ¹ãªã©ãè¦ã
ãã³ã¡ã³ãã®æ¸ãæ¹ãè¡ã®ã¹ãã¼ã¹ã®å ¥ãæ¹ãªã©ãã¿ã¾ããããCPANã«åå¨ããã»ã¨ãã©ã®ã¢ã¸ã¥ã¼ã«ã«ã¯è¦ªåãªã³ã¡ã³ãããªãã®ã§ãããå人çã¯ç°¡æ½ãªã³ã¡ã³ããã½ã¼ã¹ã³ã¼ãã«æ¸ãã¦ãããã¨ãããããã¨æã£ã¦ãã¾ãã
3. ã¿ãã¯ä½¿ããªãã§ã¤ã³ãã³ãã®å¹ ã¯ã¹ãã¼ã¹ã§4(ãããã¯2)
ãä¸å¿ããã¯Perlãã¹ããã©ã¯ãã£ã¹ã§ãããã¦ãããã¨ã§ãã(æè¿ã®åã¯ã¹ãã¼ã¹2ã§ã)ãã¾ãã¿ãã使ãããã¨ãã人ãä¸ã«ã¯ããã¨æãã¾ãã®ã§ãããã¯å人ã®å¥½ã¿ã§ã
æ¥æ¬èªãªã©ã®ãã«ããã¤ãæåãé©åã«æ±ãããã«Encodeã¢ã¸ã¥ã¼ã«ã使ç¨ãã (å¼·ãæ¨å¥¨)
ãæ¥æ¬èªãªã©ã®ãã«ããã¤ãæåãé©åã«æ±ãã«ã¯Encodeã¢ã¸ã¥ã¼ã«ã使ç¨ãã¾ãããã¡ãã¯è¨äºã«ãã¾ããã®ã§ãªã³ã¯ãå¼µã£ã¦ããã¾ãã
ã<Encode 日本語などのマルチバイト文字列を適切に処理する>
ãå¤ã解説ã«ãããããªJcode.pmãJcode.plã使ããããªææ³ã¯ç¾å¨ã§ã¯æ¨å¥¨ã§ãã¾ãããPerl5.8以éã¯Encodeã¢ã¸ã¥ã¼ã«ã使ç¨ããã®ãæ¨æºçã§åé¡ãå°ãªãæ¹æ³ã§ãã
ããã©ã«ãå¤æ° $_ ã¯ä½¿ç¨ããªã (å¼·ãæ¨å¥¨)
ãPerlã«ã¯ããã©ã«ãå¤æ° $_ ã¨ãããã®ãåå¨ãã¾ããããã©ã«ãå¤æ°ã¯é¢æ°ã«å¼æ°ãæå®ããªãã£ãå ´åã«æé»çã«åãåãå¤æ°ã§ããããã°ã©ã ã®ä¸ã§ä½¿ç¨ããã¨å¯èªæ§ãè½ã¡ãã®ã§ä½¿ãã®ã¯æ§ãã¾ãããã
ãããã©ã«ãå¼æ°ã使ç¨ããã®ã¯æ¬¡ã®å ´åã ãã§ãã
1. ã¯ã³ã©ã¤ãã¼
ãã¯ã³ã©ã¤ãã¼ã®ä¸ã§ã¯ä½¿ç¨ãã¦ãããã¨æãã¾ããprintã®å¼æ°ãæ£è¦è¡¨ç¾ã®å¯¾è±¡ã¨ãã¦$_ãå©ç¨ããã¦ãã¾ãã
# AAAã¨ããæåãå«ãè¡ãåãåºãã¯ã³ã©ã¤ãã¼ perl -ne "print if /AAA/";
2. mapé¢æ°ã¨grepé¢æ°ã¨å¾ç½®ã®for
ãmapé¢æ°ãgrepé¢æ°ãå¾ç½®ã®forã«ã¯$_ ãããã£ã¦ãã¾ãã®ã§ããã¯å©ç¨ããããããªãã§ãã
my @greped_array = grep { $_ =~ /AAA/ } @array; my @mapped_array = map { $_ * 2 } @array; print $_ for @array;
ãæåãªCPANã¢ã¸ã¥ã¼ã«ã®ä¸ã«ã¯ããã©ã«ãå¤æ°ã使ç¨ãã¦ãããã®ãããã¾ããå人çã«ã¯æ¨å¥¨ãã¾ãããã§ããã ãæ示çã§ãã£ãã»ããå¯èªæ§ã®é«ãããã°ã©ã ã«ãªãã¾ãã
foreachæã§ã¯ã¬ãã·ã«ã«å¤æ°ã宣è¨ãã (å¼·ãæ¨å¥¨)
ãPerl5ã§ã¯foreachæã®å é ã§ã¬ãã·ã«ã«å¤æ°ã宣è¨ãããã¨ãã§ãã¾ãã
my @students = ('taro', 'kenji', 'naoya'); for my $student (@students) { ... }
ããã®ä¾ã®å ´åã¯@studentsã®åè¦ç´ ã$studentã«å ¥ã£ã¦ãã¾ãã$studentã¯ã¬ãã·ã«ã«å¤æ°ã§foreachã®ãããã¯ã®å é ããçµããã¾ã§ã®ã¹ã³ã¼ããæã¡ã¾ãã
ãã¬ãã·ã«ã«å¤æ°ãçç¥ãããããªæ¸ãæ¹ãã§ãã¾ããæ¨å¥¨ãã¾ããã
# æ¨å¥¨ã§ããªãæ¸ãæ¹ for (@students) { ... }
ã³ãã³ãã©ã¤ã³å¼æ°ã®åãåããã (åè)
ãコマンドライン引数ã¯ãããªæãã§åãåãã®ãããã§ãã
# ã³ãã³ãã©ã¤ã³å¼æ°ãã²ã¨ã¤ã®å ´å my $file = shift;
# ã³ãã³ãã©ã¤ã³å¼æ°ãè¤æ°ã®å ´å my ($file, $option) = @ARGV;
ãµãã«ã¼ãã³ã®å¼æ°ã®åãåãæ¹ (åè)
ãã³ãã³ãã©ã¤ã³å¼æ°ã®å ´åã¨åæ§ã«ãªãã¾ãã
# å¼æ°ãã²ã¨ã¤ã®å ´å sub func { my $file = shift; }
# å¼æ°ãè¤æ°ã®å ´å sub func { my ($file, $option) = @_; }
æ¥ä»å¦çã®æ¨æºã¢ã¸ã¥ã¼ã«ã使ç¨ãã (åè)
ãããPerl5.10以éã使ç¨ãã¦ãããªãTime::Pieceã¨ããã¢ã¸ã¥ã¼ã«ãæ¨æºã§æ·»ä»ããã¦ããæ¥ä»å¦çã«ä½¿ãã¾ãã
ã<Time::Piece - 日付・時刻を扱うための標準モジュール>
ãã¾ãCPANããã¤ã³ã¹ãã¼ã«ã§ããç°å¢ã§ããã°DataTimeã¢ã¸ã¥ã¼ã«ãã¤ã³ã¹ãã¼ã«ããã®ãè¯ãããããã¾ããããã¡ãã¯é«æ©è½ã§ããå°ãéãã§ãã
ããããã§ããªããªãlocaltimeãTime::Localã§ããã°ãã¾ãã
ä¸å¿ è¦ãªã¢ã¸ã¥ã¼ã«ã®èªã¿è¾¼ã¿ã¯è¡ããªãã㨠(å¿ é )
ãä»ã®ããã°ã©ã ã®ã½ã¼ã¹ã³ã¼ããã³ãã¼ãã¦ããå ´åã«ãã®ããã°ã©ã ã§ã¯ä½¿ç¨ããªãã®ã«ä½è¨ãªã¢ã¸ã¥ã¼ã«ãèªã¿è¾¼ã¾ãã¦ããå ´åãããã¾ããããã¯å¾ã§èªãã 人ã«å¯¾ãã¦ããã¬èª¤è§£ãæãã®ã§å¿ ãåé¤ããããã«å¿ããã¾ãããã
# ä»ã®ããã°ã©ã ããã½ã¼ã¹ã³ã¼ããã³ãã¼ãã¦ããããã« # ä¸å¿ è¦ãªã¢ã¸ã¥ã¼ã«ã®èªã¿è¾¼ã¿ãæ®ãå ´åãããã®ã§ # æ°ãã¤ãã use File::Spec; use File::Basename 'basename';
Perlã®ããã¥ã¡ã³ãã®æ¸ãæ¹ (åè)
ãä»äºã§ä½¿ç¨ããå°ããªã¹ã¯ãªããã®å ´åã¯ã¹ã¯ãªããã®ä¸ã«ããã¥ã¡ã³ããåãè¾¼ãã§ããã®ãããã¨æãã¾ããCPANã¢ã¸ã¥ã¼ã«ã®å ´åã¯ã½ã¼ã¹ã³ã¼ãã®æ«å°¾ãããã¥ã¡ã³ãã«ãªãã¾ãããå°ããªã¹ã¯ãªããã®å ´åã¯å é ã«æ¸ãã¦ããã¨å©ç¨è ãã½ã¼ã¹ã³ã¼ããéããã¨ãã«ã±ã£ã¨ã¿ããã¨ãã§ããã®ã§ä¾¿å©ã§ãã
ãPerlã®ããã¥ã¡ã³ãã¯PODã¨å¼ã°ããè¨æ³ã§æ¸ãã¾ããç°¡åãªæ¸ãæ¹ã ãç´¹ä»ãã¦ããã¾ããã=head1ãã¨ããã®ãè¦åºãã«ãªãã¾ããã=head1ãã®å³ã«ã¿ã¤ãã«ãæ¸ãã¾ãããã®ä¸ã«ä¸è¡ããã¦æ¬æãæ¸ãã¾ããä¸è¡ãããã¨ããã®ã«ã¯æå³ãããã®ã§æ³¨æãã¦ãã ãããããã¥ã¡ã³ãã®çµããã¯ã=cutãã¨ããè¡ã«ãªãã¾ããè±èªã§æ¸ããå ´åã¯æ¬¡ã®ããã«ãªãã¾ãã
=head1 SCRIPT NAME SomeScript.pl =head1 DESCRIPTION This script is used to do .... =head1 USAGE perl SomeScript.pl file1 file2 ... =cut # ã½ã¼ã¹ã³ã¼ãã®å§ã¾ã use strict; use warnings;
ããã¼ã«ã«ãªããã¸ã§ã¯ãã®å ´åã¯ååã«ããããããä¼ããããã«æ¥æ¬èªã§æ¸ãã®ãããã¨æãã¾ãã
=head1 ã¹ã¯ãªããå SomeScript.pl =head1 æ¦è¦ ãããããã®ãã®ã§ãã =head1 使ç¨æ¹æ³ perl SomeScript.pl file1 file2 ... =cut # ã½ã¼ã¹ã³ã¼ãã®å§ã¾ã use strict; use warnings;
ã³ã¡ã³ãã®#ã®åµã¯é¿ãã (æ¨å¥¨)
ããã#ã ããã®ã³ã¡ã³ããä»äºããã¦ã¦ã¿ãã®ã§ããå人çã«ã¯ãå§ããã¾ãããä¸çªã®çç±ã¯ä¸åº¦ãã®ã³ã¡ã³ãã®è¨è¿°ãè¡ãã¨å¾ããæ¥ã人ããããã¾ãããªãã¨ãããªãããã§ããé¢æ°ã²ã¨ã¤è¨è¿°ããã®ã«ãããã¾ãããªãã¨ãããªãã®ãã¨æãã¨æ°æã¡ãèãã¾ããã¾ãã³ã¼ãã®å質ãä¸ããã©ãããé¢æ°ãæ¸ãæããã¨ãã«ã³ã¡ã³ãã追ãã¤ãã¦ããªãã¨ãããã¨ãé »ç¹ã«èµ·ãã¾ããã§ãã®ã§ããã¾ãããã
################################################################# # é¢æ°å : ã»ã«ããã # # å¼æ° : å¼æ°1 å¼æ°2 # # æ»ãå¤ : ã»ã«ããã # # ä½ææ¥æ : ããããã # # ä½æè : ã»ãã»ã # # é¢æ°ã®èª¬æ : ãããããã # # æ´æ°å±¥æ´ : ãã®1 # # : ãã®2 # # : ãã®3 # ################################################################# sub func { }
ããã¡ãã®æ¸ãæ¹ããå§ããã¾ãã
# ç°¡åãªè§£èª¬(1è¡ã§) sub func{ }
ã<Mojo::URLのソースコード>
ãåèã«ãã¦ãã ããã
æååãªã¹ãæ¼ç®å (åè)
ãæååãªã¹ãæ¼ç®åã¯ãã使ç¨ãããã®ã§è§£èª¬ãã¦ããã¾ããæååãªã¹ãæ¼ç®åã¯æååã®é åãä½æããã®ã«ããå©ç¨ãããã¾ãã
my @strings = qw/aa bb cc/;
ã次ã®è¨è¿°ã¨åãæå³ãããã¾ãã
my @strings = ('aa', 'bb', 'cc');
ã¢ã¸ã¥ã¼ã«ã®é¢æ°ãã¤ã³ãã¼ãããã¨ãã¯æ示ãã (å¼·ãæ¨å¥¨)
ãã¢ã¸ã¥ã¼ã«ã§é¢æ°ãã¤ã³ãã¼ãããã¨ãã¯æ示ããããã«ããã»ããããã§ããããã½ã¼ã¹ã³ã¼ããèªãã 人ããã®é¢æ°ã¯ã©ã®ã¢ã¸ã¥ã¼ã«ã®ãã®ãªã®ããç°¡åã«ç解ãããã¨ãã§ãã¾ãã
use File::Basename 'basename'; use File::Copy qw/copy move/; use File::Path 'mkpath'; use Encode qw/encode decode/; # mkpathé¢æ°ã使ç¨ããã mkpath $dir;
ãããæ示çãªã¤ã³ãã¼ãã®è¨è¿°ããªãã£ãå ´åã¯ã©ããªãã§ãããã
use File::Basename; use File::Copy; use File::Path; use Encode; # ããã¯ã©ãããã¤ã³ãã¼ãããããããããªã mkpath $dir;
ããã®ãããªå ´åã¯useããã¦ãããã¹ã¦ã®ã¢ã¸ã¥ã¼ã«ã®ããã¥ã¡ã³ããèªãã¨ãããã¨ã«ãªãããã¾ãããããªãã¯é¢æ°ãã©ã®ã¢ã¸ã¥ã¼ã«ããã¤ã³ãã¼ããããã®ããç¥ã£ã¦ããããããã¾ããããã½ã¼ã¹ã³ã¼ããèªã人ã«ã¯æ示çã§ã¯ããã¾ãããã§ãã®ã§ã¤ã³ãã¼ãããé¢æ°ã¯ã©ããªã«ããªãã«ã¨ã£ã¦æããã«æãã¦ãæ示çã«æå®ããããã«ãã¾ãããã
(åè)File::PathãFile::Copy
gotoã¯ä½¿ç¨ããªã (æ¬å½ã«ç¹å¥ãªå ´åãé¤ãã¦å¿ é )
ãPerlã«ã¯goto文ãããã¾ãã使ç¨ãã¦ã¯ããã¾ãããgotoã使ãããã°ã©ãã³ã°ã¯Perlã«éããããéå»ã®ãã®ã§ããããããªããä½ããã®çç±ã§gotoã使ããããªã£ãå ´å代æ¿ããæ段ã¯å¿ ãç¨æããã¦ããã¨æã£ã¦ãã ããã
ãã«ã¼ãå¶å¾¡ãè¡ããããªããlastããnextãã使ç¨ãã¦ãã ãããã¨ã©ã¼å¦çãè¡ããããªãdieã使ã£ã¦ä¾å¤ãæãã¦ãã ããã
ã(gotoã使ç¨ããªããã°ãªããªãå ´é¢ã¯ãç¡éå帰å¼ã³åºããªã©ã§ãé¢æ°ã®é層ãæ·±ãããããªããªã©ã¨ããæ¬å½ã«ç¹æ®ãªå ´åã ãã§ãã)
do ã whileã¯ä½¿ç¨ããªã (æ¨å¥¨)
ãdo whileã§è¨è¿°ã§ããæã¯whileã§å¿ ãè¨è¿°ã§ãã¾ããdo whileã使ã£ãããã¨ãã£ã¦è¨è¿°ãç°¡æ½ã«ãªããã¨ããã°ããã§ããªãã§ããéã«æ®æ®µä½¿ç¨ãã¦ããªãåã ãæå³ããããã«ãããªãã¨æãã¾ãã
ãdo whileã§è¨è¿°ã§ããæã¯whileã§å¿ ãè¨è¿°ã§ããã®ã§whileã使ããã¸ãã¯ãèãããã¨ããå§ããã¾ãã
redoã¯ä½¿ç¨ããªã (æ¨å¥¨)
ãPerlã«ã¯redo文ãããã¾ãããredoã使ããªãã¦ãåããã¸ãã¯ãè¨è¿°ãããã¨ãã§ãã¾ããredoã¯ä½åã使ç¨ãããã¨ãããã®ã§ãããredoã使ã£ãããã°ã©ãã³ã°ã¯ã¨ã¦ããããã«ãããªãã¨æãã¾ããredoã使ç¨ããªãã¦ãåããã¸ãã¯ã¯å¿ ãè¨è¿°ã§ããã®ã§redoã使ããªããã¸ãã¯ãèãããã¨ããå§ããã¾ãã
ãããã¿ã¤ãã¯ä½¿ç¨ããªã (å¼·ãæ¨å¥¨)
ããµãã«ã¼ãã³ãå®ç¾©ããã¨ãã«ãããã¿ã¤ãã¨ããåãæå®ã§ããæ©è½ãããã¾ããããã¯ä½¿ç¨ãã¾ããã
# ãããã¿ã¤ãã¯ä½¿ç¨ããªãã㨠sub func ($@) { ... }
ãPerlã§ã¯æ示çã«åãæå®ããªãã¦ãã©ã®ãããªåã®å¼æ°ãåãåãã¾ãããå¼æ°ã®åæ°ãããã¤ã§ããã¾ãã¾ãããã§ãã®ã§ãããã¿ã¤ãã§åãæå®ãããåæ°ãæå®ãããããå¿ è¦ã¯ã¾ã£ãããªãã®ã§ããã§ãã®ã§å¿ ããããã¿ã¤ããæå®ããªããµãã«ã¼ãã³ã®å®ç¾©ãè¡ãã¾ãããã
sub func { ... }
ã¨ã©ã¼ãä¼ããã¨ãã¯undefãæ»ãå¤ã¨ãã¦è¿å´ããã®ã§ã¯ãªãdieã使ç¨ããã(æ¨å¥¨)
ãPerlã«ã¯ä¾å¤å¦çããªãã¨æã£ã¦ãã人ãããããããã¾ãããJavaã®ãããªä¾å¤ãªãã¸ã§ã¯ãã¨ãããã®ã¯ããã¾ããããç°¡æ½ãªä¾å¤æ©æ§ãåãã¦ãã¾ãã
ãã¾ãã¯æ§æ¥ã®ã¨ã©ã¼å¦çã§ãã£ãæ»ãå¤ã«undefãè¿å´ããæ¹æ³ãè¦ã¾ããã¨ã©ã¼ãçºçããã¨ãã«åç¬ã®returnãè¨è¿°ããã¨ã¹ã«ã©ã³ã³ããã¹ãã®å ´åã¯undefããªã¹ãã³ã³ããã¹ãã®å ´åã¯ç©ºã®ãªã¹ã () ãè¿å´ããã¾ãã
# ã¨ã©ã¼ãçºçããã¨ãã«undefãè¿å´ãã sub func { my $arg = shift; ... # ã¨ã©ã¼å¦ç if ($error) { return; } # ã¨ã©ã¼ãèµ·ãããªãã£ãå ´åã®æ£ããå¤ return $val; }
ãããã¦é¢æ°ãå¼ã³åºãå´ã§ã¨ã©ã¼å¦çãè¨è¿°ãã¾ãã
my $val = func(); # $valãå½å¤ã ã£ããããã°ã©ã ãçµäº die "Error" unless $val;
ããã®è¨è¿°ã®åé¡ç¹ã¯funcã使ã人ãæ»ãå¤ã®ãã§ãã¯ãæ ãã¨ããã°ã©ã ã¯å ã«é²ãã§ãã¾ãã¨ãããã¨ã§ãã
ãã§ãã®ã§ç¾å¨çãªPerlã§ã¯ã¨ã©ã¼ãä¼ããã¨ãã«dieã使ã£ã¦ä¾å¤ãæãã¾ãã
# ã¨ã©ã¼ãçºçããã¨ãã«dieã使ã£ã¦ä¾å¤ãæãã sub func { my $arg = shift; # ãªãããã®å¦ç # dieã使ã£ã¦ä¾å¤ãæãã if ($error) { die "Error message"; } # ã¨ã©ã¼ãèµ·ãããªãã£ãå ´åã®æ£ããå¤ return $val; }
ããã®ããã«ããã¨funcãå¼ã³åºãã¦ã¨ã©ã¼ãçºçããã¨ãã¯ã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ãã¦ããã°ã©ã ã¯çµäºãã¾ãã
# ã¨ã©ã¼ãçºçããå ´åã¯ã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ãã¦ããã°ã©ã ãçµäº
func();
ããã°ã©ã ãçµäºãããããªãå ´åã¯evalブロックã§åãã¾ããããã¯Javaã§ããcatchã ã¨æã£ã¦ãã ãããã¨ã©ã¼ãçºçããå ´åã¯$@ã¨ããç¹æ®å¤æ°ã«ã¨ã©ã¼ã®å 容ãè¨å®ããã¾ãã®ã§ããã®å¤æ°ããã§ãã¯ãããã¨ã§ã¨ã©ã¼ãçºçãããã©ããã調ã¹ããã¨ãã§ãã¾ãã
eval { func() }; if ($@) { # ã¨ã©ã¼ãçºçããå ´åã®å¦çãè¨è¿° }
ã³ã³ã¹ãã©ã¯ã¿ã®å¼ã³åºãã§ã¯ã¢ãã¼æ¼ç®åãå©ç¨ãã
ãã³ã³ã¹ãã©ã¯ã¿ã®å¼ã³åºãã¯ã¢ãã¼æ¼ç®åã使ç¨ããã®ãããã§ããããPerlã§ã¯ã³ã³ã¹ãã©ã¯ã¿ã¨ä»ã®ã¡ã½ããã«å®è³ªçãªéãã¯ããã¾ããã
my $obj = SomeClass->new;
ãéæ¥ãªãã¸ã§ã¯ãå¼ã³åºãã¯ãå°æ¥çã«ã¯éæ¨å¥¨ã«ãªãå¯è½æ§ãããã¾ãã
# éæ¥ãªãã¸ã§ã¯ãå¼ã³åºã my $obj = new SomeClass();