Perl noob,未定义的子例程?
我正在制作一个简单的perl脚本,用于检查url是否打开,您可以通过txt文件检查网站。所以我的文本文件是list.txt,在它包含的第一行。这是一个非常简单的脚本,但当我试图运行它时,它会给我这个错误<代码>未定义的子例程&main::在test.pl第7行调用head。 这是脚本的代码Perl noob,未定义的子例程?,perl,Perl,我正在制作一个简单的perl脚本,用于检查url是否打开,您可以通过txt文件检查网站。所以我的文本文件是list.txt,在它包含的第一行。这是一个非常简单的脚本,但当我试图运行它时,它会给我这个错误未定义的子例程&main::在test.pl第7行调用head。 这是脚本的代码 #!/usr/bin/perl use LWP::UserAgent; system(($^O eq 'MSWin32') ? 'cls' :'clear'); head(); my $usage = " \
#!/usr/bin/perl
use LWP::UserAgent;
system(($^O eq 'MSWin32') ? 'cls' :'clear');
head();
my $usage = " \nperl $0 <list.txt>\n perl $0 lista.txt";
die "$usage" unless $ARGV[0];
open(tarrget,"<$ARGV[0]") or die "$!";
while(<tarrget>){
chomp($_);
$target = $_;
my $path = "/";
print "\nTarget --> $target\n";
my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });
$ua->timeout(10);
$ua->agent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31");
my $req = $ua->get("$target/$path");
if($req->is_success) {
print "\n [!] Yay website works! \n \n"; } }
#/usr/bin/perl
使用LWP::UserAgent;
系统($^O eq'MSWin32')?'cls':'clear');
头();
my$usage=“\nperl$0\n perl$0 lista.txt”;
除非$ARGV[0],否则为“$usage”;
打开(目标“$target\n”;
my$ua=LWP::UserAgent->new(ssl\u opts=>{verify\u hostname=>0});
$ua->超时(10);
$ua->agent(“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.31(KHTML,类似Gecko)Chrome/26.0.1410.63 Safari/537.31”);
my$req=$ua->get($target/$path”);
如果($req->is\u成功){
打印“\n[!]Yay网站工作!\n\n”}
如何使此脚本工作?此错误具体表示您在第7行调用了一个名为
head
的函数。
但它并不存在
也没有人知道它应该做什么。事实上,你已经把它放在那里了,这意味着你从某个地方复制了你的代码——问问他们
不过,我将提供一条建议-始终在代码开头启用使用严格;
和使用警告;
这段代码看起来有点像是在尝试运行URL列表并测试它们是否可检索。但它所做的一些事情在最好的情况下是糟糕的(在最坏的情况下也不会起作用):
- 没有严格的警告
实际上应该是open
open(我的$target_列表),一个短期修复方法似乎是删除对未定义的
子例程的调用。它似乎没有做任何有用的事情,而且(正如您没有定义的那样)它正在导致您的程序死亡head()
从长远来看,您可能应该找出调用的原因,并定义正确的子例程。您正在调用一个函数,
,但尚未提供该函数的定义。您希望发生什么?什么是head
head()在Perl,和任何语言一样,在测试之前最多应该写两行或三行,只有当你知道你有一个坚实的基础时,才能写更多的代码。
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; my ($filename) = @ARGV; unless ( $filename and -f $filename ) { print "Usage: $0 <filename>\n"; exit; } my $useragent = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 } ); $useragent->timeout(10); $useragent->agent( "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31" ); open( my $target_file, "<", $filename ) or die $!; while ( my $target = <$target_file> ) { chomp($target); print "Fetching $target\n"; my $request = $useragent->get("$target/"); if ( $request->is_success ) { print "\n [!] Yay website works! ($target)\n \n"; } } close($target_file);