我有一个脚本我试图从另一个脚本调用,将信息从被调用的脚本传递给调用脚本。当我使用 do 或 require 时,它会运行但不传递值。
前任。
我正在调用的脚本底部有以下行
称为脚本.pl
print "$hold 是值\n";
这打印了我持有的价值。
然后我开始调用脚本:
调用脚本.pl
需要'acc_option.pl';print "HOLD PASSED IS $hold\n";
但变量保持不打印。
调用此脚本而不是将所有内容放在一个长页面上的最佳方法是什么?
你已经开始走上正确的道路,但仍有一段路要走。您应该使用模块和use
语句,而不是代码和require
语句。您应该尝试阅读perldoc perlmod
and perldoc perlmodlib
,但一般要点是:
将脚本视为骨架,将功能视为充实骨架。
这是一个简单的模块和使用它的脚本:
示例模块.pm:
package ExampleModule;
use strict;
use warnings;
use base 'Exporter';
our @EXPORT_OK = qw/do_first_thing do_second_thing do_third_thing/;
sub do_first_thing {
my ($thing) = @_;
return $thing + 1;
}
sub do_second_thing {
my ($thing) = @_;
return $thing + 1;
}
sub do_third_thing {
my ($thing) = @_;
return $thing + 1;
}
1;
例子.pl:
#!/usr/bin/perl
use strict;
use warnings;
use ExampleModule qw/do_first_thing do_second_thing do_third_thing/;
my $thing = 0;
$thing = do_first_thing($thing);
$thing = do_second_thing($thing);
$thing = do_third_thing($thing);
print "$thing\n";
这取决于如何声明 $hold。
如果它是在词法上声明的(使用“my $hold...”),那么你不能直接得到它——它只能在 called_script.pl 的范围内访问。
如果它是动态范围的(本地 $hold 或我们的 $hold),那么您应该能够通过在它下面声明的包作为前缀来获取它(因此,如果它在“package Foo;”中,您可以将它作为 $ Foo:: 持有”)。
那就是说...
您通常不希望在脚本之间传递变量。在全局变量中存储状态会导致一些讨厌的调试会话。
作为第一步,您可能希望将访问 $hold 封装在子例程中,因此在 called_script.pl 中您有类似的内容:
sub is_on_hold { return $hold };
调用时将返回 $hold (我在这里假设 $hold 是某种布尔状态指示符。如果它没有以适当的意图揭示方式命名您的子例程:-)
如果您更详细地描述您如何尝试使用 $hold,那么人们可能会就更好地完成任务的方式提供一些更具体的建议。