Perl noob,未定义的子程序?

时间:2015-02-19 00:58:48

标签: perl

我制作一个简单的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"; } }

如何使此脚本有效?

2 个答案:

答案 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}}并使用它重新格式化您的代码。相信我,从长远来看,这会让生活更轻松。
  • 不要在循环的每次迭代中创建新的useragent。这是多余的。

有了这些东西,你的代码可能看起来像这样:

{{1}}

答案 1 :(得分:0)

短期修复似乎是删除对未定义head()子例程的调用。它似乎没有做任何有用的事情(因为你还没有定义它),它会导致程序死亡。

从长远来看,你应该弄清楚为什么要调用那个并定义正确的子程序。