Windows版Perlの標準入力&標準出力

このQ&Aのポイント
  • Windows2000にActive Perl5.6をインストールしています。標準入力をそのまま標準出力するプログラムを作成しましたが、うまく動作しません。
  • DOSコマンドの使い方が間違っているのか、Perlの書き方が間違っているのか、またはWindows版のPerlではこのような使い方はできないのか、教えてください。
  • プログラムソース(c:\test.pl)と実行方法、データ(data.datの中身)も記載します。予定通りに動作させるための解決策を教えてください。
回答を見る
  • ベストアンサー

Windows版Perlの標準入力&標準出力

Windows2000にActive Perl5.6をインストールしています。 標準入力をそのまま標準出力するプログラムを作っているのですが うまく動きません。 DOSコマンドの使い方が間違っているのか、Perlの書き方が間違って いるのか、それともWindows版のPerlではこのような使い方はできない のか、教えてください。 ■プログラムソース(c:\test.pl) while(<>){ print; } ■実行方法 c:\data.dat|test.pl>data2.dat ■データ(data.datの中身) こんにちわ ※実行するとdata2.datにdata.datの内容がCOPYされる 予定なのですが、正しく動きません。

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yfujii
  • ベストアンサー率17% (14/80)
回答No.1

perlにパスが通っているとして下記2点が問題です 1.perlが動いてません   perlのインタプリタが動いてません 2.標準入力に入っていません dosのtypeコマンドを使用します でコマンドプロンプトから type data.dat | perl test.pl > data2.dat でどうでしょうか

umetakahashi
質問者

お礼

教えていただいた、 type data.dat | perl test.pl > data2.dat でうまくいきました。ありがとうございます!! パイプ(|)の後でperlを実行させるためには、"perl"が 必要なのですね。ありがとうございました。

