我试图镜像将要保存文件和文件夹的网站。
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";
答案 0 :(得分:2)
您应该使用Data::Diver
模块
eval
由于单引号,您尝试执行@{$hash$var}
这不是有效的Perl。
如果你把它写成
push eval "\@{\$hash$var}", "somedata"
然后eval
将起作用,但它将评估哈希元素main
中数组的内容,这是一个空的值列表。这意味着你的电话会变成
push( ( ), "somedata")
或只是
push "somedata"
这是毫无意义的
这是一件特别不愉快的事情。为什么你认为你需要它?