Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell中的Perl编程_Linux_Perl - Fatal编程技术网

Linux Shell中的Perl编程

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文件的文件

./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。