如何使用perl中的`eval`将数据推送到包含数组的哈希?

时间:2017-05-09 12:24:52

标签: perl

我试图镜像将要保存文件和文件夹的网站。

This one having example所以我尝试了以下

my $url = "http://localhost/mainfolder/";
my ($parent) = $url=~m/\/(\w+)\/?$/;
my %tree=(mainfolder=>[]);


folder_create($url);

sub folder_create
{
    my $url = shift;

    my $cont = get($url);

    my ($child) = $url=~m/($parent.*)/;

    $child=~s/\/?(\w+)\/?/{$1}/g;

    while($cont=~m/(<tr.+?<\/tr>)/g)
    {
        my $line = $1;
        if($line=~m/\[DIR\].*?href="([^"]*)"[^>]*>(.+?)<\/a>/)
        {
            my $sub =$1;
            $sub=~s/\///;
            print "$child\n\n";
            push ( eval'@{$tree $child}',$sub);
        }


    }

}
use Data::Dumper;
print Dumper \%tree,"\n\n\n";

1 个答案:

答案 0 :(得分:2)

更新

您应该使用Data::Diver模块

,而不是弄乱eval


由于单引号,您尝试执行@{$hash$var}这不是有效的Perl。

如果你把它写成

push eval "\@{\$hash$var}", "somedata"

然后eval将起作用,但它将评估哈希元素main中数组的内容,这是一个空的值列表。这意味着你的电话会变成

push( ( ), "somedata")

或只是

push "somedata"

这是毫无意义的

这是一件特别不愉快的事情。为什么你认为你需要它?