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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/06/05(土) 21:11:10ID:???
Perlのコーディングで困ってる人のスレです。

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

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

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1251989472/
0052nobodyさん2010/06/07(月) 15:34:41ID:???
>>49
リファレンスとモジュールなら「続・初めてのPerl 改訂版」だな。

あと「Perlベストプラクティス」も読んどけ。
0053nobodyさん2010/06/07(月) 15:35:46ID:???
>>49
【Perl,CGI】参考書籍 第四版
http://pc11.2ch.net/test/read.cgi/php/1250989562/

>>51
fooは元々引数を1つ取るサブルーチンだけど、忘れて呼び出すとどうなるか。
use strict;
use warnings;
sub bar{ &foo }
sub foo{ print shift }
bar("Hello, World!");
と
use strict;
use warnings;
sub bar{ foo() }
sub foo{ print shift }
bar("Hello, World!");
を比べるといいよ。
0054nobodyさん2010/06/07(月) 15:48:32ID:6I7S3VUo
>>52
>続・初めてのPerl 改訂版」
これか。
http://www.amazon.co.jp/gp/reader/4873113059/ref=sib_dp_pt#reader-link
この本は難しいんだよなあ。(;´Д`)

>Perlベストプラクティス
これも。
http://www.amazon.co.jp/gp/reader/4873113008/ref=sib_dp_pt#reader-link

これらのシリーズは難しくて・・・(;´Д`)
0055nobodyさん2010/06/07(月) 16:16:24ID:U/buYqwE
今、ちょっと思い当たることがありました。
リファレンスってひょっとして二次元配列などの縦横座標のあるデータを扱う為の概念ですかね?
こんな感じ。

      商品コード | 商品名 | 価格 | 内容
商品A
商品B
商品C

これを座標指定で呼び出す為の概念ですかね?
そうだとしたらかなり理解が進んだ気がします。
今、そこのところ勉強中です。
0056nobodyさん2010/06/07(月) 16:23:10ID:???
リファンレスはポインタもどきだと何度行ったらわかるんだよ
0057nobodyさん2010/06/07(月) 17:44:27ID:???
ここはレガシーな環境を無視するスレですか?
0058nobodyさん2010/06/07(月) 17:45:09ID:???
>>57
サブルーチンを&つけて呼ぶのは普通だよ。だまされないようにね。
0059nobodyさん2010/06/07(月) 18:02:35ID:ne0ODycT
>>56
ここでのポインタに意味がわからない。

>>57
レガシーってどういう意味?
英和辞書に載っていない。
0060nobodyさん2010/06/07(月) 18:12:18ID:???
>>57
質問するときにPerl4以前の環境であることを明言すればいいんじゃないの?
0061nobodyさん2010/06/07(月) 18:15:09ID:???
しかしいまどきperl4使ってる奴なんているのか?
0062nobodyさん2010/06/07(月) 18:22:17ID:yJ6kU2rx
バージョンなんて気にしてる?
私などはバージョンのことなんかまず考えていない。
いつのまにか変わってるみたいな。
バージョンの特徴を生かせないけどさ。
0063nobodyさん2010/06/07(月) 18:32:22ID:yJ6kU2rx
リファレンスの件、うっすらとわかってきました。
つまり、スカラーや配列やハッシュの指定方法では指定できない場合に使うのがその使用法の一つなのかな?と。
0064nobodyさん2010/06/07(月) 18:32:40ID:???
リファレンスをポインタといわれると、めんどくせーもんとしか思えなくなる
オブジェクトと思え
0065nobodyさん2010/06/07(月) 19:14:43ID:???
リファレンスはリファレンス。
オブジェクトでもないしポインタでもない。
このスレにJAVAとかCに精通してる人が質問しに来るとは
思えんし。

