私のforeachループをサブルーチンsub mybits
に変換したいと思います。私はこれを適切に呼び出すのではなく、それをサブとして設定していると確信しています。は、perlサブルーチンから呼び出された変数を出力できません
私がしたいのは、私がforeach部分をテストし、データを取得できる3つの変数のいずれかであるサブルーチンから値を返します。
このメッセージは見つかりませんでした。 Can't modify non-lvalue subroutine call
私の変数のいずれかを取得するにはどうすればいいですか($dir, $fname, $fsize)
?
コード:
my $out;
mybits (my $dir)=$out;
print mybits($dir);
print "This is mybits: $out\n";
sub mybits
{
foreach my $file(@{ $data->{file} })
{
#my($dir, $fname);
my($dir, $fname, $fsize);
if($file->{path} =~ /^(.*)\/([^\/]+)$/)
{
$dir = $1;
$fname = $2;
$fsize = $file->{size};
}
else
{
$dir = "";
$fname = $file->{path};
}
#print "This is the DIRECTORY: $dir\n";
#print "This is the FILE: $fname\n";
#print "This is the FILE SIZE: $fsize\n";
}
}
あなたは 'strict'と' use warnings'を使いますか?さらに、 'mybits'が何かを返すようには見えません。また、 'mybits($ dir)'の値を初期化されていないスカラに代入し、 'print mybits($ dir)'が何かを生成することを期待するのはなぜですか? –
はい、私はmesgで私の質問を編集しました。ありがとう。 – cjd143SD
エラーメッセージは、サブルーチンの戻り値を別のスカラーに代入しようとしていることを意味します。あなたがしようとしていることを説明してください。 –