此脚本从下载的网页中删除网址。我对这个脚本有一些麻烦 - 当我使用"my $csv_html_line = @_ ;"
然后打印出"@html_LineArray"
- 它只是打印出"1's"
.当我替换 "my $csv_html_line = @_ ;"
"my $csv_html_line = shift ;"
脚本工作正常。我不知道"= @_" and shift
之间有什么区别——因为我认为在不指定某些内容的情况下,在子例程中,从 Shift 移位"@_".
#!/usr/bin/perl
use warnings;
use strict ;
sub find_url {
my $csv_html_line = @_ ;
#my $csv_html_line = shift ;
my @html_LineArray = split("," , $csv_html_line ) ;
print "@html_LineArrayn" ;
#foreach my $split_line(@html_LineArray) {
# if ($split_line =~ m/"adUrl":"(http:.*)"/) {
# my $url = $1;
# $url =~ tr/\//d;
# print("$urln") ;
# }
#}
}
my $local_file = "@ARGV" ;
open(my $fh, '<', "$local_file") or die "cannot open up the $local_file $!" ;
while( my $html_line = <$fh>) {
#print "$html_linen";
find_url($html_line) ;
}
这就是上面打印的内容。
1
1
1
1
1
1
1
1
1
1
1
1
这工作正常 - 它使用移位而不是"@_"
#!/usr/bin/perl
use warnings;
use strict ;
sub find_url {
#my $csv_html_line = @_ ;
my $csv_html_line = shift ;
my @html_LineArray = split("," , $csv_html_line ) ;
#print "@html_LineArrayn" ;
foreach my $split_line(@html_LineArray) {
if ($split_line =~ m/"adUrl":"(http:.*)"/) {
my $url = $1;
$url =~ tr/\//d;
print("$urln") ;
}
}
}
my $local_file = "@ARGV" ;
open(my $fh, '<', "$local_file") or die "cannot open up the $local_file $!" ;
while( my $html_line = <$fh>) {
#print "$html_linen";
find_url($html_line) ;
}
my ($csv_html_line) = @_ ;
您编写代码的方式@_
在标量上下文中评估并获取其长度(元素数)。 正如你所指出的,
my $csv_html_line = shift;
之所以有效,是因为 shift
运算符获取列表并删除并返回第一个元素作为标量。
你需要
my ($csv_html_line) = @_ ;
因为将数组分配给标量将返回其长度(带有一个参数为 1)