私はPerlで小さなスクリプトを作成しました。これは本当に新しいものです。私は、与えられた引数を見て、与えられた引数にディレクトリツリーを作成するスクリプトを用意しなければなりません。スクリプトのこの部分は機能します。 2番目の部分(ネストされたif文)は、引数を与えないと表示されず、選択したディレクトリを入力するように求められます。私は入れ子のif文が$ファイル入力のためにうんざりしていると信じていますが、私は何が間違っているのか完全にはわかりません。これはおそらく単純なものですが、解決策を見つけることができませんでした。ヘルプとヒントをお寄せいただきありがとうございます。 STDIN
を介して入力されているものも改行を持っているので、PerlスクリプトIF文を実行している小さな問題があります。
#! /usr/bin/perl
if ($#ARGV == -1)
{
print "Please enter default directory:";
my $file=<STDIN>;
if (-d $file)
{
chdir $file;
system("mkdir Data");
system("mkdir Data/Image");
system("mkdir Data/Cache");
print "Structure Created";
}
else
{
print "Directory does not exsist";
}
}
else
{
chdir $ARGV[0];
system("mkdir Data");
system("mkdir Data/Image");
system("mkdir Data/Cache");
print ("Structure Created");
}
print ("\n");
に
$dir
名を含め、あなたがそれを読んだ後、 ''ムシャムシャ食べる($ファイル)が必要です。STDIN'は、改行が付属しており、 '-d $ file'」doesnの'経由で入力されると何'filename \ n'を見つけてください(本当に' filename'です)。また、 '@ ARGV'の最後の要素のインデックス(' $#ARGV'は何ですか?)について '-1'をテストするのはなぜですか? '@ ARGV'配列が空であるかどうかをテストしているなら' if(not @ARGV) 'と書くことができます – zdim' $ file'変数を使ってディレクトリ名を保持すると、混乱するかもしれません。引数の先頭からスクリプトの先頭を取り出します。 'if(!@ARGV){die" argsが指定されていません... \ n "; }; $ my dir = $ ARGV [0]; '。 ''は、プログラムが実行されている間に、コマンドラインで送信したものをすべて取ります。これはコマンドラインのargs( 'ARGV')とは異なります。 (@zdimは、改行を取り除く方法をコメントで示しました)。いくつかの最適化がありますが、完全な答えを定式化するのに十分な情報はありません。 –
stevieb
@steviebコマンドラインで何も提出されていなければ、 'STDIN'入力を提供することを意味すると思います。そうであれば、 '@ ARGV'が空のときに' die'することはできません。私はそれが少し不明であることに同意する。 – zdim