我制作一个简单的perl脚本来检查网址是否已启动,您可以通过txt文件检查网站。所以我的文本文件是list.txt,第一行包含https://google.com。这是非常简单的脚本,但是当我尝试运行它时会给我这个错误吗? Undefined subroutine &main::head called at test.pl line 7.
这是脚本的代码。
#!/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"; } }
如何使此脚本有效?
答案 0 :(得分:2)
此错误特别意味着 - 有一个名为head
的函数 - 您正在第7行调用。
并且它不存在。
没有人能够弄清楚它应该做什么。你在那里得到它的事实意味着你已经从某个地方复制了你的代码 - 问他们。
我会提供一条建议 - 始终在一段代码的开头打开use strict;
和use warnings;
。
看起来有点像这段代码只是试图浏览一个URL列表并测试它们是否可以检索。但它正在做一些最好的风格(并且在最坏的情况下不会起作用):
open
应该是open ( my $target_list, "<", $ARGV[0] );
。 $path
/
$target
,$target//
结束perltidy
#!/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);
。 有了这些东西,你的代码可能看起来像这样:
{{1}}
答案 1 :(得分:0)
短期修复似乎是删除对未定义head()
子例程的调用。它似乎没有做任何有用的事情(因为你还没有定义它),它会导致程序死亡。
从长远来看,你应该弄清楚为什么要调用那个并定义正确的子程序。