Perlチェッカーのメッセージでお手上げです。
[上に]
[前に]
[次に]
Hiw
1999/11/29(月) 01:01:35
Perlチャッカーで文法直しをしているのですが、
どうしてもお手上げなところがありました。
forech ($start .. $end) {
if (!$lines[$_]) { last; }
($no,$name,$date,$url,$mail,$com,$host) = split(/<>/, $lines[$_]);
if ($url) { $url = "<a href=\"http://$url\" target=_top>Home</a>\n"; }
if ($mail) { $mail = "<a href=\"mailto\:$mail\">Mail</a>\n"; }
print <<"EOM";
<blockquote>
[$no] Name: $name ($date) [$url , $mail]
<blockquote>
$com
</blockquote>
</blockquote>
<hr width=5 height=5><br>
EOM
}
■74行目〜92行目の場所です
-- チェッカーのメッセージ
syntax error at bbs.cgi line 76, near "if" syntax error at bbs.cgi line 92, near "}"
(Might be a runaway multi-line << string starting on line 83) bbs.cgi had
compilation errors.
お手上げです。
誰かご解答願います。
J.Naka
1999/11/29(月) 01:05:27
>syntax error at bbs.cgi line 76,
>line 92,
76行目って何処だ? 92行ってどこよ?
提示コードに行番号つけとかないと、、、っとっとと。
Hiw
1999/11/29(月) 01:12:51
>■74行目〜92行目の場所です
って書いておきましたけど...。
一番上が74
一番下が92です。
B-Cus
1999/11/29(月) 01:19:06
> syntax error at bbs.cgi line 76, near "if"
「76行目で文法エラー。if の近く」
forech でなくて foreach なんでない?
> syntax error at bbs.cgi line 92, near "}"
> (Might be a runaway multi-line << string starting on line 83) bbs.cgi had
「92行目で文法エラー。} の近く。
おそらく83行目から始まる << の終端である EOM が見付からないからだろう」
EOM の前後に空白が入っていないかチェック。
J.Naka
1999/11/29(月) 01:20:52
あっごめん。読解ミス(^^;
しいて言えば、文章サブタイトルの、
■74行目〜92行目の場所です
は、その文章の先頭(ヘッダ)に付けるのが読み取りやすいかと。
そして、
>-- チェッカーのメッセージ
は、同じ場所に、サブタイトルとして同一な形として、
>■チェッカーのメッセージ
とするのが、文章全体のフォーマットが統一されていて更に読み取りやすいかなと感じました。
#と、苦しい後づけ言い分けをするJ.Nakaでした(^^;;;
Hiw
1999/11/29(月) 01:25:55
J.Nakaさん、B-Cusさん、ありがとうございます。
さっそく試してみますね。
Hiw
1999/11/29(月) 01:35:55
>「76行目で文法エラー。if の近く」
>forech でなくて foreach なんでない?
直しました。
でも、、メッセージ消えないです(T−T)
>> syntax error at bbs.cgi line 92, near "}"
>> (Might be a runaway multi-line << string starting on line 83) bbs.cgi had
>「92行目で文法エラー。} の近く。
>おそらく83行目から始まる << の終端である EOM が見付からないからだろう」
EOM の前後に空白が入っていないかチェック。
チェックしましたが、、空白等は見つかりません...(汗)
ふじ
1999/11/29(月) 02:50:30
上記のソース、コピー & ペーストして、
一行目の forech を foreach に替えたものを test.pl として、
perl -wc test.pl
としたら
test.pl syntax OK
でした。ので、原因は他のところかも。
この部分、まるごとコメントアウトしたら他の場所でエラー出ませんか?
ふじ
1999/11/29(月) 02:53:09
あ、一応うちの環境は、
$ perl -v
This is perl, version 5.005_03 built for i586-linux
(以下略)
です。
J.Naka
1999/11/29(月) 03:43:12
当方環境は、
This is perl, version 5.003_07
です。
Jperl -c test.pl
でエラー無し。
74行目の、foreachの使い方は、
foreach ($start .. $end) {
でなく、
foreach $i (@lines){
では?
そして、$linesは@linesなのでは?
#foreach ($start .. $end) って使い方あったのかな?(^^;
ふじ
1999/11/29(月) 03:52:27
>#foreach ($start .. $end) って使い方あったのかな?(^^;
あります。foreach は for と等価ですから。
foreach ($start .. $end)
は
for ($start .. $end)
for ($_ = $start; $_ <= $end; $_++)
と同じですね。
# $start < $end として。
J.Naka
1999/11/29(月) 04:02:22
>あります。foreach は for と等価ですから。
あっあるのね。エラーでないし、あるはずです(^^;
で、冒頭スクリプトに、
$start=0;$ned=5;
をスクリプト先頭に追加してみましたが、print文は動作しないですね、つまり1ループも実行していないということになる。ん?何故?
ちゃいパパ
1999/11/29(月) 11:28:25
J.Nakaさんへ
>ん?何故?
$ned=5;は$end=5;の間違えだから?
ふじさん同じ方式で、
4.0.1.6 と 5.004_04 で syntax OKでした!
andi
1999/11/29(月) 13:00:45
ヒアドキュメントの下って1行空けが必要なのでは。
便乗じいさんR
1999/11/29(月) 16:25:18
便乗ですまぬが、「Perlチェッカー」はどのようにして手に入るのか、この哀れな爺に教えてもらえまいか?
J.Naka
1999/11/29(月) 22:03:38
>$ned=5;は$end=5;の間違えだから?
あっっ(^^;;
B-Cus
1999/11/29(月) 22:34:54
> ヒアドキュメントの下って1行空けが必要なのでは。
「空行が必要なのでは?」という意味なら、必要ないです。
「EOMの後には改行コードが必要なのでは?」という意味なら、その通りです。
# が、EOM の後に } があるので、改行コードは既にあるんでしょう。
> 「Perlチェッカー」はどのようにして手に入るのか
perl -c スクリプトファイル
-c は実行せずに文法チェックを行うオプション。
ただ、普通に実行するときも文法チェックは行われてます。
あと、J.Naka さんへ。ローカルで試して、本を読んで、
十分考えてから発言しましょうよ。
金銀ぱーるくん
1999/11/29(月) 23:15:56
perlチェッカー? そんなものあるんすか?
僕にも下さい。 支払いは月賦でお願いします。
ふじ
1999/11/30(火) 01:48:48
> perl -c スクリプトファイル
ちょっと補足。
perl -wc スクリプトファイル
ってやると、詳細な(Warning も含めた)メッセージが出ます。
スクリプト中で一度しか使ってない変数なども警告してくれるので
$end を $ned ってタイプミスした場合も気づきやすくなります。
便乗じいさんR
1999/11/30(火) 08:52:26
>perl -c スクリプトファイル
>perl -wc スクリプトファイル
Telnet上で、打ち込めばいいわけじゃな。
世の中に、こんなに便利なものがあるとは。長生きするもんじゃのう。
B-Cus殿、ふじ殿、親切に教えて下すって頭が下がる思いですたい。
andi
1999/11/30(火) 08:55:57
どこかで -d でデバッグできるって読んだような。
試したこと無いですけど。
J.Naka
1999/12/01(水) 01:47:41
>あと、J.Naka さんへ。ローカルで試して、本を読んで、
>十分考えてから発言しましょうよ。
その通りです。(_ _)反省中
Hiw
1999/12/01(水) 20:49:10
[[解決]]
Perlチェッカーの話ですが、
http://www.kent-web.com/support/faq1.html#9
正しくは文法チェッカー、といったところでしょうか。
===
間をあけていた間に随分議論が進んでいたようですね。
とりあえず、ここには解決チェックをしておきます。
まだ実際のところ解決していませんが、
もういちど、初めから作り直してみます。
[上に]
[前に]
[次に]