blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_0

Perl 「 warnings プラグマ 」で怪しげな部分に 警告 を出す (-w の代替) (0x15)

Perl 「 warnings プラグマ 」で怪しげな部分に 警告 を出す (-w の代替) (0x15)

Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x15 回。

Perl プログラムには warnings プラグマを含める習慣をつけます。




Perl でプログラムに警告を出してもらう (warnings プラグマ)



バージョンが 5.6 以降の Perl では、プログラマ向けに警告を出してくれる 「warnings」 というプラグマ (Pragma) が使えます。

プラグマは、「プログラム断片」という英訳がありますが、よく意味がわかりません。

プラグマは、「Ada コンパイラに対して指示を与えるもの」との意味もあります。Ada はプログラミング言語のひとつの様です。

Perl でのプラグマも、機能としては Ada のプラグマと近い様です。ソースコード内で適宜指定されたプラグマは、Perl のコンパイラに指示を出し、コンパイルやプログラムの実行結果に反映します。

Perl のプラグマはモジュールの一種です。モジュールとは、規格に基づいて機能単位でまとめられた、交換可能な部品を指します。

モジュールは Perl の機能を拡張するため部品群と理解しています。

Perl のモジュールは CPAN (Comprehensive Perl Archive Network: 総合 Perl アーカイブネットワーク) の豊富なリストから必要なものをダウンロード出来ます。また、モジュールの自作も可能です。

なお、必要最低限のモジュールは「標準ライブラリ」として、Perl に同梱されています。warnings プラグマは「標準ライブラリ」に含まれます。

プラグマの名前は、慣習として、小文字で表記されるそうです。


warnings プラグマの指定



プラグマ (モジュール) を使う場合には、use を使います。use はそのまま「使う」と意味です。


use warnings;


warnings プラグマを使えるのは Perl 5.6 以降です。

Perl はプログラムを実行する際にソースコードをコンパイルしますが、warnings プラグマを指定すると、コンパイル時にソースコードを解析して、怪しげな部分を指摘くれる様になります。

つまり、コンパイルエラーにはならないけれども、ちょっと怪しいんじゃないか ? という部分に警告を出してくれる様になります。

例えば、「Perl スカラ変数 (0x06)」で紹介した様に、文字列を格納した変数 $str に加算を指示しても、Perl は指示された数値演算の結果を返してくれます。

$str += 2; は $str = $str + 2; の省略記法です。


$str = '1abc';
$str += 2; # 先頭の 1 以外を破棄して 2 を加算する

print "$str\n"; # 3 と表示する

$str = 'abc1';
$str += 2; # 先頭が文字の場合は数値 0 として扱う

print "$str\n"; # 2 と表示する


これは 文脈 (コンテキスト) に沿った Perl の動作なので、間違いではありません。

しかし、変数 $str には「文字列」として値を格納しているので、数値として演算してよいのか疑問を呈することが可能です。

warning プラグマを指定した場合、こうした処理に警告を出してくれます。


use warnings;

$str = '1abc';
$str += 2;

print "$str\n";


実行結果は以下の様になります。

Argument "1abc" isn't numeric in addition (+) at yourfile line 7.
3


引数 "1abc" は 数値ではありません yourfile (実行したファイル名) の 7 行目で加算されていますが.

と警告メッセージを出して、加算結果 3 を表示します。warning は、警告を出しますが、処理そのものを止めることはしません。

warnings は警告のための様々なカテゴリを持っているそうです。warnings の指定にカテゴリを組み合わせれば、細かな警告制御が可能になる様です。


warnings プラグマと -w フラグ



warnings プラグマは、コマンドラインフラグ -w やそれと等価な Perl 変数 $^W の柔軟な代替案だそうです。

以下に詳細な説明があります。

  perldoc.jp - perllexwarn

また、次のリンク先では -w ではなく warnings を使うべき理由が解説されています。

404 Blog Not Found - perl - use warnings; # -w でなくて

やはり、warnings は柔軟な指定が出来るので、これまでは -w をつかっていた場面でも、これからは warnings を使いましょうというような内容です。


0x15-> 0x16 へ



「プラグマ」や「モジュール」といった単語が出てくると、これが何を意味するのか気になって仕様がない性質です。

「モジュール」はなんとなしにイメージを持てましたが、「プラグマ」はイメージを持てませんでした。僕の頭の中では「プラズマ」のイメージが幅を利かせていたからです。

何でも完全に 100% 理解する必要があるとは思いませんが、おおよそ 51% 程度は理解していたいと思っています。

51% の目安は、調査範囲の当たりを適切に設定出来ることと、用語の相互関連性を読み取れることです。

「プラグマ」とは何かを明朗に饒舌に説明することは叶いませんが、どういう場面で、どういう意図をもって使うかという感触は得られました。あくまで「内的」な感覚なので、一般化、共有化はまだ難しい段階です。

参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。

参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」

次回 (0x16) へ続く。

過去記事 RSS










同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