トップページphp
981コメント337KB

くだすれPerl(超初心者用)3

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/03/31(火) 22:20:27ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。

前スレ
くだすれPerl(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1204488452/

関連スレ
Perlについての質問箱 39箱目
http://pc12.2ch.net/test/read.cgi/tech/1234181856/
Perlコーディング初心者質問スレ Part 59
http://pc11.2ch.net/test/read.cgi/php/1234752149/
【Perl上級者コーナーPart01】
http://pc11.2ch.net/test/read.cgi/php/1024741312/
0780nobodyさん2010/03/24(水) 01:03:23ID:N7x4Tlpb
MIME::Parser 以外でメールの解析して添付ファイルを一発で保存できるモジュールってご存知ありませんか?
0781nobodyさん2010/03/24(水) 01:31:29ID:???
MIME::Parserが何でダメなん?
0782nobodyさん2010/03/24(水) 02:07:39ID:???
>>781
Perl5.8.8なのにMIME::Parserが入ってないレン鯖に手動コピーでは無理だったのと、
他のレン鯖ではJParserがうまく動かず、執着するのもなんなのでいっそのこと他にあればなぁと思いまして。

さきほどEmail::MIME::Attachment::Stripperを見つけて試していますが、タコなのでいいサンプルがないと使いこなせない^^;
0783nobody2010/03/25(木) 00:21:12ID:???
>>778

被害範囲はEncode内にとどまらずperlそのものが使いにくくなった。
perlはCGIで爆発的に普及したものの、WWWに対応しようと試みて
ユニコード化し、残念ながら失敗した。

もしEncodeがなかったらPHPもRubyも必要なかったのに。
0784nobodyさん2010/03/25(木) 00:29:49ID:???
はい?
0785nobodyさん2010/03/25(木) 01:06:49ID:bcbloiJg
Encodeがあるからわかりやすいけどなぁ。
まだ問題があるにしても、入りと出で変換しましょうってポリシーはわかりやすいと思う。
0786nobodyさん2010/03/26(金) 17:33:17ID:Tt84M8Ng
テキストボックスに入力された絵文字をutf8からsjisに上手く変換すること
ができません。

use Encode qw/ from_to /;
from_to($str, "utf8", "sjis");

で変換しようとしているのですが、太陽の絵文字を使うと16進でee98be→3f
となってしまいます。f89fに変換するにはどうしたらよいのでしょうか?
よろしくお願いします。
0787nobodyさん2010/03/26(金) 18:00:24ID:???
絵文字はメーカーが勝手に割り当ててるから文字コード変換できないでしょ
変換テーブル用意するとかしないと
0788nobodyさん2010/03/26(金) 18:01:01ID:???
テーブル用意すれば?
0789nobodyさん2010/03/28(日) 01:54:04ID:???
>>785 「入りと出で変換しましょうってポリシー」

そのポリシーが本当に分かりやすいのなら Unicode は生まれなかっ
たはず。

すでにあった ISO 2022 はそういった考えで世界中の文字を同時に
扱うことを考えていたのだけれど、現実は理想通りにはならなかっ
た。オクテット列が今、何の符号化なのか状態をもつようになるの
で検索や置換がとてもやりずらくて使い物にならない。

そこでエスケープシーケンスのないコードとして Unicode が開発
されたのでござる。

でも Encode は "フラグ" を再発明してしまって、同じ失敗を繰り
返してしまった。

これはきっとバベルの呪いだと思う。

0790nobodyさん2010/03/28(日) 03:13:58ID:???
めんどくせーから全世界の文字列を 64bit で割り当てちゃえよ

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000


先頭の 1bit が右から読むのか左から読むのか
2 〜 16 bit が言語コード
残りが文字コード

ほら簡単
0791nobodyさん2010/03/28(日) 08:35:53ID:???
>>789
いいから取り込んだら全部UTF8にしてフラグ建てて、出すとき好きなもんに変換しなされ。それだけだ。
0792nobodyさん2010/03/28(日) 08:56:47ID:???
自分で全部書くんなら別になんの問題もないけど、モジュールによってはフラグのあるなしで挙動が変わるのも多いし、どっちで渡すべきなのかPODに書いてなかったりするから困る。
0793nobodyさん2010/03/28(日) 11:17:51ID:Rvgpa/pp
>>792
>モジュールによってはフラグのあるなしで挙動が変わるのも多いし、どっちで渡すべきなのかPODに書いてなかったりするから困る。
あぁ、これは確かにそうだね
POD内でまずutf8とか検索したりする
0794nobodyさん2010/03/28(日) 20:17:39ID:???
『王様は裸だ』って言うのは、コメディアンの役割なんでしょうね
0795nobodyさん2010/04/01(木) 11:06:29ID:???
>>791
Perlのバージョンによっては無理ぽ
0796nobodyさん2010/04/01(木) 19:06:37ID:???
今時Perlのバージョンで困るのなんてWebArena使ってる奴くらいだろ
0797nobodyさん2010/04/02(金) 10:24:03ID:???
5.6なところって意外とあったりするんだよな
kawaisosu
ttp://www.value-domain.com/xreaip.php
0798nobodyさん2010/04/02(金) 11:31:49ID:???
そこはすげー昔から借りてる人がそのままってだけ
新規に借りて5.6なんてのは某大手のあそこくらいだな
0799nobodyさん2010/04/02(金) 11:41:29ID:???
>>796
ネット上のPerlの解説サイトって未だに結構多かったりする。
そういうサイトで独学している人ってそれなりの数がいると思うのね。
本気だして新刊を買わずにブックオフとかで入門書の古本を購入して独学する人もいるのではないかなと。
そういう目でネット上の解説サイトを眺めると2003年くらいの情報が意外に多かったりする。言わば最新バージョンに合わせて更新をしていないわけ。
今も昔も解説書に共通しているのはPerl ScriptやCGIを自作したらサーバーの負荷が多くならないように自前のサーバを立てて練習しようよねとも書かれてる。

Windowsに限って言えばダウンロードするPerlは5.6や5.8、中には5.10もあったりする。でも書籍は古いまま。
意外にバージョンの確認を怠った結果、動かないってことがあるのでは?と思った。
0800nobodyさん2010/04/02(金) 11:49:30ID:???
顧客情報漏れ祭り
http://anchorage.2ch.net/test/read.cgi/gamenews/1270138389/
0801nobodyさん2010/04/02(金) 13:09:21ID:???
>>799
他の言語でもよくある話だけど、そういうサイトを参考にするなって話だよね
情報が溢れちゃってて探しにくいってのがperlの良くないところということか
0802nobodyさん2010/04/02(金) 13:18:05ID:???
>>801
参考にしてはいけないサイトをGoogleさんに教えてあげてくださいw

マルチポストではないと思うのだけど、
"Perlを勉強しているのですが正規表現についてよくわからないので教えてください。"
でググると情報が溢れていて且つ重複しているのが目につくよね。
0803nobodyさん2010/04/02(金) 13:27:48ID:???
それokwaveと提携してるとこ(gooとmsnとexciteとimpressと...)が引っかかってるだけ
まぁ重複してるといえばそうだけど、マルチポストではないはずだよ
0804nobodyさん2010/04/02(金) 14:04:15ID:???
宣伝収入目的で異なるサイトで重複コンテンツのオンパレード。
検索エンジンの中の人も大変そう。

ところでダンプリストからキーワードAとキーワードBの区間を抽出して
元に戻すのは次のどちらがより良いんでしょう。
$_=~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/ego;
$_=~ s/([a-fA-F0-9]{2})/chr(hex $1)/eg;
0805nobodyさん2010/04/02(金) 16:17:20ID:???
質問です
ファイル名にそのファイルが作成された日時(YYYYMMDDhhmmss.拡張子)が含まれているファイルがあります
ファイル名のフォーマットはそれで全て統一されています
一つディレクトリにそんなファイルが数百〜数千は存在しています

何年何月何日にいくつのファイルが作られたのかをCSVなりTSVなりで一覧化して出力したいです
例:YYYYMMDD,n(その日作られたファイルの総数)

このような処理で、何か一般的なアプローチの仕方はありますでしょうか?
キーワードだけでも何でも良いのでご教示をお願いします
0806nobodyさん2010/04/02(金) 16:24:00ID:???
ファイル名から年月日を取り出して連想配列のキーにして
$list{'2010-04-02'}++;
みたいにカウントしていけばいいのでは
0807nobodyさん2010/04/06(火) 21:47:39ID:???
質問なのですが
perlでNet::Ping;を使いping監視をしてるのですが
ping(ホスト先, タイムアウト数)でping送信させてるのですがこれにpingサイズを指定して送るにはどうすればよいのでしょうか?
0808nobodyさん2010/04/09(金) 23:18:29ID:???
パケットサイズのことなら、newするときの引数に$bytesってのがあるように見えるけど
0809nobodyさん2010/04/11(日) 02:01:29ID:???
他の言語を学ばずにPerlを学び始めたところなんですが
諸先輩方はPerlの各種変数をどのように体得したのですか?
0810nobodyさん2010/04/11(日) 02:25:58ID:???
これどうやるんだっけ→perldoc→くりかえし
0811nobodyさん2010/04/11(日) 13:08:05ID:???
これどうやるんだっけ→sex→くりかえし
0812nobodyさん2010/04/11(日) 15:56:17ID:???
俺はこんなこともできないなんて→入信→くりかえし
0813nobodyさん2010/04/11(日) 16:25:03ID:???
>>810
ふむふむ。やはりくりかえしですよね。
ところで、どのくらいの期間、
そして、何回くらい「これどうやるんだっけ→perldoc→繰り返し」を
やりつづけてなんとなくつかめてきましたか?
なんと申しますか、個人差もあるのでしょうが、自分の言葉で理解できるまで
どのくらいかかるものなのか知りたくなりました。
0814nobodyさん2010/04/11(日) 16:38:34ID:???
型のことなら概念を理解しさえすれば覚えるまでも無い
特殊変数なんて覚えるだけ時間の無駄
0815nobodyさん2010/04/11(日) 17:01:07ID:???
人間とは面白い生き物で、生まれてきてからこのかた家庭教師も含めて
他人に物事を教えたことのない奴ほど横道にそれたレスが格好いいと
思い込むようだ。
喩えれば>>811のようにやったこともない妄想をさもやってきたかのようにな。
0816nobodyさん2010/04/11(日) 17:01:53ID:???
> 概念を理解しさえすれば
0817nobodyさん2010/04/11(日) 17:50:30ID:???
初めてのPerl 第二版買って来た。
これから頑張って覚えるぞ。
0818nobodyさん2010/04/11(日) 17:55:01ID:???
第五版でなく第二版?
0819nobodyさん2010/04/11(日) 22:46:17ID:???
ごめん第五版。
一緒に初めてのJavaScript第二版買っていたから混同しちゃった。
0820nobodyさん2010/04/12(月) 01:11:54ID:???
>>809
釣りなのは分かっているが...

$ は $calar(Scalar)
@ は @rray(array)
% は key/value(%)

特殊変数は実際には何個かしか使わないのですぐ覚えられる。
0821nobodyさん2010/04/12(月) 02:20:48ID:u6Su4USy
どのようにもくそも、覚えなきゃ何も出来ないからねぇw
0822nobodyさん2010/04/13(火) 01:11:47ID:???
>>820
いや、その三つ、覚え方とかいらないから
0823nobodyさん2010/04/13(火) 02:56:07ID:???
>>820
釣りではなくて真面目に入信したいのですよ。
すっごく分かりやすくて助かりました。
ありがとうございます。

>>822
氏ね〜〜〜
0824nobodyさん2010/04/13(火) 03:16:21ID:???
うわあ
0825nobodyさん2010/04/13(火) 13:27:56ID:???
>入信したいのですよ。
0826nobodyさん2010/04/17(土) 09:49:46ID:???
ここは超初心者をいじるスレ?
0827nobodyさん2010/04/18(日) 11:40:17ID:???
ttp://labs.ceek.jp/diff/diff.cgi
ここのdiff.cgiを入手できるところはありませんか?
0828nobodyさん2010/04/18(日) 15:51:45ID:???
>>827
そのdiff.cgiが欲しいならそれを作ったその人に言うしかないと思うけど、
やりたいことがただのdiffならString::Diffでできるよ

http://search.cpan.org/~yappo/String-Diff-0.04/lib/String/Diff.pm
0829nobodyさん2010/04/19(月) 02:56:46ID:???
>>827-828
ほう。面白いものがありますな。
できるものなら、これ[1]を応用して、このくらい[2]ことをやってほしいね。
[1]ttp://www.hyuki.com/aozora/diff.cgi
[2]ttp://www.cric.or.jp/db/article/taisyo.html
0830nobodyさん2010/04/19(月) 04:27:27ID:???
お前がやれよ
0831nobodyさん2010/04/19(月) 17:12:59ID:???
perlのmixiモジュールって今も動くの?
mixiかなりデザイン変わってるみたいだけど
0832nobodyさん2010/04/19(月) 19:15:13ID:???
試せば解る事をなぜいちいち聞く?
0833nobodyさん2010/04/20(火) 11:55:49ID:???
昔perl使ってたときはcpanなんてなかった
だいぶいろいろ変わってるみたいだけど、なんかいい参考書ない?
0834仕様書無しさん2010/04/20(火) 14:40:38ID:???
なにここのスレ 頭わいてんな
俺よりレベル低い
0835nobodyさん2010/04/21(水) 13:51:53ID:???
>>833
モダンPerl入門

>>834
超初心者の脱却おめでとう
0836仕様書無しさん2010/04/22(木) 08:32:48ID:???
俺はperlレベル6だから
ここはバカすぎてかわいそうだからperlやめて
0837nobodyさん2010/04/23(金) 00:56:03ID:???
>>834
自分よりレベルの低い者を淘汰していくと、いつしか淘汰される側になっています
気をつけて!
0838仕様書無しさん2010/04/23(金) 08:04:46ID:???
>>837
年収2億円だから
しねクソ
0839仕様書無しさん2010/04/23(金) 08:11:31ID:???
淘汰って
獣の奏者エリンの闘蛇(トーダ)だろ?
シネ
0840nobodyさん2010/04/23(金) 22:15:45ID:???
世の中には株で数十億円を稼いでいても金の使い道を知らないのもいますしお金で友人や愛は買えませんしね。
それよりも超初心者を脱却したなら質問に答えてあげなよ。
0841nobodyさん2010/04/23(金) 22:33:44ID:???
>>831
機能とデザインは分離されているので動く...
と思う
0842nobodyさん2010/04/23(金) 22:39:06ID:???
>>841
WWW::Mixi 2007年から更新されてないみたいよ?
仕様変更されてたら使えないんじゃね?
0843nobodyさん2010/04/23(金) 22:51:16ID:???
WWW::Mixi::Scraperは最近更新されたな
WWW::Mixiも使えるんじゃね?
0844nobodyさん2010/04/24(土) 09:16:04ID:???
>>840
お金で友人や愛は買えます。
ただし金の切れ目が縁の切れ目程度のものですが。
0845nicebody2010/04/24(土) 19:11:24ID:???
>>844
いやいや、愛は買えないから。
買えるのは別のものだから。

残念。
0846nobodyさん2010/04/24(土) 19:24:40ID:???
>>845
君も失えば分かるよ
0847nobodyさん2010/04/25(日) 15:52:42ID:???
>>846

おれも失ったんだよ。
つーか、失うものを持っていなかったわけだが。
0848nobodyさん2010/04/26(月) 21:53:59ID:???
>>844
友人や愛の維持にはある程度のお金はかかるものだが
普通は友人や愛をお金で買うことはできない。
もし>>844さんが買えてるとしたら相手はゲイじゃねえの。
0849nobodyさん2010/04/26(月) 21:57:06ID:???
いい加減スレ違いだから
0850nobodyさん2010/04/27(火) 01:26:44ID:???
だれがうまいこと言えと
0851nobodyさん2010/05/07(金) 22:36:42ID:gfyxirvM
int ( rand (5 - $rei / 5) )

$reiに0が入る時の結果は0〜4
1〜5が入る時には0〜3
6〜10が入る時には0〜2
であっているでしょうか?
0852nobodyさん2010/05/07(金) 23:44:25ID:???
>>851
合ってないんじゃないでしょうか。
08538512010/05/08(土) 00:48:20ID:???
どの箇所が間違っているのでしょうか?
$reiに0、5、10以外の数値が入って割り切れない数値の時には
3.8や3.6などの数値がINTによって小数点以下が切り捨てられるので
前記のようになるかと思ったのですが、思い違いでしょうか
0854nobodyさん2010/05/08(土) 02:11:23ID:???
5−0÷5=rand(5.0)=0〜4.99→int→0〜4
5−1÷5=rand(4.8)=0〜4.79→int→0〜4
5−2÷5=rand(4.6)=0〜4.59→int→0〜4
5−3÷5=rand(4.4)=0〜4.39→int→0〜4
5−4÷5=rand(4.2)=0〜4.19→int→0〜4
5−5÷5=rand(4.0)=0〜3.99→int→0〜3
5−6÷5=rand(3.8)=0〜3.79→int→0〜3
・・・
0855nobodyさん2010/05/08(土) 03:10:16ID:???
ようやく分かりました
知ったはずの順序を無視して脳内で妙な処理をしてました
ご丁寧にありがとうございました
0856nobodyさん2010/05/08(土) 05:29:33ID:???
>>855
問題はそれだけじゃないよ
数値が変わると返ってくる数値の期待値も変わるし
多分意図してない動作だと思うから忠告しとく

perl -e 'for(0..100000){ $tmp{int rand(5 - 4 / 5 )}++; } print "$_: $tmp{$_}\n" for sort keys %tmp'
0: 23773
1: 23960
2: 23832
3: 23657
4: 4779
0857nobodyさん2010/05/08(土) 07:04:06ID:???
忠告(笑)
0858nobodyさん2010/05/08(土) 14:53:25ID:???
彼の場合はプログラミング云々より算数の問題だっていうねw
0859nobodyさん2010/05/08(土) 23:40:53ID:???
たとえば、以下のようなアドレスにアクセスすると、

ttp://****/hoge.cgi?uho.jpeg

hoge.cgiではなくuho.jpegに直接アクセスするというものを見かけますが、
これはどういう仕組みなのでしょうか?
サンプルを公開しているサイトなど教えていただければ幸いです
0860nobodyさん2010/05/08(土) 23:42:53ID:???
そのjpgを読み込んでprintしてるだけだろ
0861nobodyさん2010/05/08(土) 23:55:29ID:???
いや、なんか言ってる意味がいまいちつかめないぞ・・・
直接アクセス? uho.jp を表示しようと hoge.cgi を通してる時点で直接ではないよ?

もっと落ち着いて言葉を選んで質問を書いてみてはいかがだろうか?
0862nobodyさん2010/05/08(土) 23:55:48ID:???
もすくは単にrewriteしてるだけか
0863nobodyさん2010/05/09(日) 00:22:07ID:???
妙な質問しかこない
0864nobodyさん2010/05/09(日) 00:46:41ID:???
そうか?分かる質問だと思うけどな

ロケーションヘッダーでググれ
0865nobodyさん2010/05/09(日) 01:30:14ID:???
CGI なのに画像を表示というのであれば

mod_rewrite (サーバーの設定確認が必要)
単なるリダイレクト
jpg を読んで print
html を出力して img で表示してるだけ

どれか好きな方法で良いかと
0866nobodyさん2010/05/09(日) 01:50:15ID:???
仕組みはもう挙がってるけど hoge.cgi はダウンロードカウンタ辺りかな。
0867nobodyさん2010/05/09(日) 04:21:34ID:???
やり方なんかいくらでもあるだろ
0868nobodyさん2010/05/27(木) 00:59:35ID:???
すいません。perl初心者ですが、URL自動リンクについて教えて下さい。

現在日本語を含むURLの場合、リンクが自動で貼ることができなく困っています。
例:http://hoge.com/~foo/にほん語.txt ←http://hoge.com/~foo/までしかリンクがされません。
パーセントエンコード?をすればリンクされるようですが、そうすると表示が↓
http://hoge.com/~foo/%82%c9%82%d9%82%f1%8c%ea.txt
のようになってしまい、見た目で何がリンクされているのかが分からなくなります。

これを何とか自動でできるようにしたいのですがどうすればいいでしょうか?
$string =~ s/([^=^\"]|^)((http|ftp):[!#-9\?=A-~]+)/$1<a href=$2 target=_blank>$2<\/a>/g;
または、ヒントがあるHPがあれば教えて下さい。
よろしくお願いします。
0869nobodyさん2010/05/27(木) 01:03:07ID:???
URLに日本語は使用できない
0870nobodyさん2010/05/27(木) 01:24:27ID:???
見た目だけならhrefの値だけを%符号化してやればいい
0871nobodyさん2010/05/27(木) 22:38:08ID:???
% perl -MURI::Escape -MFile::Basename -le 'print +( dirname $ARGV[0] ). q{/} . +( uri_escape basename $ARGV[0] )' ttp://ja.wikipedia.org/wiki/リヒャルト・ワーグナー
ttp://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%92%E3%83%A3%E3%83%AB%E3%83%88%E3%83%BB%E3%83%AF%E3%83%BC%E3%82%B0%E3%83%8A%E3%83%BC
# @UTF8環境
0872nobodyさん2010/05/28(金) 19:54:25ID:BUacjjtF
ファイル入出力に関する質問なのですが、
常に最初に文字列が出力される様にするには
どうすればよいのでしょうか?
 -------------
 あいうえお
 -------------
という内容のファイルがあるとしたら
 -------------
 さしすせそ
 かきくけこ
 あいうえお
 -------------
のように、逆順で書き込むには
どうすればいいんでしょうか?
0873nobodyさん2010/05/28(金) 20:54:39ID:???
新しい内容を出力してから、以前のデータを出力
0874nobodyさん2010/05/28(金) 21:21:29ID:???
@fooの中にテキストの中身が入っていると仮定すると
print FH reverse @foo;
でいいでしょう。
0875nobodyさん2010/05/28(金) 21:25:57ID:YjM9qGIs
( 0 == int(rand($i)) )

$i の数値が0.1でも小さいほど真になる確率が上がるという認識で合っているでしょうか?
0876nobodyさん2010/05/28(金) 21:30:07ID:???
$iが0.1だとこれは常に偽を返すだろ
つまり$iが0.1だとこの条件式は常に真
0877nobodyさん2010/05/28(金) 21:36:29ID:YjM9qGIs
すみません、質問の仕方が悪かったようです
3よりも2.9や2.8、4よりも3.9や3.8である時の方が0(真)になる確率が上がるのでしょうか?という質問でした
0878nobodyさん2010/05/28(金) 21:46:28ID:???
1.0未満になる確率が相対的に上がりますからそうでしょうね
0879nobodyさん2010/05/28(金) 21:49:12ID:???
(!int(rand($i)))
普通はこう書くけどね
まあ確率は上がるんじゃないかな
0880nobodyさん2010/05/28(金) 21:56:22ID:???
my %result;
for (2.9, 2.7, 2.5, 2.3, 2.1) {
my $i = $_;
for (0..100000) { $result{$i}++ if !int(rand($i)) }
printf "%.1f: %d\n", $i, $result{$i};
}

割りとはっきり変わるね。
■ このスレッドは過去ログ倉庫に格納されています