Невозможно получить любой из $dir
, $fname
или $fsize
в вашей подпрограмме, как написано, поскольку их область действия ограничена вашей подпрограммой (в частности, циклом foreach
в вашей подпрограмме). Вам нужно, чтобы ваша подпрограмма возвращала эти значения. Однако, поскольку они используются снова и снова в цикле, вы, вероятно, захотите вернуть все возможные значения. Возможно что-то вроде:
sub mybits
{
my $return_dirs=[];
my $return_fnames=[];
my $return_fsizes=[];
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};
}
#Put the relevant data into the array references that we'll return later.
push @$return_dirs,$dir;
push @$return_fnames,$fname;
push @$return_fsizes,$fsize;
}
return [$return_dirs,$return_fnames,$return_fsizes];
}
my $values=mybits();
foreach(@$values)
{
print join(",",@$_) . "\n";
}
Примечание: Все это предполагает, что остальная часть кода в mybits
на самом деле работает правильно ... учитывая, что OP предоставил только часть кода (например, мы не знаем, что $data
Я не могу гарантировать, что это так.