Perl Hackers Hub
第7回 新人さんのための仕事で使えるPerl基礎知識(2)
変数
Perlには混乱を招きやすい表現が多々あり,
(2)
use strictとuse warnings
「Perlはコードがわかりにくくなる」
use strict
ワンライナー以外のプログラムに関してはusestrict;
宣言をすることが推奨されています。これは,
use strict;
$var = 1; # エラー
use warnings
新規でコードを書く際にはuse warnings;
宣言をすることが推奨されています。これにより,
小飼弾さんの
スコープ制御
スコープとは,
レキシカルスコープ宣言とグローバル宣言
Perlでは,
my
my宣言した変数は,
{
my $var = 1;
}
print $var; # エラー
local
local宣言した変数は,
my %h = ( var => 'foo' );
{
local $h{var} = 'ok';
print $h{var}; # ok
}
print $h{var}; # foo
our
our宣言した変数はグローバル変数としてプログラム全体に対して定義され,use vars
と等価だと考えられており,
package SampleApp;
use strict;
use warnings;
our $VARIABLE = 1;
別の場所からグローバル変数にアクセスする際には,$名前空間::変数名
でアクセスします。省略した際にはデフォルトでmainというパッケージ名
package SampleApp2;
$SampleApp::VARIABLE;
よく使われる特殊変数
Perlには,
ここではよく使われる特殊変数を紹介します。
$_
$_
は非常によく使われる特殊変数です。デフォルト変数とも呼ばれ,
次の例では,$_
を表示させています。
my @array = ('cat', 'dog');
foreach ( @array ){
print 'array is: ' . $_ . "\n";
}
上記のコードは配列の中の要素を1つずつ取り出したものをデフォルトとして,
array is: cat
array is: dog
@_
@_
は,@_
から受け取りの際に一度代入することは,
sub foo {
my($x, $y) = @_;
print "$x, $y\n";
}
foo(1, 2);
実行結果は次のようになります。
1, 2
$@
$@
は,$@
を使うことで実現します。Perl組み込み関数のdieがJavaなどのthrowに該当しており,
evalには主に2種類の用途があります。
1つめは,
my $code;
for my $name ('foo', 'bar') {
$code .= qq/sub $name { print "this is $name\n" }/;
}
eval $code; # fooとbar
foo(); # tis is foo
bar(); # this is bar
2つめは,$@
にエラーメッセージを格納します。evalを使うことによって,
eval{
die 'エラーです'; # 例外が発生
};
if( $@ ){
print "Error: $@\n"; # $@にエラーメッセージが入る
}
なお,try {} catch {}
構文を使って例外処理を書くことができます。
use Try::Tiny;
try {
die 'クリティカルなエラーです';
} catch {
warn "エラーです: $_";
}
擬似シグナル
Perlでは,__
や__
といった疑似シグナルもサポートしています。ここにコードを指定すると,
次のコードを実行すると,die 'foo'
と同様の挙動になります。
local $SIG{__WARN__} = sub { die $_[0] };
warn 'foo';
バックナンバー
Perl Hackers Hub
- 第72回 初学者に伝えたい Perl学習の勘所 ―勉強会を10年運営して培ったノウハウ(2)
- 第72回 初学者に伝えたい Perl学習の勘所 ―勉強会を10年運営して培ったノウハウ(1)
- 第71回 ISUCONの実装から最近のPerlを学ぶ ―わかりやすく変更しやすいコードを実現する考え方と方法(2)
- 第71回 ISUCONの実装から最近のPerlを学ぶ ―わかりやすく変更しやすいコードを実現する考え方と方法(1)
- 第70回 Raisin入門 ―Rest APIマイクロフレームワークを使ってみよう!(2)
- 第70回 Raisin入門 ―Rest APIマイクロフレームワークを使ってみよう!(1)
- 第69回 表形式データを操るUNIXシェル型Perl製コマンド群 ―ビッグデータ時代の汎用的なデータ整備と分析のために(2)
- 第69回 表形式データを操るUNIXシェル型Perl製コマンド群 ―ビッグデータ時代の汎用的なデータ整備と分析のために(1)
- 第68回 他言語のライブラリをPerlに移植する(2)
- 第68回 他言語のライブラリをPerlに移植する(1)