0

別のスクリプトから呼び出しようとしているスクリプトがあり、呼び出されているスクリプトからの情報を呼び出し元のスクリプトに渡します。do または require を使用すると実行されますが、値は渡されません。

元。

呼び出しているスクリプトの下部に次の行があります

script.plと呼ばれる

print " $hold IS VALUE\n";

hold の値を出力します。

次に、呼び出しスクリプトを次のように開始します。

calling_script.pl

'acc_option.pl' が必要です。print "HOLD PASSED IS $hold\n";

しかし、変数 hold は印刷されません。

すべてを 1 つの長いお尻のページに入れる代わりに、このスクリプトを呼び出す最良の方法は何ですか?

4

2 に答える 2

3

あなたは正しい道を歩み始めましたが、まだ道は遠いです。useコードとステートメントではなく、モジュールとステートメントを使用する必要がありますrequire。と を読んperldoc perlmodでみる必要がありますperldoc perlmodlibが、一般的な要点は次のとおりです。

  1. プロセスを関数に分解する
  2. それらの機能を何をするかでグループ化する
  3. 関数のグループをモジュールに入れる
  4. モジュールを使用して関数を呼び出すスクリプトを作成する

スクリプトをスケルトンと考え、関数をスケルトンの肉付けと考えてください。

以下は、単純なモジュールとそれを使用するスクリプトです。

ExampleModule.pm:

package ExampleModule;

use strict;
use warnings;

use base 'Exporter';

our @EXPORT_OK  = qw/do_first_thing do_second_thing do_third_thing/;

sub do_first_thing {
    my ($thing) = @_;

    return $thing + 1;
}

sub do_second_thing {
    my ($thing) = @_;

    return $thing + 1;
}

sub do_third_thing {
    my ($thing) = @_;

    return $thing + 1;
}

1;

例.pl:

#!/usr/bin/perl

use strict;
use warnings;

use ExampleModule qw/do_first_thing do_second_thing do_third_thing/;

my $thing = 0;

$thing = do_first_thing($thing);
$thing = do_second_thing($thing);
$thing = do_third_thing($thing);

print "$thing\n";
于 2010-08-24T23:30:35.590 に答える
3

$hold がどのように宣言されたかによって異なります。

レキシカルに宣言されている場合 (「my $hold...」を使用)、直接アクセスすることはできません。called_script.pl のスコープ内でのみアクセスできます。

それが動的にスコープされている場合 (ローカルの $hold または $hold)、宣言されたパッケージを前に付けることで取得できるはずです (したがって、「package Foo;」にある場合は $ として取得できます)。 Foo::hold")。

それは言った...

一般に、スクリプト間で変数を渡すのをいじりたくはありません。状態をグローバル変数に保存すると、厄介なデバッグ セッションが発生する可能性があります。

最初のステップとして、サブルーチン内で $hold へのアクセスをカプセル化したい場合があるため、 called_script.pl には次のようなものがあります。

sub is_on_hold { return $hold };

これは呼び出されたときに $hold を返します (ここでは、$hold はある種のブール状態インジケーターであると想定しています。そうでない場合は、意図を明らかにする適切な方法でサブルーチンに名前を付けてください:-)

$hold をどのように使用しようとしているのかをもう少し詳しく説明すると、タスクをより適切に実行する方法について、より具体的なアドバイスを提供できる可能性があります。

于 2010-08-24T23:35:38.257 に答える