典型的な呼び出し形式 |
|
sort
LIST
reverse sort LIST sort { CODE-BLOCK } LIST reverse sort { CODE-BLOCK } LIST |
|
例 |
説明 |
@A=sort @A ; #A-Zの順 # 上記の明示バージョン @A=sort { $a cmp $b } @A; # 上記の逆順バージョン @A=reverse sort @A; @B=sort {$a <=> $b} @B; @B=reverse sort @B; $,='\n"; print sort @C; |
第一の例は@Aの要素を英数字順に並べ替える。 第二の例は文字比較演算子のcmpを使ったデフォルトの並び替え規則を指定して同じ結果を要求する明示的な方法。 reverseは昇順<ー>降順 数値比較演算子を使った並べ替え規則にしたがって配列@の要素を並べ替える。reverseはリストを逆順に並べ替える。 @Cの要素を1行に1つづつ英数字順で表示。 |
intra_line_sort スクリプト |
#! /usr/bin/perl -s -wn our ($debug); # スイッチはオプション $debug and chomp # "<-"と $_を同じ行に表示 $debug and print "$_ <- Original\n"; $,=" "; # 表示時にスペースで区切る # 空白文字を区切りとして行を分割してソート print sort {$a <=> $b} split; # 数のソート debug and print " <- Sorted\n"; print "\n"; # 出力上でレコードを分離 |
典型的な呼び出し形式 |
|
grep {CODE-BLOCK} LIST |
|
例 |
説明 |
@B=grep { /^[a-z]/i } @A; @B=grep { -d } @A; @B=grep { rand >= .5 } @A $,='\n"; print grep { length >3 } @A; |
@A中の要素で英文字で始まるものを@Bに格納。 @Aの要素でディレクトリファイル名のものを@Bに @から無作為に選択した要素を@Bに @A中の3文字を越えるながさの要素を出力 |
典型的な呼び出し形式 |
|
join STRING, LIST |
|
例 |
説明 |
$properties=join '/',$size,$shape,$color; $string_with_NLS=join "",@strings_with_NLS; $strings_with_NLS=join "\n",@strings_without_NLS |
スカラー変数の値を単一の文字列に結合。要素と要素はスラッシュで区切る。 $propertiesの結果例:huge/irregular/clear 配列の要素を結合し,ニューラインで終わるレコード群からなる単一の文字列にする.上の例では(既にニューラインで終わっている文字列用に)要素と要素の間に空文字列を挿入し,下の例では(ニューラインのついてない文字列用に)ニューラインを挿入。 |
典型的な呼び出し形式 |
|
map { CODE-BLOCK } LIST |
|
例 |
説明 |
@B=map { sqrt } @A; @B=map { "\L$_" } @A; @A=map { "$_\n" } @A; $,=' '; print map { "'$_ '"} @A; |
@Aの各要素の平方根と小文字バージョンを@Bに格納 @Aの各要素にニューラインを付加したものを@Aに格納 @Aの各要素をシングルクォートで囲んでスペースで区切った結果を出力。 |
典型的な呼び出し形式 |
|
<pattern>
<pattern1>,<pattern2>,等 |
|
例 |
説明 |
@files=<pattern>; @files=(<pattern1>, <pattern2>); $,="\n"; print <pattern1>, <pattern2>; print sort <pattern1>, <pattern2>; |
patternにマッチするファイル名を@filesに格納。 pattern1 または pattern2 にマッチするファイル名を@filesに格納。グロブの結果を変数に直接代入する場合は複数のグロブ演算市をコンマで区切って括弧で囲む。 pattern1またはpattern2にマッチするファイル名を\nで釘って出力。pattern1にマッチするものを英数字順で出力してからpattern2にマッチするものを出力。 第2の例はマッチするファイル名の集合全体をソート処理してから出力。 |
メタキャラクタ |
意味 |
例 |
マッチする例 |
? [xyz] [c1-c2] [!xyz] [!c1-c2] * |
任意の1文字 角括弧の中に明示的に列挙した任意の文字(クラス) c1からc2の範囲のものをすべて含め,先頭の!の後に指定したものは除外する。 任意の文字(重複可)または何もなし |
<f?.txt>, <.?> <[abc].txt> <f[0-9].txt> <f[!0-9].txt> <*.txt> <f*> |
f2.txt, fX.txt .., .a, .9 a.txt, b.txt, c.txt f2.txt, f8.txt fX.txt, f%.txt f2.txt, fX.txt, H.txt f2.txt, fX.txt, fud |
FNG |
正規表現 |
意味 |
? * [a-z] [!a-z] |
. .* [a-z] [^a-z] |
一つの文字 0個以上の文字 小文字の英文字 小文字の英文字ではない1文字 |
a* *a abc |
^a a$ ^abc$ |
"a"で始まる "a"で終わる 正確に"abc" |
該当なし |
X?, X*, X+ |
0または1文字,0または文字以上、1文字以上の「xの連続」 |
perl関数 |
対応するUnix親族 |
呼び出し形式 |
説明 |
chdir mkdir rmdir |
cd mkdir rmdir |
Function dirname or die "$0: Function failed: ", $!; |
ディレクトリdirnameについて,切り替え,作成,削除を行うか(dieによって) プログラムを終了する。rmdirが成功するにはそのディレクトリが空でなけ ればならない。成功か失敗を表す真偽値を返す。 |
perl関数 |
対応するUnix親族 |
呼び出し形式または呼び出し例 |
説明 |
umask |
umask |
umask 0022; #所有者についてのみ書き込み可 printf "Umask is : %040\n", umask; |
新たに作成されたファイルにデフォルトで許可される アクセス権を剥奪する8進数のビットマスクを設定。 0022はグループとその他に付いて書き込み権を剥奪。 |
chmod chown unlink |
chmod chown rm |
$success=chmod perm_num,file(s); $success=chown UID_num, GID_num,file(s); $success=unlink file(s); |
8進数によるアクセス権指定perm_num(例えば0755)を 使ってfaile(s)のアクセス権を設定。 file(s)を所有者UID_num及びグループGID_numと 関連付ける。 ディレクトリからfile(s)の名前を削除。 |
rename move copy |
mv mv cp |
remname old,new or die "$0: rename failed: $!"; use File::Copy; #モジュールをロード move old, new or die "$0: move failed: $!"; use File::Copy; #モジュールをロード copy old, new or die "$0: copy failed: $!"; |
シェル |
Perl |
説明 |
exit exit 0 exit 1-255 |
exit; exit 0; exit 1-255; |
引数なしの場合シェルのexitは$?変数の最後の値を親プロセスに返すことでプログラムの 成功または失敗を表す。Perlはデフォルトで0を返して成功を表す。 引数の0はのスクリプト成功を表す. 1から255迄はスクリプトの失敗を表す. |
シェル |
Perl |
説明 |
shift 該当なし shift 2 該当なし 該当なし |
shift; $variable=shift; shift; shift; または $arg1=shift; $arg2=shift; shift @any_array; unshift @array1, @array2 |
左端の引数を削除し他のすべての引数を1つ左にずらす Perlでは削除された引数がshiftから返されるためそれを変数に保存できる シェルのshiftはずらす個数のオプションがある. 同様のことをperlで実現するには、shiftを複数回呼び出す。 perlのshiftは,配列の名前を引数にとることが出来,その指定されたものを デフォルトの対象(通常は@ARGV,サブルーチン内では@_)の代わりに 処理の対象にする。 Perlのunshiftは@array1の最初の内容の前に@array2の内容が含まれるようarray1を初期化しなおす。例えば @array1=(a,b),@array2=(1,2) => array1は(1,2,a,b)となる。 |
Shell |
Perl |
if condition then commands else commands fi |
if (condition) { code; } else { code; } |
if cond; then cmds; else cmds; fi |
if (cond) {code;} else {code;} |
else中のif/else |
代わりのelsif |
if (A) { print 'Acase'; } else { # この括弧が消える if (B) { print 'Bcase'; } else { print 'other case'; } } # この括弧が消える |
if (A) { print 'Acase'; } elsif (B) { print 'B case'; } else { print 'other case'; } |
cd_report スクリプト |
|
名前 |
記号 |
例 |
結果 | 説明 |
連結演算子 反復演算子 |
. x |
$ab='A'.'B'; $abc=$ab."C"; $abc='A'; $abc.='B'; $abc.='C'; $dashes='-' x 4; $spaces=' ' x2 |
AB ABC A AB ABC ---- □□ |
連結演算子は左辺と右辺の文字列を結合。代入演算子との 組で使われると右を左に追加。(.=) 反復演算子は左辺の文字列を指定された回数繰り返す。 |
シェル |
Perl |
説明 |
var=`cmd` または var=$(cmd) array=(`cmd`) または array=($(cmd)) cmd2 `cmd` または cmd2 $(cmd) ”‘cmd‘” または "$(cmd)" |
$var=`cmd` @array=`cmd` function `cmd` または function scalar `cmd` `cmd` |
cmd中の変数置換がダブルクォートで囲まれているかのように処理され それからcmdが処理され出力が変数に代入される。cmdの終了値が$?に 格納。 cmd の出力が上記と同様に処理され、シェルの場合「語群」perlの場合 $/区切りのレコード群が配列に代入される。 cmdが処理されてからシェルでは個々の出力がcmd2に渡される。Perlのリスト コンテキストでは出力の各レコードがfunctionに個々の引数として渡される。 Perlのスカラーコンテキストではすべてが単一の引数として渡される。 シェルではcmdの出力を更なる処理から保護するためにダブルクォートが必要。 Perlでは不可。シェルの例ではcmdの出力全体が1行になるのに大してPerlの例 では$/区切りのレコード群リストになる。 |
表示モード |
有功にするオプション |
無効にするオプション |
強調 下線付き 太字 半輝度 点滅 |
smso smul bold dim blink |
rmso rmul sgr0 sgr0 sgr0 |
ターミナル情報 |
オプション |
説明 |
列 行 |
cols lines |
列数を報告 行数を報告 |
highlight_trailing_ws スクリプト |
|
rgrep スクリプト |
|
例 |
説明 |
system 'command(s)'; system "command(s)"; system 'command(s)'; ! $? or warn 'failed'; |
シングルクォート中のコマンドは変更なしで実行される。 ダブルクォート中のコマンドは変数展開されてから実行 される。場合によってはコマンド引数をシングルクォート で囲んでシェルが実行しないようにする。 function or warn がPerlの関数の失敗を報告するのと同様 ! $? or warnはsystemが実行したコマンドの失敗を報告する !はUnixの真偽値をperlの真偽値に変換する。 |
news_flash スクリプト |
|
news_flash2 スクリプト |
|
シェル |
Perl |
eval 'command' error=$? (($error > 0)) && echo "failed: $error" >&2 |
eval 'stuff'; # $@を設定 $@ ne "" and warn "failed: $@"; |
該当なし |
eval; # $_中のコードを評価 |
psh スクリプト |
|
preg スクリプト |
|
シェル |
Perl |
備考 |
|
値の代入 値の取得と表示 値の削除 複数の値の代入 すべての値の取得と表示 |
n[0]=13 echo ${n[0]} unset n[0] n=(13 42) echo "${n[@]}" |
$n[0]=13; print $n[0]; delete $n[0]; @n=(13, 42); @n=qw/13 42/; @n=qw!\ | /!; print "@n"; |
Perlではスカラー値を参照する場合常に変数名に$記号を使う. シェルでは値を取得する場合のみ$記号を使う シェルでは配列の名前と添字を波括弧で囲む シェルは指定された要素を削除、Perlは要素の値を未定義にした後もそのスロットを維持する。 シェルは括弧内の初期値のリストにおける空白文字をセパレータとして認識する。perlではデフォルトでコンマが必要で追加の空白文字が可能。qwXの構文では、対をなすXデリミタの間で空白文字だけが認識される |
shell_types スクリプト |
|
show_field2 スクリプト |
|
fcookie スクリプト |
|
fcookie2 スクリプト |
|
%phone |
|
キー |
値 |
Joe Jan |
789-9843 897-7164 |
例 |
備考 |
|
値の代入 値の取得と表示 エントリの削除 複数の値の代入 すべての要素の取得と表示 |
$h{A}=1; $h{'B C'}=2; print $h{A}; print $h{'B C'}; または exists $h{A} and print $h{A}; delete $h{A}; delete $h{'B C'}; %h=( A => 1, 'B C' => 2 ); または %h=list_generator; $,='\n'; print sort values %h; print sort keys %h; print map { "$_=$h{$_}"} sort keys %h; または foreach $key (sort key %h) { print "$key=$h{$key}"; } |
ハッシュ中の単一のスカラー値を参照する場合は $記号を使う。複数語のキーはクォートが必要。 特定のキーがハッシュ中にあるかどうか分からない 場合はexitsを使って確認できる delete関数は指定のキーと値をハッシュから削除す る。 キー => 値の対をコンマで区切った明示リストで ハッシュを初期化できる.リストジェネレータと呼ば れる式で初期化することも可能 ハッシュから要素を取り出すにはvalue関数とkey 関数を使うことができる。sort をつけるとソート処理 される.ハッシュの要素を"キー=値"の形で出力 するには一般にmapまたはforeachが使われる |
初期化 格納される値 添字アクセス 結果 |
%X=( A => 1, B => 2, C => 3); 1 2 3 %X(A) %X(B) %X(C) 1 2 3 |
添字によるスライス 結果 |
@X{A,B} "@X{C,A,B}" @X{C,B,A} 12 3 1 2 321 |
unique_args スクリプト |
|
unique_inputs スクリプト |
|
user_lookup スクリプト |
|
count_words スクリプト |
|
シェルの名前 |
perlの名前 |
シェルの例 |
perlの例 |
ファイル名生成 コマンド置換 変数置換 該当なし 該当なし |
グロブ コマンド展開 変数展開 入力演算子 マッチ演算子 |
* `cat memo` $(cat memo) (微妙) `find . -print` "$@" "${names[@]}" $* ${names[*]} $names 該当なし 該当なし |
<*> split /\s+/, `cat memo` `cat memo` File::Find 参照 @ARGV split /\s+/, "@names" split /\s+/, "@ARGV" split /\s+/, "@names" split /\s+/, $names <> <STDIN> /\w+/g |
相違点 | シェル |
perl |
コードブロックのデリミタ コードブロックの内容 個々のスクリプト引数 スクリプト引数すべて スクリプト引数の数 リテラル値の明示リスト |
do done コマンド $1,$2,... $*, "$@" $# 'Pat' 'Kim' |
{ } 文 $ARGV[0],$ARGV[1],... @ARGV(リストコンテキストで) @ARGV(スカラーコンテキストで) ( 'Pat', 'Kim' ) |
シェル |
perl |
while condition do code done |
while ( condition) { code; } |
while condition; do code; done |
while (condition) {code}; |
compress_image スクリプト |
|
暗黙ループ(-nによる) |
明示ループ |
BEGIN {ここに入力前のコード} LINE: while (<>) { ここに入力を処理するコード } END {ここに入力後のコード} |
ここに入力前のコード LINE: while (<>) { ここに入力を処理するコード } ここに入力後のコード |
シェル |
Perl |
while prelim_code condition do : # ヌルコマンド done |
do { prelim_code; } while (condition); |
while commands; do :; done |
do { prelim_code; } while(condition); |
シェル |
perl |
for var in LIST do code done |
foreeach $var (LIST) { code; } |
for var in LIST; do code; done |
foreach $var (LIST) {code}; |
expand_acronymsスクリプト |
|
compress_image2スクリプト |
|
for (init; condition; increment) { code; } |
for (init; condition; increment) {code;} |
raffleスクリプト |
|
シェル |
Perl |
continue loop-number break loop-number |
next loop-label last loop-label |
シェルのループ制御ディレクティブの構文 |
|
Perlのループ制御ディレクティブの構文 |
|
シェル |
perl |
while # preliminary_code condition do conditional code done |
while (1) { # preliminary_code; (condition) or last; } continue { continuation_code; } |
select var ; do commands; done # select var in LIST; do commands; done # |
use Shell::POSIX::Select; select () {} # select () {CODE; } # select (LIST) {CODE; } # select $var (LIST) {CODE; } # |
perlman スクリプト |
|
機能 |
構文 |
コメント |
サブルーチンを定義する サブルーチンを呼び出す 値を返す コンテキストを検知する 引数にアクセスする |
sub name { code; } name(); #引数なしで呼び出す name(ARGS); #引数を指定して 呼び出す $Y=name(); @X=name(ARGS); return VALUE(S); # VALUEを返す print get_time(); #時刻を表示 sub get_time { scalar localtime; } # if (wantarray) { return @numbers; #リスト値 } else { return $average; #スカラー値 } ($A,$B)=@_; print $B; # print $_[1]; # $A=shift; $B=shift; print $B; # |
sub宣言はその後のnameをcodeと関連付ける。 サブルーチンに渡したい引数を括弧のなかに 指定。nameが返すVALUE(s)は必要に応じ て自動的にスカラーに変換される returnはVALUE(S)を呼び出し元に送り返す。 必要に応じてリストからスカラーに変換される returnに引数がない場合空のリストまたは、 未定義値が返される。(get_timeの様に)retuen がないと,最後に評価された式の値が返される wantarrayはその呼び出しがリストコンテキスト かスカラーコンテキストかによって真または偽を 返す。これにより呼び出し時のコンテキストに 応じてことなる値を返す サブルーチンの引数は、配列@_をコピー又は shiftすることで取得できる。或いは添字を使え ば$_[0]は@_の第1要素を、$_[1]は第二要素を表す |
centerスクリプト |
|
center2 スクリプト |
|
center2.strict スクリプト |
|
宣言 |
例 |
説明 |
my our local |
my $A; my $A=42; my ($A, $B); my ($A, $B)=@values; our $A; our $A=42; our ($A, $B); our ($A,$B)=@values; {#変更後の$,の新たなスコープ local $,='\t"; print @ARGV;タブ区切り } #以前の$,が回復 |
my宣言はプライベート変数を生成する(その宣言のスコープ内でのみ有効)。 strictモードにおけるourは、そのスコープ内のグローバル変数に完全名(例えば $main::Aまたは$::A)ではなく単純名(例えば$A)でアクセスすることによる致命的 エラーを無効にする.ミニマルperlではすべてのスイッチ変数とモジュールでエク スポートする変数についてこの宣言をstrictモードで使う。 localはその宣言のスコープから実行の制御が外にでたとき変数の以前の値が 復元されるようにするperlでは主としてprintのフォーマット変数($,と$")に使う |
プログラムコード | 変数のスコープ | |
! /usr/bin/perl ... use strict; use SomeModule my $A=42; BEGIN { my $B; ... print $A,$B; } print $A; |
$A |
$B |
$Aの最初のスコープ |
$Aの最終的なスコープ |
#! /usr/bin/perl1 ... use strict; use SomeModule; |
#! /usr/bin/perl1 ... use strict; use SomeModule; { |
my $A=42; #メイン print $A; # メイン sub C {} |
my $A=42; #メイン print $A; # メイン |
} sub C {} |
変数のスコープ |
||||
A:プログラム全体 |
B:BEGIN、メイン、END |
C:BEGINとメイン |
D:メインとEND |
E:メインのみ |
use strict; |
use strict; { |
use strict; { |
use strict; BEGIN { } { |
use strict; BEGIN { } { |
decl $v; BEGIN { } メイン END { } サブルーチン |
decl $v; BEGIN { } メイン END { } |
decl $v; BEGIN { } メイン |
decl $v; BEGIN { } メイン END { } |
decl $v; BEGIN { } メイン |
} END { } サブルーチン |
} END |
|||
} サブルーチン |
} サブルーチン |
サブルーチン |
プログラムコード |
変数のスコープ |
||||
#! /usr/bin/perl ... use strict; use SomeModule; { # 特設スコープの開始 our ($A); #スイッチ変数 my $B; BEGIN { my $C; print $A,$B,$C; } print $A,$B; #メインプログラム END { my $D; coscious ($A,$B,$D); print $A,$B,$D; } } # 特設スコープの終了 sub coscious { my $E: print $E: } |
$A | $B |
$C |
$D |
$E |
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ |
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ |
■ ■ |
■ ■ ■ |
■ ■ |
シンプルもジュールテンプレート |
|
Center.pmモジュール |
|
check_linksスクリプト |
|
menu_ls スクリプト |
|
check_symlinks スクリプト |
|
survey.cgiスクリプト |
|
関数の構文 |
関数の出力 |
header('type') start_html(-title=>'Title', -BGCOLOR=>'color') pre('stuff') hN('Heading') comment('text') em('word') b('word') p() hr() br() ul(li('item1','item2')) a({-href=>'URL'},'text') img({-src=>'URL', -align=>'position'}) end_html() |
指定された文書タイプ(デフォルトはtext/html)のHTTPヘッダ HTMLヘッダと<body>タグ ブラウザによるフォーマット処理が行われないコンテンツ レベルNでフォーマット処理した見出し HTMLコメントとしてのテキスト 強調して表示される語(italic) 太字 空行,水平方向の区切りせん,新たな行の開始 2項目の順序なし(黒点付き)リスト.順序付きはolを使う URLへのリンクとしてのテキスト URLで指定されるイメージ.オプションで位置の指定も可(イメ ージそのものにはleftとright,イメージのキャプションテキストにはtop,middle,bottom HTMLの終了(</body></html>) |
関数の構文 |
関数の出力 |
start_form(-method=>'type', -action=>'URL') textfield(-name=>'Name', -default=>'text', -size=>num, -maxlength=>num) scrolling_list(-name=>'Name', -default=>'starting_value', -Values=>['V1', V2'], -size=>num) param() param('name') Dump() submit(-name=>'name', -value=>'value') image_button(-name=>'Name', -src=>'URL', -align=>'position') reset() end_form() |
フォームの開始。パラメータの送信タイプ(type)はPOST(これがデフォルト)またはGET.-actionを省略すると現在のスクリプトが結果を処理する. テキスト入力のためのフィールド。-maxlengthのnumが-sizeのnumを超えると水平方向にスクロールする. スクロールリスト。popup_memu, radio_group, checkbox, checkbox_groupも同じ形-sizeはpopup_menuのみ) すべてのパラメータの名前 指定されたパラメータの値 パラメータの名前と値のリストをフォーマット処理したもの。古いバージョンでは代わりにCGI:dump()を使う. フォーム送信ボタン フォーム送信ボタンとしてのイメージ.クリックされた位置のX座標とY座標はName.x, Name.yというパラメータとして取得可。 フォームリセットボタン フォームの終了 |