2017-04-12 4 views
1

リモート検索コマンドを実行しようとしていますが、ユーザーからのコマンドライン引数から値を取得するローカル変数を渡す必要があります。しかし、私は "未定義の変数"エラーが発生しています。私は次のようなことをしています:シェルコマンドでローカルperl変数を使用する

my $ssh = Net::OpenSSH->new($host); 
#I am getting a part of the $path and $pattern from command line 
#I have to look for $pattern at the $path 
my @files = $ssh->capture(q(find $path -name $pattern)); 

このコマンドは正確なパスとパターンを与えてもうまく動作しますが、変数に置き換えるとエラーになります。

答えて

2
q(find $path -name $pattern) 

リテラル文字列find $path -name $pattern、ドル記号とすべてです。

Perlにはいくつかの異なる種類の引用符があります。 ""は変数を補間します(つまり、それらの値で置き換えます)。''はそうなりません。 q()は、''と書くもう1つの方法です。あなたはqq()が欲しいです。

詳細はQuote and Quote-Like Operators in perlopを参照してください。

+0

はい、ご返信ありがとうございます。今、それは私にエラーを与えていませんが、それは一致したパターンを得ることができません。つまり、同じパターンを変数に格納するときに「find:no match」を取得していますが、commandの値を直接使用すると実行されています。 もう一度ありがとう:) – emma

+0

my $ pattern = "* 40786 *"; #これは、@ file = $ ssh-> capture2(qq(find/u1/temp -name "* 40786 *"))と書くと実行されます。 変数$パターンを使用すると戻りません# 申し訳ありませんが、愚かな質問です。私はperlには新しく、他の場所では説明を見つけることができませんでした。 – emma

+0

@emmaそれはうまくいくはずです。周囲のコードがなければ、何が間違っているか教えてもらえません。私は新しい質問をし、うまくいかない完全なプログラムを提供することをお勧めします。 – Schwern

関連する問題