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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/05/25(水) 06:36:28ID:PVpWgcdf
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
04093892005/06/15(水) 17:31:01ID:EGr0DnSI
>>399
有難うございます。
意味わかりました。
>>401
randがついてるので、rand関数により暗号化してるのかと思ったのです。
0410nobodyさん2005/06/15(水) 17:43:51ID:???
「パスワードの暗号化」と言うけど、
crypt() のやってることは厳密には「暗号化」ではないからね。

などと言って混乱させてみるテスト。
0411nobodyさん2005/06/15(水) 17:44:40ID:???
万が一同じパスワードが複数与えられた場合に、暗号化後 (厳密には暗号化じゃないんだが) の
文字列がかぶらないようにするため
04124112005/06/15(水) 17:49:12ID:???
部分的にカブタ
0413nobodyさん2005/06/15(水) 17:59:40ID:???
>>411
それはちょっと無理があるようなw
aaaaaaってパスワードがたくさん登録されれば 1/4096でかぶるわけだし、
そもそもパスワードがかぶっても普通は問題ないし。
0414nobodyさん2005/06/15(水) 18:05:59ID:???
>>408
それは 4096個 salt があった場合の話だがな。
違う salt の pwd が2個なら2倍かかる、ってだけ。
0415nobodyさん2005/06/15(水) 18:17:02ID:???
>>414
あぁ、すまん。 >>394 の DES crypt() の場合のことしか考えてなかった。
0416nobodyさん2005/06/15(水) 18:24:04ID:???
saltをに日本語を使おうぜ。

$p = 'password';
($s) = ('∀');
$c = crypt $p, $s;

とかやればコード中に顔文字が出てきて和めるぞ。
0417nobodyさん2005/06/15(水) 18:25:58ID:???
∀は別に日本語というわけではなかった罠。
0418nobodyさん2005/06/15(水) 18:28:26ID:???
なにこの流れ('∀')
0419nobodyさん2005/06/15(水) 18:41:12ID:???
>>406
v 5.00503 の AAA!cafe だと

× my $fh = undef; open ($fh, '>test.txt');
○ my $fh = \*FILE; open ($fh, '>test.txt');

試しに↓のコードで動かしてみ

