Bashスクリプトには、Perlに引き継ぐ必要がある変数があります。 bashスクリプトで変数$ galと$ obsidを宣言し、新しいプログラムを呼び出します。
gal=UCLA121
obsid=1896
./my_program
Perlスクリプトの先頭は、フレーズを含む画像をロードします
$ph_im = "./$gal/img/${obsid}.img";
ただし、新しいプログラムでは変数はNULLです。
シェルスクリプトの子プロセスで変数を使用可能にするには、変数をエクスポートするか、
export foo=bar
または、変数を前に付けてプログラムを呼び出すことにより
foo=bar ./my_prog.pl
どちらの場合でも、Perlスクリプト内でそれらに対してENV
を呼び出す必要があります
my $barfoo = $ENV{'foo'};
環境を使用すると、よりクリーンな方法になります。
-s
スイッチ があります。
$ cat vars.pl
#!Perl
use feature 'say';
say "foo=$foo";
say "bar=$bar";
$ echo "$foo,$bar"
123,456
$ Perl -s ./vars.pl -foo="$foo" -bar="$bar"
foo=123
bar=456
あなたがそれを好きなら
./myscript.pl 1 35
@ARGV
を使用できます。例えば。
#!/usr/bin/Perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
print "ARGV[0]=$ARGV[0]";
print "ARGV[1]=$ARGV[1]";
print Dumper \@ARGV;
例 ソース 。
これは古い例であるため、最新のスタイルを使用していない可能性があります。現在、Perlコンパイラーをセットアップしていないため、出力をテストできません。
Data::Dumper
を使用して、物事のデバッグに役立てることができます。
あなたがそれを好きなら
Perl -s ./myprogram -$gal="$gal" -$obsid="$obsid" 1 35
@ARGV
と名前付きパラメーターを混在させると、奇妙な結果が得られる可能性があることを認識してください。呼び出し方を次のように変更したい場合があります
Perl -s ./myprogram $gal $obsid 1 35
または
Perl -s ./myprogram -gal="$gal" -obsid="$obsid" -first="1" -second="35"
また、名前付きパラメーターは-gal
ではなく-$gal
であることに注意してください。 $
が何をするのかはよくわかりませんが、それなしで起こること以外の何かをする傾向があります。
Data::Dumper
は、結果が混乱する場合にデバッグに役立つことを忘れないでください。