自分の中で理解するのは構わんが、勝手に「~の様なもん」とか
「~と思え」ってーのは無しにしないか?
誰もが貴方達のバックグラウンドを持ってる訳では無い。
0066nobodyさん2010/06/07(月) 19:17:10ID:???
だいたい、perlのオブジェクトはblessされたリファレンス
0067nobodyさん2010/06/07(月) 19:27:14ID:ejsF48jq
プログラマーって個人差すごくありそうだね。
もし仮に一ヶ所に集まって会議したらまとまるんだろうか?
0068nobodyさん2010/06/07(月) 19:31:25ID:???
いちいち上げんなよ。
0069nobodyさん2010/06/07(月) 19:49:00ID:???
age-sageとかどうでもよすぎワロタ
0070nobodyさん2010/06/07(月) 20:01:08ID:???
ttp://amazon.jp/dp/4774135046
リファレンスとかオブジェクト指向とか、これがすごく分かりやすかった
0071nobodyさん2010/06/07(月) 21:03:08ID:fBML121+
オブジェクト指向ってどういう意味なんですかね?
まだ悟れないでいます。
0072nobodyさん2010/06/07(月) 21:17:16ID:???
そうやって、耳慣れない単語が出たら全て質問するつもりか?

素直に参考書の一冊でも読め。
お勧めは既に出てる。
0073nobodyさん2010/06/07(月) 21:19:37ID:fBML121+
翔泳社の10日でおぼえるPerl CGI入門が私の入門書です。
0074162010/06/07(月) 21:35:33ID:Ha23rV7v
ごめんなさい
もうコードが馬鹿な自分でもわかるくらい滅茶苦茶になってるので
もう一回デフォルトのを最初から改造したら解決しましたm(__)m
せっかくレスしてくれた人に申し訳ないです

とりあえず
出直してきます。
「は?何て言ってんのコレ?」っていうのが多すぎました。すみません。
0075nobodyさん2010/06/08(火) 18:08:50ID:e74okk0C
リファレンスとはC言語のポインターのようなもんだって話があるけど、
この言い方はC言語を知らないと理解できない言い方だよね。
0076nobodyさん2010/06/08(火) 18:11:03ID:???
Cもやれってことじゃないかな
0077nobodyさん2010/06/08(火) 18:20:33ID:e74okk0C
このスレってどの時間帯でも誰かいそうですねw
ネット事業者だから常にネットができる環境下にあるからと思うけど、
何人くらいいるのかな?いや、心強いなとおもって。
0078nobodyさん2010/06/08(火) 18:38:27ID:???
変数や配列、ハッシュ、関数への参照を示した文字列と言ってもわけわからんだろ
0079nobodyさん2010/06/08(火) 20:17:58ID:???
前スレからリファレンスなんちゃら言ってる人は
多次元配列もどきのことだけなんとなくわかればいいんでないの?

このへん。
http://perldoc.perl.org/perllol.html
http://perldoc.perl.org/perldsc.html
0080nobodyさん2010/06/10(木) 22:50:37ID:e7/5TejE
perlでメール送信プログラムを作ってます。

Net::SMTPを採用。
どこのサイトもエラーを拾ったりせずに、
$smtp->data();
$smtp->datasend("");
・・
$smtp->dataend();

と、コーディングしていますが。
これって普通はエラーを拾ったりしてやる必要があるんですよね?
メール送信がうまくいかず、各行にor dieを付与してチェックしてみました。

すると$smtp->data()の部分でdieしていました。

・・・が、具体的なエラー内容がわからず。
こういう場合どうしたらいいんでしょうか?

アドバイスをばお願いいたします。
0081nobodyさん2010/06/10(木) 23:11:27ID:???
ifでくくりゃいいんじゃね?
0082nobodyさん2010/06/10(木) 23:33:06ID:???
die $! とか?
0083nobodyさん2010/06/11(金) 00:04:39ID:???
>>80
> こういう場合どうしたらいいんでしょうか?
マニュアルとソースを読む。
http://search.cpan.org/dist/libnet/Net/SMTP.pm
0084802010/06/11(金) 01:15:57ID:HNRsRFk/
皆様ありがとうございます。

