perl環境で
#!/usr/bin/perl
$ cat a.txt b.txt > all.txt
というコードを書いて実行したのですが
Bareword found where operator expected at aa.pl line 2, near "$cat a"
(Missing operator before a?)
syntax error at aa.pl line 2, near "$cat a"
Execution of aa.pl aborted due to compilation errors.
というエラーが出てしましました。
どうすればテキストファイルを結合することができるでしょうか?
system関数を使えばcatなども実行できます。しかし、Perlでちゃんとファイルをopenしたりエラー処理を入れたりした方がいいんじゃないかなあ。
#!/usr/bin/perl my $cat_bin = '/bin/cat'; system("$cat_bin a.txt b.txt > all.txt");
外部コマンド実行は $ ではなく、バッククォートです。
以下のようにしてみてください。
#!/usr/bin/perl `cat a.txt b.txt > all.txt`
Windows環境で実行しているのでしたら、下記のようにしてください。
`copy a.txt+b.txt all.txt`
$ cat a.txt b.txt > all.txt
これは、シェルのコマンド(行頭の $ はプロンプト)なので、perl ではなくシェルに食わせます。
#! /usr/bin/sh cat a.txt b.txt > all.txt
最初の一行を perl → sh に変えたのと、行頭の $ を削除してます。
実行権限を付けるか、/usr/bin/sh で実行します。
'cat' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
どうやら、Windows 環境で動かそうとしているようなので、unix の cat コマンドのような動作をする perl スクリプトの方が、質問の答えのような気がしてきました。
while (<>) { print; }
上記の内容でテキストファイルを作ります。
ファイル名は、仮に cat.pl としておきます。
で、コマンドプロンプトから以下のように実行します。
d> perl cat.pl a.txt b.txt > all.txt
d> はプロンプトのつもりです。
'cat' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出ます
ということは、Windows 上でやってますね。
while (<>) { print $_; }
上記コードでいけるはず。
元の cat を使っているコードを何を見て書いたのか分かりませんが、cat は UNIX 系 OS にあるコマンドです。で、UNIX 系 OS 上で cat を使う事を考えると、質問文は
ということになります。
あっ、a-kuma3 の追記と被ってしまった
指定されたパスが見つかりません。と出て来ました
2013/02/24 16:25:45おそらく何かをインストールしないとだめのようです。