我想将我的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