【コラム】

Hello Worldコレクション

6 Perl編 - 意外!?に多芸多才なスクリプト言語

 

6/23

PerlのHello World

第6回は、Perlを使ったHello Worldです。Perlでは、リスト1のようにprintを使って記述します。Perlのprintは、デフォルトでは改行コードを付加しないため、文字列の最後に「\n」が必要です。Perlで使用する文字列は、シングルクォートでもダブルクォートでも囲むことができますが、「\n」などのエスケープ文字を解釈させるためには、ダブルクォートを使う必要があります。

リスト1 printを使う方法(perl_print)

#!/usr/bin/perl             ← Perlスクリプトであることを指定

print "Hello World\n";      ← printを使ってメッセージ出力(改行コードも必要)

Perlスクリプトは、ほかのスクリプトと同様に、実行例1のようにchmodコマンドで実行属性を付ければ実行できます。Perlスクリプトには拡張子.plを付けることもありますが、本稿ではコマンド名だけで実行できるように拡張子は付けません。

実行例1 Perlスクリプトの実行

$ chmod +x perl_print        ← Perlスクリプトのファイルに実行属性を付ける
$ ./perl_print               ← Perlスクリプトを実行
Hello World                  ← 確かにHello Worldが表示される
$                            ← シェルのプロンプトに戻る

print/printfを使ったそのほかの方法

Perlのprintは、出力の最後に特殊変数「$\」の内容を付加します。そこで、$\にあらかじめ"\n"を代入しておけば、print実行時に自動的に改行が付加されます(リスト2)。

リスト2 「$\」に代入して改行する方法(perl_print2)

#!/usr/bin/perl

$\ = "\n";               ← $\に改行コードを代入
print 'Hello World';     ← printすれば改行は自動

perlコマンドのオプションに「-l」を付ければ、最初から$\に"\n"が代入(正確には$\に$/の値が代入)されます(リスト3)。

リスト3 「-l」を使って改行する方法(perl_print3)

#!/usr/bin/perl -l       ← perlコマンドに-lオプションを付ける

print 'Hello World';     ← printすれば改行は自動

printfを使ってリスト4のように記述することもできます。改行コードを含む"%s\n"の部分はダブルクォートを使う必要があります。

リスト4 printfを使う方法(perl_printf)

#!/usr/bin/perl

printf "%s\n", 'Hello World';    ← printfを使って文字列を出力

コマンドラインから直接実行

Perlのプログラムをスクリプトに記述するのではなく、シェルのコマンドラインから直接実行することもできます(実行例2)。この場合、シェル側のシングルクォートとPerlに渡すダブルクォートとで、クォートが2重になっている点に注意してください。なお、Perlでは最後の文末の「;」は省略できるので、実行例2でも省略しています。

実行例2 コマンドラインから直接実行

$ perl -e 'print "Hello World\n"'    ← コマンドラインでperlを直接実行
Hello World                          ← 確かにHello Worldが表示される
$                                    ← シェルのプロンプトに戻る

syswriteを使う方法

Perlでは、syswriteを使ってOSのwriteシステムコールを直接呼び出すことができます。syswriteを使う場合は、リスト5のように、標準出力のSTDOUTと、改行を含めた文字列の長さ(12バイト)も合わせて引数で指定します。

リスト5 syswriteを使う方法(perl_syswrite)

#!/usr/bin/perl

syswrite STDOUT, "Hello World\n", 12;   ← STDOUTに12バイト(改行含む)を出力

OSのコマンドを呼び出す方法

systemを使ってOS上のコマンドを呼び出すこともできます。リスト6はOSのechoコマンドを呼び出す方式のHello Worldです。

リスト6 OSのコマンドを呼び出す方法(perl_system)

#!/usr/bin/perl

system 'echo "Hello World"';      ← systemで、OS上のechoコマンドを実行

変則的なPerlスクリプト

perlコマンドの引数に、-eオプションで直接プログラムを記述する方法で、変わったPerlスクリプトを作ることができます。

リスト7は、#!の行だけの1行のスクリプトです。この行はカーネルによって直接解釈されます。OSによる解釈の違いを避けるため、プログラム部分にはスペースを入れないようにします。具体的には、オプションの「-le」の直後にはスペースを入れず、「Hello World」のメッセージ中のスペースは、16進のエスケープ文字の「\x20」で表現します。

リスト7 引数に直接プログラムを記述する方法(perl_direct)

#!/usr/bin/perl -leprint"Hello\x20World"    ← 1行だけのPerlスクリプト

