私は下のコードではsub2の "未定義のサブルーチン"を取得していますが、sub1ではありません。私が手try.pl私が実行するとPerlでは、perlモジュールで "undefined subroutine"を取得するのはなぜですか?メインではないのですか?
これは...これはtry_common.pmです...
#! /usr/bin/env perl
use strict;
use IO::CaptureOutput qw(capture_exec_combined);
package try_common;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(
sub2
);
sub sub2 {
(my $cmd) = @_;
print "Executing... \"${cmd}\"\n";
my ($stdouterr, $success, $exit_code) = capture_exec_combined($cmd);
print "${stdouterr}\n";
return;
}
1;
#!/usr/bin/env perl
use strict;
use IO::CaptureOutput qw(capture_exec_combined);
use FindBin qw($Bin);
use lib "$Bin";
use try_common;
print "Running try.pl\n";
sub1("echo \"in sub1\"");
sub2("echo \"in sub2\"");
exit;
sub sub1 {
(my $cmd) = @_;
print "Executing... \"${cmd}\"\n";
my ($stdouterr, $success, $exit_code) = capture_exec_combined($cmd);
print "${stdouterr}\n";
return;
}
のperlスクリプト(try.pl)です...
% ./try.pl
Running try.pl
Executing... "echo "in sub1""
in sub1
Executing... "echo "in sub2""
Undefined subroutine &try_common::capture_exec_combined called at
/home/me/PERL/try_common.pm line 20.
私がカットした場合/貼り付けるので、これは問題のスコープのいくつかの種類のように見える "使用IO :: CaptureOutput QW(capture_exec_combined);" sub2の最初の行として動作します。 try.pl(これはsub1 OKを実行します)では必要ありませんが、perlモジュールの問題です。うーん....
ありがとうございました!
それは.PMファイルにシェバング( '#'!)の行を追加しても意味がありません。 – ikegami