linux - Shell 中的 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();

  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/

相关文章:

linux - 使用sed脚本扩展环境变量

linux - 我在哪里可以获得 linux 内核的 api,它可以让我访问内核中的信息

linux - 暂停后在 Xorg 环境中恢复键盘设置

css - 在文件中提取特定的 css 类

perl - 如何在两次 open 调用之间保持环境变量?

mysql - 为什么通过脚本创建表与通过 INSERT SELECT 创建表的时间有如此巨大的差异?

perl - 使用 Moose::Meta::Class 或 Class::MOP::Class 生成正确的动态类

linux - Apache 2.4.7/搜索权限

linux - 如何在 Linux 的 shell 脚本中保留打开的文件句柄?

bash - 将 stdout 通过管道传输到 Perl 时,如何让它打印换行符?