1

Linuxでは、フォルダ内のすべてのファイルを連結するために、次のことができます。file=FOLDER/*; cat $file > ONEFILEこれをperlスクリプトでも使用したいので、次のようにコーディングしました。system("file=$folder/*"); system("cat \$file > $out");

しかし、perlプログラムを実行すると機能しません。$outにはファイル名が。として割り当てられましたmy $out = "outfile";。出力ファイルは常に0ビットを維持します。ここで何が問題なのですか。

4

2 に答える 2

1

最初の行は$file、新しいシェル プロセスで環境変数を設定します。

system "file=$folder/*";

2 行目は、新しい環境で新しいシェル プロセスを開始します。

system "cat \$file > $out";

これは新しいプロセスであり、新しい環境であるため、以前の$file変数は設定されていないため、実際には次のシェル コマンドを実行しています。

cat  > $out

代わりにこれを行います:

system "cat '$folder/'* > '$out';

注 - パスにスペースが含まれている可能性がある場合に役立つ引用符も追加しました。ただし、すべての形式の入力に対して安全というわけではないため、最初に検証せずにユーザー入力をそのコマンドに渡さないでください。

于 2012-06-26T17:22:20.960 に答える
0

execPerlではどうですか?

perl -e 'exec "cat *.txt"'

于 2012-06-26T17:22:12.117 に答える