#!/usr/bin/perl -w
use strict;
local *FILE;
my $fh = \*FILE;
if ($fh) {
    open ($fh, '>test.txt'); print {$fh} 'hogehoge'; close ($fh);
}
print "Content-type: text/html\n\nOK? // $$fh // $fh";exit;
0420nobodyさん2005/06/15(水) 18:42:52ID:???
>>416
split('-');
とかもアリ?
0421nobodyさん2005/06/15(水) 18:59:46ID:???
>>416
ちなみに、最近のモダンな crypt() は、 salt の文字種によって、
暗号化の方式 (ていうかハッシュ関数) を切り替えてくれちゃったりするので、
あんまりへんてこりんな文字列を salt に許すと portable じゃなくなったりする罠。
0422考えて半年2005/06/15(水) 19:50:20ID:biXgIpFa
Perlコーディング初心者から抜け出す方法ないの。
ていうか、Perlでチャットとか掲示板とか、画像をうpするとか機能を追加した
ゼロからプログラミング作れるようになるには、どうすればよいのでしょう?
10日で覚える、とほほ、独習、リャマ本、らくだ本、リファレンスなど
よんでも、いまだに初心者です。漏れがbakaなの?
0423nobodyさん2005/06/15(水) 20:04:08ID:???
一冊読めばだいたいある程度のものは作れるようになるから、結論としてはb・・(ry

つーか、このスレのタイトルを変える相談かと思ったw

半年もかじれば、シンプルなカウンターや掲示板くらいならできない?
本を閉じて、試しに作ってみればいい。 分からないときに本を見る。
参考書が一冊もなくても、ネットのあちこちで転がってるし、
生半可な本より充分な内容の perl.doc もある。

とにかく、芸術分野みたいなもんで 「自分で造る」 「自分で調べる」 のが大切。
・・・なんてな。
0424nobodyさん2005/06/15(水) 20:12:28ID:???
読むだけでは上達するのは頭の良いひとだけだと思う。
凡人プログラマなら、とにかくいっぱい作りまくって練習するしかないかと。
0425nobodyさん2005/06/15(水) 20:25:54ID:???
なにこの釣りスレ
0426考えて半年2005/06/15(水) 20:26:41ID:biXgIpFa
>422です。例えば
foreach $lines (@lines) {
($tm,$cnt,$scnt,$ip) = split(/<>/, $lines);
if($ipc==2){&get_;if($cook){ $flag=2; last;}}
if($date eq "$tm") {
if($ipc==1){if ($addr eq "$ip") { $flag=2; last; }}
$flag=1;
$cnt++;
$scnt++;
$lines = "$tm<>$cnt<>$scnt<>$addr<>\n";
}

foreach { から } までを繰り返すコードであることは理解できる。
しかし、{ } の中身が理解できない。
だから、どうしてよいのかわからない。
0427nobodyさん2005/06/15(水) 20:30:07ID:???
>>426
よくそれでラクダとか読めたなw
読んだって文字を目で追っただけだろ
0428考えて半年2005/06/15(水) 20:32:45ID:biXgIpFa
「ちゃんと本読めばすべて書いてある」ってことですか?
0429nobodyさん2005/06/15(水) 20:33:03ID:???
ああ釣りスレだな
0430nobodyさん2005/06/15(水) 20:37:40ID:???
きっぱりあきらめるのも手かと。
混乱しちゃって、今は何を言われてもポカーンじゃないかな。こんな感じ。
@ @
  △
0431nobodyさん2005/06/15(水) 20:38:07ID:qXBtGg7k
↓下のようなデータを「,」区切りで分け、空の時はテーブルを二列連結させるプログラムを作りたいと思いますが、
 空のデータがある時のやり方がどうしても出来ません。

埼玉,東京,群馬
大阪,,奈良


空のデータがある場合はcolspanを使い↓のように連結させる


<table>
<tr><td>埼玉</td><td>東京</td><td>群馬</td></tr>
<tr><td colspan=2>大阪</td><td>奈良</td></tr>
</table>


このようにするにはどうしたらよろしいすか?
サンプル等をご存知でしたら教えていただければ助かります。
0432nobodyさん2005/06/15(水) 20:40:19ID:???
>>431
先に普通にテーブル作ってから
<td>([^<]+)</td><td></td>を
<td colspan=2>$1</td>に置き換えるとか
0433nobodyさん2005/06/15(水) 21:43:22ID:???
>>431
最初がカンマの場合は全部一番後ろに押し付けてみた。

while (<DATA>) {
 chomp;
 my $data = $_;
 $data =~ s/^(,+)//;
 $data .= ',' x (1+length $1);

 my @pref = split /,+/, $data;
 my @count;
 while ($data =~ s/(,+)//) {
  push @count, length $1;
 }

 print qq{<tr>};
 my $n = 0;
 foreach my $span (@count) {
  print $span > 1 ?
   qq{<td colspan="$span">$pref[$n]</td>}:
   qq{<td>$pref[$n]</td>};
  $n++;
 }
 print qq{</tr>\n};
}
0434nobodyさん2005/06/15(水) 23:46:03ID:???
>>419
以下で問題なく動きました…orz
ありがとうございます。
>>9のページではハンドルのリファレンスじゃなくてグロブそのものを入れようとしてるんですが、
そちらだと出来ませんでした。。

#!/usr/local/bin/perl -w
local *FILE;
my $fh = \*FILE;
if ($fh) {
#? エラー
#? エラー
 open ($fh, '>./data/test.txt');
 print {$fh} 'hogehoge';
 close ($fh);
}
print "Content-type: text/html\n\nOK? // $$fh // $fh";exit;
0435nobodyさん2005/06/15(水) 23:51:02ID:???
>>428
ランダきちんと読めばこの世にある殆どのPerlコードは理解できる。
0436nobodyさん2005/06/16(木) 00:15:51ID:???
個々の部分が何をやってるかはわかるようになるとは思うが
全体として何をやってるか理解するのは難しいのもあると
思うよ。

このコード結局なにがやりたいんだよみたいな(笑)
0437nobodyさん2005/06/16(木) 00:43:45ID:???
perl の文法を学ぶ前にアルゴリズムというものが理解できてないと
いろいろと難しいかもしれんですな
0438nobodyさん2005/06/16(木) 01:07:20ID:???
>>434
SMART はわかりやすいんだけど、ちょっとね。

まあ 5.005のファイルハンドルなら、↓読めば結構理解いいかも。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
0439nobodyさん2005/06/16(木) 21:22:02ID:???
>>438
ありがとうございます!
週末にでもゆっくり読みながら、>>381>>383の改造でもしてみます。
0440nobodyさん2005/06/17(金) 00:42:38ID:FGf+BXAB
>437様へ。
アルゴリズムって何ですか?perlの文法わかるのに、掲示板とかチャット
とかプログラム作成しようと思うとイマイチ、わかりません。
どうすればよいの?アルゴリズムがわからないから、プログラム作成でき
ないのでしょうか?
0441nobodyさん2005/06/17(金) 00:48:21ID:???
以下のものを自分で一から作ってみては?
既にあるものを参考にしない事(詰まったときにヒントとしてみるのはあり)ってルール作って。

hallo world表示
↓
フォームの入力内容表示
↓
ファイルの内容を読み込んで表示
↓
フォームの内容をファイルに書き込み
↓
カウンタの作成
↓
一行掲示板の作成
↓
eコマースサイトの作成
0442nobodyさん2005/06/17(金) 00:55:30ID:FGf+BXAB
hello world表示
#! c:\perl\bin\perl
print "Hello Perl\n";
0443nobodyさん2005/06/17(金) 00:56:02ID:???
それってコーディングの問題じゃないんじゃないだろか。設計じゃない?
0444nobodyさん2005/06/17(金) 01:00:22ID:FGf+BXAB
フォームの入力内容表示、内容読み込み表示
#! c:\perl\bin\perl
print "Enter Word : ";
$word = <STDIN>;
chomp($word);
print "$word\n";
0445nobodyさん2005/06/17(金) 01:00:53ID:???
Σ(゜Д゜)ハッ!! 数ヶ月いるのに、ずっと "コーティング(coating)初心者質問スレ" って読んでた・・・。 orz
0446nobodyさん2005/06/17(金) 01:14:19ID:???
>>444
それフォームじゃなくてシェル。
0447nobodyさん2005/06/17(金) 01:15:33ID:???
最近
#!perl
でも動くことを知った(ActivePerl)
0448nobodyさん2005/06/17(金) 01:21:15ID:???
ああ…なるほど
0449nobodyさん2005/06/17(金) 01:25:54ID:FGf+BXAB
フォームの表示わかんないんです。
0450nobodyさん2005/06/17(金) 01:31:45ID:???
winでパス通ってりゃ、何もつけなくても動く罠
0451nobodyさん2005/06/17(金) 01:37:28ID:???
>>449
わからないポイントが明確になって良かったじゃないか。
html周りって事なら
ttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_kj01.htm
とか見てみれば?
0452nobodyさん2005/06/17(金) 01:41:58ID:???
はは、よく釣れてるw
0453nobodyさん2005/06/17(金) 01:44:09ID:???
暇だしねー
0454nobodyさん2005/06/17(金) 02:08:23ID:???
これは、なにするCGIですか?

%in=map{s/\+/ /g;s/%([\da-fA-F]{2})/chr hex$1/eg;$_}map{split/=/,$_,2}split/&/,$ENV{QUERY_STRING};
print<<HTML;
Content-Type: text/html

<form action=$ENV{SCRIPT_NAME}><textarea name=text rows=20 cols=40>$in{text}</textarea>
<input type=submit></form><hr>
HTML
eval$in{text},$@&&print"<pre>$@</pre>";
0455nobodyさん2005/06/17(金) 02:48:58ID:???
GET 受取処理
0456nobodyさん2005/06/17(金) 02:53:14ID:???
まともに答えられとるw
0457nobodyさん2005/06/17(金) 07:32:45ID:???
ハッシュ同士を合体させてくれるような、格好いいモジュールってありますか?

もし自分でコードを書くとしたら、テンポラリなハッシュにforeachでキーと値をいちいちぶち込むことになるんでしょうか。
0458nobodyさん2005/06/17(金) 07:56:09ID:???
モジュール使わんでも・・・
%y = (%x , %y);
↑の書き方じゃ不満?


my %x = qw(a 1 b 2 c 3 d 4 e 5 f 6 g 7);
my %y = qw(e 01 f 02 g 03 h 04 i 05 j 06 k 07);

print join (', ', map { $_ .'=>'. $x{$_} } sort keys %x), "\n";
print join (', ', map { $_ .'=>'. $y{$_} } sort keys %y), "\n";

%y = (%x , %y);

print join (', ', map { $_ .'=>'. $y{$_} } sort keys %y), "\n";
0459nobodyさん2005/06/17(金) 08:30:05ID:???
@y{ keys %x } = values %x;
0460nobodyさん2005/06/17(金) 08:46:08ID:???
あれ? keys と values の値の出てくる順番って、両方同じ順番で確からしいんだ?
0461nobodyさん2005/06/17(金) 11:14:38ID:???
>>460
keys, values, eachはハッシュを変更しない間は同じ順番になることが
保証されている。keysのマニュアルなど参照。

あと、ハッシュをリストコンテキストで評価したときに返るリストも
同じ順番になりそうなもんだが、そういう記述は見つけられなかった。
これはどうなんすかね?

0462nobodyさん2005/06/17(金) 11:57:39ID:???
試してみないの?
0463nobodyさん2005/06/17(金) 12:14:45ID:???
経験則じゃなくて、仕様的情報があればって感じなんでは
0464nobodyさん2005/06/17(金) 12:17:27ID:???
つーか、そもそも考えが質問がおかしいというか、
重複するキーの値をどうするか?という問題の希ガス。

%xに%y入れるか、%yに%x入れるか。
0465nobodyさん2005/06/17(金) 14:45:47ID:???
y と x 逆にすればいいだけぢゃん。
それとも重複したら Array にしたい、とかかねえ。
0466質問2005/06/18(土) 16:37:14ID:DZNl0XpA
フォームをつかったCGIを作ろうと思っているのですが、セキュリティが心配です.
自分が作ろうと思っているのは、
ラジオボタンを使ったクイズ、チェックボックスを使ったクイズ、テキストボックスを使ったクイズ
なんですが、
気をつけることなどんなことでしょうか?
自分の考え(素人レベルですが・・)では、ラジオボタンとチェックボックスのほうは問題ないと思うのですが、
テキスト形式は不正な文字や引数を使われるとやばいとおもうので、正規表現でチェックするぐらいしか思いつきません.
0467nobodyさん2005/06/18(土) 16:51:24ID:???
>>466
>>1嫁
0468nobodyさん2005/06/18(土) 17:21:44ID:???
>>466
とりあえず、文字列のチェックつか文字コードのチェック話は
さんざこのスレでも出てるので読み返しる。
0469nobodyさん2005/06/19(日) 10:05:28ID:a/QQeV38
質問なんですが
$/ = "a";
chomp($data);
とすると$dataの行末のaを取り除くことができるみたいですが
aとbというような他の文字であっても取り除くようにすることはできませんかね?
PHPでいう$data = rtrim($data, "ab");みたいなことをやりたいんですが。

$/ = "ab";
chomp($data);
ではできませんでした。
0470nobodyさん2005/06/19(日) 10:16:41ID:???
>>469
$data =~ s/[ab]\z//;

http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html
0471nobodyさん2005/06/19(日) 14:29:18ID:???
$data =~ s/[ab]$//mg;
0472nobodyさん2005/06/19(日) 23:01:48ID:???
自鯖にpingを送って生死判定をしたいのですが、
pingの結果はどうやって得るのですか?
0473nobodyさん2005/06/20(月) 00:43:18ID:9D61R1Ak
入力に、「全角ひらがな」と「全角カタカナ」のみ許容するように
したいのですが、うまくいきません。

if ($str =~ /[\xA1-\xFE][\xA1-\xFE]/) {
}

これですと全角全てを許容してしまいますので、何か良い方法が
ございましたらご教示いただきたい次第です。

何卒、宜しくお願いいたします。
0474nobodyさん2005/06/20(月) 01:08:33ID:???
全角ひらがなとカタカナの文字コードの範囲を指定すれば?
文字コード表は検索すれば出てくるよん。
0475nobodyさん2005/06/20(月) 01:27:43ID:???
その正規表現だと「[\xA1-\xFE][\xA1-\xFE]を含むもの」全てにマッチしちゃうよ。
0476nobodyさん2005/06/20(月) 01:30:53ID:???
うにこーどにして一文字ずつ弾け
0477nobodyさん2005/06/20(月) 01:45:43ID:???
$name !~ m/^[ぁ-ヶ]+$/
で何とかなるかと思いましたが。うまく動いてくれませんでした。

皆様、色々とご教示有難うございました。
0478nobodyさん2005/06/20(月) 01:52:50ID:???
>>472
http://search.cpan.org/~bbb/Net-Ping-2.31/
0479nobodyさん2005/06/20(月) 03:11:32ID:???
>>477
use encoding 〜 使えばそれでもできそうだがね。
0480nobodyさん2005/06/20(月) 04:43:55ID:???
>>479
アドバイス有難うございます。

EUCで全て書いて最後にSJISにしてページを出力しているため、
化けてしまうようです。この方法は諦めました。。

文字コードの範囲と言うものが少しわかってきたのですが、まだ
まだ勉強不足なので調べまくっているところです。

貴重なアドバイス有難うございました。
0481nobodyさん2005/06/20(月) 13:21:42ID:???
>>473
アバウトだけど叩き台くらいにはなるかしら。
/\A([\xA4\xA5][\xA0-\xFF]|\xA1\xBC)+\z/
0482nobodyさん2005/06/20(月) 16:36:58ID:???
おお、ちょうど473と同じような状態なんですが、私は
+漢字も含む文字以外を許容しないというものなん
ですね。

この場合は
if ($str !~ /^([\xA1-\xFE][\xA1-\xFE])+$/) {
}

これで問題ないのでしょうか?
0483nobodyさん2005/06/20(月) 17:47:52ID:/wReIU3I
お世話になっております。

perlでcgiを作成しているのですが
URLでhoge.cgi?day=20050620
と指定しているのに
--------------------------------
use CGI;
my $cgi = new CGI;
my $gDay = $cgi->param('day');
--------------------------------
というように取得できません、、、
Ctrl+F5で更新すると取れるのですが
なんでなのでしょう?

何か情報をお持ちな方はお教え頂けますとありがたいです。
0484nobodyさん2005/06/20(月) 18:47:08ID:???
url_param じゃね?
0485nobodyさん2005/06/20(月) 19:04:03ID:???
>484さん
ありがとうございますっ

url_paramというのがあったのですね、、
不勉強でした。

どうもですっ
0486nobodyさん2005/06/20(月) 19:56:55ID:???
>>478
ありがとうございました
04874822005/06/20(月) 21:33:18ID:???
うおおおお。
ぐぐりまくってなんとかここまでたどりつきました。
先生方、見てくださると大変助かります。


$eucpre = qr{(?<!\x8F)};
$eucpost = qr{
(?=
(?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
(?:[\x00-\x7F\x8E\x8F]|\z) # ASCII, SS2, SS3 または終端
)
}x;

$hiragana = '\xA4[\xA1-\xF3]'; # ぁ〜ん
$katakana = '\xA5[\xA1-\xF6]'; # ァ〜ヶ
$kanji = '[\xB0-\xFE][\xA1-\xFE]'; # 漢字(実際に割り当てのない領域も有るが問題はない)
$nobashi = '\xA1[\xBC\xBD\xC1]'; # ー−〜

if($name !~ m/^$eucpre(?:$hiragana|$katakana|$kanji|$nobashi)+$eucpost$/){}
0488nobodyさん2005/06/20(月) 22:07:25ID:???
え、何? ひらがな + カタカナ + 漢字 + [ー〜] だけを許容したい、ってこと?
・・・にしては最後のアスキーは何なのかわからんか・・・。
全角記号とかはどうなるのかな。

まあ、やりたいことをもちょっと詳しく。 例とかだしてくれるとわかりやすいかも。
0489nobodyさん2005/06/20(月) 22:58:52ID:???
はじめまして。
すいません。ファイルオープンについて教えてください。

ファイルを読み書きオープンで開いて、
前の書き込みのデータを参照して処理をしたあとに追加でデータを書き込みたいのですが、
なかなかうまくいってくれません。
どなたかご教授願えませんでしょうか。

【ファイルについての仕様】
・データの追加書き込みがある
・ある程度データがたまったら削除される。

open(DOUT, "+<$log_file");
これだと、ファイルが削除されている場合エラーが出てしまいます。

open(DOUT, "+>$log_file");
open(DOUT, "+>>$log_file");
上2つだとデータが読み込めないんですけど、これは自分の書き方は悪いんでしょうか。

乱文ですけどよろしくお願いします。
0490nobodyさん2005/06/20(月) 23:01:55ID:???
>>489
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_come_when_I_open_the_file_re
0491nobodyさん2005/06/20(月) 23:59:48ID:???
if (-e $log) {
読み書きopen
} else {
新規でopen
0492nobodyさん2005/06/21(火) 00:03:52ID:???
open(DOUT, "+>>$log_file");
seek (DOUT, 0,0);

が安定じゃね?
04934892005/06/21(火) 00:23:19ID:???
お返事ありがとうございます。

>>490
私の目的だと
sysopen(FH, $path, O_RDWR|O_CREAT) || die $!;
sysopen(FH, $path, O_RDWR|O_CREAT, 0666) || die $!;
を選択するのが妥当・・・ですよね。

>>491
なるほど、そういう書き方がありますね。

>>492
open(DOUT, "+>>$log_file");
で
@log = <DOUT>
とすると、@logで値が入ってこないんですけど、
@log = <DOUT>をする前に
seek (DOUT, 0,0);
が必要でしょうか??



また、明朝来ます。

0494nobodyさん2005/06/21(火) 01:02:18ID:???
>>493 そのための seek だろ。 何言ってんだw
04954822005/06/21(火) 02:15:58ID:???
>>488
説明不足ですみません。
ひらがな + カタカナ + 漢字 + [ー〜] だけを許容したい
ずばり、そのとおりでございます。

「最後のアスキー」とは、何か漏れがあったりしますでしょうか?
0496nobodyさん2005/06/21(火) 02:28:41ID:???
use encode しつつ [\wー〜] ってやるのが一番楽そうなんだがw

最後の $eucpost の後方参照が必要なのかどうかわからないのだった。
まあいるんならいいんじゃない? それで動けば。
0497nobodyさん2005/06/21(火) 08:45:48ID:???
utf8使えるんなら使わない手はない
04984932005/06/21(火) 09:46:03ID:???
>>494
ありがとうございます!なりました。

今までseekを使うことがなく、(<と>>だけ)
いまいち感覚がつかめませんでした。
たすかりました。

ところで、+>>でオープンした場合の書き込みは追記になるので
書き込む前に
seek(OUT, 0, 2);
をする必要はないと考えてよいでしょうか。
今のところ問題ないんですけど、やっておかないとマズイことはありますか?
0499nobodyさん2005/06/21(火) 10:51:42ID:???
以下のようにスクリプトをutf8で書いてやるとうまくいくんですが、
use utf8;
$str='日本語';
print length $str, "\n"; # 3
foreach (split //, $str) {
print sprintf("%04X\x20", ord); # 65E5 672C 8A9E
}
utf8で書いたファイルを読み込んで同じことをやろうとするとだめです。
use utf8;
while(<>){
print length $_, "\n";
foreach (split //, $_) {
print sprintf("%04X\x20", ord);
}
}
ちなみにファイルは、以下のもので、

これはutfであります。

結果は、

~$ perl utf_test.pl utf_test.txt
32
0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0075 0074 0066 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 0000 FFFD FFFD 000D 000A

cygwinのperl5.8.5でやってます。どうしたら、日本語マルチバイト認識して
くれるんでしょう。
0500nobodyさん2005/06/21(火) 10:57:18ID:???
さっきの結果は、use Encode;の場合でした。use utf8;だと、
~$ perl utf_test1.pl utf_test.txt
32
00E3 0081 0093 00E3 0082 008C 00E3 0081 00AF 0075 0074 0066 00E3 0081 00A7 00E3 0081 0082 00E3 0082 008A 00E3 0081 00BE 00E3 0081 0099 00E3 0080 0082 000D 000A
です。よろしくお願いします。
0501nobodyさん2005/06/21(火) 11:02:53ID:???
すみません。結構ググったんですが、グルり足りなかったようで。
ttp://sakaguch.com/utf2.html#noteで見つけますた。
use open ":utf8";にすれば、問題なくなりますた。
0502nobodyさん2005/06/21(火) 11:18:14ID:???
連カキコすまソ。
use open ":utf8";
use utf8;
while(<>){
# while(/\p{Hiragana}/g){
while(/[ぁ-ヶ]/g){
print "$&\n";
}
}
みたいにすると、結果はOKなんですが、
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
Wide character in print at utf_test.pl line 6, <> line 1.
これは抑止できないんですかね。
0503nobodyさん2005/06/21(火) 11:44:02ID:???
>>502
binmode STDOUT, ":utf8";

perldiag(1)のそのメッセージの説明に書いてあったわけだが。
0504nobodyさん2005/06/21(火) 13:44:01ID:???
エラーメッセージでぐぐるとかしなさいよ
0505nobodyさん2005/06/21(火) 14:21:11ID:???
>>483-484
なんでparamじゃ駄目なのかわからん。
教えてエロイ人!
0506nobodyさん2005/06/21(火) 16:01:03ID:???
>>498
ファイルロックするなら問題ないんじゃない?
0507nobodyさん2005/06/21(火) 16:19:13ID:???
>>505
POSTしてるからだろ。

ttp://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod の
「POSTとURLパラメータの混合」より:

問い合わせ文字列(引数が後ろについた"?"マーク)が入ったURLへ
POSTするフォームを作成することにより、スクリプトはフォームと
同じように CGIパラメータをURLで受け取ることは可能です。param()
メソッドは、 URLの問い合わせ文字列を無視し、常にPOSTされた
フォームの内容を返します。 URLパラメータを取り出すためには
url_param()メソッドを呼び出してください。
0508nobodyさん2005/06/21(火) 16:51:26ID:???
PHP の $_GET $_POST みたいに両方取れるといいのにね。
■ このスレッドは過去ログ倉庫に格納されています