-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;ます。


それでは、あなたの質問に進みましょう。私の理解が正しければ、コマンド ライン経由で 1 つのプロセスに値を渡し、同じスクリプトをパラメーターなしで実行してその値を取得する必要があります。

あるプロセスから別のプロセスに変数を渡そうとさえしなかったので、それが機能しないことは驚くべきことではありません。2 つのプロセスが同時に存在することはないため、ファイル システムなどのどこかに値を保存する必要があります。

#!/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 に答える