トップページphp
1001コメント346KB

Perlコーディング初心者質問スレ Part 38

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/10/07 23:23:08ID:kiEzDCJF
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0496nobodyさん 04/11/03 15:09:23ID:???
ユリウス時間でも出してきたらどない?
0497nobodyさん04/11/03 15:24:21ID:???
>>495
> GMTにするのはgmtime使うかtimezoneいじるべきで
漏れもそう思うが、

> unix timeを9時間戻すのはよろしくないと思うよ。
これには何か理由があるのか?
049848404/11/03 15:46:43ID:???
色々返答ありがとうございました。
質問の仕方が悪かったかもです。

どうやらgoogle君に聞いてみると、Time::Localは標準ライブラリらしいです。
なのでどの環境いっても使えそうです。
重くなりそうという根拠のない理由から、できれば避けたいと書きました。
#標準ライブラリということを確定的できる情報元ってないんでしょうか…

何をしたいかというと、
0411031500という時間をcookieのexpire時間にしたいのですが、cookieではGMT
でJSTを指定できないらしいので変換をしなくてはならないのです。

>>493さんのコードちょっとむずかしすぎてまだ理解できてないです…
以下のURLのサブルーチンでunix timeにはできそうです。
http://www.ybi.co.jp/koike/qa3000/qa3165.htm
0499nobodyさん04/11/03 15:56:35ID:???
use Object; $obj->document();
http://perl.infoware.ne.jp/documents.html
0500nobodyさん04/11/03 16:07:16ID:???
>>497
うるう秒が間に入るとずれるから。ちゃんとサポートされたシステム
での話しだけど。

クッキーのexpire時間ぐらいならそう厳密じゃなくていいから
構わんと思うけどね。
0501nobodyさん04/11/03 16:41:00ID:???
>>498
5.8.4の標準ライブラリなら
http://www.perldoc.com/perl5.8.4/lib.html

確実に知りたいのなら
perldoc perlmodlib
050249704/11/03 16:41:31ID:???
>>500
d
0503nobodyさん04/11/03 16:55:54ID:???
標準ライブラリだからといって必ず使えるという保障はないわけで。
あんまりこだわる必要はないと思うけど?

それよりも、なぜにcookieのexpireで人間的日付を元にするのかが気になる。
単純に timeから30日間有効 とかにしてしまえば楽なのに。
0504nobodyさん04/11/03 17:10:11ID:???
>>494
情報ありがとう!
やはり1つの関数で勝手にファイル判別してくれるとかはないんですかね?
まぁ手動で見分けて条件分岐すればいいんでしょうけども・・・。
0505nobodyさん04/11/03 17:12:48ID:???
2chで出てるようなIDを生成したいんですが、2chがどうやって生成してるのか教えて頂けないでしょうか?
前に、そういうサブルーチンを見かけた気がするんですが検索しても見つかりませんでした。
よろしくお願いします。
0506nobodyさん04/11/03 17:13:59ID:???
>>505
crypt
0507nobodyさん04/11/03 17:17:55ID:???
>>506
いやそれは分かるんですがcryptの元の文字列をどうしてるのか知りたいのです。
0508nobodyさん04/11/03 17:24:01ID:???
>>507
確かホスト名と日付だったとおもう
0509nobodyさん04/11/03 18:31:44ID:???
>>500
なるほど、4年に一度狂う位なら問題なさそうなので、unix timeにして-9時間に
しようかと思います。

標準ライブラリは、導入されていなかったり、過去のバージョンであるかわからない
とのことなのでやっぱり使わないほうが無難な気がするので使わない方向でいきます。

>>503
なぜ、人間的日付かというと、その時間になったら掲示板に投稿できなくなるという
改造を自分でして、読みやすいから0411031700みたいな形で設定ファイルに保存
するという形をとったからです。
ここから間違いかもしれませんが…unix timeで保存した方が良かったのかもしれませんね。
#やっぱり見やすいからそうしました。
0510nobodyさん04/11/03 19:20:15ID:???
>>508
それだけだと、総当りでIPアドレス算出できるから、日ごとに更新される乱数が使われてる。
0511nobodyさん04/11/03 19:27:43ID:???
>>505
ここを探してみそ。
http://age.s22.xrea.com/talk2ch/

# 正しいID算出方法かどうかの保障はないけど。

>>504
見つけたら是非とも報告よろしくー。
051250504/11/03 21:07:28ID:???
>>511
やりたいことができました。
本当にありがとうございました。
0513nobodyさん04/11/03 22:16:22ID:???

トリップの作り方はわかったのですが、
                              ↓ここのIDはどうやって作るんでしょうか?
356 :Now_loading...774KB :04/11/03 21:01:50 ID:j7+5/dK/
誰かよろしくお願いします。
0514nobodyさん04/11/03 22:19:10ID:???
>>513
>>511のリンク先読めねーの?
0515nobodyさん04/11/04 00:33:21ID:???
配列の数を吐き出す奴ない?length(@xx)とかやってもだめだった。
0516nobodyさん04/11/04 00:43:00ID:???
>>515
スカラーコンテクストなら@xxは配列の要素数になる。
わからなければscalar(@xx)としとけば確実。
0517nobodyさん04/11/04 00:44:14ID:???
>>515
$#xx+1
またはscalar
0518nobodyさん04/11/04 00:56:38ID:???
>>517
$#xxは$[変えるとそれにつれて変わるので(要素数-1)として
使うのは危険だと習った。

