【コラム】
第6回は、Perlを使ったHello Worldです。Perlでは、リスト1のようにprintを使って記述します。Perlのprintは、デフォルトでは改行コードを付加しないため、文字列の最後に「\n」が必要です。Perlで使用する文字列は、シングルクォートでもダブルクォートでも囲むことができますが、「\n」などのエスケープ文字を解釈させるためには、ダブルクォートを使う必要があります。
#!/usr/bin/perl ← Perlスクリプトであることを指定
print "Hello World\n"; ← printを使ってメッセージ出力(改行コードも必要)
Perlスクリプトは、ほかのスクリプトと同様に、実行例1のようにchmodコマンドで実行属性を付ければ実行できます。Perlスクリプトには拡張子.plを付けることもありますが、本稿ではコマンド名だけで実行できるように拡張子は付けません。
$ chmod +x perl_print ← Perlスクリプトのファイルに実行属性を付ける
$ ./perl_print ← Perlスクリプトを実行
Hello World ← 確かにHello Worldが表示される
$ ← シェルのプロンプトに戻る
Perlのprintは、出力の最後に特殊変数「$\」の内容を付加します。そこで、$\にあらかじめ"\n"を代入しておけば、print実行時に自動的に改行が付加されます(リスト2)。
#!/usr/bin/perl
$\ = "\n"; ← $\に改行コードを代入
print 'Hello World'; ← printすれば改行は自動
perlコマンドのオプションに「-l」を付ければ、最初から$\に"\n"が代入(正確には$\に$/の値が代入)されます(リスト3)。
#!/usr/bin/perl -l ← perlコマンドに-lオプションを付ける
print 'Hello World'; ← printすれば改行は自動
printfを使ってリスト4のように記述することもできます。改行コードを含む"%s\n"の部分はダブルクォートを使う必要があります。
#!/usr/bin/perl
printf "%s\n", 'Hello World'; ← printfを使って文字列を出力
Perlのプログラムをスクリプトに記述するのではなく、シェルのコマンドラインから直接実行することもできます(実行例2)。この場合、シェル側のシングルクォートとPerlに渡すダブルクォートとで、クォートが2重になっている点に注意してください。なお、Perlでは最後の文末の「;」は省略できるので、実行例2でも省略しています。
$ perl -e 'print "Hello World\n"' ← コマンドラインでperlを直接実行
Hello World ← 確かにHello Worldが表示される
$ ← シェルのプロンプトに戻る
Perlでは、syswriteを使ってOSのwriteシステムコールを直接呼び出すことができます。syswriteを使う場合は、リスト5のように、標準出力のSTDOUTと、改行を含めた文字列の長さ(12バイト)も合わせて引数で指定します。
#!/usr/bin/perl
syswrite STDOUT, "Hello World\n", 12; ← STDOUTに12バイト(改行含む)を出力
systemを使ってOS上のコマンドを呼び出すこともできます。リスト6はOSのechoコマンドを呼び出す方式のHello Worldです。
#!/usr/bin/perl
system 'echo "Hello World"'; ← systemで、OS上のechoコマンドを実行
perlコマンドの引数に、-eオプションで直接プログラムを記述する方法で、変わったPerlスクリプトを作ることができます。
リスト7は、#!の行だけの1行のスクリプトです。この行はカーネルによって直接解釈されます。OSによる解釈の違いを避けるため、プログラム部分にはスペースを入れないようにします。具体的には、オプションの「-le」の直後にはスペースを入れず、「Hello World」のメッセージ中のスペースは、16進のエスケープ文字の「\x20」で表現します。
#!/usr/bin/perl -leprint"Hello\x20World" ← 1行だけのPerlスクリプト
Perlのプログラムを#!の1行に記述した上で、メッセージを直接ファイル中の特定の行に記述し、その行をPerlによって抜き出すという方法も考えられます。リスト8は、ファイルの3行目だけを取り出すという動作をします。ここでは、Perlスクリプト自体がPerlプログラムへの入力ファイルとなります。なお、perlコマンドには-nオプションを追加し、while(<>)ループの記述を省略しています。
#!/usr/bin/perl -neif($.==3){print} ← 3行目を抜き出すPerlプログラム
Hello World ← 3行目にメッセージを直接記述
抜き出す行を決め打ちせずに、正規表現を使ってメッセージを抜き出すこともできます。リスト9は、「#」以外の文字で始まる空行以外の行を抜き出すという動作をします。Perlプログラムのchomp(改行の除去)の動作を行わせるため、perlコマンドには-nlのオプションを追加します。
#!/usr/bin/perl -nleif(/^[^#]/){print} ← 正規表現でメッセージを抜き出す
← ここは空行
Hello World ← メッセージを直接記述
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第108回 今回のお題は…「issue」 [20:00 5/27] キャリア |
|
TVアニメ『ペルソナ4』、新規カットを加えた再編集版を劇場でイベント上映 [20:00 5/27] ホビー |
|
[9nine]制服姿見納め? セーラー服で登場も川島海荷「4人はコスプレ」 [19:15 5/27] エンタメ |
|
「NO.6」4巻は書き下ろしドラマCD付、木乃のサイン会も [18:49 5/27] ホビー |
|
[今週の新刊]マンガ大賞3回ノミネート「アイアムアヒーロー」 カープ愛「球場ラヴァーズ」も [18:33 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。