如何将1个文件中的变量导出或使用到perl中另一个文件中的函数?

时间:2014-07-26 10:14:10

标签: perl

我是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。

任何人都可以帮我快点。请...

2 个答案:

答案 0 :(得分:2)

Pathak介绍了一些通过文件系统传递信息的好方法,但我也注意到您已通过命令行传递$vartest1.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是关键字userequire。 (有关详细信息,请查看perldoc。)这些方法允许您共享包变量或直接将参数传递给目标子程序。

答案 1 :(得分:1)

我建议您按照perlmodExporter中的说明创建一个模块。

以下演示了如何使用您的设置执行此操作:

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功能,因此无需向系统发出该功能。