C言語とperl

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
march3

C言語とperl

#1

投稿記事 by march3 » 10年前

初歩的な質問ですみません。

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

sleep

Re: C言語とperl

#2

投稿記事 by sleep » 10年前

目的と合っているかどうか分かりませんが
do ~ while の { } を2重にする( {{ }} )と似たような動作になると思います。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: C言語とperl

#3

投稿記事 by みけCAT » 10年前

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)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

march3

Re: C言語とperl

#4

投稿記事 by march3 » 10年前

返信くれたお二方ともありがとうございます。
みけ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

閉鎖

“C言語何でも質問掲示板” へ戻る