>83
マニュアルに明記されてます?(見落としてるだけ?
ソースは・・・すいません見てみます!
0085802010/06/11(金) 02:34:15ID:HNRsRFk/
Net::SMTPをDebug => 1で実行した所、メールアドレスがおかしくなっていたのが原因のようです。

メールアドレスの@がperlに解釈されてしまっていたのが問題でした。

ついで質問なのですが、メールアドレスの受け取りをCGI::Applicationにて
my $mail = $self->query->param('mail');
のような感じで受け取っています。

この部分を
my $mail = '[email protected]';
とすることで正しくメールが送られることは確認しました。

my $mail = $self->query->param('mail');
の時点で@をperlに解釈させないようにするにはどうしたらいいでしょうか?

受け取ってから@をエスケープすればいいんだとは思いますが、
他にスマートな方法ありましたらアドバイスお願いします。
0086nobodyさん2010/06/11(金) 03:29:52ID:???
エスケープする以外の方法があれば大発見
0087nobodyさん2010/06/11(金) 09:02:50ID:???
そもそも@の解釈なんて文字列に埋め込んだときしか行われないんだから、
CGIに渡ってくるものがそもそもおかしいんじゃねーの?
0088nobodyさん2010/06/14(月) 21:40:31ID:mh5UZ2p/
selectで標準出力の変更は出来ますが、標準エラー(STDERR) を変更する
方法はないでしょうか?


色々テストのスクリプトを書いているのですが、「エラーが出る」確認の
テストを書こうと思ったら、die で死ぬのを eval することは出来ても
STDERR への表示を消すことが出来なくて困っています。

STDERR への出力を一旦抑制して、また元に戻すといったことはできない
でしょうか?
0089nobodyさん2010/06/14(月) 22:26:22ID:???
http://www.google.co.jp/search?q=perl+STDERR+%E5%A4%89%E6%9B%B4&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
0090nobodyさん2010/06/15(火) 12:07:10ID:FKT5DQzr
>>89
ありがとうございます。分かりました。
0091nobodyさん2010/06/15(火) 23:46:20ID:???
どなたかお願い致します。
perlで、FTPSによるファイル送信を行いたいと考えております。
調べたところNet::FTPSSLというモジュールがあるのですが、
現在契約しているホスティングサーバーではインストールされて
おりません。
そこでNet::FTPSSLのモジュールをダウンロードしてみると、FTPSSL.pmという
ファイルがありました。このファイルをrequireするなどして、なんとか
インストールしないで動作させたいと考えておりますが、このような
事は可能なのでしょうか?
0092nobodyさん2010/06/15(火) 23:54:04ID:???
perl use lib
0093nobodyさん2010/06/21(月) 00:35:12ID:5zE9MeIY
マルチポストです。
申し訳ありません。
あまりCatalyst版には人がいないようなので、
こちらにも質問させて下さい。

Catalyst を勉強中です。

モデルをCatalystから分離した方が良いとは
知っていますが、とりあえず勉強中なので、
app_create.pl model で DBIC を作りました。

ところが出来上がった Schema/Result/ 以下の
クラスにメソッドを定義しても呼び出す事が
出来ません。

ログではこのように出ています。
Can't locate object method "foo_bar" via package "DBIx::Class::ResultSet"

見るとResult以下のクラスのベースクラスは
DBIx::Class:Core でした。

自分でも何かとんちんかんな事を聞いている気がするのですが、
Catalyst で ResultSetに メソッドを定義したい
場合はどのようにすればよいか教えていただけますか。

宜しくお願いします。
0094nobodyさん2010/06/21(月) 07:15:52ID:???
>>93
カタリーは使ったことないからわからないが。

useし忘れてパッケージ名で呼ぶとそのエラーメッセージがでますよね。
"そのパッケージにそんなメソッドないです"なのでバージョン違いの資料を使ってないか等も疑ってみたらどうでしょう。
0095nobodyさん2010/06/21(月) 17:53:00ID:???
カタリストってカタリーって略すのがPerl使いの正しい姿?
0096942010/06/21(月) 18:33:46ID:???
>>95
いや、5文字がめんどくさい怠け者の略し。

よい子のパーラーは真似しちゃいかんと思う
00971942010/06/21(月) 23:42:36ID:???
>>105
ありがとうございます。
やはりそうですよね。。
そこに追加しているんですが、呼び出せないです。

気になったのはResultSet 云々のエラーメッセージがでてるけど、そこのクラス群はDBIC::Core が親になっている事でした。

モデルは自動生成させているので、手では作っていないです。

何かの手順間違いでおかしな事になってるんですかね。
再確認します。
0098nobodyさん2010/06/22(火) 00:30:08ID:???
分かりました。
load_components に ResultSetManager とメソッドに ResultSet 属性が必要なのですね。
Catalyst というよりはまるまるDBICでした。

ありがとうございました。
0099nobodyさん2010/07/01(木) 11:32:54ID:???
文字列"ABC"が無くて"DEF"が有る場合はどう書けばよいですか?

/(忘ABC)DEF/ or die;

忘の所に何と書くのか教えてください。
0100nobodyさん2010/07/01(木) 11:43:38ID:???
/ABC/ and die;
/DEF/ or die;

じゃだめなん?
0101nobodyさん2010/07/01(木) 11:47:10ID:???
?!
0102nobodyさん2010/07/01(木) 12:28:30ID:???
「直前にABCが無いDEFにマッチする」ということを言ってるんなら /(?<!ABC)DEF/
0103992010/07/01(木) 12:50:10ID:???
>>100
>>101
>>102
みなさんありがとうございます。
やりたいのは>>102さんの言う通りなのですが、説明が下手で
どうとでも取れるような書き方だったと反省しています。
回答ありがとうございました。
0104nobodyさん2010/07/21(水) 09:46:20ID:???
perl 5.8.8 でImageMagick 6.6.1を使って画像変換しようとしているのですが
$image->Distort("virtual-pixel"=>"Transparent"
と指定しても背景が透過になってくれません。
Black, White, Random など別の物を指定すると変更されます。

ImageMagickの問題なのですが、Perlで使用しているのでこちらへ質問させていただきました。
スレ違いでしたら誘導をお願いします。
0105nobodyさん2010/07/30(金) 18:42:05ID:???
>>104
バックグラウンドカラーは設定した?

$image->Set('background' => 'none');
0106nobodyさん2010/08/02(月) 03:12:00ID:???
>>102
正確な知識が無いなら黙っててくれる?
0107nobodyさん2010/08/02(月) 03:40:13ID:FdS+e4Ne
 ひと月も前のレスに噛み付かれても、、、
01081022010/08/02(月) 04:45:31ID:???
なんかごめん
0109nobodyさん2010/08/02(月) 13:10:55ID:???
夏だ
0110Perl神2010/08/02(月) 17:08:54ID:9KfPyaTP
カタリストの語りがうざい まじカタリ!!!!!!
0111nobodyさん2010/08/02(月) 21:04:27ID:fXTYTb4c
愚問でしょうがお許しください。

配布されてるCGIゲームを改造中の初心者です。とほほのPerl入門とか見ながらやってます。参考書とかは持ってません
モンスターの経験値などを設定するのにモンスターの画像名を番号にして
番号が大きければ大きいほど経験値も多くなる・・・という風にしたかったのですがいい方法が思いつきませんでした。
文字列の中の数字("100.gif"とかの100)を数値に変換して扱う方法を教えて欲しいのですが・・・無いですかね
0112nobodyさん2010/08/02(月) 21:10:15ID:28r5QWdl
>>111
my $file = "100.gif";
my $ex = $1 if $file =~ m/^([0-9]+)/;
print $ex; # 100

こういうこと?
0113nobodyさん2010/08/04(水) 16:57:20ID:???
しかも>>102は質問者の疑問をちゃんと解消しているのに
0114nobodyさん2010/08/09(月) 18:03:38ID:K6ZCyo17
use threads + XML::FeedPPでRSSを巡回するCGIを作成しています。
巡回して取得したRSSをブラウザに書き出すだけのプログラムです。

チェック先のRSSが200件程度まではうまく動作していたのですが、
現状250件でHTMLへの書き出しが途中で止まってしまいます。

最初はタイムアウトを疑っていたんですが、
ブラウザのkeep-alive、httpd.confのtimeout値も300になっています。
(プログラム実行時間は30秒程度)

スレッド数に上限とかあるんでしょうか?
なにかヒントを頂けたらありがたいです。

よろしくお願いいたします。
0115nobodyさん2010/08/09(月) 18:18:39ID:???
スレッドを数百発行してないかチェック。
01161142010/08/09(月) 18:25:11ID:K6ZCyo17
>>115

チェック対象のRSS数のスレッドをnewしてthread->joinで終了待ちしてます。
なので、仰るとおり100以上のスレッドを発行している状態です。。。

ありがとうございます。修正してみます。
01171142010/08/09(月) 18:38:49ID:K6ZCyo17
すみません、よくよく考えたらThread::Semaphoreで並列数を50に設定していました。
なのでスレッド数はマックス50件です。
0118nobodyさん2010/08/09(月) 18:41:09ID:???
いったんブラウザではなくコンソールで実行してみて、全ての RSS に対して
  最終実行日時
  実行結果の HTTP レスポンス
  取得に掛かった時間
を記録して、どこが引っかかってるのかチェックしてみては?
01191142010/08/09(月) 18:51:43ID:K6ZCyo17
>>118

特定のRSSが原因かと思い、チェック順序を逆順にしたりして検証しましたが、
やはり数が問題のようです。どのようなRSSをチェックさせても220〜225件程度
チェックしたあたりでHTMLの出力がとまってしまいます。
(コンソールでも同様です)

※追加情報
apacheのエラーログには「Out of memory!」、「Ouf of memory(Needed 8164 bytes)」
と記述されていました。
スタックサイズが足りない???
0120nobodyさん2010/08/12(木) 21:38:33ID:???
perl で thread 使う時点で ng
0121nobodyさん2010/08/14(土) 15:19:13ID:5o00tDGC
my $query = CGI->new;
*in = $query->Vars();
Encode::from_to(*in, 'shiftjis', 'utf8');

でUTF-8にエンコードされません
やりかたが違うんでしょうか?
0122nobodyさん2010/08/14(土) 15:50:24ID:5o00tDGC
でけた事故解決

my $query = CGI->new;
*in = $query->Vars();
foreach (%in) {
Encode::from_to($_, 'shiftjis', 'utf8');
$_ =~ s/</</g;
$_ =~ s/>/>/g;
$_ =~ s/'/&squot;/g;
$_ =~ s/"/"/g;
}
0123nobodyさん2010/08/26(木) 19:02:59ID:???
<img>タグ内にPerlの処理結果を挟み込む場合の動作がよくわからず悩んでます。
ヒントなどあればお願いします。


PerlでHTMLを出力し、その中で動的にグラフを生成しようとしています。
まず以下のようにして、望みどおりの出力を得ました。
print '<img src="graph.cgi">'; #OK

これを以下のようにすると、画像でなく文字列が表示されてしまいます。
print '<img src="'. (require 'graph.cgi') . '">'; #NG

またモジュール化してgetした場合も、同じく文字列が表示されてしまいます。
print '<img src="'. $graph->get(\@data). '">'; #NG


なお、いずれも処理側は画像を以下のように出力しています。
print "Content-type:image/gif\n\n";
binmode STDOUT;
print $image->gif; #GD::Graphを使っている

文字列が表示されてしまう場合でも、
出力をSTDOUTからファイルに変えてみれば画像はちゃんと生成されているようです。


疑問1) 1番目の例はOKで他がNGな理由がいまいちわかりません。
疑問2) 3番目のようにOOPな感じで通したい場合、どう記述すればよいのかわかりません。


PerlでなくCGIの範疇だったらすみません。判断がつかないのです。
0124nobodyさん2010/08/26(木) 19:27:18ID:???
グラフを出力部分を別ファイルにした方がいいかな?

graph.cgi でグラフ出力

HTML は
print '<img src="graph.cgi">';
で OK

graph.cgi にパラメータを渡す必要があっても、
graph.cgi?x=??&y=??
っていう風にすればいいだけなので解決できる
01251232010/08/26(木) 20:13:27ID:???
やはりその方法か、画像ファイルを出力してそれを表示するしかないですかねー

\@dataとして渡したい内容が、わりと複雑なため(24時間のアクセス統計3〜5種類など)
リファレンスで渡せると楽だったのですが

レスありがとうございました
0126nobodyさん2010/08/26(木) 21:45:13ID:???
getのREQUEST URIは長さ制限があるから、あんまり引数が長くなるなら考えた方が良い
つかそれならHTMLは静的でいいんじゃないか
0127nobodyさん2010/08/31(火) 07:50:54ID:???
$image->gifをbase64でエンコードして
<img src="data:image/gif;base64,ここ">
でいけるかも
01281232010/08/31(火) 14:10:20ID:???
できた!

モジュールの側で return MIME::Base64::encode($image->gif); として、
これを教えていただいた通りデコート指定(?)つきでimgタグに入れたら見事に表示されました

