Perl специальная переменная «@_» в подпрограмме не работает

Этот скрипт извлекает URL-адреса с загруженной веб-страницы. У меня были некоторые проблемы с этим сценарием - когда я использую"my $csv_html_line = @_ ;" а затем распечатать"@html_LineArray" - это просто распечатывает"1's", Когда я заменяю"my $csv_html_line = @_ ;" с"my $csv_html_line = shift ;" скрипт работает нормально. Я не знаю, какая разница между"= @_" and 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_LineArray\n" ;
    #foreach my $split_line(@html_LineArray) {
    #    if ($split_line =~ m/"adUrl":"(http:.*)"/) {
    #        my $url = $1;
    #        $url =~ tr/\\//d;
    #        print("$url\n")  ;
    #    }
    #}
}



my $local_file = "@ARGV" ;
open(my $fh, '<', "$local_file") or die "cannot open up the $local_file $!" ;
while( my $html_line = <$fh>) {
    #print "$html_line\n";
    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_LineArray\n" ;
    foreach my $split_line(@html_LineArray) {
        if ($split_line =~ m/"adUrl":"(http:.*)"/) {
            my $url = $1;
            $url =~ tr/\\//d;
            print("$url\n")  ;
        }
    }
}



my $local_file = "@ARGV" ;
open(my $fh, '<', "$local_file") or die "cannot open up the $local_file $!" ;
while( my $html_line = <$fh>) {
    #print "$html_line\n";
    find_url($html_line) ;
}

Ответы на вопрос(2)

Ваш ответ на вопрос