itochin2の日記(仮)

主に備忘録。Perl、MySQL、Unity、開発管理などについて情報を残していきたい。

perlのstateキーワード

そんなものがあるなんて今日初めて知った。

perlを3年近く業務で使っておきながら、
「初めてのPerl」を未読だからこんな事に・・・

変数にstateキーワードをつけると、変数に永続性が付与される。
CとかJavaで言うところのstatic的な感じ。

サンプルのソースコード

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

sub greet {
	my $current = shift;
	state $last = "";
	if ($last eq "") {
		print "Hi $current! You are the first one here!\n";
	} else {
		print "Hi $current! $last is also here!\n";
	}
	$last = $current;
}

greet("Fred");
greet("Barney");

=pod
# 結果
Hi Fred! You are the first one here!
Hi Barney! Fred is also here!
=cut


ポイントとしては、use 5.010;を使うこと。
使わないとsyntax errorが発生する。
Global symbol "$last" requires explicit package name at ex04-4.pl line 7.


いまいち使いドコロが思いつかないけど、
そんなのもあるんだなーくらいに覚えておこう。