我的期望: 我必须使用以下命令将第一个参数的值发送到调用 perl.pl 文件的所有文件。
./perl.pl 1
使用以下文件读取该文件:(perl.pl)
#!/usr/bin/perl
package Black;
use strict;
use warnings;
#subroutines
sub get_x();
#variables
our $XE = -1;
my ($param1, $param2, $param3) = @ARGV;
my $x = get_x();
sub get_x()
{
$XE = $param1;
return $XE;
}
exit;
然后我编写了另一个脚本,它根据 perl.pl 的输入(0 或 1)执行一些代码。 该文件是 ./per.pl,我从 Linux 终端调用,如下所示:./per.pl 这是我为其编写的代码:
#!/usr/bin/perl
require "perl.pl";
my $xd = Black::get_x();
if ($xd ==1){
print $xd;}
else {
print "5";
}
退出;
但这就是我编写这些命令时得到的结果:
./perl.pl 1
我尝试打印它,它打印 1...在本例中从代码中删除了打印内容
./per.pl
现在我什么也没得到。我希望将 1 打印出来,但没有打印出来
提前致谢
最佳答案
在我们开始之前,您不可能获得您所说的输出,因为当 require
执行模块时,您告诉进程exit
,因此永远不会到达 Black::get_x()
。将 exit;
更改为 1;
。
现在回答你的问题。如果我理解正确的话,您希望通过命令行向一个进程传递一个值,并通过执行不带参数的相同脚本来获取该值。
您甚至没有尝试将变量从一个进程传递到另一个进程,因此它不起作用也就不足为奇了。由于这两个进程甚至不同时存在,因此您需要将值存储在某个位置,例如文件系统。
#!/usr/bin/perl
use strict;
use warnings;
my $conf_file = "$ENV{HOME}/.black";
my $default = -1;
sub store {
my ($val) = @_;
open(my $fh, '>', $conf_file) or die $!;
print $fh "$val\n";
return $val;
}
sub retrieve {
open(my $fh, '<', $conf_file)
or do {
return $default if $!{ENOENT};
die $!;
};
my $val = <$fh>;
chomp($val);
return $val;
}
my $xd = @ARGV ? store($ARGV[0]) : retrieve();
print("$xd\n");
关于linux - Shell 中的 Perl 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17139946/