(2015年版)最近使っているPerlスクリプトのひな形

(追記: 2015/02/07 )

このひな形ではwarningsが有効になっていなかったためwarningsが有効な改訂版を書きましたので、そちらもご確認ください。

(追記ここまで)

@nqounetです。

Perl入学式などで、サンプルコードなどを書く時に、ちょっとしたひな形を用意しておくと便利なので、スニペットとして用意しています。

たまたま記事を掘り返していたら、6年近く前の記事が出てきて、さすがにこれは最近じゃない、ということで更新版を書きます。

ちなみにこの記事です。

最近のPerlスクリプトのひな形

普段使用しているのはMacなので、その辺は大目に見てください。

1
2
3
4
5
6
#!/usr/bin/env perl
use utf8;
use v5.12;
use open qw/:encoding(utf-8) :std/;

use DDP {deparse => 1};

Perl入学式などで動くサンプルコードを書くときなどによく使っています。

解説

use utf8;

このファイルがUTF-8で書かれている事が条件ですが、このファイルに書かれている文字をPerlの内部文字列として扱うためのプラグマです。

これがあることによって、ファイル内に書いた日本語なども内部文字列として扱うことができます。

最もわかりやすいのは、このプラグマの有無でlengthの結果が変わってしまうところでしょうか。

1
2
3
4
$ perl -Mutf8 -le 'print length "あいうえお";'
5
$ perl -le 'print length "あいうえお";'
15

use utf8している場合は5文字、してない場合は15文字として扱われています。

コードの中に日本語がない場合でも、日本語のようなマルチバイト文字を扱うのであれば、常に書いている状態を意識しておくと、思わぬ文字化けに遭遇した場合でも対応が簡単になります。

use v5.12;

Perlのバージョン5.12以上でのみ実行できるようにします。

use v5.12は、use 5.012と指定しても同じです。

Perlは5.6からバージョンの表記方法が変わりましたが、新しい表記を利用する場合は最初にvを使用します。

また、v5.10以上を指定することで、sayなどが使えるようになります。また、v5.12以上を指定すれば、strict、~~warnings~~が自動的に有効になります。(v5.10でも有効になっていると思っていましたが、v5.12からです。)

後方互換性を確保するため、(基本的には)新しい機能は明示的に宣言しないとエラーになるようになっています。

use open qw/:encoding(utf-8) :std/;

Perlの内部文字列は、そのまま出力すると警告を受けますので、通常は出力の際にencodeする必要があります。

また、入力時はdecodeして、Perlの内部文字列にするのが基本です。

常に意識するのは良いことなのですが、ちょっとしたスクリプトを書くには面倒に感じることも多いです。

そこで、これを書いておきます。

こうしておくとターミナルとの入出力時にdecodeencodeの処理をうまい具合にやってくれます。

なお、この書き方でうまく処理できるのは標準入出力と標準エラー出力だけなので、ファイルの読み書きなどは明示的にdecodeencodeが必要です。

use DDP {deparse => 1};

これを書いておくと、変数を簡単に出力できるpという関数が使えるようになります。

以前にも紹介したことがありますが、理屈はともかく、使って便利なものは使ったほうが良いと思います。

標準モジュールとしてData::Dumperが入っているので、そちらを使うことが多いと思いますが、見やすさが断然違います。

さらに文字数も違いますので、より便利だと思います。

たまたま掘り返した記事

解説はもっと簡単に書くつもりだったのですが、小難しくなってしまいました。

ところで、このサイトの「こちらの記事も読まれています」の機能についてですが、実はただのランダム表示です。

ですが、時々ハッとするというか、ピンポイントの記事が出ることも多いので不思議なものです。

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy