電子書籍の厳選無料作品が豊富!

UTF-8で下記スクリプトを書いて実行すると、
$yy年$mo月$dd日 にあたる部分が表示されず、($day)$hh:$mm:$ss の部分しか表示されません。
------------------------------------
#!/usr/bin/perl

use utf8;
use Encode;

&get_date();
print "Content-type: text/html\;charset=utf-8\n\n";
print encode('utf8',"$date");
exit;

sub get_date {
($ss,$mm,$hh,$dd,$mo,$yy,$day)= localtime(time);
$day = ("日","月","火","水","木","金","土")[$day];
$yy = $yy+1900;
$mo++;
if ( $mo < 10 ) { $mo = "0$mo"; }
if ( $dd < 10 ) { $dd = "0$dd"; }
if ( $hh < 10 ) { $hh = "0$hh"; }
if ( $mm < 10 ) { $mm = "0$mm"; }
if ( $ss < 10 ) { $ss = "0$ss"; }
$date = "$yy年$mo月$dd日($day)$hh:$mm:$ss";
}
------------------------------

EUCコードでスクリプトを書いてencodeなど不要な部分を変更した場合は$yy年$mo月$dd日の部分も表示されます。
また、上記
 $date = "$yy年$mo月$dd日($day)$hh:$mm:$ss";
の部分を下記のように変更すると表示されますが...
--------------------------
$date = $yy;
$date .="年";
$date .= $mo;
$date .="月";
$date .= $dd;
$date .="日";
$date .="($day)$hh:$mm:$ss";
--------------------------

なぜ一括してダブルクォートで囲むと表示されないのでしょうか?
今まではEUCでスクリプトを書いておりました。UTF8に翻弄されております...
どうぞよろしくお願いいたします。

A 回答 (4件)

Perlはあまり良く知らないのですが


use utf8;
とすることで変数名に日本語を使えるようになるのではないでしょうか
そのせいで$yy年 という変数として処理されているのでは
PHPなら
"${yy}年${mo}月${dd}日($day)$hh:$mm:$ss";
とするのですがPerlはどうでしょうか

*PHPでは最初から変数に日本語が使えるのでよくこの間違いをやっていました
    • good
    • 0
この回答へのお礼

"${yy}年${mo}月${dd}日($day)$hh:$mm:$ss"
とすることで問題なく表示できました!
ありがとうございます!

お礼日時:2008/10/29 09:13

sprintf使うなら0パディングはsprintfにやらせた方がすっきりすると思いますよ。



sub get_date {
($ss,$mm,$hh,$dd,$mo,$yy,$day)= localtime(time);
$day = ("日","月","火","水","木","金","土")[$day];
return sprintf("%d年%02d月%02d日(%s)%02d:%02d:%02d", $yy+1900,$mo+1,$dd,$day,$hh,$mm,$ss);
}


> 今はまだEUCでスクリプトを書く方が安全なのでしょうか?
私がperlを使い始めたのはperl5.8以降からなので
ずっとUTF-8でperlコードを書いてますが特に困ったことはないですね。
今までEUCで書いてた人がどう思うかは知りませんが。
    • good
    • 0
この回答へのお礼

ありがとうございます!
>UTF-8でperlコードを書いてますが特に困ったことはないですね。
そうなんですね...ということは私の勉強不足ですね...精進します!

お礼日時:2008/11/11 09:17

UTF8は時々こういうことありますね。


日本語の正規表現とかもうまく動かなかったりします。

もうこれはしょうがないと諦めて、問題が生じたら逐一処置するしかないですね。

こんなコードではうまく動きました。
$date = sprintf("%s年%s月%s日($day)$hh:$mm:$ss", $yy, $mo, $dd);
    • good
    • 0
この回答へのお礼

どうもありがとうございます!
そうなんですね...今はまだEUCでスクリプトを書く方が安全なのでしょうか?

お礼日時:2008/10/29 08:55

$yy年 = 2008;


print $yy年;
とか書いてエラー無く実行できるか確認してみては
    • good
    • 0
この回答へのお礼

ほんとですね!$yy年を変数とみなすのですね...
勉強になりました!ありがとうございます!

お礼日時:2008/10/29 09:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!