Linux Shell中的Perl编程
我的期望: 我必须使用以下命令将第一个参数的值发送到所有调用perl.pl文件的文件Linux Shell中的Perl编程,linux,perl,Linux,Perl,我的期望: 我必须使用以下命令将第一个参数的值发送到所有调用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();
./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.pl0或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执行时,您会告诉流程退出,因此Black::get_x永远不会到达。改变出口;到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");
你什么也得不到?Black::get_x在被per.pl调用时总是返回undef,因此测试总是失败,所以它总是打印5。可能您没有看到输出,因为您没有打印换行符。try./per.pl;我开始误解了这个问题。更新了我的答案。你好,我真的很感谢你的回复。你能解释一下吗。就像命令所做的那样。谢谢你解释我的$conf_文件=$ENV{HOME}/.black;和我的$val=@;如果$,则返回$default!{NOENT};我想我理解了其余部分,即写入文件,然后从中读取。将/home/ikegami/.black分配到$conf_文件sub接受一个参数并将其放在$val中。//如果错误为ENOUNT file not FOUNT,则返回默认值-1。