ページ 11

C言語とperl

Posted: 2014年11月01日(土) 14:32
by march3
初歩的な質問ですみません。

C言語で以下のような無限ループプログラム

コード:

#include <stdio.h>
int main(void){
	int flag=0;
	do{
		puts("endless");
		continue;
	}while(!flag);
}
と同じことを perl でやりたいのですが、できず困っています。

コード:

#!/bin/usr/perl
use strict;
use warnings;
my $flag=0;
do{
	print "endless\n";
	next;
}while(!$flag);
C言語のcontinueに該当する構文はperlにないのでしょうか?
http://www.tohoho-web.com/wwwperl1.htm#next

Re: C言語とperl

Posted: 2014年11月01日(土) 16:00
by sleep
目的と合っているかどうか分かりませんが
do ~ while の { } を2重にする( {{ }} )と似たような動作になると思います。

Re: C言語とperl

Posted: 2014年11月01日(土) 21:40
by みけCAT
march3 さんが書きました:C言語のcontinueに該当する構文はperlにないのでしょうか?
http://www.tohoho-web.com/wwwperl1.htm#next
×continueに該当する構文はない
○do~whileに該当するループ構文はない
のようです。
doブロックにwhileが後置された場合は、まずdoブロックが一度実行されてから、whileの条件部が評価されます。doブロックはループではないので、後述するループ制御コマンドを用いることはできません。LABELを付ける事も出来ません。
(http://ja.wikibooks.org/wiki/Perl/%E5%8 ... C_do-until)

Re: C言語とperl

Posted: 2014年11月02日(日) 00:16
by march3
返信くれたお二方ともありがとうございます。
みけCAT さんが書きました: ×continueに該当する構文はない
○do~whileに該当するループ構文はない
のようです。
そのようですね。公式ドキュメント(perldoc)でも該当の記述を確認したので、間違いない情報だと思います。
do BLOCK はループとしては 扱われません; 従って、next, last, redo といったループ制御文はブロックから抜けたり 再開することはできません。 その他の戦略については perlsyn を参照してください。
http://perldoc.jp/func/do
また、対策も公式に書いてある方法と同じなので、{{}}で行きたいと思います。
ループ制御文は if や unless 中では動作しません。 なぜならそこはループではないからです。 しかし中かっこを二重にしてこれに対処することはできます。
http://perldoc.jp/docs/perl/5.8.8/perls ... p32Control