Perlのプログラムを#!の1行に記述した上で、メッセージを直接ファイル中の特定の行に記述し、その行をPerlによって抜き出すという方法も考えられます。リスト8は、ファイルの3行目だけを取り出すという動作をします。ここでは、Perlスクリプト自体がPerlプログラムへの入力ファイルとなります。なお、perlコマンドには-nオプションを追加し、while(<>)ループの記述を省略しています。

リスト8 3行目だけを抜き出す方法(perl_line)

#!/usr/bin/perl -neif($.==3){print}       ← 3行目を抜き出すPerlプログラム

Hello World                               ← 3行目にメッセージを直接記述

抜き出す行を決め打ちせずに、正規表現を使ってメッセージを抜き出すこともできます。リスト9は、「#」以外の文字で始まる空行以外の行を抜き出すという動作をします。Perlプログラムのchomp(改行の除去)の動作を行わせるため、perlコマンドには-nlのオプションを追加します。

リスト9 正規表現で行を抜き出す方法(perl_regex)

#!/usr/bin/perl -nleif(/^[^#]/){print}    ← 正規表現でメッセージを抜き出す
                                          ← ここは空行
Hello World                               ← メッセージを直接記述

6/23

インデックス

連載目次
第23回 C言語とは違う、独自のプログラミング作法をマスターする - Pascal編
第22回 世界初の高級言語はいまだ現役 - FORTRAN編
第21回 コンピューティングの基礎を学びたい方へ - BIOSコールのアセンブラ編
第20回 ネットワーククライアント編 - いろんな言語でソケットプログラミング
第19回 PHP編 - Webアプリ開発定番言語をあえてコマンドラインで実行する
第18回 続・X Window System編 - あえてメジャーではないツールキットを使う
第17回 続・Perl編 - さらに深くPerlの世界を探ってみる
第16回 DOSのアセンブラ編 - システムコール、CON、標準出力を使い分ける
第15回 BASIC編 - 故きを温ねて新しきを知る
第14回 Webアプリケーション開発のはじめの一歩 - CGI編
第13回 C言語からの拡張も簡単な開発効率の高さがポイント - Tcl/Tk編
第12回 今まで試した言語でソケットプログラミング - ネットワークサーバ編
第11回 プログラミングの自由度が高いシンプルなオブジェクト指向言語 - Ruby編
第10回 X Window System編 - ツールキットごとに異なるプログラム
第9回 Python編 - フレキシブルなオブジェクト指向スクリプト言語
第8回 sed編 - 荒ワザを駆使して生まれるマニアックなHello World
第7回 Java編 - アプリケーションとアプレットのコーディングの違い
第6回 Perl編 - 意外!?に多芸多才なスクリプト言語
第5回 アセンブラ編 - OSごとに微妙に異なるスタイルを使い分ける
第4回 awk編 - 軽量シンプルな高速スクリプト
第3回 C++編 - iostreamライブラリを効果的に使う
第2回 シェルスクリプト編 - echoとprintf、そしてそれ以外のコマンドを試す
第1回 C言語編 - プログラマの"マストアイテム"の基本テクニックをマスターする

もっと見る



転職ノウハウ

あなたが本領発揮できる仕事を診断
あなたの仕事適性診断

シゴト性格・弱点が20の質問でサクッと分かる!

「仕事辞めたい……」その理由は?
「仕事辞めたい……」その理由は?

71%の人が仕事を辞めたいと思った経験あり。その理由と対処法は?

3年後の年収どうなる? 年収予報
3年後の年収どうなる? 年収予報

今の年収は適正? 3年後は? あなたの年収をデータに基づき予報します。

激務な職場を辞めたいが、美女が邪魔して辞められない
激務な職場を辞めたいが、美女が邪魔して辞められない

美人上司と可愛い過ぎる後輩に挟まれるエンジニアの悩み

人気記事

一覧

イチオシ記事

新着記事

美味しさは、飲んでみないとわからない - 全自動エスプレッソマシンを試せる「デロンギ 表参道」オープン
[07:00 9/30] スマホとデジタル家電
ねこのはなしをしようか 第26回 猫用おやつ
[07:00 9/30] 趣味
『モーツァルト音楽王』アマチュア枠優勝の女子高生に注目「スゲーうまい!」
[07:00 9/30] エンタメ
市川由衣、第1子出産に喜び「愛おしくてたまらない」「お母ちゃん頑張る!」
[07:00 9/30] エンタメ
小児科医が回答! 子どもの病気、危険のサイン 第5回 熱性けいれんの対処法は?
[07:00 9/30] ライフスタイル

求人情報