2024/02/13 22:13:39

Hello, Perl

perl の第一歩。「Hello, Perl」の出力

コード

perlで「Hello, Perl」という文字列を出力します。
以下の内容のファイルを保存してください。

[ hello_perl.pl ]

#!/usr/bin/perl
use strict;
use warnings;

my $string = 'Perl';

print "Hello, $string\n";

hello_perl.pl に実行権限を与えて $ chmod 0700 hello_perl.pl 実行すると、"Hello, Perl" と表示されます。

1行ずつ解説

#!/usr/bin/perl

この行は、shebang(シェバング/シバング)といわれます。

shebang は、スクリプトが何言語で書かれているかをあらわしており、今回は perl への path を書いています(/usr/bin/perl)。
hello_perl.pl を実行するマシンの perl が /usr/bin ではなく、 /usr/local/bin にインストールされていれば 「#!/usr/local/bin/perl」になります。

perl がどこにインストールされているかは、which コマンドで調べることができます $ which perl
多くの場合は、/usr/bin/perl でも /usr/local/bin でも実行できるようにエイリアスが置かれているかと思います。

use strict;

strict プラグマを use します。
use 関数は、require という関数に似ていて、どちらも引数に与えられたモジュール(ライブラリ)をロードします。主に、require が実行時なのに対して、use はコンパイル時にロードされるという点で異なります。
また、プラグマというのは、コンパイルオプションのようなもので、今回の strict プラグマはコードを行儀よくしたり、ちょっとしたミスを教えてくれたりする便利なプラグマなので、いつも宣言するようにします。

use warnings;

warnings も strict と同じプラグマです。
warnings プラグマは、エラーにはならないけれど、あまりよろしくない事態について警告を発してくれるこれまた便利なプラグマなので、いつも宣言するようにします。

例えば、以下のコードを実行します。

#!/usr/bin/perl
use strict;
use warnings;

my $string;

print "Hello, $string\n";

$string の中身が定義されていないことによって、以下のような警告が出ます。

Use of uninitialized value in concatenation (.) or string

未定義値を print しようとしているので、「それって意図と違いませんか?」と言ってくれているわけです。
これはいち例でしかありませんが、いろいろな場面で似たような警告を発してもらえます。気が効きます。

my $string = 'Perl';

スカラー変数 $string を my 関数で局所化しつつ、「Perl」という文字列を代入しています。

文字列を表す時はダブルクオートかシングルクオートで囲みますが、今回はダブルクオートである必要がないのでシングルクオートで囲みました。ダブルクオートで囲むと中の変数が展開されたり「\n」などが改行と認識されますが、シングルクオートではそれがありません。つまり、それらの処理が不要な分シングルクオートの方が速く実行できます(何百万回も積み重ねない限り大した差にはなりませんが)。また、シングルクオートで囲むことによって、中に変数が含まれたりしないということを暗に示すことができます。好みもありますが、個人的には使い分けて書いた方が良いと思っています。

なお、my は変数を局所化する関数です。
例えば、ここで、my を付けずにいると「Global symbol "$string" requires explicit package name」と言って怒られます。これは、前述した strict プラグマがグローバル変数を検知して指摘してくれています。変数のスコープについては別の機会に説明しますが、うっかりグローバルで書いてしまわないようにちゃんと働いてくれています。

print "Hello, $string\n";

"" ダブルクオートで囲まれた中の変数 $string は展開され、"Hello, Perl\n" が print されます。

\n は特殊記号で改行コードLF です。なお、CRは \r タブは \t となり、他にもいろいろとありますが、ここでは説明を省略します。
print 関数は、なにも指定がなければ STDOUT に出力します。

Welcome to Perl World. Enjoy!

サイト内検索