これですっきりしました。どうもありがとうございました

しかしこれ、PerlというよりHTMLの問題だったかもしれませんね
見分けがつかずこちらで質問してしまい、失礼いたしました
0129nobodyさん2010/09/04(土) 16:33:18ID:???
>>128
そんなことしてGD使ってサーバに負荷かけるより

棒グラフなら素直に

$resultW=幅ピクセル;
print '<img src="pink.gif" style="width'.$resultW.'px;height:5px">

とかってやった方が早くね?

円グラフならGD使う意味は分かるが。。
0130nobodyさん2010/09/07(火) 21:05:39ID:KEDp6nh+
よくあるurlの自動リンクですが、urlが長いとレイアウトを
崩してしまうので、ある一定の長さ以上は省略したいです。

正規表現に組み入れてできませんよね?
となると、一旦配列に入れて一行ごとに処理せねばなりませんか?
0131nobodyさん2010/09/07(火) 22:10:00ID:???
>>130
$text =~ s{($yourURLregex)} {
  my($url, $face) = ($1, $1);
  ...; # $face を適当に縮める
  qq|<a href="$url">$face</a>|;
}eg;
0132nobodyさん2010/09/07(火) 23:24:24ID:???
サンクス
テストで
$yourURLregex= "s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+";
$face = substr($face,1,30);
でやってみたけど、エラーが出ちゃいます
下の式抜いてもだめです
0133nobodyさん2010/09/08(水) 00:34:07ID:???
結局、置換を2つに分けることにしました
1回目でurlにマーク付けて、2回目でマーク内をsubstrでカット

