人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlでa.txtとb.txtを結合しall.txtにしたいと思い
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.

というエラーが出てしましました。
どうすればテキストファイルを結合することができるでしょうか?


●質問者: takanii
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● iwaim
●25ポイント

system関数を使えばcatなども実行できます。しかし、Perlでちゃんとファイルをopenしたりエラー処理を入れたりした方がいいんじゃないかなあ。

#!/usr/bin/perl

my $cat_bin = '/bin/cat';

system("$cat_bin a.txt b.txt > all.txt");

takaniiさんのコメント
指定されたパスが見つかりません。と出て来ました おそらく何かをインストールしないとだめのようです。

2 ● oil999
●25ポイント

外部コマンド実行は $ ではなく、バッククォートです。
以下のようにしてみてください。

#!/usr/bin/perl
`cat a.txt b.txt > all.txt`

oil999さんのコメント
Windows環境で実行しているのでしたら、下記のようにしてください。 >|perl| `copy a.txt+b.txt all.txt` ||<

3 ● a-kuma3
●25ポイント
$ 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> はプロンプトのつもりです。


4 ● JULY
●25ポイント

'cat' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出ます

ということは、Windows 上でやってますね。

while (<>) {
 print $_;
}

上記コードでいけるはず。

元の cat を使っているコードを何を見て書いたのか分かりませんが、cat は UNIX 系 OS にあるコマンドです。で、UNIX 系 OS 上で cat を使う事を考えると、質問文は

ということになります。


JULYさんのコメント
あっ、a-kuma3 の追記と被ってしまった
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