我有一个脚本我试图从另一个脚本调用,将信息从正在调用的脚本传递给调用脚本。当我使用do或要求它运行但没有传递该值。
离。
我在调用的脚本底部有以下行
打印“$ hold IS VALUE \ n”;
打印出hold值。
然后我用:
启动调用脚本要求'acc_option.pl'; 打印“HOLD PASSED IS $ hold \ n”;
但变量hold不打印。
什么是调用此脚本的最佳方式,而不是将所有内容放在一个长长的页面上?
答案 0 :(得分:3)
你已经开始了正确的道路,但仍有一段距离。您应该使用模块和use
语句,而不是代码和require
语句。您应该尝试阅读perldoc perlmod
和perldoc perlmodlib
,但一般要点是:
将脚本视为骨架,将功能视为充实骨架。
这是一个简单的模块和使用它的脚本:
ExampleModule.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;
example.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";
答案 1 :(得分:3)
这取决于$ hold的声明方式。
如果它是词法声明(使用“my $ hold ...”),那么你无法直接获取它 - 它只能在called_script.pl的范围内访问。
如果它是动态范围的(本地$ hold,或者我们的$ hold)那么你应该能够通过在它前面声明它的包前面来获取它(所以如果它在“package Foo;”你可以得到它为$ Foo :: hold“)。
那说......
您通常不希望在脚本之间传递变量。在全局变量中存储状态可能会导致一些讨厌的调试会话。
作为第一步,你可能想要在子例程中封装访问$ hold,所以在called_script.pl中你有类似的东西:
sub is_on_hold { return $hold };
它会在调用时返回$ hold(我假设$ hold是某种布尔状态指示符。如果它没有以适当的意图显示你的子程序的方式: - )
如果你描述一下你如何尝试使用$ hold更详细的话,那么民间可能会就更好的方式提供一些更具体的建议。