我是perl的新手,因此对perl脚本编写知之甚少。 我有两个文件test1.pl和testfinal.pl。
testfinal.pl
for loop{
$var = $_;
my $out = `perl test1.pl -p $var`;
}
test1.pl
Foo();
sub Foo(){
# I want to get $var from testfinal.pl so that I can perform some functions of that perticular varaible.
$elt = `mkdir $var`;
}
我检查了一些链接,但是我发现要导出我需要以“.pm”格式(testfinal.pm)生成文件,这是不可能的,因为我需要获得最终输出但执行testfinal.pl。
任何人都可以帮我快点。请...
答案 0 :(得分:2)
Pathak介绍了一些通过文件系统传递信息的好方法,但我也注意到您已通过命令行传递$var
。 test1.pl
应该已经在@_
中提供了该信息,特别是$_[1]
。
示例:
Foo();
sub Foo(){
$elt = `mkdir $_[1]`;
}
或更好
Foo($_[1]);
sub Foo{ #prototype deleted, probably should stay that way...
my $dir = shift;
$elt = `mkdir $dir`;
}
为了更清晰地处理命令行参数,GetOpt::Long
模块是核心。
如果你没有参与发射炮弹的话。 perl可执行文件的第二个实例,用于将2个文件作为单个程序运行的其他一些approches是关键字use
和require
。 (有关详细信息,请查看perldoc
。)这些方法允许您共享包变量或直接将参数传递给目标子程序。
答案 1 :(得分:1)
我建议您按照perlmod
和Exporter
中的说明创建一个模块。
以下演示了如何使用您的设置执行此操作:
MyModule.pm
:
package MyModule;
use strict;
use warnings;
use Exporter qw(import);
sub Foo {
my $var = shift;
print "mkdir $var\n";
}
testfinal.pl
:
use strict;
use warnings;
use MyModule qw(Foo);
my @array = (...);
for my $var (@array) {
my $out = Foo($var);
}
另请注意,perl具有本机mkdir
功能,因此无需向系统发出该功能。