-1

我的期望:我必须使用以下命令将第一个参数的值发送到所有调用 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 但不

提前致谢

4

1 回答 1

5

在我们开始之前,你不可能得到你说你得到的输出,因为你告诉进程exit何时执行模块require,所以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");
于 2013-06-17T03:20:18.203 回答