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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
0652nobodyさん04/11/10 21:57:30ID:???
何でわざわざ別ファイルに書かせなきゃならんのかがわからん
0653nobodyさん04/11/10 22:21:12ID:???
>>647
クッキーを食べない時と食べる時がある状況が良く分からないけど…。
<meta http-equiv="refresh" ..>
を使ってクライアント側で飛ばして見るとか。

# 状況は改善されない予感。
0654nobodyさん04/11/10 22:24:11ID:QZhMSK0D
読み書きモードでオープンすればいいんだっけ?
0655nobodyさん04/11/10 22:30:47ID:???
読み書きモードでその場更新でもいいけど、更新中にプログラムが
あぼーんすると変な状態で残ったりする。別ファイルに書き込み、
書き終わったらrenameなら書き換え前か書き換え後のどっちかには
なるので、オレはこのほうが好き。

0656nobodyさん04/11/10 23:55:31ID:???
>>647
確認できるソース求む
0657nobodyさん04/11/11 00:08:27ID:???
647ではないんだけどプログラム変えてないのに
IEでcookieが急に読めなくなった。(前はできてました。)
プログラムAでcookie送信してプログラムBに遷移して
そのcookieを取ろうとしても取れなかった。
他のcookieは取得することができました。
ネスケでは大丈夫だったんだけどなぁ。

ちなみにCGI.pm使って
$hoge=param('hoge');
とやって$hogeが空になっており、
cookieのフォルダを見るとちゃんとそのcookieがありました。
0658nobodyさん04/11/11 00:21:14ID:???
>>657
確認できるソース求む
0659nobodyさん04/11/11 00:52:30ID:???
まずはIEのクッキー設定を疑うよろし。
066065704/11/11 01:49:17ID:???
657ミスりました。
paramのとこcookieです。

>>659
クッキーの設定も疑って全て許可にしてもだめだったのです。
でも、今家のPCで同じスクリプト走らせたらできました・・・。
で、サーバの方も試したらできました。
仕事場のPCからやった時はできなかったんですよほほほ。
ご迷惑おかけしました。
0661nobodyさん04/11/11 11:33:09ID:???
文字列$aが数字以外を含んでいたら、
エラー出したいんですが、
どうすればいいんでしたでしょうか?
~[0-9]を使えばいいことはわかるんですが・・・

if($a=^[0-9]){
echo"error";}

