我想將我的foreach循環轉換爲子例程sub mybits
。我確定我沒有正確地調用它或將它設置爲子類。無法打印出從perl子例程調用的變量
我想要做的是從子例程中返回一個值,它是我測試的三個變量中的任何一個,並且能夠獲取數據。
得到了這個mesg。我正在使用嚴格的警告: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和使用警告?此外,它似乎並沒有顯示「mybits」正在返回任何東西。另外,爲什麼要將'mybits($ dir)'的值賦給未初始化的標量,然後期望'print mybits($ dir)'產生任何東西? – 2011-10-05 20:26:09
是的,我編輯我的問題與mesg。謝謝。 – cjd143SD
錯誤消息意味着您正試圖將子例程的返回值分配給其他標量。請解釋你正在嘗試做什麼。 – 2011-10-05 20:30:38