アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のような配列内定義サブルーチン呼び出しを作成し動作を確認しました。
次にソース2行目の「no strict;」を「use script;」に変更すると
Bareword "sub1" not allowed while "strict subs" in use at refsub_OK.pl line 4.
Bareword "sub2" not allowed while "strict subs" in use at refsub_OK.pl line 4.
Bareword "sub3" not allowed while "strict subs" in use at refsub_OK.pl line 4.
Execution of refsub_OK.pl aborted due to compilation errors.
とエラーになります。
プログラムはやはり「use script;」を記述したいのですが、「use script;」を記述
したままでエラーにならない方法がありましたらおしえてください。
perlのバージョンは5.12.3、OSはWindowsXP SP3です。
よろしくお願いします。

---ソースここから---
#!perl
no strict;
use warnings;
my @ary = (
("input1.txt", "save1.txt", sub1),
("input2.txt", "save2.txt", sub2),
("input3.txt", "save3.txt", sub3),
);
while (@ary) {
my $p1 = shift(@ary);
my $p2 = shift(@ary);
my $sub = shift(@ary);
print "p1=[$p1] p2=[$p2] sub=[$sub]\n";
&$sub("$p1", "$p2");
}

sub sub1 {
my ($p1, $p2) = @_;
print "sub1: [$p1] [$p2]\n";
}
sub sub2 {
my ($p1, $p2) = @_;
print "sub2: [$p1] [$p2]\n";
}
sub sub3 {
my ($p1, $p2) = @_;
print "sub3: [$p1] [$p2]\n";
}
---ソースここまで---

A 回答 (1件)

\&sub1


とかいうように、関数名だけ(Bareword:剥き出しの単語)ではなく、関数のリファレンスであることを明記しろ、ということでは。
    • good
    • 0
この回答へのお礼

use strict;
・・・
my @ary = (
("input1.txt", "save1.txt", \&sub1),
("input2.txt", "save2.txt", \&sub2),
("input3.txt", "save3.txt", \&sub3),
);
としてうまくいきました。
本当にありがとうございます。

お礼日時:2011/05/29 15:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!