• ベストアンサー

perl6 で perl5 の <> は、どのように書くのでしょうか。

perl6 で perl5 の <> は、どのように書くのでしょうか。 例えば perl5 の while (<>) { print; } は perl6 だとどう書けばよいのでしょうか。

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

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

for =$*ARGS { .say }

参考URL:
http://www.learningperl6.com/Chapters/11.filehandles.html
t-okura
質問者

お礼

Rakudo 2010.02 release (#26 "Amsterdam") が出たので、 再度 for =$*ARGS { .say } を試して見ました。 2010-01 release (#25 "Minneapolis") だと No applicable candidates found to dispatch to for 'prefix:=' というエラーだったのが、 Confused at line 2, near "for =$*ARG" というエラーに変わりました。 また、2010-01 release (#25 "Minneapolis") で通っていた my %a=( 1=>"Jan",2=>"Feb",3=>"Mar",); for keys %a { say "$_ => $a{$_}" } が、Could not find non-existent sub &keys とエラーになりました。 perl5.6 くらいにテストされているという文章を見たように 思うのですが rakudo perl6 は、まだまだ開発初期のような感じ です。 おとなしく4月のリリースを待つことにします。 参考 URL ありがとうございました。

t-okura
質問者

補足

回答と参考URLの紹介 ありがとうございます。 こんなに立派なサイトがあったのに全然見つけることが できませんでした。 rakudo star が近々公開されるというので、勉強を始めました。 rakudo-2010-01.tar.gz から作成した $ perl6 --version This is Rakudo Perl 6. を使っているのですが、教えていただいた for =$*ARGS { .say } (参考URL にも載っていますね)を cat.pl として実行すると $ perl6 cat.pl cat.pl No applicable candidates found to dispatch to for 'prefix:=' in Main (file src/gen_setting.pm, line 324) となります。 これは 2010-01 版の Rakudo Perl 6 が不完全なものだから でしょうか。勉強に使うとしてもまだまだ未完成なのでしょうか。

関連するQ&A

  • perlでtelnetクライアント

    perlで、ソケットを使って、telnet(ポート23)クライアントを作ろうと思いました。 telnet接続すると、まず最初にサーバー側から"login: "とプロンプトが出力されるので、それを読もうとしたところ、プロンプトなので改行が来ないためか、待ち状態になりました。 while(<socket>) print $_; while(read(socket, $c, 1) print $c; の2パターン試しましたが、どちらも1文字も読めませんでした。 改行が来なくても、読込みができるテクニックはありますでしょうか。 perlのスキルは、他人のを参考にしないと作れない程度の素人同然です。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perl ファイルハンドルを閉じずに反映させる

    お世話になっております。 Perl(プログラミング言語)について質問です。 openメソッドで開いたファイルハンドルに print文で書込みを行った際に、ファイルハンドルをcloseせずに、 書込みを反映させる方法はありますか? 開くのはファイルではなく(他プロセスへの)パイプです。 $| を設定してもだめでした (例としては perl1.pl , perl2.pl を用意する <perl1.pl> $i; open(OUT,"| perl2.pl") while(1){ print OUT "$i" $i++  } close(OUT) <perl2.pl> while( <STDIN> ) { print $_; } のようなことをやりたいです。 上記のようなスクリプトを実行したところ、 perl1のcloseが実行されるまで反映されません。 これをcloseをせずに反映させる方法はありますでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlで1~10まで全部足す。簡単に書くには?

    題名のとおりなんですが。 Perlで1~10まで全部足すのに、 1番簡単に書いたらどんな感じなるでしょうか? (一回足すごとに結果は表示) 私は全然浮かばず、 $a = 1 print "$a\n" $b = $a + 1 print "$b\n" $c = $b +2 " …続く こんな感じのお粗末なものを書きました。 whileやforを使えばもっと簡単に書けると思いますが、 どなたかご存知でしたら教えてください。

    • ベストアンサー
    • Perl
  • perl -wc

    telnet を利用できないユーザーの為に、ブラウザ上でPerl(CGI)の文法チェックができるようにしています。 フォームでファイル名を入力させ、チェックプログラム内で "perl -wc $filename" を実行して結果を出力させるだけだと思い作成したのですが、実行結果を受け取ることができません。 apache のログには実行結果が書かれているのでコマンドは正常に動作しています。  open(IN, "perl -wc $filename |");  while (<IN>) {   print $_; と  $ret=`perl -wc $filename`; でやってみましたがダメでした。 どなたかご教授願います。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perl ファイルが開かない

    perl でファイルを開きたいのですが、なぜか開けません。何がいけないのでしょうか?エラーは、 Name "main::file" used only once: possible typo とでます。エラーを見るかぎり、コードに間違いはなく、apacheかOSに何か原因があるのではないかとおもうのですが、悩んでいます。OSはubuntuです。 #!/usr/bin/perl -w open (IN, "<test.txt") or die ("Could not open $file: $!"); while(<IN>) { print "$_"; } close (IN);

  • Perlの乱数について

    RedHat Linux ES2.1のperl v5.6.1にて初めてのプログラムを書いているものです。 Oracle9iに格納するDATE型のデータを大量に乱数にて作成しようとしているのですが、うまくいきません。 作成しようとしているのは2004年度か2005年度のある日付です(30日まで)。 例) 04-01-30 05-07-12 04-09-28 04-12-11 質問1.下のプログラムだと、年度が00,01,02,03,04,05の値をとり得てしまう。これを04か05に限定するにはどうすればよいか。 質問2.月・日が1桁の場合は0を頭につけたい。下のプログラムでは05-12-1となったり04-5-30となったりしてしまう。 #!/usr/bin/perl $a = 1; while($a < 100000){ $year_rand = int(rand(5)); $month_rand = int(rand(12))+1; $day_rand = int(rand(30))+1; print "0$year_rand-"; print "$month_rand-"; print "$day_rand,"; print "\n"; $a = $a+1; } 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perlの書き方

    現在、windowsでwebサーバ構築しています。iisを使用しています。 その中で、perlを使用して、送信ボタンを押すとメールを配信するものを作成しています。 $to='******@******.co.jp'; if(open(ML,"○○○○○○")){ print ML "From: $email \n"; print ML "To: $to \n"; print ML "Bcc: $bcc \n"; print ML "Content-type: text/plain;\n"; この○○には、何といれたらいいのでしょうか? また単純な質問で申しないのですが、先頭部分は、 #!C:\Perl\bin\perl.exe でいいのでしょうか?

    • ベストアンサー
    • Perl
  • perlプログラム内で中間ファイルを利用するには

    perlプログラムについて 処理1 の アウトプットデータを用いて、処理2を行うというのを1つのperlのプログラム内で実装したいと考えています。 処理1のアウトプットファイルの書き出しに時間がかかり 処理2が先に動き、ファイル読み込みできずに終わってしまいます。 処理1のアウトプットファイル書き出しが終了を待ってから、処理2を実施したいのですが、 どのように記載すればよいのでしょうか? 例) perl program.pl AAA > BBB program.pl 内 open(OUT1,"> program1_work"); open(ARG,$ARGV[0]); while(<ARG>){ 処理1 print OUT1 "XXXXXX"; } close(ARG); open(ARG1,OUT1); while(<ARG1>){ 処理2 print "XXXXXX"; } close(ARG1);

  • perlの ¥033 不具合エラー

    以下のスクリプトを実行すると"Unrecognized character \033 at ./tools/aaa.pl line 5."というエラーが出てしまいます。やりたいことは 文中の "//! aaa"を全て削除して出力するというものです。何が悪いのでしょうか? ----------------- #! /usr/bin/perl while(<>){ if(m#//\s*\!.*#){ $_ =~ s#//\s*\!.*\n##; print "AAA: $_\n"; }else{ print $_; } } -------------- 以上、宜しくお願い致します。

専門家に質問してみよう