不格好ですけど
0134nobodyさん2010/09/08(水) 05:08:05ID:???
別にエラーなんて出ないんですが^^;
エラーって出るのは、あなたがエラーしてるからからでは
0135nobodyさん2010/09/08(水) 17:31:08ID:???
全角スペースが原因に一票
0136nobodyさん2010/09/08(水) 17:47:40ID:J/6++5D2
なんででしょうね「" 」をシングルに替えてもだめです。
さくらインターネットですが。
0137nobodyさん2010/09/08(水) 19:15:02ID:???
$yourURLregex=qr/regexp/
してみ?
0138nobodyさん2010/09/08(水) 21:52:41ID:???
>>132
> $yourURLregex= "s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+";

エラーにはならないが $, が展開される。
http://perldoc.perl.org/perlvar.html

>>136
>>1

>>137
それだけでは実行結果に影響しない。
http://perldoc.jp/docs/perl/5.12.1/perlop.pod

print(
  "'abcde' =~ '$_' => ", 'abcde' =~ $_ ? '' : 'un', "match\n",
  "'abcde' =~ /$_/ => ", 'abcde' =~ /$_/ ? '' : 'un', "match\n",
  "'cdefg' =~ '$_' => ", 'cdefg' =~ $_ ? '' : 'un', "match\n",
  "'cdefg' =~ /$_/ => ", 'cdefg' =~ /$_/ ? '' : 'un', "match\n",
) for '^[a-e]{5}\z', qr/^[a-e]{5}\z/;
0139nobodyさん2010/09/08(水) 23:03:55ID:???
お前ら読解力あるな
0140nobodyさん2010/09/09(木) 21:27:24ID:???
読解力ないと回答なんてやってられんでしょ
0141nobodyさん2010/09/14(火) 10:39:40ID:RoOJ13yO
自作のアクセス解析を制作しているんですが、
検索エンジンからのアクセスでキーワードだけ抽出しているんですが、
エンジン毎に左オペランド?が違うのと、文字コードが違うようです。
やっぱりエンジン毎に処理を分岐するしかないですかね?

