Perlコーディング初心者質問スレ Part 57
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/02/25(月) 19:25:51ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1189939783/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0792nobodyさん
2008/06/27(金) 17:41:01ID:???0793788
2008/06/27(金) 17:59:26ID:???そうじゃなくて、連想配列にしてデータサイズでソートとかあるんでしょうか?
分かりません(><)
0794nobodyさん
2008/06/27(金) 18:21:02ID:???0795nobodyさん
2008/06/27(金) 18:27:40ID:???まずはopenでファイル開けるの解かる?
0796788
2008/06/27(金) 18:50:29ID:???連想配列に入れてみました。
my %DATA;
open R, "koumoku.txt" or die;
while (<R>) {
chomp;
my ($key, $value) = split(/\t/);
$DATA{$key} = $value;
}
close R;
データサイズでソートは後でググってみます。
項目ごとに最短データだけ残す方法は今の時点で想像できません。。
0797nobodyさん
2008/06/27(金) 19:15:25ID:???if (exists $DATA{$key}){
length($DATA{$key}) > length($value) and $DATA{$key}= $value;
} else {
$DATA{$key}= $value;
}
0798nobodyさん
2008/06/27(金) 19:47:44ID:???食事してて遅れました。
そのままコピペしたのですが望むとおりです完璧です。
項目ごとに一番小さいデータが残る。凄い考え付かない。
本当にありがとうございました。
0799nobodyさん
2008/06/28(土) 13:36:15ID:???・母親は受験勉強をする息子の学力向上のためにフェラチオをする
・日本人女性の55%は、出会ったその日に男と寝る
・ファストフードは女子高生たちを性的狂乱状態におとしいれる
・ティーンたちはバイアグラを使ってウサギのようにセックスをする
・女子高生は、刺激のためにノーブラ・ノーパンになる
・日本の最新の流行 : 70歳の売春婦
・老人の売春婦の人気にもかかわらず、日本では小学生の売春婦にも仕事がある
・日本の若い看護婦は売春婦に勝る
・24時間オルガズムが止まらない病気で苦しむ日本人女性の数が増えている
・15未満の子供を対象とした疑似ポルノが日本に蔓延している
・OLの72%が、セックスをより堪能するために何らかのトレーニングを受けている
・人妻は気分転換の目的で昔の恋人に抱かれに行く
・主婦は郊外のコイン・シャワーで売春をしている
・日本男子は柔道や空手の部活で男相手に童貞を捨てている
・ほとんどすべての漁師は海でマンタとSEXしている
・まだ10代の少年から退職した老人までみんな2980円の手コキを利用している
・六本木のあるレストランでは、食事の前にその材料となる動物と獣姦する
※同社が全年齢向けコーナーで七年以上にわたり世界に向けて配信していたものの一部です
※同社の行為は日本人への偏見や人種差別、婦女暴行、幼児虐待を助長するものです
◆毎日新聞の英語版サイトがひどすぎる まとめ@wiki
http://www9.atwiki.jp/mainichiwaiwai/
◆毎日新聞問題の情報集積wiki
http://www8.atwiki.jp/mainichi-matome/
つまり日本人なら
http://www.vipper.net/vip552788.jpg
0800nobodyさん
2008/06/29(日) 21:21:31ID:ib7dTQ8mSyntax::Highlight::Engine::Kateはちょっと好みじゃなかったのと、
Text::Highlightは今のところ使い方が分からないの。
0801nobodyさん
2008/06/29(日) 21:37:01ID:???0802nobodyさん
2008/06/29(日) 23:14:30ID:???0803nobodyさん
2008/07/03(木) 04:34:06ID:N0WlacZt220 名前: 名無し三等兵 [sage] 投稿日: 2008/06/30(月) 00:35:59 ID:???
イスラムや胡錦濤の記事にもhentai入ってて
ニュー速の連中がアルジャジーラとかにメールしようとして
鬼女が止めに入ったり、なかなかわかってるなぁと。
262 名前: 名無し三等兵 [sage] 投稿日: 2008/06/30(月) 00:43:47 ID:???
つーか原理主義者は日本に入り込んでいるし組織もあるから
原理主義者によって白昼堂々人通りのある場所で首を掻き切られて
助教授が殺されて犯人が何も特定できていないわけで・・・
297 名前: 名無し三等兵 [sage] 投稿日: 2008/06/30(月) 00:51:28 ID:???
>>272
いや・・・それが・・・
タレコミより前に韓国でコーランが焼かれたと報道されてて
アルジャジーラTVより韓国でコーランを燃やす映像が放映され、アラブ諸国でさまざまの反応が出ている。
・その映像を見た老人がショック死(サウジアラビア)
・その映像を見た青年ら十数人が韓国大使館に投石(シリア)
★祭り★ 「日本の母は息子の性処理係」毎日新聞が捏造記事41
http://human7.2ch.net/test/read.cgi/ms/1215003832/
★祭り★ 【毎日・変態報道】 毎日新聞、「2ちゃんねる」を名指し…「女性社員中傷書きこみで法的措置」で★26
http://mamono.2ch.net/test/read.cgi/newsplus/1215016627/
【記者】毎日新聞の英語版記事で日本を侮辱【豪人】
http://academy6.2ch.net/test/read.cgi/english/1213971760/
【Daily】毎日新聞英語版がひどすぎる 3【WaiWai】
http://society6.2ch.net/test/read.cgi/mass/1214603376/
【毎日新聞】 iチャネル解約スレ 【変態報道】
http://hobby11.2ch.net/test/read.cgi/keitai/1214802475/
0804nobodyさん
2008/07/08(火) 20:37:38ID:???use CGI;
use Encode;
$cgi = CGI->new;
print "Content-type: text/html; charset=EUC-JP\n\n";
print encode('euc-jp', $cgi->param('test'));
とやって、それぞれUTF8,SJIS,EUCで'test'に入力しても、EUCコードでの文字列が出てこず、化けてしまいます。
どうやって強制的にEUCに変換するのか教えてください。
0805nobodyさん
2008/07/08(火) 20:38:36ID:???perlのバージョンは5.8.8です。
0806nobodyさん
2008/07/08(火) 20:44:53ID:???それも抜きだと jcode.pl で convert するくらいしか他に方法が無い?
0808nobodyさん
2008/07/08(火) 23:49:39ID:???encode()の第2引数は、デコード済みの文字列でないとだめでしょ。
encode(ocode, decode(icode, str))
ocode…出力する文字コード
icode…strの文字コード
str…入力する文字列
0809nobodyさん
2008/07/12(土) 09:51:37ID:???$format = $workbook->add_format();
$format->set_merge();
$worksheet->write_unicode(0, 0, utf8( Jcode->new('ぬるぽ')->utf8 )->utf16, $format);
$worksheet->write_blank(0, $_, $format) for 0..13;
っていう横方向のセルの結合は出来るんだが
$worksheet->write_unicode(0, 0, utf8( Jcode->new('ぬるぽ')->utf8 )->utf16, $format);
$worksheet->write_blank($_, 0, $format) for 0..13;
これだと結合できない。
仕様なのか俺がアフォなのか誰か教えれ!
0810809
2008/07/12(土) 11:19:24ID:???何となくできたわ。
お騒がせしますた。
0811nobodyさん
2008/07/12(土) 18:05:43ID:???お騒がせしたと思うのなら、どうやったらできたのか書くように。
同じ悩みで検索でたどりついた人はまた同じ質問をするでしょ?
0813nobodyさん
2008/07/13(日) 09:44:35ID:SNV4Eg13下記3行目のコードの意味がどうしてもわかりません。。
my @extract_links; #パーズ中に抽出されたURL
my $base = $response->base;
@extract_links = map { $_ = url( $_, $base )->abs; } @extract_links;
Perl初心者にもわかるようなコードに書き直すことはできますか?
何を勉強したら、このようなプロっぽいコードが書けるようになるのかも知りたいです。。
0814nobodyさん
2008/07/13(日) 17:38:13ID:???$ perldoc -f map
@extract_links = map { $_ = url( $_, $base )->abs; } @extract_links;
これはフィルタです。
@extract_links = <--(フィルタ)-- @extract_links;
右側の @extract_linksにフィルタをかけて、自分自身に代入しています。
右側から入ってきた @extract_linksの各要素は、$_に入れられます。
その各要素に対して、
url($_, $base)->abs;
という処理をして(多分相対パスから絶対パスにしているのでしょう)、
その結果を $_ (自身) に入れています。
$_ = url($_, $base)->abs;
結果として@extract_linksの中身が全部絶対パスになって返ります。
0815nobodyさん
2008/07/13(日) 23:01:57ID:???プロっぽいどころか、「どこの素人が書いた?」って言われるコード
だと思うが、、、何で無意味な代入をするかねぇ
3行目の代りになるコード。初心者向け。
foreach my $cont ( @extract_links ){ $cont = url( $cont, $base )->abs ; }
# $_ = url( $_, $base )->abs for @extract_links ;
0816nobodyさん
2008/07/13(日) 23:03:33ID:???map自体を否定してるんじゃないです。
0817nobodyさん
2008/07/13(日) 23:10:10ID:???mapブロック内で$_を変更したら、配列にも影響する。
だから、戻り値で置き換えるのは2度手間ってこと。
mapかforeachかは宗教論争だから好きなの使っとけ。
>>815のが見やすいことが多いけどな。
0819nobodyさん
2008/07/14(月) 00:04:04ID:???馬鹿すぎる
0820nobodyさん
2008/07/14(月) 01:16:23ID:???0821nobodyさん
2008/07/14(月) 14:17:03ID:???0823nobodyさん
2008/07/14(月) 15:02:41ID:???「print "match!\n"if(/^main::HOGE/);」とかしたいんですが、
うまい方法はありませんか?
「my $a=main::HOGE;print "match!\n"if(/^$a/);」はできるんですけど。
正規表現内で、use constant で定義した定数を使いたいのです。
0824nobodyさん
2008/07/14(月) 15:29:04ID:???print "match!\n" if(/^${\HOGE}/);
0825813
2008/07/14(月) 22:29:29ID:ojoqjs1pPerl初心者がいきなりクローラーを作ろうというのが、
ちょっと無謀だったかも。。
基礎から勉強します。(・з・)
0827nobodyさん
2008/07/16(水) 23:13:16ID:???splitで、&を区切り文字として指定した場合、
参考書だと、
&が消える、っていう説明と、
&が残る、って説明が混在しているんだが、
どっちが正しいの?
0828nobodyさん
2008/07/16(水) 23:13:48ID:???0830nobodyさん
2008/07/16(水) 23:54:09ID:???オレらの業界って気軽に試せないのね。
ダムがあったとして
「ここにもし10cmくらいの穴を開けたらどうなるだろう?」
みたいなところなんで、
「いきなり実行する」
っていうのはキチガイ扱いされてクビになるのね。
0832nobodyさん
2008/07/17(木) 00:39:50ID:???&は消える。
参考書のほうが間違ってたわ。
0833nobodyさん
2008/07/17(木) 00:55:40ID:???出版元に問い合わせてみたら?
0834nobodyさん
2008/07/17(木) 02:41:15ID:???1は消えてるんだけど、
2は残ってるの。
余計混乱するわ。
0835nobodyさん
2008/07/17(木) 03:23:04ID:???0836nobodyさん
2008/07/17(木) 05:31:29ID:???「普通は」消えるが正解。正規表現内で()でトラップすりゃ残る。
$str = 'a&b&c&d&' ;
split /&/, $str ; # <= 消える。
split /(&)/, $str ; # <= 残る。
split /(?:&)/, $str ; # <= 消える。
なんで態々解説したかと言うと、区切り文字「列」を二つ使う場合に(|)使ってトラップさせて
「消えないんすけど」って質問された事があったから。
split /(&|:)/, 'a&b&c&d:e:f:g' ; # 本来は区切り文字列ね。
0837nobodyさん
2008/07/17(木) 05:57:35ID:???こういうつまんないことってフレームワークに全部お任せすればよくね。
0838nobodyさん
2008/07/17(木) 06:17:36ID:???0839nobodyさん
2008/07/17(木) 06:48:41ID:???0841809
2008/07/17(木) 09:39:10ID:???すまんこすまんこ。さらに遅レスすまんこ
Spreadsheet::WriteExcelでセルの結合に悩んでるヤシは
ttp://www.koders.com/perl/fid09386E1C3E183B96174D224B87445AE647A32B23.aspx
ここを見れ!
例文が載ってたわ。
0843nobodyさん
2008/07/17(木) 22:27:51ID:???そういうのの、一覧表がのってる
ページをおしえて
0844nobodyさん
2008/07/17(木) 22:29:43ID:???0845nobodyさん
2008/07/18(金) 01:28:58ID:???0847nobodyさん
2008/07/18(金) 09:49:50ID:???0848nobodyさん
2008/07/19(土) 10:24:55ID:???教えてください。
$salt =~ s/[^\.-z]/\./go;
0849nobodyさん
2008/07/19(土) 10:33:23ID:???0851nobodyさん
2008/07/19(土) 18:39:57ID:???$salt =~ # Apply following pattern to $salt
s/ # Start substitution expression
[ # Start difine charactor class
^ # This is negated class
\.-z # Range: "." .. "z" by charactor-code
] # End define charactor class
/ # End pattern and start substitution string
\. # Means "." (NOTE: "\" is meaningless here)
/gox; # Modifiers
# g: global matching
# o: compile the pattern only once
## (x: extended)
>>849
> 5本の指が入る # So loose, and so non-useful for hacking.
0854nobodyさん
2008/07/19(土) 20:59:09ID:???> なんかのソフトでそうやって
> 自動で解説が出るの?
自動で解説できるモジュールあったら便利そうだね!
0855nobodyさん
2008/07/19(土) 21:46:02ID:???>>851はかみ砕いて解説してあるよ。部品ごとにいちいち説明してあるじゃん。
(教えてくんにまともに教えるの癪だからわざわざ英語にしたんだと思うけど)
辞書引くくらいすれば?
perl 置換 パターンマッチ 正規表現 s演算子 でぐぐればいくらでも解説があるよ。
0856nobodyさん
2008/07/19(土) 21:50:14ID:???0857nobodyさん
2008/07/19(土) 22:20:45ID:QBlnT4Mv重い処理をする時に、ブラウザを待たせる必要がないので、
セッションを閉じようと思い、どうすればよいのかwebであさっていたら、
標準出力を閉じるとよいみたいな感じで書いていたので試してみましたが、
処理が待たされます。なぜでしょう?
print "a";
close(STDOUT);
sleep 20;
20秒またされたのち、ブラウザが開放されます。
0858nobodyさん
2008/07/19(土) 22:30:40ID:???0859nobodyさん
2008/07/19(土) 22:33:59ID:QBlnT4Mvこことか
0860nobodyさん
2008/07/19(土) 22:39:51ID:???処理を始めるようだけど、そうしてもダメだったの?
0861nobodyさん
2008/07/19(土) 22:46:03ID:QBlnT4Mv子プロはまだ作ってない。
そこのリンクの
http://www.tohoho-web.com/lng/199909/99090185.htm
環境によるようだね。
こうゆう時の処理はこうだよみたいに書いてあったんで(昔どっかのページで見た)、
普通に出来る処理と思ってた・・・。
0862nobodyさん
2008/07/19(土) 23:04:25ID:???普通のperlではちゃんと、動作しました。
mod_perlでの環境では動作しないようです。
なぜ、mod_perlでは動作しないのかは、よくわかりません。
誰か教えて下され・・・。
0864nobodyさん
2008/07/20(日) 02:16:15ID:???くだすれのほうにもちょっと前に書いたけど、
$|=1にしても、たしか256byteまでは自動でキャッシュが効くとか昔調べた時にどこかに書いてあった。
(昔自分がやったのは、数秒sleep毎に文字列を書き出して、一定時間でexitする。って処理だったけど・・。)
なので自分は、Content-Typeヘッダ出力の直後に、print " " x 256; を書くようにしたらそれで出来た。
あんまりスマートなやり方ではないけど、これ以外に知らない。
(向こうでは、Apacheがキャッシュするって書いたけど、実は自分の思い違いだったかも知れん。
ブラウザとか鯖環境によってはバッファされるbyte数が違うとか言うのも聞いたことがあるのを思い出した。
詳しく調べてないんでよく分からんし、どこに書いてあったかも覚えてない。)
mod_perlについては、printもcloseもexitも全て内部用の関数にoverrideされてるはず。
それに実行されるのは、対象のスクリプトのみではなく、またmodperl::RegistryにしてもPerl Handlreにしても、
実行してるのはApacheプロセスそのものなので、IO周りやsignal周りはApacheの内部実装によると思われる。
それでも上の方法で、ウチの環境では、上のcgiで実行したのと同じ処理ができた。
(すまんが、自分もApacheとかmod_perlの内装知ってるわけではないので、詳しくはわかりません。)
0865nobodyさん
2008/07/20(日) 03:26:59ID:???0866nobodyさん
2008/07/20(日) 03:56:52ID:???0867nobodyさん
2008/07/20(日) 06:30:33ID:???ググってもよく分からんのですよ。
.からzまで以外の文字があったら.(そのままって意味かな?)に変換する。
gオプションだから1回マッチしてもそのあとも処理を行う。
oオプションだからパターンを1回しかコンパイルしない。
だと思うのですが、目的が分からないのです。
あと、oオプションの意味もよく分からないし。
0868nobodyさん
2008/07/20(日) 09:51:06ID:???.からz以外の文字は、
./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
以外の文字
gオプションが無いと最初の1回マッチするだけで、有るとあるだけマッチを繰り返す
0869nobodyさん
2008/07/20(日) 14:38:39ID:???crypt(3)の標準的な実装では、第二引数(salt)は[a-zA-Z0-9./]からなる二文字です。ここではそれを得るための変換処理の一部過程として置換式を用いています。man crypt も参照。
ここから先は Perl の話題ではなくなりますが、知っていて損もないのでぼちぼちがんばってください。
0870869
2008/07/20(日) 14:58:22ID:???> あと、oオプションの意味もよく分からないし。
>>868 が一行目で書いているけれど補足。
/o 修飾子は実行時に変化する部分が含まれている正規表現の再コンパイルを抑制します。
例えばパターンに変数が含まれているケースで /o 付きの式が複数回実行されてもパターンは再評価されません。
初回評価時の値のままマッチングが行われます。パターンが変化しない旨を明示することで実行時性能の向上を図る機能です。
今回のケースではパターンは [^\.-z] ですから変化する部分はありません。>>868 の言う「無意味」というのはそういうことです。
perldoc perlretut 及び perldoc perlop の Regexp Quote-Like Operators の項も見てみてください。
0871nobodyさん
2008/07/20(日) 16:50:44ID:???回答ありがとうございます。
しかしよく分かりません。。。
[a-zA-Z0-9./]以外にマッチ=ひらがなとか漢字とか?にマッチしたら、
その文字を、そのまま使う???
そうなると、saltが許されるのは[a-zA-Z0-9./]だけなので?????
ん??????????????
俺、アホなのかな?
0872nobodyさん
2008/07/20(日) 19:57:43ID:???パーミッションで、
グループを6とかにすると、
もしそのサーバーが、シェルを使える
サーバーだった場合、
その同じサーバーを使ってる人が
シェルで勝手に入ってきてデータ-を
書き換えられたり、消されたりするので、
グループは0にしなければいけない、と
さっき読んだ参考書に書いてあるのですが、
それであってますか?
0873869
2008/07/20(日) 20:39:57ID:???s/正規表現のぱたーん/左のパターンにマッチした部分を置き換える文字列/
[^\.-z] は一文字幅で /g 修飾子付きだから、マッチする一文字を見つけるたびに、置換文字列で置き換えられます。
置き換える文字列はこの場合 "." だから……。
要は s/// の右半分では "." はメタキャラクタじゃない、つまり何ら特別な意味がないということです。
がんばって気付け。
869 は自覚的なアホを応援しています。
0874nobodyさん
2008/07/20(日) 20:49:41ID:???ちょっとは参考書を信用してもいいんでね?w
0875nobodyさん
2008/07/20(日) 23:09:24ID:???EUCだと、タイトルに日本語使えない、
って参考書に書いてあるんだけど、そうなの?
0876nobodyさん
2008/07/20(日) 23:20:40ID:???HTMLのTITLEタグのことですか?
でしたらヘッダで適切な文字コードを指定すれば使えますよ
0877nobodyさん
2008/07/21(月) 00:13:22ID:???なんだかブラウザの動きがもっさりしてくるんですが、
これはPerlが無駄にメモリを浪費してるからですか?
0878nobodyさん
2008/07/21(月) 02:01:53ID:???0880nobodyさん
2008/07/21(月) 10:10:27ID:???0881nobodyさん
2008/07/21(月) 17:58:17ID:???0882nobodyさん
2008/07/21(月) 18:15:23ID:???0883nobodyさん
2008/07/21(月) 18:38:24ID:???0884nobodyさん
2008/07/21(月) 20:58:45ID:???大筋で合ってるけど微妙に違います。
元のパターンは [^.-z] なので、[a-zA-Z0-9./] 以外にもマッチ。
下記のワンライナーで Let's 実験。
perl -ple "s/[^.-z]/./g"
0885879
2008/07/22(火) 07:08:38ID:???自分で書いた
[a-zA-Z0-9./]以外にマッチしたらピリオドに置き換えろ
と
[a-zA-Z0-9./] 以外にもマッチ
の違いが分かりません。???
0886nobodyさん
2008/07/22(火) 11:13:09ID:???LWP::UserAgentを使って出来そうなのですが、
どうコーディングしていいか分かりません。
よろしくお願いします。
やりたいことは、タイムアウト値を指定して
あるURLにアクセスした場合、
httpステータスコードが404を返しても
それは生きていると判定したいのです。
0887886
2008/07/22(火) 11:24:14ID:???こんな感じで出来ました。
use LWP::UserAgent;
$url = "http://www.yahoo.co.jp/";
$ua = LWP::UserAgent->new;
$ua->timeout(10);
$req = HTTP::Request->new(GET => $url);
$res = $ua->request($req);
print $res->status_line;
0888nobodyさん
2008/07/22(火) 13:31:20ID:???わざわざそんなことせんでも。。。
0889nobodyさん
2008/07/22(火) 14:50:40ID:???0890nobodyさん
2008/07/22(火) 15:02:22ID:???0891nobodyさん
2008/07/22(火) 18:38:20ID:???技術評論社
アーク・シンク・タンク 三島 俊司
↑ちょっとわかりやすいね。
意味不明な記述も半分くらいあるけど。
0892nobodyさん
2008/07/22(火) 18:40:05ID:???ifの代わりとしての?は使わない方がいいね。
だって?は正規表現とかでも使うから、
?があると、
「正規表現としての?かな?
それとも、ifの代わりの?かな?」
って考えないといけない。それが時間の無駄なので
?は使わずにifを使うようにしましょう。
■ このスレッドは過去ログ倉庫に格納されています