関連するQ&A

  • Linux上でtcpdumpの出力をperlで処理したいと考えています

    Linux上でtcpdumpの出力をperlで処理したいと考えています。 下記のようにtcpdumpの標準出力をperlの標準入力で受け取ろうとしても tcpdumpの処理が終わらないためパイプ(|)経由でperlにデータが渡ってきません。 [test.pl] $|=1; foreach(<>){ print "--- $_"; } exit; Linux上のコマンド tcpdump -l | ./test.pl これをteeに置き換えるとtcpdumpの出力はリアルタイムに表示されます。 tcpdump -l | tee a.log 質問:perlでteeを作ることはできますか?

    • ベストアンサー
    • Perl
  • 標準出力と標準エラー出力を時系列にファイルへ

    例として、perlなどで、(test.plとします)  print "stdout1\n";  print STDERR "STDERR1\n";  print "stdout2\n";  print STDERR "STDERR2\n";  print "stdout3\n";  print STDERR "STDERR3\n"; このように、標準出力と、標準エラー出力が混在した状態の処理があった場合、 コマンドプロンプト(Windows2000)にて、 C:\>test.pl とすると、 stdout1 STDERR1 stdout2 STDERR2 stdout3 STDERR3 のように時系列に出力されますが、これをログファイルに取ろうとして、 C:\>test.pl 1>log.txt 2>&1 とすると、 C:\>cat log.txt STDERR1 STDERR2 STDERR3 stdout1 stdout2 stdout3 のように、標準エラー出力が先に吐き出されてしまいます。 これを画面出力時と同様に時系列で取れるようにしたいのですが、どのようにすれば良いでしょうか? 単純なことで困っています。よろしくお願いします。

  • Windows版でPL/Perlが使いたいのですが可能でしょうか?

    WindowsのPostgreSQL8.2.24を使っています。PL/Perlが使いたいのですが、インストール時に、以下のようになります。 データベース・コマンド・エラー: ERROR; could not load library "C:/Program Files/PostgreSQL/8.2/lib/plperl.dll": The specified module could not be found. Windows版でPL/Perlが使いたいのですが可能でしょうか?

  • WindowsでPerlをする際,1行目の"#! ~"はどのように?

    Perlの参考書・本等ではプログラムファイルの第1行目は #! /usr/local/bin/perl という1行がよく有りますが,WindowsXPを用いている場合では,この1行をどう直せばよいのでしょうか? #! (perl.exeが存在するフォルダのパス) でよいのでしょうか? 私はWindowsXPを使っていて,この1行を使わずにプログラムを書いておりましたので,この1行の意味がよく分かりません。 ある参考書には,"#!はその行に書いたコマンドに,ファイルの残りの部分を渡して実行すると言う性質を持っている"と有りました。だから,試しにfile1.plとfile2.txtを準備し, file1.plの中身  #! (perlの存在するフォルダのパス)\perl.exe  while(<STDIN>){   print;  } file2.txtの中身  hello world として,コマンドプロンプトで file1.pl < file2.txt としたのですが正しく動作しませんでした.(perl file1.pl < file2.txt と入力した場合は正しく"hello world"となりました)

    • ベストアンサー
    • Perl
  • Win98+PWS4.0でPERLが動作しません

    Win98+PWS4.0でPERLを動作させたいのですがうまくいきません。 ディレクトリ「Inetpub」-「scripts」へTEST.PLという名で 下記のプログラムを入れて実施すると、 --------------- #!/user/local/bin/perl print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<p>\n"; print "Hello\n"; print "</p>\n"; print "</body>\n"; print "</html>\n"; --------------- HTTP エラー 403 403.1 許可されていません: 実行アクセスは許可されていません --------------- と出ます。 レジストリの設定は ".pl",".cgi”とも「C:\Perl\Bin\Perl.exe %s %s 」として、 PWSの設定で「scripts」は”実行””スクリプト”とも チェエク入をれています。 「wwwroot」のルートへ置いても同様のエラーが発生します。 DOS窓から「Inetpub」-「scripts」内でTEST.PLとすると 正常に表示はされます。 PerlへのパスもC:¥から実行確認済みです。 何が原因と考えられるでしょうか。 宜しくご教示お願いします。

  • 画面確認 (超初心者)

     Perlで学ぶゼロからのプログラミングと言う本で perlの勉強を始めたばかりです。 p20に「実行し終わると、DOS窓はすぐにとじてしまうので、結果を画面で 確認することはできません。画面確認するためには、つねに入力待ちで待機 させておくなどの工夫が必要です。」 とありますが、待機のさせかたがわかりません。 たしかにメモ張で作ったtest.plはすぐにとじてしまってみえません。 またDOS窓からC:\data_pl>test.plを実行するとコマンドまたは ファイル名が違います。とでます。しかしたしかにメモ帳でつくった test.plはdata_plフォルダの中にあります。 ちなみに cd data_plまではうまくいきます。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 標準出力先を変える

    Windowsで作ったソフトをコマンドラインから実行するときに例えば prog.exe > test.txt のようにするとリダイレクトして標準出力をtest.txtにすることは出来ますが、これをプログラムの中で変えることは出来ますか?

  • perlの起動法

    perl起動法について質問なのですが、 perlでファイルを作り、一番上に#!/usr/bin/perlと書いて、perl.plという名前で保存しました。 ターミナルで$chmod 755 perl.pl $./perl.pl とコマンドをうったのですが、print文で書いたhello worldというが表示されません。 でもperl perl.plとコマンドを打つと実行されます。 一体この違いはなんなのでしょうか?学校の課題で、どうしても./perl.plとして実行させなければならないので是非解答お願いします。

    • ベストアンサー
    • Perl
  • Perlの超初心者です。

    Perlの超初心者です。 mac osXを使っています。テキストエディットで、#! /usr/bin/perl print "hello world!\n";と書いてperl-test.plと保存しました。そしてターミナルを起動してperl-test.plとタイプしたのですが、-bash: perl-test.pl: No such file or directoryとなってしまいます。 試しにターミナルでperl -le "print 'hello world';"とタイプするとhello worldとかえってきました。 perl-test.plはfinderのデスクトップに保存してあります。いったいどうすればperl-test.plのファイルを実行できるのですか? 教えて下さい。よろしくお願いします。

  • 出力ファイル名を標準入力から指定したい。

    初心者ですが、よろしくお願いします。 perlで、data.txtというファイルへ $protein の 情報を書き込みたい場合、以下のようにすれば 良いということはわかるのですが、 open(OUT, ">data.txt"); print OUT $protein; では、出力ファイルを data.txtではなく、プログラムを 実行させる度に標準入力から指定してやることはどうやれば できるのでしょうか?

    • ベストアンサー
    • Perl