文字化けが発生する毎に分岐処理に新処理を付け加えています。
なんとか処理を単純化できないだろうか。
0142nobodyさん2010/09/14(火) 10:54:46ID:???
分岐するしかないだろうね
デコード処理はguessとかでどうにでもなるけれども
0143nobodyさん2010/09/14(火) 11:40:18ID:???
Strategyあたりのデザパタで書けば見通しは良くなるかもね。
でも結局それぞれ違うんだから処理は書かなきゃしょうがない
と思う。
0144nobodyさん2010/09/14(火) 11:47:53ID:RoOJ13yO
うー、guess に strategy と初めて接する関数が出てきた・・・(;´Д`)
手元の逆引き大全の索引をみる限り、両者ともでてこない。
そんなによく使う関数なの?
0145nobodyさん2010/09/14(火) 11:59:48ID:RoOJ13yO
モジュールですたか。(;´Д`)
http://www.ksknet.net/perl/encodeguess.html
0146nobodyさん2010/09/14(火) 12:08:36ID:???
まー検索エンジンごとに分岐するのがいいかな
0147nobodyさん2010/09/14(火) 12:50:04ID:RoOJ13yO
ちなみに、検索エンジンつってもほとんど知られていないエンジンもけっこうあるのね。
google yahoo bing goo exite biglobe nifty ・・・
そのレベルまでかな。まるっきり知られてないっぽいエンジンまで分岐するとなると分岐が増えて増えて・・・

先日の外部テキストに分離した部分は分岐の部分なんですよ。
require して使う話ね。
これなら、分岐の部分だけ増設できるでしょ。
0148nobodyさん2010/09/14(火) 13:36:17ID:???
>>147
perl界隈では有名(なのか?)なアクセス解析スクリプトの AWStats
http://awstats.sourceforge.net/

これのパッケージ内に、検索エンジンごとの定義ファイルみたいなのが含まれてるから、
それを参照するがよろし。

但し基本英語圏のエンジンがほとんどで、日本語圏のサイトは少ない。
あと、各エンジンごとの検索パラメータ、googleならq=,yahooならp=とかもある程度はわかるが、
さすがに文字コードまではわからんから、そこらへんは自前でやる必要があるけど、
かなり参考にはなると思う。
0149nobodyさん2010/09/14(火) 21:57:32ID:???
練習にutf-8で掲示板を作ってみようかと思ってる初心者なんですが、右も左もわからないんで教えてください。

cgiファイル、ログファイル、HTML出力すべてutf-8にしようと思ってるんですが、
use 〜;やbinmode ~;とか一般的に必要とする物ってあるんでしょうか?
自分の環境はwindowsで借りようと思ってる鯖がfreeBSDでperl5.8のようです。

ついでに文字コードがutf-8Nで改行コードはCR+LFでおkですか?
0150nobodyさん2010/09/14(火) 22:42:40ID:???
>>149
> 右も左もわからないんで教えてください。

>>1-2

何から勉強していいのか分からない
http://hibari.2ch.net/test/read.cgi/php/1101491473/
△▲ WebProg 初心者の質問 Part22 ▼▽
http://hibari.2ch.net/test/read.cgi/php/1272872528/
【Perl】掲示板を使ろう!
http://hibari.2ch.net/test/read.cgi/php/988890976/
自分の作ったCGIスクリプトをデバッグするスレ
http://hibari.2ch.net/test/read.cgi/php/1011174442/
自作CGIを評価するスレ
http://hibari.2ch.net/test/read.cgi/php/1049514428/

> 一般的に必要とする物ってあるんでしょうか?
無い。必要な処理を必要なだけ実装しなさいな。

> 文字コードがutf-8Nで改行コードはCR+LFでおkですか?

BOM無しが無難。
http://ja.wikipedia.org/wiki/UTF-8

スクリプトの改行コードは実行環境に、出力の改行コードは
HTTPの仕様や閲覧環境に合わせる。
0151nobodyさん2010/09/15(水) 07:35:37ID:???
本当の初心者なら文字コードより危険な入力を弾く勉強が先だと思うけど

その点英語圏は楽でいいよなー
■ このスレッドは過去ログ倉庫に格納されています