$[ = 1;
@xx = (1,2);
print $#xx+1;

$[をいじったスクリプトなんて書いたことないけどね。
0519nobodyさん04/11/04 01:03:20ID:???
scalarでいいじゃん
052051504/11/04 01:27:14ID:???
みんなありがd
052151504/11/04 03:06:36ID:???
sub内だけで使用する変数ってlocal($hensuu)って宣言するんだっけ?
0522nobodyさん04/11/04 03:30:18ID:???
my
0523nobodyさん04/11/04 03:51:59ID:???
>>521
調べる気ないな・・・
0524nobodyさん04/11/04 11:55:35ID:3xCNLIZD
特定のページからの来訪の場合のみ、
処理させたいんですが、この場合環境変数とif文使えばいいんでしょうか?
052552404/11/04 11:56:51ID:???
あ、これだとノートンとか入れてる人には無効になってしまいますね。
0526nobodyさん04/11/04 12:48:50ID:???
あるプログラムからpostでID/PASSを送るプログラム作ってるんだけど、
ブラウザに丸見えになりますよね?
で、一応暗号化はしたんですけど、例えばネットカフェに
データが残ってて、解析されたら終わりってことですよね・・・
う〜んどうすればいいものか。
他のスクリプトはどうやっているんでしょ?
0527nobodyさん04/11/04 12:54:01ID:???
<form action="$url">
<input type="text" name="url" value="">
</form>
上記のようにアクション先にその場で入力された
URLを指定することってできるでしょうか?
0528nobodyさん04/11/04 13:30:32ID:???
>>527
Javascript使ってしか無理だと思うけど。
0529nobodyさん04/11/04 13:31:47ID:???
>>527
じゃばすく
053052704/11/04 13:40:32ID:???
javascriptを使用しない場合は不可能でしょうか?
053152704/11/04 13:41:16ID:???
perlを使った方法はないでしょうか?
053252604/11/04 13:52:12ID:???
POSTとGET以外に変数を別のスクリプトに渡す方法ってあるでしょうか?
0533nobodyさん04/11/04 13:53:10ID:???
>>531
もう少しWebの仕組みを(略
0534nobodyさん04/11/04 14:45:41ID:???
できないこともないけど、スマートじゃないな
0535nobodyさん04/11/04 15:18:06ID:???
>>534
教えてくださいませ
0536nobodyさん04/11/04 15:34:22ID:???
>>532
「変数を」別のスクリプトに渡す
ということは、foo.cgi->Browser->bar.cgiの過程で
foo.cgiが出力した値をbar.cgiに渡したいということか?
053752604/11/04 15:46:07ID:???
>>536
はい、そのとおりです。
0538nobodyさん04/11/04 15:51:48ID:???
ちょと似た質問なんだけれど、
海外で手に入れた会員管理の有料perlプログラムを使ってるんですが、
http://****.com/****.cgi?password=***** みたいな感じで
ログが残って、ログアウトしたあとも、ブラウザの戻るとかで
会員画面に入れるんだが、
詐欺プログラムですか、これは?
perlのことあまり詳しくありませんが、これなんとかする方法ありますか?
0539nobodyさん04/11/04 15:57:04ID:???
>>538
作成者に聞くのがスジってものでしょう
0540nobodyさん04/11/04 16:03:30ID:???
>>537
そういうセッション管理で一般的に使われるのはCookieだな。
Passは最初の認証だけ使って、後はセッションIDをCookieへ入れといて、
ワンタイムパスワードをPOSTさせて認証処理・・・って感じになるのかな。
本なんかをちょっと見ただけで実際に作ったこと無いから、落とし穴があるかも。
Cookieは気をつけないとPOST以上に危険だから注意

あと、
>ブラウザに丸見えになりますよね?
の一言が気になるんですが、まさかtype="hidden"を知らないなんてことは・・・
0541nobodyさん04/11/04 22:34:38ID:???
unko
0542nobodyさん04/11/05 00:12:53ID:???
>>537
ActivePerl入れて、インターネットゾーンでも使えるようにレジストリ緩めれば、language=perlで好きなことできるよ。

そんな糞ページ誰も見ないがな。
0543nobodyさん04/11/05 01:23:41ID:???
>>542
あなたもクソページですね
0544nobodyさん04/11/05 04:30:09ID:127p6d3j
スクリプトに引数を付けることで処理を色々に分岐させようとしています。

例:-a、-l、-h、-v、-r、<引数なし>を引数とする。
現在、引数を見て処理させる場合、
if ($#ARGV == "0") {
if ($ARGV[0] eq "-a") { 処理1; }
elsif ($ARGV[0] eq "-l") { 処理2; }
elsif ($ARGV[0] eq "-h") { 処理3; }
elsif ($ARGV[0] eq "-v") { 処理4; }
elsif ($ARGV[0] eq "-r") { 処理5; }
else { &error; }
}
elsif ($#ARGV == "1") {
if ($ARGV[0] eq "-a" && $ARGV eq "-l") { 処理5; }
elsif ($ARGV[0] eq "-l" && $ARGV eq "-h") { 処理6; }
elsif ($ARGV[0] eq "-h" && $ARGV eq "-v") { 処理7; }
elsif ($ARGV[0] eq "-v" && $ARGV eq "-r") { 処理8; }
elsif ($ARGV[0] eq "-r" && $ARGV eq "-a") { 処理9; }
else { &error; }
}
などとしていますが、引数が増えるとそれだけ組み合わせも増えるわけで
現在引数による分岐だけで混乱しています。しかもこのスクリプトを実際に
使用する場合、引数の順序も固定されてしまうので、表現力が乏しくなります。

それぞれの引数に数字を割り当てて、それをfor (@ARGV)で見ていって
それらを加算した結果で処理させる方法などを考えましたが、
数字を割り振るコツも分かりません。

引数や、それらの組み合わせが増えたとき、どういう風に対処すれば
分かりやすく、作りやすいスクリプトが書けるのでしょうか。

よろしくお願いします。
054554404/11/05 04:39:45ID:127p6d3j
上の例文は間違いです。

正しくは以下の通り。

if ($#ARGV == "0") {
if ($ARGV[0] eq "-a") { 処理1; }
elsif ($ARGV[0] eq "-l") { 処理2; }
elsif ($ARGV[0] eq "-h") { 処理3; }
elsif ($ARGV[0] eq "-v") { 処理4; }
elsif ($ARGV[0] eq "-r") { 処理5; }
else { &error; }
}

elsif ($#ARGV == "1") {
if ($ARGV[0] eq "-a" && $ARGV[1] eq "-l") { 処理5; }
elsif ($ARGV[0] eq "-l" && $ARGV[1] eq "-h") { 処理6; }
elsif ($ARGV[0] eq "-h" && $ARGV[1] eq "-v") { 処理7; }
elsif ($ARGV[0] eq "-v" && $ARGV[1] eq "-r") { 処理8; }
elsif ($ARGV[0] eq "-r" && $ARGV[1] eq "-a") { 処理9; }
else { &error; }
}
0546nobodyさん 04/11/05 04:46:45ID:???
>>544
引数をハッシュに代入してexistsで条件分離したら?

for(@ARGV){
  $param{$_} = '1'; #値自体はなんでもいい。
}
分岐は
if(exists $param{'-a'}){ 処理1;}
とか
if($param{'-a'} == 1){ 処理1;}

みたいの。
0547nobodyさん04/11/05 06:55:34ID:???
>>544
my %table = (
'a' => sub{ print "処理1" },
'l' => sub{ print "処理2" },
...
'r' => \&r_part,
'al' => \&r_part,
'hl' => sub{ print "処理6" },
...
);

sub r_part{ print "処理5" }

my $key = join('', sort @ARGV);
if (exists $table{$key}){
$table{$key}->();
} else {
print "ERROR";
}
054854704/11/05 07:02:16ID:???
おっと、ハイフン取り除く処理を忘れてたーよ。
0549nobodyさん04/11/05 07:51:54ID:???
>544
getoptとか、そんなのはダメ?
http://www.aplawrence.com/Unix/perlgetopts.html
055054404/11/05 10:39:14ID:T3r+ugEG
ああ、寝てしまった間にこんなにレスが付いてる!
ありがとう御座います!

ぱっと見た感じでは
>>546さんと>>547さんは同じ処理ですか?
連想配列にこういう使い方があったと知って、眼から鱗の初心者です>私
両方を試してみます。ありがとうございます。

>>549
煩雑な徒手作業のところをできる限り自動化/半自動化していく積もりで
ゆくゆくはこうしたモジュールを有り難く使った方が効率が良いとは考え
ているのでこういう助言は本当に助かります。
ありがとうございます。

早速実験してみます。

ありがとう御座いました。
0551nobodyさん04/11/05 11:05:29ID:vXdBVIeu
スクリプトいじってたら
正規表現で
s/ //g;
とやっても空白がマッチしなくなりました
s/\s//g;
ならマッチします
原因と元に戻す対処法を教えてください
055255104/11/05 11:19:18ID:vXdBVIeu
自己解決しました
0553nobodyさん04/11/05 11:36:35ID:vAMAiFLG
間違えてPHP質問スレに書き込んでしまったのでこちらで質問しなおします。

ttp://tohoho.wakusei.ne.jp/wwwperl2.htm
こちらのsocket関数の項目に書かれているスクリプトを自分の
スクリプトに組み込んでますが
自分の使っているサーバーでperl -wcでスクリプトチェックを行ったら
Unquoted string "stdout" may clash with future reserved word at aaa.cgi line 543.
このような警告文が表示されました。
select(stdout);
のstdoutをAAAとか別のものに置き換えたらこの警告文が回避できましたが
別のものに置き換えても正常に動くのでしょうか?
perlのバージョンはThis is perl, v5.8.2 built for i386-freebsdです。
0554nobodyさん04/11/05 11:56:32ID:???
select(STDOUT);
055555304/11/05 12:26:44ID:vAMAiFLG
>>554
どうも有り難うございます。
stdoutをそのまま大文字にしても動くんですね
0556nobodyさん04/11/05 13:45:35ID:uR92YhZO
現在CGIでのアクセス制限サイトを作っているのですが、
アドレス欄にIDとパスワードが表示され、
そのIDとパスワードを含んだアドレスを入力すると、
ログが記録されないのです。
(cgiの認証画面から入力するときちんと記録されます)

ログ記録はこんな感じなのですが。。。
どこか間違っているのでしょうか

sub record {
local($date,$time,$agent,@data);

# 時間&ホスト取得
$date = &get_time;
$time = time;
&get_host;

# ロック開始
&lock if ($lockkey);

# ログファイルの読み込み
open(IN,"$prvdir/$logfile") || &error("Open Error: $logfile");
@data = <IN>;
close(IN);

# ブラウザ情報
$agent = $ENV{'HTTP_USER_AGENT'};
$agent =~ s/&/&/g;
$agent =~ s/</</g;
$agent =~ s/>/>/g;
$agent =~ s/"/"/g;
0557556続き04/11/05 13:45:59ID:uR92YhZO

# ログ更新
while ($max <= @data) { pop(@data); }
unshift(@data,"$in{'id'}<>$date<>$host<>$agent<>$time<>\n");
open(OUT,">$prvdir/$logfile") || &error("Write Error: $logfile");
print OUT @data;
close(OUT);

# ロック解除
&unlock if ($lockkey);
}
0558556続き04/11/05 13:54:30ID:uR92YhZO
すいません、この認証処理の中で何か足りないのかもしれません。
どなたか解る方お願い致します。

sub pwCheck {
local($f,$id,$pw,$check,$time);

if ($mode eq 'enter') {
$time = time;
if ($in{'cook'} eq "") { $in{'cook'} = 0; }
&set_cookie($in{'cook'}, $time);
}

$f=0;
open(IN,"$prvdir/$pwdfile") || &error("Open Error: $pwdfile");
while (<IN>) {
($id,$pw) = split(/:/);
if ($in{'id'} eq $id) { $f++; last; }
}
close(IN);
if (!$f) { &error("認証できません"); }

$pw =~ s/\n//;
$check = &decrypt($in{'pw'}, $pw);
if ($check != 1) { &error("認証できません"); }

&fileOpen;

if ($mode eq 'enter') { &record; }
exit;
}
0559nobodyさん04/11/05 14:09:48ID:???
わかるなぁ〜その気持ち。。。
0560nobodyさん04/11/05 15:14:14ID:???
>>556
まず、メソッドについて勉強したら良いんでないかい?

http://www.google.com/search?num=100&hl=ja&inlang=ja&safe=off&c2coff=1&q=GET+POST+%24ENV%7B%27REQUEST_METHOD%27%7D&lr=lang_ja
0561nobodyさん04/11/05 15:21:59ID:???
と、レスしてから改めて>>556の説明を読んでたら混乱してきた。

何をしたくて、どこがどのように思った通りに動いてくれないのか
わからない…。

URLにクエリーが表示されちゃって困ったよー。って話じゃない…?
0562nobodyさん04/11/05 16:10:54ID:???
エスパー回答者向けだな
0563伊藤04/11/05 17:14:02ID:???
呼んだか?
0564nobodyさん04/11/05 21:03:45ID:w/zBhN/X
print "  <a href=\"$script?action=icondisp&type=$FORM{'type'}\">$lbl_iconlist</a>\n";

これを新しいウィンドウで開きたい場合はどのように書き直せばいいのでしょうか?
以下のようにするとエラーなんです。
よろしくお願いします。
print "  <a href=\"$script?action=icondisp&type=$FORM{'type'}\" target="_blank">$lbl_iconlist</a>\n";
0565nobodyさん04/11/05 21:17:13ID:???
>>564
バーカ
print ' <a href="' . $script . '?action=icondisp&type=' . $FORM{'type'} . '" target="_blank">' . $lbl_iconlist . '</a>' . "\n";
0566nobodyさん04/11/05 21:38:56ID:w/zBhN/X
>>565
全角にスペースにしわすれました
すいません
0567nobodyさん04/11/05 22:58:07ID:???
printf にした方が読みやすいとは思うけれどもども。。。
printf qq| <a href="%s?action=icondisp&type=%s" target="_blank">%s</a>\n|;
$script, # スクリプトのお名前
$FORM{'type'}, # typeの値
$lbl_iconlist; # アイコソリスト(文字列)
0568nobodyさん04/11/05 22:58:54ID:???
>>567
あらやだ。
> printf qq| <a href="%s?action=icondisp&type=%s" target="_blank">%s</a>\n|;
printf qq| <a href="%s?action=icondisp&type=%s" target="_blank">%s</a>\n|,
056936504/11/05 23:36:15ID:???
print qq[<a href="$script?action=$icondisp&type=$FORM{'type'}" target="_blank">$lbl_iconlist</a>]."\n";

でいいんじゃないの?
0570nobodyさん04/11/06 02:52:14ID:???
ダブルクォーテーションとかの扱いは人それぞれだからどうでもいいじゃん自分で気に入ったの使えば
0571nobodyさん04/11/06 04:17:26ID:???
>>507
俺も同感
だからこそperlは何通りも書けるんだしね
0572nobodyさん04/11/06 09:00:12ID:???
そこがPerlの良さ
0573nobodyさん04/11/06 10:24:21ID:???
そこがPerlの悪さ
0574nobodyさん04/11/06 14:55:07ID:???
そこがPerlのぬるぽ

ところで、NullPointerExceptionをPerl語にすると何?
0575nobodyさん04/11/06 16:06:17ID:???
ガッ
0576nobodyさん04/11/06 16:06:35ID:???
釣れますか?
0577nobodyさん04/11/06 17:29:59ID:???
ダウンロードカウンタのCGIを作ろうとしています。

ブラウザにファイルの内容を送ろうと思うのですが,どうすれば良いでしょうか?
以下だとファイルが壊れてしまいます.

open(FILE,"$FileName");
binmode(FILE);
print <FILE>; ←while(<FILE>){print $_ }でもだめ.
close(FILE);

送りたいファイルは40KB程度ですが,数MB程度のファイルも対応できるとうれしいです.
お知恵をお貸しくださいm(_ _)m
057857704/11/06 17:41:38ID:???
書き忘れましたが,ファイルはバイナリファイル(LZH,ZIP等)です.
よろしくお願いします.
0579nobodyさん04/11/06 17:53:55ID:???
>>577
環境によっては binmode(STDOUT); がいるんじゃないかな。
あと、バイナリファイルなら行読み込みにせず、readでバイト数指定して読み込み
while (read(FILE, $buffer, 1024*10)) ... バッファサイズは適当に
printで出力する場合はバッファoffするのも忘れずに $|=1 (念の為
0580nobodyさん04/11/06 17:58:03ID:???
>>577
binmode(STDOUT) してないだけじゃないの?
つーか、壊れるという曖昧な表現じゃなくて
バイナリエディタで比較してみたら こういう違いがでてきた、ってな感じで話してくれないと。
まぁ、それ見りゃ自分でもおかしいとこに気づくんだろうけどね
058158004/11/06 17:59:28ID:???
んぁ。言葉選んでる間に答えられちゃってるよオレ
カコワリィ
058257704/11/06 18:12:10ID:???
>>579-580
レスありがとうございました。
原因は二つで,binmode(STDOUT)されてないこと,行読みした結果,改行コードが欠落したことでした.

>>579
「$|」というのはPerlの環境変数のようなものなのでしょうか?
print $|;だと値を返すようですが・・・
手元の資料&Google先生を調べても分からなかったのですorz

>>580
ご指摘,ありがとうございます.
「どういう風に壊れたのか」を説明する必要がありました.
失礼しました.
0583nobodyさん04/11/06 19:13:15ID:???
>>580
Don't mind, 既知問題っぽかったから推測で書いちゃったけど
実は全然違う原因だったって事はよくあるからね.

>>582
$|は検索しにくいのが難点だな。Perl バッファリングで調べると詳細でてくるよ。
058457704/11/06 19:17:26ID:???
>>583
とほほさんのBBSに質問がのってますね.
勉強したいと思いますm(_ _)m
0585nobodyさん04/11/06 20:47:26ID:55uCUnw3
    ○ ,                   ○>
   / ̄'☆                   )>>1 
  / >                    /

☆をダブルクリックするとかめはめ波が出るぞ

注)設定とか環境のせいで正常にかめはめ波しないときがあります
0586nobodyさん04/11/06 20:55:15ID:???
    ○ ,                   ○>
   / ̄'☆                   )>>585
  / >                    /
0587nobodyさん04/11/06 20:56:12ID:ZyicEXrd
Win2K + Active Perl 5.8 を使用しています。以下のスクリプト
を実行すると、「p.tif」 のファイル名が文字化けしてしまいます。
「use encoding "shift_jis";」の行を外すと、正常に「あ.tif」に変換
されるのですが、この行を残したままrename するにはどうすれば
よろしいでしょうか?

use encoding "shift_jis";
chdir 'c:\\test';
rename "p.tif", "あ.tif";
0588nobodyさん04/11/06 21:13:32ID:jPPLQ8mN
    ○ ,                   ○>
   / ̄'☆                   )>>587 
  / >                    /

☆をダブルクリックするとかめはめ波が出るぞ!

注)設定とか環境のせいで正常にかめはめ波しないときがあります
0589nobodyさん04/11/06 21:20:51ID:???
perl 5の正規表現で、content-typeヘッダに日本語があるかないかを判別するのに
iso-2022-jp|shift-jis|euc-jp|multipart\/mixed
という記述をします。これを応用して、『英語か日本語にマッチ』するかどうかを記述するには
どうすればよいでしょうか?

059058704/11/06 22:56:11ID:???
>>587 は自己解決できましたが、もっとスマートな方法があれば
よろしくお願いします。

use encoding "shift_jis";
use Encode;

chdir 'c:\\test';
$str = encode("shiftjis","あ.tif");
rename "p.tif", $str;
0591nobodyさん04/11/06 23:23:01ID:???
>>587
no encoding;
で一旦切ってしまって、処理後にもう一度
use encoding "shift_jis";
しておく…のはあまりスマートじゃないですね。。

>>589
「キャラクタセットが英語または日本語である場合マッチ」ということなら、
http://www.iana.org/assignments/character-sets
↑と睨めっこして、必要なのを足していくとか。
(キャラクタセットの指定が無かったり、Unicodeを使われたら、終わりな気もするけど。)
0592nobodyさん04/11/07 19:03:48ID:???
HTMLの<!---->みたいに複数行をまとめてコメントアウト
する方法をど忘れしてしまったので教えてください。
「#」じゃなく。
059359204/11/07 19:14:26ID:???
自己完結。

=comment # ここからコメント
=cut # ここまでコメント
0594nobodyさん04/11/07 19:14:34ID:???
回答方法もど忘れしてしまいました。
0595nobodyさん04/11/07 20:51:25ID:OKDqn1bD
お恥ずかしい話ですがsplitガどうしても上手くいきません。

@dat = split(/*/, <DAT>);

これで合ってると思うのですが、どうしてもエラーになってしまいます。
*DATは存在します。ちゃんと*で区切られています。
■ このスレッドは過去ログ倉庫に格納されています