何か間違ってますか?(^^;
0662nobodyさん04/11/11 11:35:42ID:???
age
0663nobodyさん04/11/11 11:51:58ID:???
>>661
うむ、それもかなり激しく

if($a=~/[^0-9]/){
0664nobodyさん04/11/11 11:54:04ID:???
>>663
間違えまくってますね笑汗
ありがとうございます、助かりました。
0665nobodyさん04/11/11 13:59:06ID:???
/\D/ 小泉こうだろう?
0666nobodyさん04/11/11 14:33:41ID:tk5UM/xB
自分のPCで実行して、入力先をWEBページにして、
記載されている内容を処理しファイルに書きたいのですが
可能でしょうか?

基本的なことですみません。
何の言語を覚えたらいいのかわかりませんので。
0667nobodyさん04/11/11 14:54:37ID:???
何言ってるんだかわからん
0668nobodyさん04/11/11 15:18:47ID:tk5UM/xB
すみません。説明が下手で。
以下のようなことをWindows XP上でしたいのです。
できますか。

実行したら、例えばこの板のスレッド一覧
http://pc5.2ch.net/php/subback.html
を読んで
インデックス/スレタイ/その時点での書き込み数
をCSVファイルに書き込むようなものです。
中でリンクから各スレを読んで>>1のハンドルも取得できればなおよいです。
0669nobodyさん04/11/11 15:20:41ID:???
>>668
できるよ
0670nobodyさん04/11/11 15:21:57ID:???
LWP
0671nobodyさん04/11/11 15:28:02ID:riaohoTo
翻訳
perlプログラムをローカルPCで実行
ネット上のウェブページの情報を取得
いろんな処理
ローカルPCに保存

ってこときゃ?
067267104/11/11 15:29:21ID:riaohoTo
チョコ食ってる間に進んでた。
すまそ
0673nobodyさん04/11/11 15:32:15ID:R3WWGPIl
ウェブから入力された新しいユーザー名を、ユーザ名の入ったファイルを
チェックして必要があれば弾いたり空いている場所に追加したり削除する
CGIを作りたいのですが・・・・。

ユーザー名の入ったファイルを行入力演算子で配列に読み込んで、
それをいろいろやってから再び配列に戻して、最後に
$i=0;
while($i<=$count){
print FILE "$username[$i]\n";
$i++;
}
みたいに、改行して出力すれば次にCGIを呼び出したときに再び
行入力演算子で配列に読みこめるファイルが作成できるのでしょうか?
何度もやったのですが、どうしてもうまくファイルが作成できないのです。
0674nobodyさん04/11/11 15:33:41ID:???
>>671
そんな感じぢゃな。

perlプログラムをローカルPCで実行 → ActivePerl をゲットせよ
ネット上のページの情報を取得 → LWPの使い方を習得せよ
解読処理 → HTMLをパースする方法、正規表現とか HTML::Parser とかを習得せよ
CSVファイルに書き込む → まあ何とでもなるぢゃろう

>>672
その FILE とかいうファイルハンドラは
当然書き込みモードで open されとるんぢゃろうな?
0675nobodyさん04/11/11 15:33:44ID:???
>>668
perlスレなのでperlを覚えてください
067667304/11/11 15:35:58ID:R3WWGPIl
>>674
いえ、入力モードで開いて配列に読み込んで、
一旦閉じてから再び出力モードで開いてます
0677nobodyさん04/11/11 15:46:34ID:tk5UM/xB
>>671 >>674
ありがとうございます。

>>675
覚えてからできないのがわかったら悲惨ですから
先に確認したいと思いました。
じゃ勉強始めます。
0678nobodyさん04/11/11 16:00:47ID:???
スレタイ見るだけのスクリプトなら、手元にあるから、貼っといてやるよ。
スレの中身見るのは、自分で作りな。

use LWP::Simple;
$url = "http://pc5.2ch.net/php/subback.html";
@lines = split(/[\r\n]/, get($url));
foreach my $buf (@lines) {
 if ($buf =~ /<base href="([^\"]+)"/){
  $base_ref = $1;
  last;
 }
}
foreach $buf (@lines) {
 if ($buf =~ /<a href="(\d+)\/l50">(\d+):(.*)\((\d+)\)/){
  $thethread = $1;
  $num = $2;
  $title = $3;
  $rescount = $4;
  print "$thethread, $num, $title, $rescount\n";
 }
}
0679nobodyさん04/11/11 16:42:01ID:???
レンタルサーバにてたまにcgiがCPU 90%を長時間(600hとか)使うことがあります。
このスクリプトの問題点を調べたいのですが、どのようにすればよい
かアドバイスを頂けたらと思います。

利用しているスクリプトは、余裕派掲示板です。
http://specters.net/cgipon/

バージョンは、2.62と、3.00 beta7を利用しておりどっちが
CPUを食っているかはまだわかりません。

そこまでCPUを使ってるのにkillしないサーバ屋もサーバ屋ですが、
とりあえず、他人の迷惑になるので調査したいのですが、とっかかり
がわかりません。

発生頻度は、1-2日に1回位起きてるのかもという位で、まだ
詳しくはわかりません。

よろしくお願いします。
0680nobodyさん04/11/11 16:49:47ID:???
>Perlのコーディングで困ってる人のスレです。
0681nobodyさん04/11/11 17:00:04ID:???
>>679
Devel::DProf
で調べると良いよ。
0682nobodyさん04/11/11 17:25:26ID:???
>>681
素晴らしいです。
#!/usr/bin/perl -d:DProf

にすれば良さげです。ちょっと仕掛けてみます。
0683nobodyさん04/11/11 20:23:40ID:???
ちょっといいか・・・?
>レンタルサーバにてたまにcgiがCPU 90%を長時間(600hとか)使うことがあります。
600時間てあんた、一体何動かしてるんだ?
ほぼ一ヶ月だぞ?
0684nobodyさん04/11/11 20:45:48ID:???
>>681
これ良いです
便利なものがあるもんですね
0685nobodyさん04/11/11 21:02:10ID:???
>>683
600minでした すまそ

一行ごとに解析できる Devel::SmallProf というのもあるらしい。

0686nobodyさん04/11/11 21:11:26ID:Z05OwTsM
@hogeに20行の文字列が入ってて、
それを指定した位置から指定した位置の複数文字([6]から[14]までの文字)を
$hogeに入れるにはどうしたらよいですか?
0687nobodyさん04/11/11 21:16:03ID:???
for(i=6;i<=14;i++){
$hoge .= $hoge[$i];
}
0688nobodyさん04/11/11 21:35:44ID:Z05OwTsM
>>687
多謝!!
0689nobodyさん04/11/11 22:09:33ID:???
$hoge = join('', @hoge[6 .. 14]);
0690nobodyさん04/11/12 00:37:35ID:???
ずっと気になっているんですが、.= とは何ですか?行数をどう処理するものなんですか?
0691nobodyさん04/11/12 00:44:05ID:???
連結演算子
0692nobodyさん04/11/12 00:47:37ID:???
<textarea>で作った2行の文字から改行を取り除くにはどうすればよろしいでしょうか?
$value =~ s/\n//;としてもだめでした。

perlバージョンは最新です。windows2000です
0693nobodyさん04/11/12 01:02:29ID:???
>>692
Win環境は\r\nだよ
0694nobodyさん04/11/12 01:02:48ID:???
$value =~ s/\r\n//g;
0695nobodyさん04/11/12 01:03:03ID:???
>>692
Perlメモ
でググってから、もう一度来い
0696nobodyさん04/11/12 01:18:01ID:???
ありがとうございます。うまくできました。
0697nobodyさん04/11/12 03:20:48ID:???
>>690
$hoge .= $foo; と $hoge = $hoge . $foo; は同じ

>>692
漏れはどっちでも対応できるように $value =~ s/\r?\n//g; ってしてる。
0698nobodyさん04/11/12 07:17:05ID:???
>691>697
思い出しました、ありがとうございます
0699nobodyさん04/11/12 09:07:08ID:bxBJtrFy
$_ = "AAA_BBB ZZZZ-DDD_EEE/FFF.";
のような文字列中からアルファベット三文字のリストを抜き出そうとしています。
my(@list) = $_ =~ /(?:^|[^A-Z])([A-Z]{3})[^A-Z]/g;
foreach (@list) {
  print "$_\n";
}
にしてみたのですが抜き出されるのは
AAA,DDD,FFFの3つでAAA_のマッチのあとのBBBとDDD_のあとのEEEがとれません><
0700nobodyさん04/11/12 10:27:18ID:???
>>699
こいでいいじゃん。
while(s/[A-Z]{3}//) {
print $&, "\n";
}
0701nobodyさん04/11/12 10:29:01ID:???
>>699
これでどうよ?

my $t = "AAA_BBB ZZZZ-DDD_EEE/FFF.AAA";
my(@list) = $t =~ /(?:^|[^A-Z])([A-Z]{3})(?=[^A-Z]|$)/g;
foreach (@list) {print "$_\n";}

最後のAAAにマッチさせたくないのであれば|$の部分をカット
070269904/11/12 16:58:54ID:bxBJtrFy
701さんのでうまくいきました。
ありがとうございました。
0703nobodyさん04/11/13 12:05:38ID:???
パスの区切り文字が環境(OS)によっては / だったり、\ だったりするので
実行環境を判定して場合分けしようと思いましたが、定番の方法があれば教えてください。

一応、こんなことしか思いつかないのですが・・
$^X=~/exe$/i
0704nobodyさん04/11/13 12:59:33ID:???
>>703
CGI.pmのソース読んでみて。
070570304/11/13 13:14:55ID:???
>>704
なるほどわかりました。これが定番なんですね。
スマートな方法じゃないのでがっかりんこです。
0706nobodyさん04/11/13 13:50:49ID:???
>>703
my $os = $^O;
my $separator = '/';
if ($os =~ /^MSWin/i or $os =~ /^dos/i or $os =~ /^OS2/i){
$separator = '\\';
} elsif ($os =~ /^MacOS/i) {
$separator = ':';
}
でも構わないと思うけど。

# 手抜きするなら、/[:\/\\]/で区切るとか。
0707nobodyさん04/11/13 15:05:09ID:???
>>703
やりたいことをまずは書いたほうが解決は早いよ。
ディレクトリ部分を削除してファイル名のみにしたいとか。そんな感じじゃないの?
0708nobodyさん04/11/13 17:15:37ID:OROQk2Kk
ファイルハンドルがcloseされているのかされていないのかを明示的に調べる
方法はありますでしょうか?
0709nobodyさん04/11/13 17:46:23ID:???

はい
0710nobodyさん04/11/13 17:49:37ID:j/c/9VEE
フォームに記入してもらったメールアドレスにsendmailでメールを送信するCGIを組んで運用しているのですが、
infoseekのwebメールサービスで本文の文字化けが起きてしまいます。
例)あああああ → ??????????

ヘッダには以下のものを設定してあります。
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

ググってみたところ同じ問題を抱えているweb管理者さんがたくさんいることはわかったのですが
解決方法を見つけることはできませんでした。

文字化けさせない方法があったら教えてくださいませ。
0711nobodyさん04/11/13 18:46:27ID:???
charset="iso-2022-jp" で試してみそ
0712nobodyさん04/11/13 19:12:30ID:j/c/9VEE
>>711
レスありがとうございます。

実は以前は""で括っていました。
これが文字化けの原因かも?と思い現在は""を外しているわけですが
やはり文字化けしてしまっているという状況です。

この問題が解決できれば、多くのWeb管理者さんが助かることになると思います。
(もちろん私もですが…)
どうか皆さん、お知恵をお貸しください。
0713nobodyさん04/11/13 19:20:00ID:???
化けるメールと化けないメールのヘッダを比べてみたら?
0714nobodyさん04/11/13 19:33:36ID:j/c/9VEE
>>713
レスありがとうございます。

何度も見直しているのですが、PCのメーラから送ったものと特に違う箇所は無いのです。
(Received、Message-ID、X-Mailer等は抜かします)

Subjectは両方ともISO-2022-JPのBでエンコーディングして(されて)います。
0715nobodyさん04/11/13 19:40:31ID:???
Charset=iso-2022-jp ではダメか?
とにかく化けたメールのヘッダを晒してみんしゃい
0716nobodyさん04/11/13 19:42:20ID:???
ごめん 710にかいてあった 鬱
0717nobodyさん04/11/13 19:56:16ID:???
自作のCGI(PHPのPEAR:Mailを使用)で、710と同じヘッダでInfoseek宛に
メール送信してみたが、文字化けはしない。

710の使っているCGIとHTMLのソースを見たら、原因が分かるかも。
0718nobodyさん04/11/13 20:03:52ID:???
>>709
>>708じゃないけど、よかったら教えてくださいな。

>>710
本文の文字コードが2022-JPかどうかをもう一度確認。
071971004/11/13 20:07:15ID:j/c/9VEE
>>717
あまり綺麗なソースではないので恥ずかしいのですが、よろしくお願いします。
xxxの箇所は伏せさせてください。

my $mailer = '/usr/sbin/sendmail';
my $mlfr= 'xxx@xxx';
my $mlto= 'xxx@infoseek.jp';
my $mlsb= 'xxx';
my $mlmsg = "あああああ";

my $mlhd= "Reply-to: $mlfr" . "\n" . "MIME-Version: 1.0" . "\n" . "Content-Type: text/plain; charset=iso-2022-jp" . "\n" . "Content-Transfer-Encoding: 7bit" . "\n" . "From: $mlfr" . "\n" . "To: $mlto" . "\n" . "Subject: $mlsb" . "\n\n";

my $err = 0;
open( MAIL, "| $mailer -t -f'$mlfr'" ) or $err = 1;
if ( $err == 0 ) {
 print MAIL $mlhd;
 print MAIL $mlmsg;
 print MAIL "\n";
 close( MAIL );
}

なお、通常のメーラ、そしてyahooやhotmailなど他の無料メールサービスでは正常に表示されています。
0720nobodyさん04/11/13 20:35:30ID:???
$mlmsgはホントにiso-2022-jpか?
0721nobodyさん04/11/13 21:16:07ID:???
> my $mlmsg = "あああああ";
でエラー出てないから、送ってるコードはiso-2022-jpじゃ無いだろ。
コード変換しろ。
072271004/11/13 21:17:27ID:j/c/9VEE
>>720
鋭いご指摘ありがとうございます。
素晴らしく見事に見過ごしてました…orz

$mlmsgにコード変換かますことで解決しました。
皆さんありがとうございました。
0723nobodyさん04/11/13 21:19:42ID:???

- - - - - ここまで釣り - - - - -
0724nobodyさん04/11/13 21:25:31ID:???
>ググってみたところ同じ問題を抱えているweb管理者さんがたくさんいることはわかったのですが
...
0725nobodyさん04/11/13 21:26:44ID:???
                    |
                    |
                    │
     /V\            J
    /◎;;;,;,,,,ヽ
 _ ム::::<,,゚ A゚>::| ジーーッ
ヽツ.(ノ:::::::::.:::::::.:..|)
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U'
0726nobodyさん04/11/13 21:33:59ID:???
>この問題が解決できれば、多くのWeb管理者さんが助かることになると思います。
...
072771004/11/13 21:37:32ID:???
お騒がせしてしまい申し訳ないです。
でも決して釣りなどではありませんから、ええ本当に…('A`)

例えば大手サイトでもこんな感じで…
ttp://www.e-casio.co.jp/support/080.html

とにかくすみませんでしたorz
0728nobodyさん04/11/13 23:06:05ID:???
>>727
その文字化けの注意点は
710が思ってる文字化けの問題ではないと思われる
0729nobodyさん04/11/14 00:51:05ID:???
>>710

my ($err);
my $mailer = '/usr/sbin/sendmail';
my $mlfr= 'xxx@xxx';
my $mlto= 'xxx@infoseek.jp';
my $mlsb= 'xxx';
my $mlmsg = "あああああ";

my $mlhd= "Reply-to: $mlfr" . "\n" . "MIME-Version: 1.0" . "\n" . "Content-Type: text/plain; charset=iso-2022-jp" . "\n" . "Content-Transfer-Encoding: 7bit" . "\n" . "From: $mlfr" . "\n" . "To: $mlto" . "\n" . "Subject: $mlsb" . "\n\n";

if (open( MAIL, "| $mailer -t -f'$mlfr'" ))
{
  print MAIL $mlhd;
  print MAIL $mlmsg;
  print MAIL "\n";
  close( MAIL );
} else {
$err = 1;
}

関係ないけど、こんなのどう?
0730nobodyさん04/11/14 05:48:52ID:???
>>729
my $mlhdの行がイモ過ぎる。
書き直してやれよ。
0731nobodyさん04/11/14 09:59:57ID:???
my $mlhd=<<EOF;
Reply-to: $mlfr
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
From: $mlfr
To: $mlto
Subject: $mlsb

EOF
0732nobodyさん04/11/14 10:57:46ID:???
メールの改行コードって ¥r¥n じゃなくていいんだっけ?
0733nobodyさん04/11/14 13:07:57ID:???
>>731
そのままprintしてもいいよね

print MAIL <<_EOF;
Reply-to: $mlfr
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
From: $mlfr
To: $mlto
Subject: $mlsb

_EOF
0734nobodyさん04/11/14 19:41:44ID:???
>>732
sendmailがよきにはからってくれるが、明示的に
print MAIL <<_EOF;
Reply-to: $mlfr\r
MIME-Version: 1.0\r
Content-Type: text/plain; charset=iso-2022-jp\r
Content-Transfer-Encoding: 7bit\r
From: $mlfr\r
To: $mlto\r
Subject: $mlsb\r
\r
_EOF
とする方が望ましい。
0735nobodyさん04/11/14 20:17:27ID:???
(;゚Д゚)
0736nobodyさん04/11/14 20:17:29ID:???
(my $mlhd = <<"EOF") =~ s/(?<!\r)\n|\r(?!\n)/\r\n/g;
Reply-to: $mlfr
...

EOF
0737nobodyさん04/11/15 00:54:44ID:Pp2G7AAw
ここで質問してよいのか迷ったのですが、もし不都合でしたら御指摘ください。

perlのスクリプト中で、あるURLのhtmlファイルを取得して、そのファイルの
データを処理したいのですが、その取得方法がわかりません。

ぜひご教授お願いします。
0738nobodyさん04/11/15 01:29:15ID:???
>>703
遅レスだが、ポータビリティを重視するならFile::Spec
使ったほうがいいんじゃない?
0739nobodyさん04/11/15 01:40:44ID:???
>>734
本気で言ってるのか?

>>737
http://pc5.2ch.net/test/read.cgi/php/1097158988/351-
0740nobodyさん04/11/15 02:56:46ID:???
ソートに関して…躓いています。

@data = (
'あ,1,A',
'い,2,B',
'う,3,C',
'え,4,D',
'お,5,E',
'か,6,F',
);

という例があったとして、これを数字でソートし、
さらに4にもっとも近い順からソートしたいのですが、これが上手くいきません。
方法があれば何卒教えて頂きたく思います。どうか宜しくお願いします。
0741nobodyさん04/11/15 04:31:28ID:???
こんなんじゃ?
for(@data){
$data{$_}=abs(4 - (split(/,/,$_))[1]);
}
foreach (sort {$data{$a} <=> $data{$b}} keys %data){
print $_, "\n";
}
0742nobodyさん04/11/15 07:00:56ID:???
my @new = map{ $_->[1] }
sort{ $a->[0] <=> $b->[0] }
map{ [abs((split(/,/))[1]-4), $_] } @data;

--
# 数字は8桁以内
my @new = map{ substr($_, 8) }
sort{ $a cmp $b }
map{ pack('A8A*', abs((split(/,/))[1]-4), $_) } @data;

--
# >>741さんと同じハッシュ使用
my %temp = map{ $_ => abs((split(/,/))[1]-4) } @data;
my @new = sort{ $temp{$a} <=> $temp{$b} } keys %temp;
0743nobodyさん04/11/15 08:47:06ID:???
>map{ pack('A8A*', abs((split(/,/))[1]-4), $_) } @data;
map{ sprintf('%08d%s', abs((split(/,/))[1]-4), $_) } @data;
だね…。
0744nobodyさん04/11/15 10:38:06ID:???
すみません、便乗でいいですか?
>740さんの例題をすこし弄って、

@data = (
'赤,あ,1,A,6',
'青,い,2,B,5',
'赤,う,3,C,4',
'青,え,4,D,3',
'赤,お,5,E,2',
'青,か,6,F,1',
);

これを>740さんの質問通り三つ目で四に最も近い数字でソートします。
この後が僕の質問なんですが、
これを更に一番目でソートし、最後に五番目でソート…
というのは出来ますでしょうか?
具体的にはこんな感じでしょうか?

@data = (
'青,え,4,D,3',
'青,い,2,B,5',
'青,か,6,F,1',
'赤,う,3,C,4',
'赤,お,5,E,2',
'赤,あ,1,A,6',
);

一応、>741さんや>742さんの解答を参考に頑張ってみたんですが、
やっぱり上手くいきませんでした。
複雑だし無理かもしれませんがどうかお願いします。
0745nobodyさん04/11/15 11:14:04ID:???
sort { } の中身を工夫すればできる
できなければ駱駝本を買って sort 関数のところを読め
0746nobodyさん04/11/15 12:09:37ID:44z8JY7I
jcode.pl v2.13 を使っているのですが、大量のバッチ処理をしていてふと
気付いたら、以下のようなメッセージが極々々まれに出てるのに気付きました。

Character in "C" format wrapped at [フルパス]/jcode.pl line 554.

行554には $s2e{$code} = pack('CC', $c1, $c2); とかかれているのですが、
恥ずかしながらなぜ警告(?)メッセージが出てるか自分でわかりません。

どなたか教えて頂けないでしょうか?
(ネットで探してみましたがちょっとよく分からくて)
0747nobodyさん04/11/15 13:27:24ID:???
$c1と$c2の値がすでに文字列なんじゃないの。
0748nobodyさん04/11/15 14:04:03ID:???
>>746
とりあえず診断メッセージがわからないときはperldiag(1)を
見るのがいいと思うのだが。

Character in "C" format wrapped in pack
(W pack) You said

pack("C", $x)

where $x is either less than 0 or more than 255; the "C" format is
only for encoding native operating system characters (ASCII,
EBCDIC, and so on) and not for Unicode characters, so Perl behaved
as if you meant

pack("C", $x & 255)

If you actually want to pack Unicode codepoints, use the "U" format
instead.
0749nobodyさん04/11/15 15:03:24ID:44z8JY7I
>>748
ありがとうございます。英語力は全く無いのですが、
0〜255の範囲以外のが来てるのでエラーになっているのですね。色々試しています。
075073704/11/15 21:26:40ID:YvLIGcES
>>739

ありがとうございます。LWPを使ってうまくいきそうです
(何をやってるのか自分でまだ理解できてなかったりしますが・・・)
0751nobodyさん04/11/15 22:45:40ID:v6KPj5Kw
漠然とした質問で申し訳ないんですが、1000行程度の1対1対応のデータを
1回のプロセスで何度も検索する場合、あらかじめハッシュを作った方が速くなるのでしょうか?
いまいちハッシュの性能というのが分からないのですが、検索キーをかえるたびに
1行目から値を探していくのと、ハッシュにキーを入れて値を得るのと、
ハッシュのほうが速そうな気がするんですが、やっぱり速いでしょうか?
0752nobodyさん04/11/15 23:40:04ID:???
>>751
case by caseとしか言いようが・・・
行という言葉を簡単に使ってるけども、
実際には行の切り出しという処理が入るわけだし、
それなら固定長でデータを扱う方が早いわけだし、
ハッシュというか位置インデックスを作れば固定長の呪縛が無くなるし、
というか何度も検索する必要があるのか?という根本的な疑問も残るし、
長くなったがオレの言いたいことはこれだね!
なんで試してみない?
■ このスレッドは過去ログ倉庫に格納されています