2016-12-20 5 views
4

私は、現在の行がファイルの目的のセクション内にあるかどうかを示すために状態変数を使って、ファイルの中央セクションを印刷するために1ライナーを使用したいと思います。しかし、私は状態変数を初期化することができません。初期化はとてもシンプルで、問題の内容がわかりません。助けてください。ありがとう。perl6状態変数を初期化できません。助けが必要

ファイルは名前TESTFILE.TXTで、次の行があります。

section 0; state 0; not needed 
= start section 1 = 
state 1; needed 
= end section 1 = 
section 2; state 2; not needed 

をそして、私のワンライナーは

cat testFile.txt | perl6 -ne ' state $x = 0; say "$x--> "; if $_ ~~ m/ "start"/{ $x=1; }; if $x == 1 { .say; }; if $_ ~~ m/ "end"/{ $x = 2; }' 

され、出力は$ x = 0の初期化を行っていないことを示しました。 :

Use of uninitialized value $x of type Any in string context. 
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful. 
    in block at -e line 1 
--> 
Use of uninitialized value of type Any in numeric context 
    in block at -e line 1 
Use of uninitialized value $x of type Any in string context. 
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful. 
    in block at -e line 1 
--> 
= start section 1 = 
1--> 
state 1; needed 
1--> 
= end section 1 = 
2--> 
2--> 

答えて

5

これは私にはバグのようです:明らかに、-nはファイルを正しく設定していませんxical環境。

回避策として、コード全体をdo { ... }、またはちょうど{ ... }で囲むなど、ブロック内のすべてをラップすることができます。

も感謝クリストフ例えば

cat testFile.txt | perl6 -ne '.say if/"start"/ff/"end" /' 
+0

、ご使用のケースに応じて、全体のことは、おそらくflip-flop operatorを使用することによって単純化することができることに注意してください!あなたがバグだと思うなら、それを報告するつもりです。私はPerl 6が本当にクールだと思っています。本当にうまくいくと思っています。 Perl6、Scheme(MIT、Racket)、Perl5、Lisp(Clojure)、その他(Python、Java、C、C++、awk、Julia、アセンブリなど) – lisprogtor

+0

なぜ状態変数を使用しても機能しないはずなので、報告してください。私はあまり好きではないいくつかのビットと作品がありますが、Perl6は本当に素晴らしい言語です。現在のところ、実際の使用方法はあまり多くありません。コンパイラのバグに遭遇するのはまだかなり簡単ですが、時間の経過とともにその状況は改善されます... – Christoph

+0

私は間違いなくバグと言いますあなたは 'state $ x // = 0'か' state $ xはデフォルト(0) 'を使います。 –

関連する問題