1 :
デフォルトの名無しさん :
2007/08/13(月) 18:01:53 Perlについての質問箱 32箱目
3
3 :
デフォルトの名無しさん :2007/08/13(月) 18:17:12
難しい質問は「荒らし」とみなしてスルーします。
テンプレ省略?
テンプレ 1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板
http://pc11.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html ● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3
前スレ
Perlについての質問箱 30箱目
http://pc11.2ch.net/test/read.cgi/tech/1181500187/ リンク集は
>>8-10 あたり
過去スレは
>>11 あたり
+ 1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない ここまでテンプレ
あまりしつこいと荒らしにしか見えんな
そのうち自演を始めますよ
は 自 じ 演 め ま し た
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない 6. こぼれるほどの笑顔
18 :
デフォルトの名無しさん :2007/08/14(火) 02:39:53
1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない それが初心者さ。質問スレに質問して、いったい何が悪いわけ? 自分で読む、自分で調べる、自分で試す、自分で理解する、自分でヤル! それができれば、たいてい自分で解決してるよ。 そんなヤツが、質問スレに質問すると思うか? 質問されて、答えそのものをズバリ教えちゃうのも問題ありだな。 google の使い方を教えてあげるとか、そういう方法が、質問者にとってもスレにとっても健全な方向に 行き着くと思うな。 あと、質問に答えたくないのにわざわざしゃしゃり出てきて「自分で調べろ」だの何だの言うヤツって いったい何?結局、そういうヤツって、難しい質問をして欲しくってウズウズしてるだけなんだろ? ソレって、単なる「構ってクン」じゃないか。質問に答えたくないならスルーしろよ。なぜそれが出来ない? 次にスレを建てるときは、初心者用・中級者用・上級者用にわけるといいね。 そうすれば、初心者の質問を見たくないヤツは見ずに済むからね。 でも多分、わざわざ初心者スレにやってきて、相変わらず「自分で調べろ」って罵倒するバカが必ず現れるよ。 ぜったいに現れる。100ペソ賭けてもいい。
19 :
デフォルトの名無しさん :2007/08/14(火) 02:42:52
そのくせ、難しくて誰も答えられ無いような質問が来ると、「荒らしはスルー」と言って逃げるw
荒らし=自分では答えられないような、 考えたこともないような難しい質問
変数名に日本語使うのって perlの文法的に正しいのか? 教科書みたら英数字しか使えないって書いてあるぞ?
日本語文字体系の→(右矢印)があって、 これをUS-aschiiiで見たら '' こんな風に文字化けしていたので 右矢印を1バイト文字に翻訳したいんだけど、 どうすればいいのかな?
->
25 :
デフォルトの名無しさん :2007/08/14(火) 11:42:15
>>21 どこの教科書だ?いつの時代の教科書だ?
出版社、書名、発行年月日を晒してミロやw
>>18 低レベルな質問はWebProg板で。
現在も住み分けは出来ているかと思われます。
>>19 質問に答えて貰えなくて悔しかったですか?
難しいのではなく、
>>6 の通りで皆呆れてるのです。
まず、自分の言動に問題は無かったか見直してみましょう。
>>20 過去の例から言って、誰かしらか答えてくれる人間は必ず現れます。
その人間にも相手にされなかったのなら、やはり御自身の行動を見直すべきでしょう。
人のせいばかりにせず、大人として責任を持って発言をしましょう。
>>24 ゲームのCGIなんで、プレイヤーごとのランキングがあるんですよ。
山田さんは前回は5位でしたが、
今回は順位が上昇して3位になりました↑
とか、
田中さんは前回は2位でしたが、
今回は順位が下降して8位になりました↓
とか
鈴木さんは前回は4位で今回も4位でした→
とか、
順位の移動を表\すのに右矢印、上矢印、下矢印の
記号を2バイト文字の日本語としてつかっちゃってて、
これをアメ公の環境、すなわちUS-asciiとかでみると
当然文字化けしてしまうので、これをなんらかの1バイト文字に
変更しなければならないのですが、どうしましょうかね?
WebProg向きの質問だと思うけどね。 'UP' 'DOWN' にするか、画像にすれば?
HTMLで出してんなら↑とか↓でいんじゃねーの。
31 :
30 :2007/08/14(火) 14:54:13
うを、実体参照効くのか。 んじゃ ↑ と &darr でいいのかな。
32 :
デフォルトの名無しさん :2007/08/14(火) 14:55:34
日本語が扱えない言語には、 日本語が理解できない人間が集まる。 このスレの事ですよ〜〜〜〜w
くやしいのうwwwwwwくやしいのうwwwwww
典型的な構ってクン
36 :
デフォルトの名無しさん :2007/08/14(火) 17:10:52
Perlを勉強中ですが、 正規表現は飛ばして勉強していいでしょうか? めんどくさくて、、、 それとも、こういう使い方があるから、ここだけは押さえておけ、というポイントのようなものはありますか?
>>36 > Perlを勉強中ですが、
> 正規表現は飛ばして勉強していいでしょうか?
いいよ
>>36 > Perlを勉強中ですが、
> 正規表現は飛ばして勉強していいでしょうか?
よくないよ
らき☆すたを見たいんですが、 柊かがみが気に入らないのでかがみんの出るシーンは 飛ばして見ていいでしょうか? みたいなもんだな。
正規表現使ってこその Perl だと思うんだがね。
41 :
デフォルトの名無しさん :2007/08/14(火) 18:33:49
>>40 確かに、Perlは強力な正規表現が特徴、とか言われてるけど、どういう場面で使うことになるのか、見当がつかなくてね
ちょっと正規表現触ってみた
でも、うまくいかない。初心者レスになるがすまん。
これ↓なんだが、使い方がが間違ってるか?
#! /usr/bin/perl
#match.pl
$string =<<EOT
>>042 俺は正規表現が分からない。
EOT
;
print "引用番号: $&" if ($string =~ />>[0-9][0-9][0-9]/);
オレの環境ではそれをコピペして普通に動いたが? 何がどう動かないのか書いてくれ。 あと、動かないことと直接は関係ないけど $& , $' , $` はなるだけ使わない習慣を付けておいた方が良いと思うよ。
\d+
>>44 そうか、今使ってるiBookのターミナルはUNIX始めたばっかの頃に弄りまくってたから変なのかもしれない
さっきのプログラムも、何も出力されずに終わってしまうから
あとで、別ので試してみる。
>>29 「解決策その1」
up downにする、ってのは
自分でも思いつきました。
でも日本語版では視覚的に
一目見てわかるように設計されていたものが
多言語に移動したら説明的になってしまった、
というのはちょっとくやしくて。
「解決策その2」
画像も自分で思いつきました。でも
画像を作って、サイズを合わせて加工して
画像を表示するようにコードを書き換えて、
というのがめんどいなと。
>>30-31 実体参照、すごいですね
まったく思いつきませんでした、
アメ公の環境でもちゃんと表示されるのかな?
&と;セミコロンの表示の問題は
¥エスケープすればノープロブレム?
あなたはすごいので、次からも教えてもらえませんか?
今日、教科書を読んでいたら 「perlはスクリプト言語なので 他人の書いたスクリプトが読める」 という記述があったのですが、 他人が運営している、 CGIのソースは通常、 見れないですよね?
>>48 定型の設定がされてれば見えない。
しかしあなたの質問は、教科書の”読める”と全く別の外した質問をしている。
http://kazato.run.buttobi.net/cgi-bin/upload/src/viprpg_tktk0321.png $rankupdown=$rankupdown==0 ? "→": $rankupdown<0 ? "↓".(-$rankupdown) : "↑".$rankupdown;
今、ソースがこのような状態なのですが、この中の、
"ダブルクオーテーションで囲まれた、→2バイト文字の右矢印を、
実体参照を用いた、&rarr;に変更しようとおもいます。
ぱっとみでやばそうなところは、
&アンパサンドと、;、セミコロンの2つですが、
これらはダブルクオーテーションの中で使うなら、
おそらく¥バックスラッシュを使ってエスケープすれば
いいんだとおもいます。
でも本当にそれでいいのかよくわからんし、
確認するにも本を45冊ほど読まねばならないしで、
もう一つの選択肢である、’シングルクオーテーションではさむ、
という方法を使いたいと思います。
なぜなら、’シングルクオーテーションならば、
はさまれた間にかかれたものは解釈されない?
でそのまんま出力されると教科書に書いてあるので
そっちのほうが実体参照を使うときには適していると
思ったからです。
なので変更後のソースは
$rankupdown=$rankupdown==0 ? '&rarr;' $rankupdown<0 ? "↓".(-$rankupdown) : "↑".$rankupdown;
等となりますが、この考え方であってますでしょうか?
ちなみに実体参照をちゃんと表示させるために
この書き込みは&と;を全角で打ってます
51 :
デフォルトの名無しさん :2007/08/15(水) 07:21:10
1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
>>50 は荒らしなので以後スルーします。
なんだまたこいつか…無視しろ。 何で自分で試さないのか。
>>46 perl -e 'print qq/$&/ if q/
>>043 / =~ m/>>[0-9][0-9][0-9]/;'
と
perl -e 'print qq/$&\n/ if q/
>>043 / =~ m/>>[0-9][0-9][0-9]/;'
を比較してみるのも一興かと。
やっぱり、iBookのターミナルがいかれてたみたい iMacじゃ、普通に動いたわ あと、$&は使わない方が良いんだね。教えてくれてありがとう。そんなこと本には書いてないからな〜
聞き忘れていたことがあった。 正規表現で、マッチ文字列、その前、後の文字列は、$&とかじゃなかったら、何で取り出せばいいの? ググったが見つからなかった。
>>55 つ perldoc perlre
そういったものが本当に必要なら、迷わず $` $& $' を使うのも正しい選択。
あるいは、正規表現で m/^(.*?)(パターン)(.*)$/ 等を使う選択もある。
あまり良い方法とは思えないが、split /パターン/,$str,2; でも可能。
# ($pre,$post) = split /パターン/,$str,2;
# $match = substr($var,length($pre),-length($post));
一応、 ($pre,$match,$post) = split /(パターン)/,$str,2; でも動くが、
split のパターン中でキャプチャーさせるのが仕様的に正しいかどうかは未確認。
perlreやgoogleで調べてはみたのですが $& , $' , $` はなるだけ使わない習慣を付けておいた方が良い理由が わかりませんでした。
>>56 >一応、 ($pre,$match,$post) = split /(パターン)/,$str,2; でも動くが、
仕様的に正しいよ。perldoc -f split にきちんと解説がある。
>>56 ,58
ありがとう。正規表現始めたばっかりの俺には、何をやってるのかまだよく分からないが、メモっとくよ。
分かるようになった頃に見直してみる。
>>57 俺も全然わからん
$1とか使うぐらいならリストにキャプチャしろってんならまだ分かるが
m//gでiterativeに検索するような場合には
リストコンテキストにするわけにはいかんし
>>57 > perlreやgoogleで調べてはみたのですが
> $& , $' , $` はなるだけ使わない習慣を付けておいた方が良い理由が
> わかりませんでした。
see perlvar
なんだもしかしてuse Englishしろってだけの話か? どうでもいいな
perldoc perlvarしたんですが$& , $' , $`が非推奨な理由がよくわかりませんでした。 むしろ使わないほうがいいようにもみえるのですが気のせいでしょうか? > Due to an unfortunate accident of Perl's implementation, "use English" > imposes a considerable performance penalty on all regular expression > matches in a program, regardless of whether they occur in the scope of > "use English".
正規表現面白い!! URLをマッチさせるにはこんな感じだね /http(¥w|¥.|¥/|:|?|&|%)+/
>>64 あっ、エスケープしてなかった。
/http(¥w|¥.|¥/|:|¥?|¥&|¥%)+/
perlreみると -- プログラム中にひとつでも$&, $`, $'があると 全てのパターンマッチでそれらを提供しないといけなくなるから 大幅に遅くなるかもしれません。 -- って感じですかね? どの正規表現での$&, $`, $'を取りたいのか実行してみるまでわからないから 全正規表現で提供する必要がでてきちゃうんですね。 localとかmyで範囲の指定できて最適化されればいいのにね。
>>43 ,55
なんか、誰かさんと違って、感じが良くて教え甲斐のありそうなヤツだな。
オレだったらこう書く
print "引用番号: $1" if ($string =~ /(>>[0-9][0-9][0-9])/);
それ以外にも、
$string =~ /^(.*)(>>[0-9][0-9][0-9])(.*)$/);
と()で囲めば $` $& $' のかわりに $1,$2,$3 を使える。
オレは必要だと思ったらとにかく()で囲む。
他の人がどうだかは知らないけど。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
my $string = q(
>>068 親切な人だと思うけど$1と$3に値が入りません。
ちなみにCentOS 4.5標準のperl 5.8.5です。
);
printf "%s='%s'\n",'string',$string;
if( $string =~ /^(.*)(>>[0-9][0-9][0-9])(.*)$/m ){
printf "%d='%s'\n-----\n",1,$1;#空
printf "%d='%s'\n-----\n",2,$2;#
>>068 printf "%d='%s'\n-----\n",3,$3;#空
printf "%s='%s'\n-----\n",'$`',$`;#改行
printf "%s='%s'\n-----\n",'$&',$&;#
>>068 printf "%s='%s'\n-----\n",'$\'',$';#残りの部分
}
70 :
68 :2007/08/15(水) 22:10:32
>69 ドット「.」は改行文字にはマッチしないので、文字列中に改行があって、ドット「.」 でマッチさせたかったら $string=~//s を使う。 ちょっと甘やかし気味かもしれんが、すぐに自分で実践する態度がよいので 答えてあげたくなってしまう。
use strict; use warnings; use utf8; ときちんと書いてて、q() でクォートしてる。 初心者とは思えないぐらい立派な心がけだ。 でも次からはuse strict とかは省略して、必要な部分だけでいいよ。
ニヤニヤ
ウチには生まれたばかりの赤ん坊がいるんだが 自分で歩こうとしないのでゴミ箱に捨ててやった
>>67 5.6あたりで増えた特殊変数 @+ と @- を使えば、$&, $`, $' に対応した
部分文字列を取れるよ。
んでペナルティもなし。
ただし substr使わんと部分文字列としては取得できんが。
$ドルマークを ”ダブルクオーテーションまたは ’シングルクオーテーションで はさまれた中でつかってもだいじょうぶ? "$" '$' こんなかんじで。
危険。つこたら死ぬで
78 :
デフォルトの名無しさん :2007/08/16(木) 08:15:46
1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
>>76 は荒らしなので以後スルーします。
以後、じゃなくて自然にスルー出来る様精進しよう。
'$' -> OK "$" -> Compile error
昔、某コミュニティで、3箇月の間に同じ人物に 「あなたの書き込みは、以降無視します」と 20回以上言っていた人物が抽出され気味悪がられていたこと がある。
一度、推奨入門書を通読するのが、プログラミング言語を使えるようにするための 一番の近道だと思うよ。
>>78 ヒントだけ示して、
1. 嫁
2. ググれ
3. 確認汁
4. 分かれよ
5. 自分でやれ
って答えてればいいんじゃない。
自分の言葉で言えないような人は答えなくていいです^^ とか言い出すから触らないのが一番。
1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが… 3: こんなエラーが出て上手く行かなかった。 基本的にこの3つが揃ってないと"質問"でさえ無い。
86 :
76 :2007/08/16(木) 13:16:04
解決しました。 他の役立たずさんたちもありがとね。
my $string = q(
大変勉強になりました。ありがとうございました。
>>70 もっときれいで効率の良い書き方がありそうな気もしますが無事処理できるようになりました。
>>71 ありがとうございます。でもbinmodeを忘れていてwarningがでてました(汗
>>75 今回の前と後ろをキャプチャーする方法のように正規表現が複雑になったり
オフセットが入っているだけなので取り出す処理が必要だったりと
正規表現全体の効率を落とすよりはよさそうですが
もっと自然に取れる方法があるといいなぁと思いました。
);
while( $string =~ /^(.*?)(>>(\d+))(.*)$/s ){
$string = $4;
printf "引用番号:%d\n",$3;
my($value,$next) = ( $string =~ /^(.*?)(?=>>\d+)(.*)$/s ) ? ($1,$2) : ($string,'');
$value =~ s/^(\r?\n|\s)//go; $value =~ s/(\r?\n|\s)$//go; $value =~ s/\r?\n/<br>/go;
printf "返信内容:'%s'\n",$value;
print "-----\n";
$string = $next;
}
誰か
>>87 にグローバルマッチについて教えてやれよ、俺いやだけど
89 :
デフォルトの名無しさん :2007/08/16(木) 15:16:15
#!perl -w
$string = '
>>42 俺は正規表現が分からない。
>>1 本屋に逝けば腐るほど解説書が売ってるし、
ググればタダで勉強できるぞタコヤロウ!
';
while ((undef, $anchor, $string) = ($string =~ m/^(.*?)>>(\d+)(.*)$/s)) {
print "引用番号:",$anchor,"\n";
($value, $string) = ($string =~ m/^(.*?)(>>\d+.*)$/s) ? ($1,$2) : ($string, '');
$value =~ s/^\s+//;
$value =~ s/\s+$//;
$value =~ s/\r?\n/<br>/g;
printf "返信内容:'%s'\n",$value;
print "-----\n";
}
2ちゃんねるでカキコミすると、ソースコードの字下げが全部無効になるから見づらいよな。
2ちゃんねるはプログラミングの話題には向かないよね。
 
91 :
デフォルトの名無しさん :2007/08/16(木) 15:21:44
while ((undef, $anchor, $string) = ($string =~ m/^(.*?)>>(\d+)(.*)$/s)) { ($value, $string) = ($string =~ m/^(.*?)(>>\d+.*)$/s) ? ($1,$2) : ($string, ''); $value =~ s/^\s+//; $value =~ s/\s+$//; $value =~ s/\r?\n/<br>/g; print "引用番号:",$anchor,"\n"; print "返信内容:'",$value,"'\n"; print "-----\n"; } おっと、print 文を1箇所にまとめたほうが美しいかな。
92 :
デフォルトの名無しさん :2007/08/16(木) 17:23:38
プギャー
93 :
デフォルトの名無しさん :2007/08/16(木) 17:37:25
今、勉強中なのですがわからないので教えてください。 7桁の数字(日付)20070816を2007/08/16のようにスラッシュで区切って 表示する方法がわかりません。どうかご教授下さい。
明らかな宿題には超トリッキーなコードで答えてあげるのが優しさだと思うんだ
> 7桁の数字(日付)20070816を それはおかしい
96 :
デフォルトの名無しさん :2007/08/16(木) 18:19:28
> 7桁の数字(日付)20070816を 8桁でした…
>>93 #!/usr/bin/perl
use Time::Local;
$date = "20070816";
$ut = timelocal(0x0, 0x0, 0x0,
int(substr($date, 6e0, 0_2)),
int(substr($date, 4e0, 0_2) - 0001),
int(substr($date, 0e0, 0_4)) - 0x76c);
@lt = localtime $ut;
for (0..2) { pop @lt }
syswrite(STDOUT, sprintf("%04d/%02d/%02d",
pop(@lt) + 03554, pop(@lt) + 1, pop @lt));
#!/usr/bin/perl $date = "20070816"; use Time::Local; $ut = timelocal(0x0, 0x0, 0x0, abs int(substr($date, 6e0, 0_2)), abs int(substr($date, 4e0, 0_2) - 0001), abs int(substr($date, 0e0, 0_4)) - 0x76c); @lt = localtime $ut; for (0..2) { pop @lt } syswrite(STDOUT, sprintf(qq$%04d\x2f%02d\x2f%02d$, pop(@lt) + 03554, pop(@lt) + 1, pop @lt)); __END__
$date = "20070816"; printf "%s/%s/%s", $date =~ /(\d{4})(\d{2})(\d{2})/;
イマイチ。 #!/usr/bin/perl tie my @array,"Fuga::Fuga"; tie my %hash,"Fuga::Fuga"; print "$array[20070816]\n"; print "$hash{20070830}\n"; { package Fuga::Fuga; sub TIEARRAY { my $dummy; bless \$dummy,$_[0]; } sub TIEHASH { my $dummy; bless \$dummy,$_[0]; } sub FETCH { local($",undef,$a)=('/',@_);"@{[unpack 'A4A2A2',substr('0'x8 .$a,-8)]}" } sub STORE { undef } sub DELETE { undef } sub CLEAR { undef } sub EXISTS { 1 } sub FIRSTKEY { $$_[0] = 0 } sub NEXTKEY { $$_[0]<99999999 ? ++$$_[0] : undef } sub STORESIZE { $$_[0]=$_[1];} sub FETCHSIZE { $$_[0]; } }
print join('/', unpack('A4A2A2', '20070816')), "\n";
皆大人気ないな・・・ #!/usr/bin/perl use strict; use warnings; use Tie::Scalar; use Carp; use base qw(Tie::StdScalar); use Attribute::Handlers autotie => { 'UNIVERSAL::date' => __PACKAGE__ }; sub STORE {defined $_[1] && $_[1] =~ /(\d{4})(\d{2})(\d{2})/ && $_[0]->SUPER::STORE("$1/$2/$3") || croak("format error:'$_[1]'");} print (my $date :date = '20070811'); 1;
103 :
デフォルトの名無しさん :2007/08/16(木) 20:47:43
おかげさまで解決しました。 ありがとうございました。 いろいろやり方があるんですね。
function Akiba(Maid){Akiba(Maid);}
正規表現勉強して、URLにmatchさせる方法が分かった そこで、正規表現のURLマッチとsystem関数でcurlコマンドの実行を組み合わせて、URLリストの画像URLを片っ端からダウンロードして行くプログラムが作れた。 初めての実用的なPerlプログラムだったけど、さくさくダウンロードしてくれて、かなり感動した。 この感動が、良いプログラムを作ろう!っていう原動力になるんだろうなぁ。
次は LWP::Simple 辺りでサクっと作ろう
>>106 そういう、モジュールの使い方って、みんなはどこで勉強してるの?
やっぱりCPAN?
>>80 まじで?
じゃあ、'シングルクオーテーション
でくくれば、¥エスケープしなくていいんだ?
template-toolkitでテンプレートコンパイル済みの値をファイル以外から扱えないでしょうか。 イメージとしては下記のような感じです。 my $template = Template->new(); my $compiled_tt2 = $template->compile('sample.tt2'); # ファイル:sample.tt2をコンパイルした内容を変数$compiled_tt2へ格納 print $template->process($compiled_tt2); # $compiled_tt2から出力を生成
フォルダにあるファイルを一つずつ名前をチェックして移動するって言うようなプログラムを作りたいんですけど、どのような関数orモジュールを使えばいいのでしょうか? 具体的には、名前が 20070817122431.jpg のファイルを、フォルダ 元フォルダ |_____2007 |____08 に移動させたいと言う感じです。
ちょっと分かりにくかったので、 移動させたいフォルダは元フォルダのの中の2007フォルダの中の08フォルダです。
>>110 そうやって、トイレのドアの開け方、しゃがみ方、ズボンの降ろし方、
発射の仕方、塵紙の取り方、拭き方、流し方、立ち上がり方を
いちいち訊く前に、関数のリストにざっと目を通して
それらの工具で何が作れるか考えてみろ。
>>110 backtick演算子を使って解決しました。
数値文字参照を使って記号を出力するとき、 10進と16進と、二つの選択肢があるが どっちをえらべばいいんだ?
>>.115 1. 読まない 2. 調べない 3. 試さない 4. 理解力が足りない 5. 人を利用することしか頭にない
117 :
デフォルトの名無しさん :2007/08/17(金) 23:33:54
デパートのトイレでンコするとき、 洋式と和式と、二つの選択肢があるが どっちをえらべばいいんだ?
日本人なら和式に決まってるだろ。
エラートラップに無頓着すぎる。 耐え抜くとか便器使わないとか店員と会話しながらとか、ユーザが取り得る選択肢は山ほどある。
Perlで、関数の引数にデフォルト値を設定できますか。 function f1($x=0, $y='foo') { ... } のような感じです。
できます。
>>109 なにをやりたいの?
そもそも、コンパイルしないときは、どうやって使ってたの?
123 :
デフォルトの名無しさん :2007/08/19(日) 09:50:48
さくっとハッシュを連結する方法ってありませんか? foreachで1つずつ代入してもいいんですが。 %foo 中身は $foo{'hoge1'}、$foo{'hoge2'} + %bar 中身は $foo{'hoge3'}、$foo{'hoge4'} ↓ %sum 中身は $sum{'hoge1'}〜$sum{'hoge4'} こんな感じ。 キーが被った場合などは、どういう扱いでも構わないので。
124 :
デフォルトの名無しさん :2007/08/19(日) 10:48:08
foreach がそんなに嫌いなら、こういう方法もあるぞ。 $foo{'hoge1'} = "うんこ"; $foo{'hoge2'} = "まんこ"; $bar{'hoge3'} = "おそそ"; $bar{'hoge4'} = "ぼぼ"; %sum = %foo; $sum{$key} = $val while ($key,$val) = each %bar; print "$key=[$val]\n" while ($key,$val) = each %sum;
>>123 use strict;
my %foo = ('hoge1'=>1, 'hoge2'=>2);
my %bar = ('hoge3'=>3, 'hoge4'=>4);
my %sum = (%foo, %bar);
print join qq/\n/, map qq/$_ => $sum{$_}/ => keys %sum;
ハッシュはリストコンテキストで評価すると、
(Key=>Value)の順にならんだリストになるから、
単純にカンマで区切って連結できる。
Perlで、関数の引数にデフォルト値を設定できますか。 function f1($x=0, $y='foo') { ... } のような感じです。 もしできるなら、そのやり方を教えてください。 今は sub f1 { my ($x, $y) = @_; $y = 'foo' if $y == undef; } というかっこわるい書き方をしています。
127 :
123 :2007/08/19(日) 11:41:03
ありがとう。愛してる。 案外、算術演算子だけで実装できたとしたら何て謝ろうかとヒヤヒヤしてました。
興味本位の質問ですが、100m って出力するのに use strict; my $i = 100; print "$im"; だと$imがないと怒られるので print "$i\m"; にするとOK それじゃ、100n を文字列連結させないで、ダブルクォートで出力するのにはどうすればいいですか?
>>129 おぉーすごい。ありがとうございます。
perlってそういう裏技的な文法がいっぱいあるような気がするんですが
そういうのはどうやって調べたらいいんでしょうか?
どこが裏技だよperldocに全部書いてあるわ
perldocってのを見ればいいんですね。
ちょっと質問からはズレるけど、sprintfでもいいかもね。
素朴な疑問なんだが、perldocを読まずにどうやってPerlを学習したんだろう?
そりゃいくらでもあるでしょ。 善し悪しは別として、とほほでもいいし。
my %foo = ( hoge1 => 1, hoge2 => 2 ); my %bar = ( hoge3 => 3, hoge4 => 4 ); my %sum; @sum{keys %foo} = values(%foo); @sum{keys %bar} = values(%bar); printf "%s=>%s\n", $_, $sum{$_} for keys %sum; %foo に直接 %bar を追加したりもできる。 @foo{keys %bar} = values(%bar);
138 :
デフォルトの名無しさん :2007/08/19(日) 19:51:01
DBIについて質問です。 膨大な数のレコードを呼び出してwhile等のループで処理をしたいのですが $sth = $dbh->prepare("select文"); $sth->execute(); とすると、スワップまで食いつぶされてしまいます。 ファイルでいうところの↓のような感じでメモリを消費せずに処理できる方法はないでしょうか? foreach(<IN>){ print; }
perldoc は英語なんだから、わかるわけないだろ! ヴォケが。
ヘボ
>>138 fetchしていないから、foreachに相当する部分の処理の前にいるわけだが。
perldoc にしか書いてないようなことは裏技だろ普通
いいえ
>>138 LIMIT使って、少しずつループします。
SQLのLIMITを調べましょう。
>>141 >>144 レスありがとうございます。
limitの値を調整しながらループさせてみたところ
非常に効率が良くなりました。
とても助かりました!
>>142 programming perl vol.1 62p. に記載されてる。
質問
ランキングカウントが出なくなりました。
以前は
「山田さん、6回目の優勝、おめでとうございます!」
とかって出ていたのに、
「山田さん、回目の優勝、おめでとうございます!」
になりました。
原因がよくわかりません。
ソースを以下に貼り付けるので、よく読んで
回答してください。
http://kazato.run.buttobi.net/cgi-bin/upload/src/viprpg_tktk0338.png (png画像)
if(defined($DT[0]))
{
#その時点でのトップの店のTOPカウンタを+1
$DT[0]->{rankingcount}++;
#優勝者発表
my $DT=$DT[0];
my $count=$DT->{rankingcount}==1 ? "first championship " : $DT->{rankingcount}." times championship ";
my $msg="This term champion store is ".$DT->{shopname}.$count."congratulations.";
WriteLog(1,0,0,$msg,1);
$msg="point is ".$DT->{point};
$msg.="and the gap from the second is ".($DT->{point}-$DT[1]->{point})."point" if defined($DT[1]);
$msg.="";
WriteLog(1,0,0,$msg,1);
}
>>126 Perlにはデフォルト値を記述するような特別な書き方はない。
その方法でもいいと思うが。
スマートなのは、
sub f1 {
my %opt = (x=>0, y=>"foo", @_);
}
などとやることかな。引数をhashで与えるという制約になるけど、キーを上書きしてしまわない限りは、最初に設定した値がそのまま生きる。
149 :
109 :2007/08/20(月) 09:09:07
>>122 伝え方が上手くないのですがtt2で引数に「COMPILE_DIR」を渡すと
テンプレートファイルをPerlコードに変換したファイルが生成され次回から高速になります。
恐らく通常は
1,テンプレートファイルをparseしてPerlコードに変換
2,Perlコードに変換したものをevalして実行
というプロセスで実行されていると思われ、TT2のキャッシュ機能は
Perlコードへ変換した結果をファイルにキャッシュすることにより
1を省き高速化が図れるというものです。
これらはファイルベースなら実現できるのですが
例えばPerlコードに変換した値をDBに保存し次回以降、
DBから取り出し高速に実行できないかと考えた次第です。
>>126 って 0 や '' (空文字列) もデフォルト引数になるよね
undef かどうかを判定したいときは defined($y) にしないと
デフォルト引数って &hoge(); とかやると $_ が入って来た様な記憶が…? &hoge; で回避できるのかな? よく覚えてないや。
質問です。
WriteLogというサブルーチンの使い方や意味が
わからないので、日本語で説明してもらえますか?
定義部分のソースは以下の通りです。
特に、main::WriteLogの部分がわかりません。
コロンコロンってなんですか?よくはてなのサービスに
ついてるような気がしますが。
あと、なんで引数が5つもあるのかが、わからん。
以下、ソース。
http://kazato.run.buttobi.net/cgi-bin/upload/src/viprpg_tktk0339.png (png画像)
######################################################################
# ★アイテム用下請関数:ログ書きこみ
# usage: WriteLog(重要度,対象店舗ID,メッセージ)
# 重要度 0==一般 1==重要
# 対象店舗ID 0==全店舗宛 店舗ID==プライベート
# メッセージ ログメッセージ
# return: 0 固定
######################################################################
sub WriteLog
{
my($mode,$from,$msg)=@_;
main::WriteLog($mode,$from,0,$msg,1);
return 0;
}
a=1;a=2;a=3 のような文字列があったとして、 1 2 3の部分を配列として取り出すにはどうすればいいですか
gオプションでできました
>147=152 ・続きなら続きと書いてくれ。 ・WebProg板っていうのがあるのは知ってる? ・画像を貼り付けている意味が微妙に分からない。 ・コロンだかはてなだかの話って今ここに関係あるの? で、>147に関しては、ログの読み込みに失敗してるんじゃねーの?
> ソースを以下に貼り付けるので、よく読んで > 回答してください。 これに回答する人間がいるのにびっくりした。 ネットにはやさしい人間があふれているものだ。
>>156 >よく読んで
この部分で読むのやめたわ。
お前は読むのが当然、そして俺様のために答えてあげろ と言う風に感じられる
社長がPerl勉強し始めるとこんな感じになるんだろうな
158 :
155 :2007/08/20(月) 14:08:47
>156 割とボロクソ言ってるつもりなんだが。
>>157 えーなにおまえ。
社長からメールくるとき
いっつもそんな文面なの?
試験の問題文ぐらいでしか、日本語文に接して来なかったんじゃないだろうか。 >よく読んで
>>158 やさしい事だねぇ。
質問(
>>147 =152)で別の質問(
>>23 ,28,50,前スレ最後)を思い出しさなかった?
ボロクソ言うにしろ、Webprog板のスレ 741-747程度言って通じるかどうかって相手だろ、これ。
いや、単にあの配色コードを貼り付けたかったネタだろ?
PerlMagick
ttp://www.ss.iij4u.or.jp/~somali/web/_perlmagick_ref.html を使っています。
(1)
1つの画像ファイルから、形式やサイズ、フィルタのかけ方が異なる複数のファイルを出力したいと考えています。
この場合、Read() 〜 編集 〜 Write() のセットを、出力したい回数だけ繰り返すしか方法は無いでしょうか?
他はともかく、Read()あたりを省略する方法があってもおかしくなさそうなので。
(2)
JPEG画像を生成しようとしてます。
特定のファイルサイズ以内に収まるように生成したいのですが、PerlMagick単体で可能なのかどうか怪しいところです。
これを解決する方法、サイズ予測モジュールなどがあればお願いします。
164 :
126 :2007/08/20(月) 17:10:06
>>148 ,150
真面目な回答ありがとうございます。助かります。
>>121 のようなふざけた返答しかないから、困ってました。
しかしPerlはむずかしいですね。なかなかおぼえられません。
ふざけてるのは君の方だ
>>163 (1) 任意のタイミングで Clone 使うのが楽だと思う。
(2) 実際にファイルに書き出して、サイズが大きければ品質落としてやりなおしでよくね?
>>164 > しかしPerlはむずかしいですね。なかなかおぼえられません。
いや、簡単だよ。
168 :
163 :2007/08/20(月) 21:50:54
>166 (1) ありがとう。試してみる。 (2) やっぱそれしか無いのかなー。 上限ギリギリまで画質を上げたいとか考えると、結構な時間的コストがかかりそう。
>>169 よくやった!
あなたをわが社の情報収集担当最高責任者に
任命する!
ストックオプションはどれだけ欲しいですか?
>>147 については自己解決した。
カウントの数字は出ていたんだが、
前の文字列にくっついていたんで
見えなかっただけだった。
あなたがたが 「忘れることのできない病気」 な人たちであることはわかっております 「おれ達の頭の中から出て行って欲しい」 と思っているでしょうが、出て行ってあげません。 一生あなたがたの頭の中に住み着くつもりですので あきらめてください。 私を出て行かせる方法はありません。
>>172 さん
偽者が出るかもしれないのでコテを付けた方が良いと思いますよ
やあ低能社長さん 今日も粘着させて頂きますので 宜しくお願いしますね
175 :
デフォルトの名無しさん :2007/08/21(火) 22:59:59
現在ローカルで動かしていたプログラムを実環境にて動作確認しています。 ローカルではエラーが出なかったのですが、 実環境ですと特定の条件下でエラーが出てしまいます。 以下のコードはエラーが出ないのですが、 my $output = spacesLineDelt($tmpl->output); textOut($path, $output) 以下のコードだとエラーが出てしまいます。 textOut($path, spacesLineDelt($tmpl->output)); 全く原因がわからないのですが、 どなたかお心当たりがある方教えていただけると幸いです。 なお、実環境のPerlのVerは5.00503で、 色々制限が掛かっているのですが詳細が分かりません。
エラーメッセージくらい書いてくれよん
「500 Internal Server Error と表示されます」は禁止で。 WebProg向きのような気がする。
178 :
175 :2007/08/21(火) 23:16:02
デバッグ方法に難があり、どうやら上のコードは関係ないようでした。すみません; エラーなんですが、telnetが繋げずfatalstobrowserを使っても なぜかこのエラーだけサーバが500エラーを返してきて分かりませんでした;
179 :
175 :2007/08/22(水) 03:23:37
2MBのメモリ制限に引っかかってエラーが出ているようでした。 お騒がせしました。
Perlのオブジェクトプログラミングをぼちぼち勉強しているところなのですが、 継承されたクラスをどうやって扱ったらよいか迷っています。 今悩んでいるのは、複数のクラスを継承するクラスで生成したオブジェクトにおいて 呼び出したいメソッド名がクラス間で重複するとき、 クラスメソッドを呼び分けるにはどうすればよいかということです。 単純には呼び出したいクラスでメソッド名を完全修飾すればと考えたのですが、 重複メソッドが多いとこの方法で呼び分けるのはとてもわかりにくくなります。 それにメソッドの中にメソッド呼び出しがあるとまずいことになります。 そもそもメソッド名が重複するような継承はだめなのでしょうか。 ひとつご教授ください。
> そもそもメソッド名が重複するような継承はだめなのでしょうか。 ダメとは言わんけど 「自分が何をやっているか」をきちんと把握できてないと破綻する そういうことには上級者になるまで手を出さない方がいいんじゃないかと
多重継承なんかつかわなければいいだろ。
使わないと身に付きませんよ。
perlでそんなめんどいことするなんてアホとしか
185 :
180 :2007/08/22(水) 15:17:30
ひとつ思いつきました。 オブジェクトを目的メソッドの所属クラスにブレスし直して、 メソッド呼出し後、元のクラスに再々ブレスし直すというものです。 コードに書くとこんな感じなります。 $curr_class = ref $object; bless $object, 'FarInheritClass'; $object->dup_method; bless $object, $curr_class; 対症療法としてはこれでいいですが、普通は多重継承でメソッドが重なる場合 どういう対策をしているんでしょうか。 クラス別にハンドルを生成するメソッドを用意するとかですか? 一般的な手法が知りたいです。 多重継承そのものを否定している方もいらっしゃるようですが・・・
186 :
180 :2007/08/22(水) 15:20:57
一応、
>>180 の単純化した例を用意しました。、
以下の例では、Aで生成したオブジェクトを使ってfというメソッドを呼び出していますが、
素の状態ではB、D、Cの順に探索するのでDのメソッドが呼び出されます。
C::で修飾してもfの中に内部メソッドの呼び出しがあるので、意図とは反して
Dの_pメソッドが呼び出されてしまいます。
これを正しく呼び分けられるようにしたいというのが質問の意図です。
package A; @ISA = qw(B C);
sub new { bless {} }
package B; @ISA = 'D';
package C; @ISA = 'D';
sub f { $_[0]->_p }
sub _p { print "I like C.n" }
package D;
sub f { $_[0]->_p }
sub _p { print "I like D.\n" }
###
package main;
$o = A->new();
$o->f; # I like D
$o->C::f; # I like D (not C)
abc_abcdという文字列から 0文字目から3文字分(abc) 4文字目から4文字分(abcd)といった情報を先に作っていて @position = (0,4); @substr_len = (3,4); 以下のようにsubstrを使って取り出してsortしていたのですが遅いです。(substrの部分が) なので @text=(a,b,c,_,a,b,c,d)と@position と @substr_len を使って基数ソートのような方法でソートし、 (0,3,4,4)のように数値情報だけ得たいと思うのですがコードの書き方がわかりません。 どうすれば良いでしょうか、よろしくお願いします。 while($j < @position) { $p = $position[$j]; $len = $substr_len[$p] $word = substr($text, $p, $len); push @a_word, $word; $j++; } @a_word = sort @a_word;
>>187 で、結局何がしたいんだ?
アンダースコアで単語を切り分けてアルファベット順に並べ替えたいならアプローチが間違ってる。
>>186 A を使うに際し A の内部で C が使われている事を
意識しなければいけない状態はカプセル化に失敗しているわけだけど、
それはいいの?
駱駝本や黒豹本だと無闇に継承(is-a)を使わず
合成(has-a、use-a)も考えるよう勧められてるよ。
ダイアモンド継承で名前の重複なんて、思いっきり典型的な罠にはまりまくりな パターンだな 別名つけるのがありがちだけど完璧で美しい対処法なんて無いだろ だから多重継承は強力でありながら忌み嫌われるんだよ
shiftjisのinput.txtの全角スペースにマッチングさせるため、 open FP,'<:encoding(shiftjis)', 'input.txt' or die; $Zspace = "/xE3/x80/x80"; # Zenkaku space on EUC-JP if($line=~/$Zspace/){ print "detected"; } というスクリプトを書いてみましたが これを実行してもマッチングに失敗します。 何が悪いのか分かるかたいらっしゃいませんか?
193 :
デフォルトの名無しさん :2007/08/23(木) 12:20:11
夏休みだからって何だこの質問群は…
>>193 Javaスクリプトを無効にしてみたら?
>>192 突っ込みどころ満載ですね
\xE3\x80\x80にマッチしないのはutf8フラグ付いてるから
逆に言えばutf8フラグ付いてたら\sで全角スペースにマッチするにょ
198 :
デフォルトの名無しさん :2007/08/23(木) 12:58:10
199 :
デフォルトの名無しさん :2007/08/23(木) 13:54:13
193です。もしかすると、フォームからデータを受け取る際のsplit関数の、
@form=split (/&/,$input);
の&部分が、送られたアドレスの&部分とごっちゃになって(表現が変ですが)、
ttp:// ××.com/app/search.cgi?_mode=mode_detail&_type=rl&_object_id=0001
を、&で分解して
ttp:// ××.com/app/search.cgi?_mode=mode_detail
_type=rl
_object_id=0001
に分けてしまうのが原因のように思えてきました。
対処方法が分かればお願いいたします。また、説明不足な感じになって、
アドバイスしていただいた方、申し訳ありませんでした。
@form=split (/&/,$input);
$a=$form[0];
・
・
・
$a=$form[5];
$a=~s/詳細=/ /;
print "<a href=\"$a\" target=\"_parent\">詳細はこちら>></a>";
200 :
180 :2007/08/23(木) 14:10:04
いろいろ回答ありがとうございました。
>>189 B,Cが既存モジュール、DがB,Cが共通して使っている親クラス、
Aがmainを書いた人が書いたカスタムモジュールということにしておいてください。
>合成(has-a、use-a)も考えるよう勧められてるよ。
合成というのは継承機構に頼らず必要なメソッドを手動でA上にディスパッチして
使うということでしょうか?
駱駝本も黒豹本も持ってない・・・
>>190 重複メソッドについてはA上に別名で定義し直すっていうのが現実的な対応でしょうね
あと、内部のメソッド呼び出しが重複する場合は、サブルーチン呼び出しに書き換えるか、
それが出来ない場合は、やはりA上に同名のメソッドを定義して、適切なクラスへ
誘導する必要があると思いました。ばかばかしい事ですが・・・
sub A::_p { $meth = caller().'::_p'; $_[0]->$meth }
>>191 なるほど、next::methodでメソッドが重複するクラスへ誘導するわけですか。
ひとつ勉強になりました。
問題点があるとすれば重複すると分かってからnext::methodを書き込まなければ
いけない点ですね。
次のメソッドが無い時でもエラーにならない maybe::next もあるにょ
お前はもうここに書くな
204 :
デフォルトの名無しさん :2007/08/23(木) 20:10:19
>>193 ,
>>199 で、結局、自分は何をしたいのか、どういう結果を期待しているのか。それを書け。
>>187 そのコードで(sortではなく)substrが遅いというのは、
・$text に utf8フラグが付いている
・配列(@position)の要素数がとても多い
・その部分が何回も(数百回,数千回といった回数)実行される
という事?
206 :
デフォルトの名無しさん :2007/08/23(木) 21:30:08
>>204 &を含む以下のようなアドレスをフォームから送ったとき、
ttp:// ××.com/app/search.cgi?_mode=mode_detail&_type=rl&_object_id=0001
@form=split (/&/,$input); によって
ttp:// ××.com/app/search.cgi?_mode=mode_detail
_type=rl
_object_id=0001
の3つに分解されて@formに格納されてしまいます。
&を含むアドレスを分解されずにひとつの添え字の中に格納することはできますか?
208 :
デフォルトの名無しさん :2007/08/23(木) 23:02:11
わからん。わけわからん! &で分解してるのに、&で分解されずに格納したいだと?? わからん。言ってる意味がまったくワカラン!!!
CGIの環境変数を勉強してこい
210 :
デフォルトの名無しさん :2007/08/23(木) 23:36:11
211 :
187 :2007/08/23(木) 23:44:38
>>188 「_」で切り分けたいわけではないです。bc_abのような組み合わせもあります。
かなり長い文字列から、部分文字列を大量に切り取って、ソートしたいです。
>>205 まったくその通りで・・・頭が下がります。
utf8ですし、
ループ回数は10万ちょっとあります。
substrでは1秒近くかかります。
なので以下のように配列で処理しようとしたのですがソートがわからなくなりました。
abc_abcdからabc,abcdと取り出そうとした場合、
配列に0文字目から2文字目まで、4文字目から7文字目までという意味で(0,2,4,7)と格納する。
これだと0.05秒くらいで終わります。
>>187 >>211 substrが遅くて困る、というなら、
substrを使わないか、回数を減らすアルゴリズムに切り替えること。
そのためのヒントとなるべき「何をしたいのか」が
>>187 にはない。
substrを使う
>>187 のアルゴリズムが絶対なら、それはsubstrから逃れられないのでは?
180がだいぶわかってないのだけはわかった。 オブジェクト指向プログラミングを学ぶならPerlじゃないほうがいいと思う。 個人的にはJavaがおすすめ (静的型付のほうが最初はいい気がする) オブジェクト指向の原則やデザパタを学ぶには「アジャイルソフトウェア開発の奥義」もおすすめ。
>>187 オフセット情報があるんだったらunpackで一発じゃない?
>>201 あ、そうですね。とりあえず、重複するかどうかわからないけどそう書いとくのも手ですね。
あと、同じことなのですがサブルーチンに属性をつけるのもありだと思いました。
例えば
>>186 で重複メソッドをロード順に実行するなら
package UNIVERSAL;
use Attribute::Handlers;
sub DUP :ATTR(CODE) {
my ($pack, $symbol) = @_;
my $sub = *{$symbol}{NAME};
my $fa = *{'A::'.$sub}{CODE};
my $fx = *{$pack.'::'.$sub}{CODE};
*{'A::'.$sub} = $fa ? sub{ $fa->(@_); $fx->(@_) } : $fx;
}
sub C::f :DUP {・・・}
sub D::f :DUP {・・・}
あと内部呼び出しで重複するメソッドはINSIDE属性をつけるとか
sub INSIDE :ATTR(CODE) {
my ($pack, $symbol) = @_;
my $sub = *{$symbol}{NAME};
return if *{'A::'.$sub}{CODE};
*{'A::'.$sub} = sub{ my $meth = caller()."::$sub"; $_[0]->$meth };
}
sub C:_p :INSIDE {・・・}
LWP-UserAgentでHTTPSのアクセスにSocksプロキシを使いたくて調べたら
LWP-Protocol-https-SocksChainというの見つけたのですが
サンプルコピペして実行しても
Deep recursion on subroutine "LWP::Protocol::
http::SocketMethods::sysread " at C:/Perl/site/lib/IO/Socket/SSL.pm line 767.
Deep recursion on subroutine "IO::Socket::SSL::SSL_HANDLE::READ" at C:/Perl/lib/LWP/Protocol/http.pm line 392.
ってエラーでてしまいます。どうすればいいんでしょうか?
環境はActivePerl v5.8.8 WindowsXPです。
LWP-Protocol-https-SocksChain自体Googleで検索してもほとんど出てこないのでどなたか助けてください。
>>202 ざっと見ましたが、出来るなら継承より委譲した方がいいようですね。
委譲パターンって単純にはこんな感じでしょうか
sub A::new { bless {delegate_B=>bless({},'B'), delegate_C=>bless({},'C')} }
sub A::delegate_B { $_[0]->{delegate_B} }
sub A::delegate_C { $_[0]->{delegate_C} }
package main;
$o->delegate_B->f;
$o->delegate_C->f;
>>213 あー180ですが、これ私に対するレスですよね。
Javaのデザインパターンの考え方は参考になるので、今度図書館で探してみます。
その前に駱駝本とかを読むのが先なのかな?
(借りようと思ったけど、ずっと貸し出し中だった)
前に指摘されていた黒豹本は書店で確認しましたが、あまりオブジェクトに関する記述はなかったです。
今、perlbootとperltoocとperltootを読んでいるところです。
これとperlbotがPerlのオブジェクト〜の教典ってことになるのでしょうか
219 :
デフォルトの名無しさん :2007/08/24(金) 20:48:29
皆さんこんにちは. $::request という変数が書かれたスクリプトがあるのですが, これ何の変数なのか教えていただけないでしょうか. プログラミングPerlで見つけることができなくて・・・
現在のパッケージに属するスカラ変数。
プログラミングPerlでは、パッケージに関する項で説明されている。 ただし初版(背表紙が赤い奴)では(当時まだ無かった) $::name という表現は使われていない。 (かわりに $'name という表現が使われている)
お前はもうここに書くな
223 :
素人 :2007/08/25(土) 15:54:10
perl初心者です。よろしくお願いします。 HTMLのフォームからCGIにデータを送った場合には、内容がきちんと表示される のですが、CGIに直接アクセスした時には表示されません。どこに問題があるのか ご教授下さい。お願いします。 #!/usr/local/bin/perl #データファイル $datafile='./data.dat'; #ライブラリの読み込み require './jcode.pl'; #フォームデータの読み込み if ($ENV{REQUEST_METHOD} eq "POST"){ read (STDIN,$input,$ENV{CONTENT_LENGTH}); }else{ $input=$ENV{QUERY_STRING}; } #フォームデータのデコード $input =~ tr/+/ /; $input =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; #SJISコード変換 &jcode::convert(\$input, 'sjis'); #フォームデータの分解 @form=split (/&/,$input); #データのオープン open(DAT,"+< $datafile"); flock(DAT, 2); #データの書き込みとクローズ seek(DAT,0,0); print DAT @form; close(DAT);
224 :
素人、続き :2007/08/25(土) 15:56:48
&header; print "<div class=\"iframe_body\">"; #データを表示する(左) print "<div class=\"iframe_left\">"; $a=$form[0]; $a=~s/名前=/ /; print "<b><font color=\"#ff0000\">$a</font></b>"; print "<br>"; $a=$form[1]; $a=~s/画像=/ /; print "<img src=\"$a\" width=\"120\" height=\"100\" border=\"0\">"; print "<br>"; $a=$form[2]; $a=~s/住所=/ /; print $a; print "<br></div>"; ・ #データを表示する(中央)と(右)があります。 ・ print <<EOM; </body> </html> EOM exit; #----------------------------------------------------------------------------------- # HTMLヘッダー #----------------------------------------------------------------------------------- 割愛
板違い。テンプレヨメ。
226 :
素人 :2007/08/25(土) 16:42:14
入力がないのに、どうやってデータを出すんだよ
228 :
素人 :2007/08/25(土) 16:55:13
入力ってなんですか?教えてください。お願いします。
Perl、CGIの本買ってくればのってる 手間、金、時間を惜しむ奴は勉強しなくてよろしい
230 :
素人 :2007/08/25(土) 17:21:25
>>229 open(IN,"ファイル名");
@form=<IN>;
close(IN);
は試してみたんですが、ぜんぜん別のことでしょうか?
とりあえず、もう一度本を読み直してみます。
> 手間、金、時間を惜しむ奴は勉強しなくてよろしい 君んちの近くに心療内科ないの? あったら一度行ってみた方が良いよ。
>>232 自分が行ってみて良かったから人にも勧めてるんだろ。
回答者を煽っても質問者が得する事は 何一つ無いと言うのに 全く愚かな奴だ
心療内科を探す手間、金、時間を惜しむ奴は治療しなくてよろしい
236 :
205 :2007/08/25(土) 21:32:13
>>211 それは大変そうだね。
普通は位置情報で処理すると、187の@a_wordへ分割するコードより遅くなるよ?
sortの準備が1秒から0.05秒に減る代わりに、sort自体が0.5秒から10秒に増える感じになる。
ソート済みの位置情報を保存して使いまわす場合には、速度は気にならないだろうけどね。
n番目という情報をソートするだけなら、例えば @a_word = sort @a_word; ならば比較関数を
@order = (0..$#a_word);
@order = sort { $a_word[$a] cmp $a_word[$b]} @order;
のように書けばいい。(@a_word = sort @a_word; より数倍遅い)
同様に
@order = sort { substr($text,$position[$a],...
と、より複雑な比較関数を使って @a_word 自体を作らない手もある。(更に数倍以上遅い)
諦めてppmにしておいたほうが幸せになれる
あきらめて VMware の中に Linux 入れたほうが幸せになれる
テキストファイルの文字コードを調べて、もしUTF-8じゃなかったら、UTF-8として読み出すみたいなことは出来るんですか? ナニナニを使え、みたいなお返事でも結構ですので
>>126 今さらだけど、属性使うとそれっぽく書ける
sub f1 :Default(0,'foo') {
my ($x, $y) = @_;
print "$x $y\n";
}
実装例
use Attribute::Handlers;
sub UNIVERSAL::Default :ATTR(CODE) {
my ($pack, $symbol, $referent, $attr, $data) = @_;
no warnings 'redefine';
no strict 'refs';
my $sub = *{$symbol}{NAME};
my $orig_func = *{$pack."::$sub"}{CODE};
*{$pack."::$sub"} = sub{
for my $i (0..$#$data) {
unless (defined($_[$i])) {splice(@_, $i, 1, $data->[$i]) }
}
$orig_func->(@_)
};
}
お前はもうここに書くな
243 :
デフォルトの名無しさん :2007/08/27(月) 17:27:28
質問です。 たまに、戻り値を受け取る変数の型によって、値が変わる関数がありますよね? (1) これを自前でサブルーチンとして実装するには、どう記述すればよいのでしょうか。 (2) この値を呼び出し側で制御することは出来ませんか。 @tmp = function(); $result = \@tmp; のように。 よろしくお願いします。
wantarrayとかの話?
245 :
243 :2007/08/27(月) 18:03:05
関数の返り値が配列なのかスカラーなのかブーリアンなのか実行前に知りたい時がたまにある。 どうすりゃいいんだろう
>>243 $result = [function()];
250 :
243 :2007/08/27(月) 18:24:26
>246 戻り値をスカラーで受け取りつつ、関数には、リストコンテキストとして評価できないかなと。 配列のリファレンスが欲しい。 >247 ドキュメントをしっかり作るとか。 あとは、統合環境で何とかならないかな?
251 :
243 :2007/08/27(月) 18:27:20
リロードしてなかった orz >249 ありがとうです。そんな使い方があったのですね。
>>247 無理だよ。コンテクストや引数、そのほか計り知れない要因によって変わる可能性があるんだから。
>>248 サブルーチンとか所在のわかっている関数はB::Deparseとかで確認できるけど、
どこから継承されているかわからない階層の深いメソッドとかはどうすりゃいいですか?
そんなに深い谷底からメモもなく浮上してくるの?
頭の足りない人向けのライブラリでも作ってるのか。大変だな。
ソース読むとかドキュメント読むとか取り合えずダンプしてみるとか callerで深い階層まで拾ってみるとかそんな関数使わないとか
258 :
254 :2007/08/27(月) 21:51:26
あ、canメソッドを使えばいいのか。canはコードリファレンスを返すんだった。 それをcoderef2textに渡せばソースが出力される。 自己解決しました。お騒がせしました。
259 :
デフォルトの名無しさん :2007/08/27(月) 21:56:30
Perlはまだ書いたことが無いのですが ファイルサーバーの ¥¥fileserver¥dateの下にあるファイル全てを ローカルの C:¥date¥ の下にコピーする ということは可能でしょうか
UNIX系なら簡単なにのにな〜 Macとか、Linuxとかにすればいいのに〜 パソコンくんには無理かな〜
263 :
デフォルトの名無しさん :2007/08/27(月) 22:46:42
>>261 MacとLinnuxの間はRsyncで同期してるから問題ないのだが
WinとLinuxの間をPerlにしようと思ってるんだ
でもフリーソフトで結構いいのがありそう
264 :
259 :2007/08/28(火) 00:15:54
>>260 お前にはできるのに、私には無理でしょうか
266 :
デフォルトの名無しさん :2007/08/28(火) 00:21:54
なんか 馬鹿ばっかだな さすがおこちゃま用Perlだw
267 :
261 :2007/08/28(火) 00:22:06
パソコンくんと言うと面白いほど釣れるね ありがとうApple。これからも釣りに使わせてもらうよ
はいはい、自己防衛本能だけは旺盛なようでw
269 :
デフォルトの名無しさん :2007/08/28(火) 01:17:10
270 :
261 :2007/08/28(火) 02:23:07
271 :
デフォルトの名無しさん :2007/08/28(火) 05:34:49
> $string =~ s/$pattern/$replace/g; $string =~ s/$pattern/$replace/gx;
>>272 おまえのできてないだろwww
#!/usr/bin/perl
use strict;
my $pattern=<STDIN>; chomp $pattern;
my $replace=<STDIN>; chomp $replace;
while (! eof STDIN) {
my $string =<STDIN>; chomp $string;
if (my (@matches) = ($string =~ /$pattern/)) {
my $rep = $replace;
$rep =~ s/\$(\d+)/$matches[($1 -1)];/eg;
$string =~ s/$pattern/$rep/eg;
}
print $string,"\n";
}
LWP::UserAgentでHTTPSアクセスしてるんですが たまに接続先に繋ぎっぱなしになって戻ってこない時があります。 UserAgent->timeoutも機能してないし、SIGALRMも効きません。 対処法お願いします。 ActivePerl5.8.8です。
ある文字列が 2 文字かどうか正規表現を使わずにおこなう方法はありますか? $string =~ /^..$/; と同じことがやりたいです。 よろしくお願いします。
>>275 length($string) == 2
278 :
デフォルトの名無しさん :2007/08/28(火) 15:34:09
zipファイルの展開について。 zipファイル(テキストファイルを圧縮したもの)をメモリ上に展開し、 そのテキストを読み込みたいと考えています。 これは可能でしょうか? 可能な場合、参考になるサイト等あればお教えください。 ActivePerl5.8.1で、モジュールの追加なしで考えています。 (Archive::Zipを使い、ファイルに出力すれば読み込めることはわかりました。) perlでファイルマッピングできればと思いましたが、見つけられず。
ttp://search.cpan.org/~adamk/Archive-Zip-1.20/lib/Archive/Zip/FAQ.pod Zip contents in a scalar
Q: I want to read a Zip file from (or write one to) a scalar variable instead of a file. How can I do this?
A: Use IO::String and the readFromFileHandle() and writeToFileHandle() methods. See examples/readScalar.pl and examples/writeScalar.pl.
Reading from streams
Q: How do I read from a stream (like for the Info-Zip funzip program)?
A: This isn't currently supported, though writing to a stream is.
>>278 POD読め。もしくは、ソース読め。
ZIP.pod (ZIP.pm に埋まっている場合あり) より.
>=item contents( $memberOrMemberName [, $newContents ] )
>Returns the uncompressed data for a particular member, or undef.
> print "xyz.txt contains " . $zip->contents( 'xyz.txt' );
>Also can change the contents of a member:
> $zip->contents( 'xyz.txt', 'This is the new contents' );
282 :
デフォルトの名無しさん :2007/08/28(火) 22:23:47
>>282 たぶん単純すぎて誰も答えてくれかったんだろうけど、
明らかにこうでしょ。
>>273 が珍回答だってのは初心者の俺でもわかるよ
$string =~ s/$pattern/'"'.$replace.'"'/ee;
Perl+SQLite関連のサイトのブクマがある程度ある人は、良かったら公開して
perlをコンパイルしてexeファイルにして配布しているシェアウェアってありますか? というかperlで作ったプログラムをperl2exe.exeのようなものでコンパイルして、中身のコードを 見れないようにして人に売ったりしてる人っています? なんか、perlつかってるひとって商売っ気ないというか、なんでもフリー精神がありそうで、そういうことは 禁止されてるのかなと思いまして。
288 :
デフォルトの名無しさん :2007/08/30(木) 03:14:29
$perl -e 'use LWP::Simple; 〜 というのをコマンドラインからよくやるんだけど、 この「use LWP::Simple」の部分を省略する方法ってありますか?
-Mとか-mとか
>>289 -Mを忘れてました。もうひとつ、-Mを省略する方法ってないですかね。
perlのaliasを設定するしかないのかな?
>>287 爆笑した。この変な会社もやはり、コードの中身をあんまり見られたくないから
PARつかったんだろうね。でも簡単に見られるみたいだけど。
だけど、perlだからこそこの面白話がなりたってるね。
>287 やっぱり思い出すよな、それ(笑)
昨日EPICをインスコしたんですが、良いですね〜。 もう秀丸には戻れない体になってしまいました。
294 :
デフォルトの名無しさん :2007/08/30(木) 12:54:02
>>283 スゴス・・・
perl の正規表現の解説をググりまくって調べてたんですが、
/e についてはどこも”アッサリ”な説明しかなく
ましてや /ee なんてどこにも書いてませんでした。
みんな避けて通ってるみたい。
>>283 それって、$replaceに"が入ってたらしなね?
>>294 こういう人ってときどき出現するけど、なにかの精神病なのか?
釣りだと思いたいな。。
>>294 「e修飾子はevalするもので複数回指定可能」という説明だけで、evalを理解している
人にとって十分だからなぁ。
perlopのサンプルコードのコメントにさらっと書いてあるだけなので見落としやすい
というのはあるが。
# /e's can even nest; this will expand
# any embedded scalar variable (including lexicals) in $_
s/(\$\w+)/$1/eeg;
>>291 ,292
なんなんだろうね、この流れも。
PAR使う理由はそこじゃないだろうに
>>290 〜のみを引数として渡す、バッチファイル作れば?
302 :
デフォルトの名無しさん :2007/08/31(金) 00:19:33
ここもか・・・orz どうして perl スレはどこも皆キチガイばっかりなんだ?
やあこんにちは 今日も粘着させて貰うので 宜しくお願いしますね
ファイルパスの入った配列をディレクトリ順にソートしてくれるモジュールや 配列は無いでしょうか? …sort関数で可能だったりしますか?
ディレクトリ順ってのがよくわからん。
abcってことじゃね? alpha/boo/imac.jpg beta/aipod/steve.numbers cats/mycats.cwk
use File::Sort
alpha/boo/imac.jpg alpha/fasdg/share.exe alpha/fasdg/tesadf.txt beta/aipod/steve.numbers beta/aipod/winny.exe cats/mycats.cwk みたいなのを期待しているんじゃ(ry
説明不足で失礼しました。親ディレクトリからの 並びになるようにソートしたかったんです。 my @path = ('/c/bar/hoge', '/a/foo', '/b'); これを /b /a/foo /c/bar/hoge のように並べ替えたいのですが単純にsort関数使うと /a/foo /b /c/bar/hoge こうなってしまうので… 超初歩的なこと訊いてそうで恐縮ですorz
/b より /a/foo が後ろになるのかよ
/のマッチ回数でハッシュとかに入れたら?
説明伝わりにくそうなので書き直し。310は忘れてください… 単純に言うなら欠くディレクトリの持ってるファイルを先に、 子になるディレクトリを後にして並べたいという感じです
書き込んでる間にレスが > use File::Sort ありがとう 調べてみます > 312 ありがとうございます。もうちょっと工夫してみます
>>288 環境変数 PERL5OPT に設定しておく。
いらないときが面倒だけど。
sort { ( $T{$a} ||= scalar @{[split m!/!,$a]} ) <=> ( $T{$b} ||= scalar @{[split m!/!,$b]} ) || $a cmp $b } @path
シャチ泳ぎがスパゲティかあ、、、
加えて、スパゲッテイコードの意味を正しく理解しているかも微妙な線(誤用とまでは言わない)。
316が要件を満すか否かは別にして317は酷い
321 :
305 :2007/08/31(金) 09:13:26
>>316 こ、これは! まさに望んでいたソートになりました。ありがとうございました
ワンライナーで書けちゃうんですねぇ… 勉強になりました
高卒にはこの美しさが分からないんだろうな
>>322 きれいなシャチ泳ぎは美しいかもしらんが、
>>316 のコードは
お世辞にもきれいとは言えん。釣りで仕込んだのかもしれんが、無意味な無名配列作成とか。
同じ事を普通に書くと以下になる。
sort { ( $T{$a} ||= split m{/},$a ) <=> ( $T{$b} ||= split m{/},$b ) || $a cmp $b } @path
ただ「スパゲティ」とは別ものだ。
私もscalarとかが不必要だとは思ったけど なんていうかコードよりこのスタンスに美を感じるんだよね やはり専門卒レベルには理解出来ない芸術なんだよ
325 :
316 :2007/08/31(金) 13:12:43
>>323 最初それで書いたんだけど
Use of implicit split to @_ is deprecated at - line 5.
Use of implicit split to @_ is deprecated at - line 5.
ってワーニングでるし思考停止しかけてたから無名配列作ったんだけど
tr|/|/| ってのもいいかもね。 @pathの中に "/" が含まれていたらただのsortと同じになるので、 そんなのも考慮するなら、再帰的に作るしかない気がします。
>>325 $cache{$a} ||= @_ = split m{/},$a
トラブって原因探るときに美が邪魔をするんだよねwww
ひさしぶりにperlでプログラム書いたら、== と eq があるの忘れててはまった。
== と === がある言語ではまったとか書けばいい?
あぁ、ナポリタン喰いてぇ
332 :
316 :2007/08/31(金) 18:19:19
Acme::Morseがスパゲティぽくていいと思うんだ
ちょw Damian Conway www
334 :
デフォルトの名無しさん :2007/08/31(金) 22:38:16
perlで「No such file or directory」のエラーが出る。このエラーは、Windowsでは 不可避なのだろうか?例えばc:/倉庫別棚卸し表のディレクトリーでPrint "hello!";の 1行からなるperlのプログラムを仮にa.plで保存する。そしてperl a.plを実行させる と、No such file or directoryのエラーが出る。これをディレクトリーの名前を倉庫 別棚卸し表から倉庫別棚卸しに変更して上記のa.plを実行させると正常に動作する。 理由は、ディレクトリーの表のシフトJISの内部コードは955Cで最後の5Cは アスキーの¥となっている。その為にエラーとなっているが、これを回避する方法は無 いのだろうか?
perl "c:\倉庫別棚卸し表\perl a.pl"
336 :
デフォルトの名無しさん :2007/09/01(土) 05:44:46
素早い対応、有り難う御座いました。 確かに、perl C:/倉庫別棚卸し表/a.plで動 きました。やはり、ディレクトリーの名前に\の5cが有るので、ディレクトリーをくっ つけるしか他に方法は無いのでしょうか? 質問の趣旨としては、それ以外で解決方法は無いのだろうかと思っていましたので。 例えばPerlの起動オプション...etcです。調べた結果は、見つからなかった物でしたか ら。本当に、そうなのかなあと思って質問しました。 本当に、perl a.plで動かす方法は無いのですね。どうも、有り難う御座いました。
かなりの初心者なんですがperlでは”複数の宛先に同時にpingを送る”といったようなことはできるのでしょうか?
どの程度の同時?
そういう関数が最初からあるのか、って意味でしょ?
Same_Send_Ping (X, Y, Z, ,,,,); 使い方、X,Y,Zに、pingを送りたいあて先の IPアドレスを書く。
なにその関数名ふざけてるの?変態じゃないの?
シャムシェイドピン
Ethernetに同時なんて概念は存在しない
ping 255.255.255.255
>>344 それは複数じゃなくて全部じゃなかったっけ?
たまにはMOSAIC.WAVの新曲の話とかしようよ
がちゃがちゃぎゅ〜っと ふぃぎゅあっと
>337 catalystのサンプルにそんなのがあったかも
349 :
337 :2007/09/02(日) 01:37:14
>>337 です。
外出してて遅くなりましたが返信くださった方々、ありがとうございました。
ちょっと言葉足らずですみません。
”同時”というイメージとしては並行処理です。
Aが送り終わったらB、ではなく、(もちろん多少のタイムラグはあるでしょうが)プロセスを複数動かしつづける、って感じです。
>>349 threadsとNet::Pingを組み合わせれば簡単に出来る
のではないでしょうか。両者共標準モジュールです。
オレ様が作ったSame_Send_Ping を使わないというのか!
>>351 みたいなキマイラみたいな命名規則の言語ってあるの?
353 :
337 :2007/09/02(日) 02:30:33
>>350 ありがとうございます。
頑張ってみます。
354 :
348 :2007/09/03(月) 22:59:09
catalystでなくてPOEだったorz
355 :
デフォルトの名無しさん :2007/09/03(月) 23:11:29
俺かなりのPerlエキスパートだけど use strict, warningsは使わないよ こんなの使って喜んでるうちは素人だね
>>356 よろしければ理由をお聞かせ願えないでしょうか
まぁ、俺くらいエクスパートになるとPerlは使わないよ こんなの使
それはよかったですね
>>357 Perlらしさが損なわれる。
かえってコードが汚くなる。
____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // だっておwwwwwwwwwwwwwwwwwww | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー'´ ヽ / / バ | | l||l 从人 l||l l||l 从人 l||l バ ン ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ン ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
俺なんてActivePerlから perl.exe と perl58.dll だけ 取り出して使ってるぜ普段 strict なんて使おうにもそもそも無えwww
オレなんか音声認識でコーディングしてるぜ
365 :
デフォルトの名無しさん :2007/09/05(水) 02:05:56
今年はPerl生誕20周年なのになんのイベントもなし? Pythonは3が@バージョンだけど出たネ
>>360 同意。
仕事で共同作業とか大規模プログラミングなら使う価値があると思う。
でも個人向けその場限りプログラムには正直要らない。
Perlらしいあの腐った文化を殺している。
いかにソースコードをPerlっぽく腐らせるかワクワクする楽しみがない。
変な人がいる
書くことは目的ではないのでね。 自分だけでやってて下さい
>>360 のコピペにマジレスしてるのか乗っかってボケてるのかわからねえ
それが少しでもマジレスと思えてしまうのがPerlなんだよな
質問! WindowsXP + ActivePerl5.8.8の環境でTerm::ReadLineを使ったスクリプトを書いてるのですが readlineでプロンプト中にファイルをコンソールにドラッグしてファイルのパスを入力したいのですが ドラッグされたファイルのパスが半角文字のみで半角スペースがなければうまくいくのですが、 パスの中に半角スペースや全角文字が入ってるとBEEPが鳴って正常にコンソールに入力できてなくて困ってます。 回避方法 or 代わりの方法を教えてください m( _ _ )m
却下!
373 :
デフォルトの名無しさん :2007/09/05(水) 16:18:20
6ってどうなるんだろうね
%
375 :
371 :2007/09/05(水) 17:04:46
もちろんそうよ
377 :
デフォルトの名無しさん :2007/09/05(水) 18:13:54
PERLで画像のアップロードのCGIのことでわからないんですが 教えてくれる暇な方いらっしゃいますか?
379 :
デフォルトの名無しさん :2007/09/05(水) 18:17:19
こまった・・
なぜ、いないのか教えてやろう。 そんなことは、Perl/CGIの入門ホームページを見れば、必ず書いてあるからだ。
381 :
デフォルトの名無しさん :2007/09/05(水) 18:29:15
じゃあPerl/CGIの入門ホームページのURL教えてくれ
評価コメント付きでたのむ
ちんこちんこちんこ
ワンセンテンスに「ですが」を3つも入れられると切れそうになる
P
すみません。 rootのWEBディレクトリに設置しているPerlを実行して一般ユーザーのディレクトリ(/home/user/public_html/)のパーミッションを変更するにはどうしたら良いのでしょうか? また、サーバーをシャットダウンさせる方法も教えて頂けると幸いです。
バッククォート
>>387 コマンドラインならsudo付けてやればよくね?
CGIなら、Apacheの実行ユーザーをrootにするとか。危険だけど。
>>388 ,389
サンクス!
でもバッククォートじゃ動作しなかったし、Apacheの実行ユーザーをrootにするのはやっぱ危険だし、sudoつかってapacheに
shutdown -h nowを許可してみたけど、いざ動かしてみてもシャットダウンされない…
ちなみにソースはこんな感じ。
#!/usr/bin/perl
print `shutdown -h now`;
print "Content-type:text/html\n\n";
print "OK";
OKは表示されるんだけどねぇ…
>>390 >#!/usr/bin/perl
#! sudo /usr/bin/perl
にしてみたら?
>>392 ・apacheのプロセスでsudoやshutdownのPATHは通ってるか?
・sudoはapacheのプロセスから利用できる設定になってるか?
・sudoはapacheのプロセスからパスワードレスで利用できる設定になっているか?
を確認してみ。
あと重要な手がかりなので、実行したときのapacheのエラーログも確認し、報告しようね。
print `shutdown -h now`; って… shutdownのパスは通ってるの? それから、こんなことしてもしSTDOUTに何か出力されたらServerErrorですぜ。 そもそもCGIでシャットダウンするのってどうよ。
395 :
393 :2007/09/06(木) 03:23:30
一部訂正 + 補足 >・apacheのプロセスでsudoやshutdownのPATHは通ってるか? CGIで$ENV{PATH}を出力すれば確認できる。 PATHが通ってなかったらsudoやshutdownをフルパスで書く or PATHを通した状態でapacheを起動 >・sudoはapacheのプロセスから利用できる設定になってるか? >・sudoはapacheのプロセスからパスワードレスで利用できる設定になっているか? ×apacheのプロセス ○apacheのプロセスのユーザー権限
エラーログにはこんなのが残っていました。 やはりまだapache権限でshutdownを実行できないようです。 [Thu Sep 06 11:06:56 2007] [error] [client 192.168.11.9] shutdown: you must be root to do that! shutdownは/sbin/shutdownで sudoは/usr/bin/sudoです。 PATHは/sbin/と/usr/bin/、他、に通っています。 visudoに以下を追加して実行 apache ALL= NOPASSWD: /sbin/shutdown -h now errorログ [Thu Sep 06 11:29:56 2007] [notice] caught SIGTERM, shutting down [Thu Sep 06 11:29:56 2007] [notice] SELinux policy enabled; httpd running as context root:system_r:httpd_t [Thu Sep 06 11:29:57 2007] [notice] Digest: generating secret for digest authentication ... [Thu Sep 06 11:29:57 2007] [notice] Digest: done [Thu Sep 06 11:29:57 2007] [notice] Apache configured -- resuming normal operations [Thu Sep 06 11:30:11 2007] [error] [client 192.168.11.9] shutdown: you must be root to do that! SeLinuxが邪魔してる? でもSELinuxはpermissive もう何が何だか…
あきらめてSSH使ったら?
>>397 うーん。SSHは勉強してないから敬遠していたけど、この機会に少し触ってみることにします。
みなさん協力ありがとうございました。
399 :
393 :2007/09/06(木) 13:19:01
400 :
398 :2007/09/06(木) 13:19:16
あ。SSIとSSHを読み違えてしまった
( ^ω^)おっおっおっ
402 :
364 :2007/09/06(木) 15:32:25
質問! if (!open どういう意味ですか?
404 :
デフォルトの名無しさん :2007/09/06(木) 22:40:19
質問させて下さい phpで外部のサイトやURLを取り込むには、includeなどを使いますが cgi(perl)ではどのようにして外部ファイルを取り込むのでしょうか? menu.cgiというテーブルタグで作ったコンテンツメニューを123.cgi(掲示板など)に読み込みたいのですが 検索をしてもうまくヒットしません。 アドバイスをお願いします><
すいませんスレ違いってことですよね。 理解できなかったので失礼します。 jsで読みこみます;;
マニュアルもテンプレも読めないバカは死んだ方が良いと思います>< Perlの関数なんて大した数じゃないんだから一覧表でも見ろよ。
何かいらいらしてるのが一人だけいるなw 何かあったのか? ゆとりぐらいもとうぜ
Perlのソースなんて数万行なんだから嫁よ
それでも答えないお前らにバロス
逆に頭の悪い奴が一人 居るように見えるのだけど… それも煽り目的で常駐してる…
今気付いた。もしかして、ソースを読み込もうとしてるんだろうか。
たくさんのレスありがとうございます メニューを書いて呼びこむつもりでした
まぁ、requireなんだけどな。
質問を見る限り、他サイトのCGIを読み込もうとしてるから、requireだときつくないか
だとしたらきついとかきつくないの問題ではないだろ・・・
いいかげん WebProg 行けよ。
>>416 さん
ありがとうございます
その回答が完璧です!
感謝してます
__EOF__ってなにか有用な利用法はあるんですか? ぐぐっても"perl __EOF__"じゃなにも出てこなかったので
ヒアドキュメントで検索しろ。 $string = '__EOF__'; こういうこと __EOF__
ActivePerlではバッチファイルにPerlコード埋め込むのに__EOF__使ってたな確か
>>424 おいおい、、、__E「O」F__ と __E「N」D__を混乱するんじゃないよ。
普通の perl に __EOF__ なんてリテラルトークンなかったはずだけど?
Programming Perl に記載されてんのは以下。
__DATA__,
__END__,
__LINE__,
__PACKAGE__,
__FILE__
>>425 > おいおい、、、__E「O」F__ と __E「N」D__を混乱するんじゃないよ。
怪奇なり
アホか
Perlがアホなのはわかってたことだろ
残暑が厳しいっすね
430 :
デフォルトの名無しさん :2007/09/08(土) 14:26:12
Perl10っていつでるの? $a = $a // $b; とかsayを早く使いたいよ
もういいよ。 つまんねーネタ晒すくらいなら黙ってろ
>>430 >$a = $a // $b;
一瞬、コメントアウトしてるのかと思ったwww
>>431 「お前がつまらないと思った」という事実の報告はそれよりもっとつまらないのに、
なんで自分にだけは書き込みを許してるの?w
431じゃないけど、それ以降くだらん書き込みを抑制したいから書き込んでるに決まってるだろ
「黙ってろ」なんて煽り文句入れないでしょ、抑制したいなら。
苛立ちをぶつけただけ
perl5.10は10月予定だったろ
精神障害者が多いスレですね。
と
俺も$a = $a // $bとsayは画期的だと思うわ。やったぜ!!
久しぶりに来たらなんか荒れてるな
443 :
デフォルトの名無しさん :2007/09/09(日) 21:13:28
外部辞書データを取り込んで、それをトリップキーとして使い 指定したトリップを検索できるプログラムはperlで書けますよね? 意味伝わってますか?(^_^;
>>443 出来る。
でも、取りあえずもうちょっと意味が通る文にしてくれ。
郵便番号トリップ検索でも行いたいのかしら。
447 :
デフォルトの名無しさん :2007/09/09(日) 23:28:17
>>444 すみません。
(;^-^)_旦""
>>445 あざすっ!
TripcodeExploreやtrip-mona等、トリップを解析するソフトウェアがあるのですが
それらは知ってますか?
だからまともに質問できないやつはどっかに行けっての
知ってますか?ってなんだよ。アホか。
>>443 辞書を順番にトリップに変換して検索したいパターンにマッチするか試すだけだろ?
トリップへの変換方法は「perl crypt トリップ」あたりで検索。
検索してもわからないから聞いてるんじゃないですか(^_^; もっとわかりやすくおしえてくださいm(_ _)m
>451 なら、先ずはもっとわかりやすくしつもんしてくださいm(_ _)m
十分わかりやすいんでどう言えばいいのやら(^_^; わかる方おしえてくださいm(_ _)m
>>451 どうやって、どこまで調べて、どこが分からなくて詰まったのかを説明すればいいじゃないですか(^_^;
荒らしなら他のスレに往って下さいm(_ _)m
455 :
◆PQZNeK2U46 :2007/09/10(月) 09:24:26
>>453 おまえ以外だれも理解できてる奴がいない状況で「十分わかりやすいんで」ってかなりな幸せ回路をおもちですね(^_^;
何を教えてほしいのかわからないのでおしえようがありません、荒らしはうざいのでさっさと消えてくださいm(_ _)m
>>456 理解してレスした人が居る上でその発言かよ
よほどの脳無しだな
458 :
◆PQZNeK2U46 :2007/09/10(月) 09:38:04
>>450 トリップは以下のコードで生成されるらしいのですが、これに辞書からトリップを作る機能を付け加えるとなると、難しいですか?
$tripkey = "#istrip";
$tripkey = substr($tripkey,1,);
$salt = substr($tripkey.'H.',1,2);
$salt =~ s/[^\.-z]/\./go;
$salt =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
$trip = crypt($tripkey,$salt);
$trip = substr($trip,-10);
$trip = '◆'.$trip;
print "$trip";
とても簡単ですよ Perlができる人にとっては
460 :
デフォルトの名無しさん :2007/09/10(月) 10:11:09
jperlって、なんでずっと更新されないままなんですか?
>460 jperl でしたいことは 5.8 なら大抵自前で出来てしまうから。
>>458 一分もしない内に書けるけどここは学ぶ気がある人のためのスレだから。
open while chomp print
>>460 Shift_JISの問題は日本国内だけのローカルな話で需要として少ない上
本家がUTF-8に対応し更にShift_JISに限らずマルチバイト全般の処理方法を組み込んだから。
jperl自体、もともと需要が少なかったからしょうがないな
464 :
◆PQZNeK2U46 :2007/09/10(月) 17:45:24
>>462 あざすっ!
三つ目のchompがどう必要なのかわかりませぬ。。
分割文字列の削除?ですか?
人の話聞いてなくてワラタ
配列を使ったスクリプトを作りたいのですが 配列で特定の部分だけを$hairetu[3] = '';という風に「空で」はなく、 「未定義値」にすることはできないのでしょうか。 検索してできたもので undef($hairetu[3]);などとやってみましたが上手くいきませんでした。 未定義値できる方法があったら教えてください。 よろしくお願いします。
普通にそれで未定義値になったけど undefを代入したり、splice使う手もあるけど
>>466 定義されてるかどうかはdefinedを使う
◆PQZNeK2U46 ってもしかしてオク板の人かな
>>467-468 >>468 のdefinedを使ってみたら確かに偽になっていました。
最初から目的が未定義値にする、とだけ考えていたので
どうやら目的が違ったのかもしれません。一度、最初から考え直します。
>>467 に書かれている代入とspliceというのも検索で調べてみようと思います。
返答ありがとうございました。
自分で調べろ
472 :
◆PQZNeK2U46 :2007/09/11(火) 20:40:32
お前らが俺にperlを親切に教えたくなるプログラムはperlで出来ますか? 返答次第じゃ、お前らを皆殺しにするCGIをケントに書いてもらいます。 宜しくお願いします。
473 :
◆PQZNeK2U46 :2007/09/11(火) 20:44:52
今のケントは黒い目的のCGIでも喜んで書くよ。 PHPに押されてすっかり息を潜めた古文を守る為ならば、悪魔に魂を注げる男だからね。 とりあえずお前らは俺に謝った方がいい。 そして例のプログラムを書くよろし。
お前が俺にperlを親切に教えたくなる質問は日本語で出来ますか?
475 :
◆PQZNeK2U46 :2007/09/11(火) 20:54:00
愚鈍なお前らの為に、しばし時間を与えてあげます。 その間によく考えてください。 家族から先に殺すCGIをケントは知ってます。 ウェッブから殺す事が可能です。 俺の怒りがある値よりも大きい間、お前らと家族を探して 心臓麻痺で殺すプログラムです。
476 :
◆PQZNeK2U46 :2007/09/11(火) 20:57:38
477 :
デフォルトの名無しさん :2007/09/11(火) 20:58:12
くる〜きっとくる〜
>しばし時間を与えてあげます って言ったくせに嘘つきー。 オレの家族さっき心臓麻痺で死んじゃったよ。 どうしてくれんだよ。
479 :
◆PQZNeK2U46 :2007/09/11(火) 21:15:27
家族を生き返らせるプログラムを書いたらどうですか? PHPなら簡単にできますが、お前らの知っている古文では難しいですか?perlはもはや風前の灯 perlの事はケントとお前らに任せて 俺はPHPを勉強しています。 perlは勉強するつもりがないので、お前らの出番です教えてください。 どうせ暇でしょう?
厨丸出しの質問してたのを誤魔化そうと必死だな
なかなか釣れませんねぇ。 釣り場を変えてみたらどうですか?
482 :
◆PQZNeK2U46 :2007/09/11(火) 21:35:22
士農工商えたperlの分際でPHPを勉強し始めた僕に頭が高いですよ。 お前らは牛馬を屠殺したり革を鞣すプログラムでも作ってるよろし。
よし、明確に宣言してやろう みんな、スルーだ
484 :
◆PQZNeK2U46 :2007/09/11(火) 22:02:03
$方針=スルー; for($方針=教える;$方針>俺の理解;優しさ++){ if(俺の理解==お前らの知識){ System.out.print(゙ありがとゔ)
485 :
◆PQZNeK2U46 :2007/09/11(火) 22:11:45
お前ら本当にごめんなさい。 俺本当はperlが好きです。でもPHPの方がもっと好きぃ。 見たでしょあの解読不能なプログラム。 俺はエスパーだからわかるけど、例のトリップのプログラムだけはわからない。 いじわるしないで教えてよ。ケントに言い付けるよ?
-s でファイルサイズを取ろうとしたら2G以上のファイルは見れないんだが 5.8に上げたら見える? 5.8だとどこまでという制限はあるんでしょうか? 2Gのままだと厳しい・・
>>485 お前蛇語のパームがそんなに好き?
めがねはいじわるじゃかるたねえ?
でしたらやるよ俺いやだから
とっとと帰ると意味分からない
解読不能ってwwww ほぼcryptしか意味なしてねーじゃねーかwwww
489 :
◆PQZNeK2U46 :2007/09/12(水) 00:00:10
お願い教えて。 perlしか能のないお前らが職と希望を無くして樹海行きのバスに乗る前に教えてよ。 PHPを勉強中の俺はお前らのこと忘れないよ。 いつか俺がPHPを極めたら、perlの人達を成仏させるプログラムを組むね。PHPでゲラ。 さて、そろそろ教えて。
まーた小学生が暴れてるのか 全力で構ってやるわド低能が
ケントに教えてもらえよ。
494 :
◆PQZNeK2U46 :2007/09/12(水) 11:10:59
ケントに教えてもらったら金がかかるだろ。 perlの分際で金を取ろうなんて ぶっちゃけ、おこがましいと思う。 いずれ僕がPHPを極めたら、僕のDeathScriptにケントの名前を書込みます。 そして人生をやり直せるCGIを書いてお金儲けをします。 perlの人間の長蛇の列ができる事でしょうね。 生まれ変わったらPHPを勉強してください。 能力次第では雇ってあげます。
お断りします。
PHPが分かるんならPHPでやればいいじゃん
こういう性格だとプログラミングできないわ できるやつは普通に高い本とかがんがん買ってる
Perlなんてマニュアルウェブにあるんだから買わずとも。
本とwebのマニュアルは用途が違うだろ
500 :
◆PQZNeK2U46 :2007/09/12(水) 14:00:37
お前馬鹿だろ? perlにかける金はねーって事を言ってんだよ。 読解力のない奴だな。 プログラムが無理なのはお前だろ。 お前仕事できないだろ?
501 :
◆PQZNeK2U46 :2007/09/12(水) 14:05:37
>>497 お前ホントに馬鹿だろ?
今時perlの勉強に金かけてる奴は負け組だから。
perlに金使うぐらいならユニセフに寄付した方がマシですから。
502 :
◆PQZNeK2U46 :2007/09/12(水) 14:17:01
perl勉強するならナデシコ勉強する方がまだ将来性あるよ。 馬鹿だよね。お前らって。 もう終わりそうなperlのスレなんか立てて perlに必死にしがみついてさ。 そんなにperlが好きなら運命を共にしなよ。
もうPHPも挫折したんか?
504 :
◆PQZNeK2U46 :2007/09/12(水) 14:42:19
人の事より自分の心配しなよ。 perl勉強して人生挫折したカスに心配されたくない。
PHPじゃなくてRubyにいっとけば、そのものずばりのライブラリがあったのにね
506 :
◆PQZNeK2U46 :2007/09/12(水) 14:51:40
沈没寸前のperl号にいつまでもしがみついてろよカス共。 先見力のある僕はPHP号に乗船します。 あと僕はJAVAも勉強します。お前らはせいぜいJAVAscriptでも勉強してろってこった。
507 :
◆PQZNeK2U46 :2007/09/12(水) 14:54:51
rubyには明るい未来がありますか?
PHPにも挫折するなんて!!
何かしらんが、ご本人さん よっぽど傷付いたんだろなw
書き込む時間があるなら調べればいいのに・・・
Perl、PHP、Rubyなら明るい未来が待ってるのはRubyだろうな
Pythonだろ常考
513 :
◆PQZNeK2U46 :2007/09/12(水) 15:56:07
いや、ナデシコだろ。
やあ、 ◆PQZNeK2U46 さん、こんばんわ。 今日も粘着させて頂きますので宜しくお願いしますね。
515 :
◆PQZNeK2U46 :2007/09/12(水) 17:22:22
やめてよ。
PHPで頑張ってください! 心の中で応援しています!!
未だに勉強しますの段階じゃ話になんねえの さっさと巣に帰れ まあ自分でプログラミングむいてないのは気づいてるようだが・・・
>>498 ウェブサイトとか一通り呼んでからラクダ本とか読んでも知らなかったことだらけだよ。
519 :
◆PQZNeK2U46 :2007/09/12(水) 18:02:17
>>517 いや、勉強してますから。
高校の勉強と平行してやってます。
この文章力で高校生なんですか プログラミングの勉強以前に 義務教育からやり直した方がいいと思いますよ
今日 学校は?
学校行かずに引きこもって2chで粘着かよ。
俺は中学の時には部室(PC室)でプログラミングしてたもんだ
>>486 環境依存。
5.6でも5.8でもファイルサイズは(statのst_sizeフィールドの大きさに応じて)
NV 又は IV で受けている。
実際の制限はconfigモジュールで確認するといいよ。
(fpossize lseeksize ivsize ivtype nvsize nvtype あたり)
525 :
◆PQZNeK2U46 :2007/09/12(水) 22:43:19
いつまでも引きこもりの子供をかまうなよ。児童虐待だろ。
>>524 ありがとうございます。
環境はWindows2003なのですが、調べてみます。
>>519 うんがんばれよ
多言語批判とかまだ早いから寄り道すんな
他言語・・・まあいいか
530 :
◆PQZNeK2U46 :2007/09/13(木) 00:43:50
String thx = ゙ありがとゔ; return thx;
531 :
デフォルトの名無しさん :2007/09/13(木) 00:56:18
>>519 よ
perlの勉強をただで教えてもらえる方法を教えてやろか?
> perlの勉強をただで教えてもらえる方法を教えてやろか? 尻を提供する。 ウホッ!
525 名前: ◆PQZNeK2U46 [] 投稿日:2007/09/12(水) 22:43:19 >> 524 正解。 そう。環境依存だね。
perl のscriptにGUIをかぶせる一番楽な方法ってなんでしょうか?
536 :
◆PQZNeK2U46 :2007/09/13(木) 11:26:04
>>531 教えてください!JAVAも教えてもらえますか?
ぐぐる。これ一番。
ちょっとでも思わせぶりな餌があると良く食い付くなあ
聞いてもあんたにゃ無理だよ。
>>539 作る内容にもよるけど、GUI初心者が一番楽なのはCGIだと思うよ。
perl gui とかでググって、どんな方法があるのかくらいは調べたら?
Flashとか。
ごめん、CGIって意味が分からん
Perl/TkとかWin32::GUIとかwxPerlとか
545 :
◆PQZNeK2U46 :2007/09/13(木) 12:58:38
人の向上心に付け込むその卑劣な釣りはケントの入れ知恵ですか? さもなくば、とほほの入れ知恵ですか? 真なら首謀者を殺します。
向上心あるならちゃんと学校行けよ
547 :
◆PQZNeK2U46 :2007/09/13(木) 13:33:58
お前らの中でまたperlの時代が来ると勘違いしている大うつけはいますか? 本当にPHP大丈夫なのかな。心配になってきた。 PHPとmySQL勉強しとけば引く手数多だと高校の友達は言うが、誰の言葉の受け売りなんだろう。 やっぱり無難にJAVA勉強した方がいいのかな。 負けから色々学んだperl組のお前らはどう思いますか?
548 :
◆PQZNeK2U46 :2007/09/13(木) 13:39:40
俺嫌だよ。 PHP極めて就職した後に違う言語にその座を奪われて 俺みたいな童貞工房に馬鹿にされるの絶対嫌だ。 お前ら教えて。俺はどうしたらいい?
いいえ、それはトムです。
1つできれば後の移行は比較的楽だよ 勉強するんだ!!って意気込みよりも コレを作りたい!っていうほうが向上すると思う。
Perl だ! PHP だ! なんて言い争いは数年前の話かな PHP と DB (初歩的な SQL 必須) とソケットが扱えないと引く手数多とはならない 殆どの言語の構文は模倣 (いいところ取り) なので、1つの言語をそこそこ覚えてれば順応はできるかと C++ で Windows と Linux でのマルチプラットフォームで動くソフトが作れればかなり重宝される
>>551 鯖アプリなら大抵はJavaやLL言語で用が足りるし
(会社によっては未だにTPモニタ+COBOLかもしれんが)
X用のクライアントアプリを今時業務で作ることなんてほとんどないと思ってたが
ActivePerlの Perl Package Managerで既存のパッケージをいろいろ見てるけど テキスト処理 自然言語処理 Web系の充実は異常 要はアルゴリズムがインプリメントされていさえすれば 言語はなんでもいいんだからPerl最強と思ってしまう c++のboostだってここまで充実してない
>> ◆PQZNeK2U46 建築現場で働くか、首吊るか、好きな方を選べ。
ということにしたいのですね。
しばらく来なかったらただの糞スレに成り下がってる・・・
>>553 テキスト処理ならわかるが、自然言語処理って何?
それって英語圏専用のテキスト処理技術じゃないの?
>>557 よくあること。元々過疎スレなんだから、
一人で荒らしてグダグダにするのなんて
誰でも出来る簡単な事。それをたまたま今回
頭の悪い工房がやっただけでしょ。珍しくも無い。
560 :
◆PQZNeK2U46 :2007/09/13(木) 19:32:34
一番やりたいのはWEB関係の仕事だけど、JAVAで携帯電話関係の仕事もしてみたい。 JAVAとPHPならどっち? 収入とか将来性とか。 JAVAのプログラマーだと月収50万円ぐらい稼げるって聞いたんだけど、 PHPでもそれぐらい稼げる? 関係ないけどケントはperlだけどケッコー儲けてるよね。
(´-`).。oO(「挫折」が怖くて逃げ回るのは、ゆとりろ教育の弊害か、お坊ちゃん育ちの某首相と同じ狢か。。。)
ゆとりろ
>>560 まじめに質問するつもりなら他のスレで聞け
こいつずっと PHP、JAVA、ケントの話題で煽ろうとしてる。 釣りだから相手すんなよ。
断る
相手してるのは高校生の自演だろ?
中退ヒキニートの薫りぷんぷんですがな
568 :
◆PQZNeK2U46 :2007/09/13(木) 22:25:41
そうやって好きなだけ俺をイジメたらいいよ。 お前らがいつも会社でされてるみたいに。
ここの人は、スルー力がないのかね? ほっとけば、小学生と同じで飽きるんだよ。
570 :
◆PQZNeK2U46 :2007/09/13(木) 22:58:17
みんな心に余裕があるから俺の事構ってくれるんだよ。 お前と違ってプッゲラ
>>558 POPFile(Perlだよね)は日本語でも動くけど?
572 :
◆PQZNeK2U46 :2007/09/13(木) 23:06:45
だいたい何だよその「スルー力」ってのは。 初めて聞いたよ。 「スルーできないのかね」でいいじゃん。アホですか? いい歳して、渋谷の汚ギャルが使う様な訳のわからない言葉使うのやめたら? だから仕事できないんだよお前は。馬鹿が。 死ね。 カス。
中学生は、法律で仕事をすることが禁止されていますが、何か?
574 :
◆PQZNeK2U46 :2007/09/13(木) 23:16:30
小学生って飽きなくね? 同じネタずーっと引っ張って楽しんでるよ小学生は。 そのトンチンカンな例え話し、どうにかできないの? 嫌味のつもりで小学生って言葉を使ってる時点でお前もスルーできてないしな。 火事になっちゃえ。
芸能活動、非工業系は親の同意の元働くことができます。 無知ってやだね。
おもれ〜 3分で釣れた
cookieを要求するサイトにperlでアクセスするにはどうすれば簡単ですか? IEのCookiesのファイルはあるので、それが利用できると尚いいです
578 :
◆PQZNeK2U46 :2007/09/13(木) 23:48:44
「釣れた」って煽り、物凄く便利だよね。 「スルー力がないのかね」って大人ぶっておいて 結局自分自身がスルーできないアホが使う奥義。
あぼーん大杉 自重汁
日本語で形態素解析してドキュメントの特徴ベクトル作って、 ベイジアンネットワークで解析 とかするのがほとんど既存パッケージでできるPerlは最強 形態素解析だけはnaistの某研究室からcで書いてあるのとってこないといけないけど 全部cでやろうと思ったら死ぬ pythonとかその辺りどうなんだろ
>>579 それ、もしかして自分はスルーできてるつもりだったりする?
そうやって自分じゃ抜け穴くぐって言うこと言ったつもりの間抜けな反応が
一番楽しいって気づこうよ。知的障害者クン。
>>580 専門的なのはよく知らないけど、
個人的には、基本的な配列操作をもっと簡単にしてくれ、と思う。
>>582 具体例を挙げてみて。
これをこうしろと。
>>577 LWP::UserAgent 使ったら簡単だった。
>>583 ある項目がリストに含まれているか調べる
リストの最大値の項目を得る
2つのリストの共通集合をつくる
リストの重複を除いたリストをつくる
多次元リストをつくる
とか。
いや、perlでも出来るよ。
でも、何やらテクニックつかったり、他のモジュール使ったりとかでなく
基本の組み込み操作だけで簡単にさせてくれよ、って思う。
そうじゃないのがPerlでしょう。
組み込みは増やすときりないからね。 CPANみたいなのが標準マニュアルになってまうよ。 C++なんかでもなら原則自分で作るの当たり前。 むしろ正規表現が普通に使える事が驚きっちゃあ驚きだわい。
>>588 > むしろ正規表現が普通に使える事が驚きっちゃあ驚きだわい。
いやそこはsedやawkを受け継いでるんだから、当たり前だろう
最近はカイ二乗分布とかその辺まで標準に入れはじまったc++
>>586 組み込み関数が少ないのがPerlのメリットだと思うんだぜ。
そういうのだったらPHPにでもRubyにでも行けばいいし><
そういう事言ってるから貧乏人なんだよお前は
そしてここでも!!
複数人での 共同コーディングが できるサイトってないの?
>>594 なんかやるなら誘って〜。
ネット上のみでそういうのやったこと無いから面白そうだわ。
既存のプロジェクトとかに入っていく勇気が無い。俺空気読めないから。
そういやiアプリでそういうスレがあるな 今は停滞してるけど
>>595-596 プロジェクトじゃねーわ
リアルタイムに共同コーディングって意味だわボケ
じゃあそいつを作るプロジェクトを立ち上げよう。 で、具体的にはどういうもんなの?まさかエディタのバッファ共有とか?(笑)
よろしくお願いします。定時に自分へメール送信を行おうと、次のメール送信用Perlプログラムを組みました。 送信ポートは、Outbound Port25 Blockingの影響で587番になってます。送信に利用するSMTPサーバーはISPとは異なるメールサーバーです、Thunderbirdでは587番地で問題なく送受信できています。 一応エラーの検出無く終了するのですが、メールは届いてきません。どうかよろしくお願いします。 :: mtest.pl :: use Net::SMTP; use Net::POP3; $pop = Net::POP3->new("POP鯖"); if(!($pop->login('アカウント','パスワード')>=0)){die "Error $!"; }else{$pop->quit;} $smtp = Net::SMTP->new("SMTP鯖:587",Hello=>"SMTP鯖:587") or die "失敗"; # $smtp = Net::SMTP->new("SMTP鯖",Port=587,Hello=>"SMTP鯖") or die "失敗"; $from = "test\@送信元ホスト"; $to = "test\@送信先ホスト"; $subject="Test"; $date = &date; #メソッド略 $smtp->mail($from); $smtp->to($to); $smtp->datasend("Date:$date\n"); $smtp->datasend("From:$from\n"); $smtp->datasend("To:$to\n"); $smtp->datasend("Subject:$subject\n"); $smtp->datasend("Content-Transfer-Encoding: 7bit\n"); $smtp->datasend("Content-Type: text/plain;charset=\"ISO-2022-JP\"\n\n"); $smtp->datasend("TTest\n"); $smtp->dataend(); $smtp->quit; :: END :: あとSocketでも組んでみましたが、"不正なファイル記述子です"と送信できませんでした。 よろしくおねがいします。
ド素人的質問なのですが、 不特定多数のマシン上で動作する「BIOSの電源管理設定を設定を読込/設定変更可能なソフト」は 特殊な技術なく普通に作れるものなのでしょうか? いかにも相性問題が発生しそうなテーマな気がするのですが、 BIOSの設定は一般の人では自力設定は難しくPCに詳しくない顧客でも扱えるような管理ソフトが欲しいのです。 お手数ですがご教授ください。
コピペか?
603 :
600 :2007/09/15(土) 15:34:55
>>602 念のため・・・もし僕のことでしたらコピペじゃないっす。
>>601 >ド素人的質問
まったくその通り。
だから、出入りのゼロックスとか大塚商会さんにでも聞いてね。
たすけてにちゃえもーん C/C++のプログラムでexit(255)で終わらせたプログラムを、 $ret = system("***"); で呼ぶと$retに65280(0xff00)が返るんだけど、256倍が返るの 仕様っすか??
>>605 仕様らしい。ぐぐったら256で割れって書いてるところと
書いてないところがあった
>>600 ってむずいっすかね。
587になる前は送信も普通に出来ていたのでちょい萎えなんですが・・・
608 :
デフォルトの名無しさん :2007/09/15(土) 19:34:26
最近、マニュアルを見たら負け組、という認識でも広まってるのか?
>>608 ってゆ〜か、逆にむかし、「マニュアルを見ろ」と言うとブチ切れるオッサンとかいた。
「わたしはホワイトカラーだ! バカにするな!」とかって。
ソース嫁って言われると99%ぐらいのPerlerはぶちぎれる
言われる前に読むだろ常考
とりあえずperldoc -m Hogeするだろ
>>585 いろいろやってみましたがうまく行きません
my $cookie_jar =
HTTP::Cookies- >new(file => $cookie_file, autosave => 1, ignore_discard => 1);
のようにして作った時、cookie_jarはまだ空ですよね
ここに、idとパスワードを最初から入れておくにはどうしたらいいですか
空ではなく、cookie_fileを読み込んでいました その状態でアクセスしているのに、idを送っていないのと同じ反応になります #LWP-Cookies-1.0 Set-Cookie3: id=hane; pass=mogera みたいな感じで書いてます 何がおかしいのでしょう
ァ ∧_∧ ァ,、 ,、'` ( ´∀`) ,、'` '` ( ⊃ ⊂) '`
リアルタイムっつってんだろ 日本語読めないのか?
スレ違いなので次の方質問をどうぞ。
620 :
デフォルトの名無しさん :2007/09/17(月) 01:13:47
マカーですがCPANモジュールが読み込めなくて困ってます。 アドバイスをいただけるとうれしいです。 詳しい状況は以下↓ 今まではcpanシェルの中で「install モジュールA」とやって、 perlのコードで「use モジュールA」とすると問題なく使えたのですが、 どこかをいじったせいか新しくインスコしたモジュールを使おうとすると 「Can't locate Spreadsheet/WriteExcel.pm in @INC」というエラーが出て使えなくなってしまいました。 ちなみに今までインスコしたモジュール(LWPとかHTMLとか)は/Library/Perl/5.8.1/というディレクトリ下にあり、 新たにインスコしたモジュール(Spreadsheet::WriteExcelとか)はホームディレクトリの下~/.cpan/build/というディレクトリ下にあります。 前者にはバンドル名直下にすぐ.pmファイルがあるのですが、 後者には、 MakefileとかREADMEとか色んなファイルやディレクトリが入っています。 解決策として、 1.新たにインスコしたモジュールのある場所を@INCに追加する 2.新しいモジュールをインスコする場所を前と同じ場所にする っていう方法が思い浮かんだので、1だけ試しましたがだめでした。 2はどこのパスをいじればいいのかが分からないので試していません。
621 :
620 :2007/09/17(月) 01:44:35
追加 >1.新たにインスコしたモジュールのある場所を@INCに追加する さっきためした方法は.bash_profileに export PERL5LIB=$PERL5LIB:/Users/ユーザ名/.cpan/build/ と書く方法だったんですが、 export PERL5LIB=$PERL5LIB:/Users/ユーザ名/.cpan/build/Spreadsheet-WriteExcel-2.18/lib/ とするとSpreadsheetのみ使えるようになりました。 /Users/ユーザ名/.cpan/build/以下のモジュール全て使えるようにしたいのですが、 いい方法があったらおしえていください。
>>620 ~/.cpan/build/…はインストールされた場所ではなくて、CPANモジュールの作業ディレクトリではないのですか?
インストールしたのであれば、/usr/lib/perl5以下のモジュールを置くどこかにインストールされているはずです。
findで探してみては? みつかったら、その場所が@INCに含まれているか調べる。いなかったら、use libする。
>>620 > 新たにインスコしたモジュール(Spreadsheet::WriteExcelとか)はホームディレクトリの下~/.cpan/build/というディレクトリ下にあります。
>
インストールとか言っているが、これはウソで、実はコピーしただけに1票
俺の推理によると cpan shell で look Spreadsheet::WriteExcel だな もう一度インストールしてみるべし
625 :
620 :2007/09/17(月) 03:30:23
>>622 私の環境では/usr/lib/perl5というディレクトリは存在しないようです。
~/.cpan/buiild/以下が作業ディレクトリかどうかは分からないのですが、インストールする場所はどうやって設定できるのでしょうか?
とりあえずMyConfig.pmはこんな感じになってます。
'build_cache' => q[10],
'build_dir' => q[/Users/ユーザ名/.cpan/build],
'cache_metadata' => q[1],
'cpan_home' => q[/Users/ユーザ名/.cpan],
'getcwd' => q[cwd],
'gpg' => q[],
'histfile' => q[/Users/ユーザ名/.cpan/histfile],
'inactivity_timeout' => q[0],
'index_expire' => q[1],
'inhibit_startup_message' => q[0],
'keep_source_where' => q[/Users/ユーザ名/.cpan/sources],
'make_arg' => q[],
'make_install_arg' => q[],
'makepl_arg' => q[PREFIX=~/CPAN],
'prerequisites_policy' => q[ask],
'scan_cache' => q[atstart],
'shell' => q[/bin/bash],
'tar' => q[/sw/bin/tar],
'term_is_latin' => q[1],
※関係のなさそうなパラメータは除外しました
626 :
620 :2007/09/17(月) 03:42:23
>>623 いえ、cpanシェルで「install モジュール名」というコマンドを打ちました。
それ以外の操作はしていません。
>>624 こまんどを実行してみたところ
まず~/.cpan/build/Spreadsheet-WriteExcel-2.18という元々あったディレクトリに移動。
その後root権限でcpanシェルを抜けてbashに戻りました。
その後のインストールは/Users/ユーザ名/.cpan/.lockでロックされているようなので、できないようです。
ああすまん
>>624 は
install hogehoge を look hogehoge を間違えて
実行してしまってインストールしたつもりなのではという意味
MyConfig.pmで指定する場合は
makepl_arg => q[PREFIX=/path/to INSTALLDIRS=site]
mac はよくわからないけどmakepl_argを空にしておくと
Perlのバージョンにあわせたディレクトリにインストールしてくれる
でもわざわざ PREFIX=~/CPAN としてるくらいだからmacはそうする必要があるんかな
そのままにしておくなら PERL5LIB に $HOME/CPAN か スクリプトで use lib
628 :
620 :2007/09/17(月) 12:42:29
>>627 無事解決しました、ありがとうございました。
いちおう状況報告です。
makepl_argを空にしたら以前の場所にインスコされました。
PREFIX=~/CPANはmacのデフォルトかどうかは分からないですが、
何かのモジュールをインスコする時にいじってしまったのかもしれません。
(このパラメータを指定すると「cpanコマンドの実行ユーザのホームディレクトリ下」にモジュールがインスコされるんですね)
今まではrootでcpanシェルに入っていたためrootのホームディレクトリ下にモジュールがインスコされていました。
で、それに気づかずなかったため、rootのホーム下にパスを通せていませんでした。(パスを通してもroot権限でないと読み出せないのでエラーになるかも)
結果的に以下の二つの方法でいけました。
・共用ディレクトリにインスコしない場合
makepl_argを~/CPANと設定し、非rootユーザでcpanシェルに入ってinstallをする。
PERL5LIBは「$HOME/CPANを追加する」または「use lib」をする。
・共用ディレクトリにインスコする場合
makepl_argを空にし、rootユーザでcpanシェルに入ってinstallをする。
PERL5LIBはデフォルトで設定されているので設定の必要なし。
629 :
デフォルトの名無しさん :2007/09/17(月) 14:10:31
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★ このスレを見ている人はこんなスレも見ています。(ver 0.20) 会社で使えない奴、それはワタシ/アイツ [プログラマー] entrance:ラウンジ[レス削除] [削除整理] アップローダーを設置している人 Part19 [自宅サーバ] なぜオブジェクト指向は普及しないのか 4 [プログラマー] Perlコーディング初心者質問スレ Part 55 [WebProg]
BBQの中の人です。 登録装置にて、どうも頭の中が固まりきって、あひゃひゃになっております(呆) -・-・ --・- -・-・ --・- -・-・ --・- -・-・ --・- # 期限切れを排除して、重複するリモホ類を排除して、、、 my %IP4value; my %MD5value; @Proxy60 = map { $_->[0] } # 元に戻す。 grep { !$IP4value{$_->[4]}++ } # 重複削除。 IP4 で比較。 grep { !$MD5value{$_->[5]}++ } # 重複削除。 MD5 で比較。 grep { $_->[1] ne 'D' } map { push @Deletelist, $_->[0] and $_->[1] = 'D' if $_->[1] == 0; # 削除(削除) push @Expirelist, $_->[0] and $_->[1] = 'D' if $_->[1] < $Now_Time; # 期限切れ(削除) push @Allowlist, $_->[0] if $_->[6] eq 'Allow'; # 除外指定 push @DDNSlist, $_->[0] if $_->[6] eq 'DDNS'; # DDNS $_ } map { [ $_, (split /<>/) ] } # 一旦リファレンスに @Proxy60; @Proxy60 には「<>区切り(^^;)」なデータが入っています。 有効期限(time値)<>登録日(time値)<>登録者<>ホスト/IPaddrress<>MD5値<>status<>コメント<> -・-・ --・- -・-・ --・- -・-・ --・- -・-・ --・- このうち(削除)分がどうしても削除されなくって困っております。 ここでスカタンしてるぞ!と言う部分がありましたらご指摘を戴けるとありがたいですですm(_ _)m深謝 env.:FreeBSD cobra2245.maido3.com 6.2-RELEASE-p7 perl:This is perl, v5.8.7 built for amd64-freebsd (with 2 registered patches, see perl -V for more detail)
use Boofy; したいのですが、どうやればできますか?
>>630 症状に関係あるかどうか知らないけど、
push @Deletelist, $_->[0] and $_->[1] = 'D' if $_->[1] == 0;
は
{ push @Deletelist, $_->[0]} and { $_->[1] = 'D' if $_->[1] == 0;}
という優先順位になるんじゃないかな。
634 :
デフォルトの名無しさん :2007/09/18(火) 10:10:16
たまに確実にlistenに溜まってるはずなのに、 acceptから帰ってこない事があります。 ctrl-cを押すとacceptから復帰して正常に処理し始めます。 winxp上のactiveperlですが、考えられそうな原因が何か 分かりませんでしょうか。
635 :
◆PQZNeK2U46 :2007/09/18(火) 15:15:47
ぐぐれ ちゃんと調べたのか? 馬鹿野郎。死ね。 なんだねその目は? 僕ですか?僕はこのスレのスレ主ですが何か?
637 :
デフォルトの名無しさん :2007/09/18(火) 15:38:31
>>630 そして基本的にmapやgrepを使う時は$_を使うな。
簡単には見つけ出せないバグが発生しやすい。
下の二つは一見同じようなことをしているが、動作がまったく違う。
----------------------------------------------
■
@hoge = qw(1 2 3);
@foo = map {$_ + 1} @hoge;
print "@hoge @foo";
=> 1 2 3 2 3 4
■
@hoge = qw(1 2 3);
@foo = map {++$_} @hoge;
print "@hoge @foo";
=> 2 3 4 2 3 4
grepやmapをネストするとこんな問題が必ず発生する。
解決方法
+壊れてもいいリストを渡す。
+map {my $hage = $_ ; ++$hage }とかちゃんと壊れてもいいものに代入する。
あともっと基本的に$_->[0] とか何がなんだか分かっているのか。
半年後の630も、今の俺も読めねえ。
638 :
637 :2007/09/18(火) 15:57:52
で申し訳ないんだが 637で述べた$_は変数ではなく ”エイリアス”と呼ばれるらしい。 引用:: Perlベストプラクティス 初版 p 125 上段 /$_は何かのコピーを次々に保持するものではない。 エイリアスを保持するのである。/ このエイリアスについて調べようとして、ググったんだがでてこなかった もしかしたら { 翻訳上の都合 } なのかもしれないが、 なんかそれ系っぽい記事を知ってる人は申し訳ないがリンク恵んでください。
初心者が質問に答えようとすんなよw しかも偉そうにwww
>>630 はそんな神経質になるほどやばい使い方してないと思うんだけど、
>>637 は何か私怨でもあるの?
とはいえ、
>>630 が$SIG{__WARN__}を使ってるとしたら、
中で$_を書き換えちゃってる可能性は否定できなかったりw
>>637 それは$_の問題じゃなく++の問題。
>>633 (演算子の優先順位)でFAだと思うがね。
>>637 お前が理解できてないだけ。
普通に理解していれば発生するはずがない。
643 :
637 :2007/09/18(火) 16:31:57
>>640 いや、私怨は無いんだが他人が書いた似たようなコードを保守してて
さっき洗面台でコード吐いてきた。
>>641 サンクス。勉強してくる。
>>639 ,642 人がここにいることが分かった。サンクス。
普通にforeachで回すコードに書き換えたいなあ。
この際SQLにしちゃえ
>>645 >map { [ $_, (split /<>/) ] } # 一旦リファレンスに
ここが変わるだけだろ・・・
無理にコードを短くしようとして 可読性が無くなるなど本末転倒
RDBに突っ込んでDBIC使おうぜ
>>647 基本的にちゃんとプロジェクトとかに
残るコードはPerl風にしないほうがいいね。
逆に残らないだろうと思って書いたものも、
アテがはずれて残ってしまうことがあるんだけど。
650 :
デフォルトの名無しさん :2007/09/18(火) 23:54:05
windowsではshebang lineがサポートされてないらしいですが、 windowsだけでの実行を仮定するのであれば、shebang lineを書かなくてもOKですか?
651 :
デフォルトの名無しさん :2007/09/18(火) 23:59:47
xml解析するモジュール使ってるんですけど、 値を取り出すときに、配列の時と、配列でない時と 別々に処理かかないといけないのでしょうか? 複数の<Item>がある場合、 $hoge = $tree->{Item}->[$i]->{Name} 一つしか<Item>がある時、 $hoge = {Item}->{Name} 今ぐぐったら、配列かどうかはチェック出来るんですね。 まだ、確かめてないけど。 やっぱ、別々に処理しないといけないのかなー。 if (ref($data) eq ‘ARRAY’) { # 配列であった } else { # 配列でなかった }
654 :
◆PQZNeK2U46 :2007/09/19(水) 01:35:38
perlって難しいね。 本によってコードの書き方が全然違うし。疲れる。 rubyもこんなに難しいの? 変数宣言も突然型なしで出来るし。メチャクチャ。 こんなの扱ってるからお前ら馬鹿なんですね。
やあ、 ◆PQZNeK2U46 さん、こんばんわ。 今日も粘着させて頂きますので宜しくお願いしますね。
>>653 ストライクで御座います。
やっぱり、こういうのがあるんですよねー。
えっ、マニュアル嫁ってw
スミマセン以後気をつけます。
ありがとうございました。
657 :
◆PQZNeK2U46 :2007/09/19(水) 02:43:02
粘着する暇あったら他言語の勉強しろよオッサン。てか就職しろよ。 こんなところで鬱積したフラストレーションを爆発させてんじゃねーよ。 ノータリン。どうせ独身だろお前。人生オワトル。
658 :
◆PQZNeK2U46 :2007/09/19(水) 02:48:40
>>656 おい!こらテメーなんだそのザケた態度はよ。
すみませんって言葉はw付のおどけた態度で言う言葉じゃねーぞ?
実生活でも自分のミスを笑って済まそうとするアンポンタンか?
なめてんとブッ殺すぞ?
メガネ外せ。
659 :
◆PQZNeK2U46 :2007/09/19(水) 02:53:55
なにがストライクで御座いますだボケ。 恥ずかしくないの?いい歳して訳のわからん言葉使ってよ。 なに?ストライクで御座いますって? お前ラリッてんのか? 馬鹿ハゲ独身!ニートは死ね!
>659 全国のハゲに謝れ!
ある程度 ◆PQZNeK2U46 の発言が纏まったら 荒らしとして規制議論にスレを立てて報告します。 適時掘られ、プロバイダから警告が来ると思います。
>>650 Winで #! 書くのは -x 使うときと CGI 書くとき。
>>650 オプションは見てくれるよ。ActivePerl の話だけど。
664 :
◆PQZNeK2U46 :2007/09/19(水) 10:59:34
スタティックイニシャライザで御座います。
>>661 殺す。
#!perl -n if(/うんたら/) { } if(/かんたら/) { } awk みたいなコードだな
いろいろとありがとうです。 優先順位、、、うぅ、、、orz... #エントリ数が14KもあるのでそろそろDBにする頃かしらと悩んでいる今日子の頃
>>666 キリバンオメ
とりあえず、その削除されないという @Proxy60 と $Now_Time 出したら?
>>630 のコードは無駄な処理の塊が気になるけど、手元で
$Now_Time = 1;
@Proxy60 = qw(0<>0<>hoge<>0.0.0.0<>dummy01<><><> 2<>2<>foo<>1.1.1.1<>dummy02<><><>);
を食わせてみた限りでは、特におかしな結果にはならなかったよ。
>>649 > 残るコードはPerl風にしないほうがいいね。
なにその Perl 風って?
DBつーか、取りあえず手軽にStorable使ったら?
首でも吊って、誰か他の人に保守してもらえばいいんじゃね?
print $x, $x++; print 0+$x, $x++; print 1*$x, $x++;
perl -le 'for (1..100) { $x += 0.1; print $x }' を実行すると、5.99999999999999 から結果がおかしくなるのはなぜですか?
おかしくなってるんじゃなくて表現が違うだけ Eなんちゃらでしょ? bigint だかなんだか忘れたけど、そんなモジュールを使ってみませう
丸目蔵人
>>674 結論から言えば、内部での数値の表現が2進数だから。
2進数で1/10(=0.1)を表現しようとすると無限小数になってしまう。
#10進数でも1/3を有限小数で表現できないのと同じ。
でも、コンピュータの演算器は限られた大きさのデータ(ここでは有限の桁数としとく)しか扱えない。
結果演算誤差が出る。
>>674 小数化した時点で誤差が含まれるから、いつかはそうなる。
WebProgの質問スレにも同じ質問あったからそこを参考にするといいよ。
680 :
デフォルトの名無しさん :2007/09/22(土) 02:53:14
マッチ文て変数使う方法は使えないんですかね。 sub func{ if(/文字列/){ ・・・ } } という関数があって、文字列の部分だけ変えたのをいくつか作りたいんですが 関数の引数として渡す方法はないでしょうか。 今は1行だけ違うコピペ関数が多数並んでいます・・・。
/$pattern/
質問に沿って答えるなら
>>681 だけど、
コピペってことは
sub func {
if(/文字列1|文字列2/){...}
}
で済む気がする。
funcを複数回呼ぶ必要があるなら
func() if /文字列1/;
func() if /文字列2/;
でもいいわけだし。
ソースコード書いたら その意味を画面の右側に 日本語で表示してくれる エディターある?
『ひまわり』か『なでしこ』でも使ってろよ…
685 :
デフォルトの名無しさん :2007/09/22(土) 09:40:49
ストライクで御座います
686 :
デフォルトの名無しさん :2007/09/22(土) 14:00:23
変数に格納されているものがcoderefであるときにそのソースを表示するような コードを書くにはどうしたらいいですか?
なんだよ、、、 そのなでしこで CGIは作れるのかよ、、、、?
>>686 コードを書くのはめんどいので、、、
#!/usr/bin/env perl
use Data::Dumper ;
$Data::Dumper::Deparse = 42 ;
my $hoge = sub { 42 } ;
print Dumper $hoge ;
とかじゃダメかい?
#! /usr/local/bin/perl print "content-type:text/html\n\n"; print "<html>\n"; print "<head><title>タイトル</title></head>\n"; print "<body>\n"; print "<h2>テスト</h2>\n"; print "</body>\n"; print "</html>\n"; ↑これでInternal server error 500になる。 ただしレンタルサーバー上ではエラーだが、 自分のパソコンでやったらちゃんと表示される。 ソースにもし間違いがあったら 場所と対処法を具体的に指摘しろ。
>>689 /usr/local/bin/perlじゃなくて/usr/bin/perlだったりして
あとよくあるのが行末がCR+LFになってて、
/usr/local/bin/perlCRを探しに逝ってるとか
>687 Windows系サーバなら、CGI も組めそうじゃね? あんまり現実的じゃないけどw
stdinから読めてstdoutに書き出せる言語なら何だって使えるはず
Mac OS X ServerだとAppleScriptでCGI組めるしな 組みたくないがw
Win であれば BAT も CGI で動くよ たしか Apache の CGI サンプルにあったはず
> CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりする なるほど、たしかに
なぁーんてこった! cgiファイルのパーミッションを 755にしたらそれで動いたぜ そんなこと教科書には どこにも一言も書いてなかった! ローカルで動かす教科書だからかな? サノバビーィーーーッチ!
Activeperlダウンロードしてインストールまでは上手くいくんだけど Perl Package Managerが起動しないんだ サポートに聞いてみたけど「そんな事例無いからワカンネ」って言われて ほぼ同じスペックの友達のパソでやってみたら普通に開いたし、ぐぐってもそんな事例やっぱないっぽくて 誰か原因わかる人いる?
Windowsにはよくあること。OS再インスコ。
再インストするならActivePerlのほうだろ? しかしどうせならBSD系なりLinux系なりで勉強したほうが良いと思うが。 どうしてもWindowsでなきゃ駄目というなら Cygwinを構築してCygwin系Perlを使ったほうが良いぞ?
703 :
デフォルトの名無しさん :2007/09/23(日) 13:36:42
ファイルハンドルリファレンスの使い方は把握したのですが、 どういうときに役に立つのかがイマイチわかりません。 アルパカ本には 「ライブラリなどコードの他の部分と共有できるようにする」と書かれてますが、どういう意味でしょうか?
ファイルハンドルを引数に取る関数とか?
705 :
703 :2007/09/23(日) 15:18:25
>>704 うーん、単にそれだけのことなのですか。。
アルパカ本の記述から察するに何か深いわけがありそうな気がしたんです。
>>705 横レス。
章の始めでしかも「こんな節はなかったことにして次へ」って記述されてる
んだから気にしなくて良い。
8.1 は
「(従来の)型グロブでやろうとすると面倒でした」
って書いてあるだけだ。
707 :
703 :2007/09/23(日) 17:46:13
708 :
デフォルトの名無しさん :2007/09/23(日) 18:20:57
質問です。 ハッシュを作るサブルーチンを作ろうとしたらエラーが出ました。 これをうまくやるにはどうしたらいいですか? よろしくお願いします。 #!/usr/bin/perl use strict; sub create_hash{ my $name=shift; my @keys=@_; no strict "refs"; my %$base; $base->{$_}=undef for @keys; } create_hash('hash','key1','key2'); Can't declare hash dereference in my at /home/Owner/test2 line 8, near "$base;"
ハッシュの宣言の仕方が違う リファレンスなら my $base={}; あと値がundefでいいなら my $base = {}; @$h{@keys}=(); とかでもできる
sub create_hash{ my @keys=@_; no strict "refs"; my $base; $base->{$_}=undef for @keys; return $base; } $hash = create_hash('key1','key2'); %hash = %{create_hash('key1', 'key2')}
no strict "refs" はいらなくね?
712 :
708 :2007/09/23(日) 19:55:56
$baseというのは%nameへのシンボリックリファレンスにしたいんです。
だからno strict "refs";は要るのかなと判断しました。
>>709 my $base={}という宣言もありなんですね。
ありがとうございます。
>>710 create_hashでやろうとしたことは、与えられた名前とキーのハッシュを作ることなんです。
$nameという名前のハッシュを宣言しようとしてうまくいかなくなったんです。
713 :
708 :2007/09/23(日) 20:00:30
ごちゃごちゃ書いてしまったので、整理すると、 'hash', 'key1', 'key2' を引数にすると スコープがmainパッケージのレキシカル変数%hashで %hash = (key1 => undef, key2 => undef); となっているようなものを作ってくれるようなサブルーチンを作りたいんです。 分かりにくくてすみませんでした。
>>713 その引数の'hash'は何に必要なんだか理解出来ん。
sub create_hash{ map { $_, undef } @_ ; }
とか709 の方法
sub create_hash{
my %h ;
@h{@_}=();
return %h ;
}
でええんちゃうん?
715 :
708 :2007/09/23(日) 21:18:07
>>714 ありがとうございます。
hashはハッシュの名前です。
%hashの名前に使われていることにご注目ください。
シンボリックリファレンスとかいつの時代の遺産だよ
>>715 708 で使われてないよ? 'hash'
新手の荒らしか? 左辺を*$nameにしてハッシュリファレンスを代入したらいいんか? なんに使うのかしらんけど・・・
719 :
708 :2007/09/23(日) 22:03:22
>>717 エラーが出たので使えずじまいになったんです。
>>718 荒らしではなくて、シンボリックリファレンスが古いことも含めて
何も知らないまま我流で考えて行き詰まっていたんです。
鼻につく態度があったならごめんなさい。
何に使うかというと、サブルーチンだと呼び出すたびにハッシュの名前を用意をしないと
いけませんが、引数に指定できれば、
たくさんのハッシュを一挙に定義できると考えたんです。
> サブルーチンだと呼び出すたびにハッシュの名前を用意をしないといけませんが 何が言いたいのか分からないけど、無名ハッシュとかで実現できない?
>>719 「ハッシュの名前を用意」
せんでいいってんなもん。呼出元で違う名のhashにすりゃいいだけだろ。
>>714 を使ったとして
my %hash1 = create_hash( 'key1', 'key2' );
my %hash2 = create_hash( 'keyB1', 'keyB2' );
すりゃいいだけの話だ。
722 :
708 :2007/09/23(日) 22:26:36
>>720 >>721 それだと希望する名前のハッシュにできませんよね。
例えば、ファイルに書かれた
hoge
fuga
...
といった内容を読み込んで、それぞれの名前をもったハッシュを1つずつ作りたいとします。
そのために、create_hash('hoge','key1','key2');という呼び出しで
hogeという名前のハッシュを定義しようと考えました。
sub create_hash{
my $name = shift;
my @keys = @_;
....
}
こうやって(...)の部分で(戻り値でhashを返すのではなくて)hogeという名前のハッシュを定義しようとしていたんです。
しかし、
sub create_hash{
my $name = shift;
my @keys = @_;
$name->{$_}=undef for @keys;
}
というやり方だと、hogeがハッシュの名前ではなくハッシュリファレンスの名前になってしまうので
予定外です。
723 :
708 :2007/09/23(日) 22:28:28
訂正 × ハッシュを定義しようと考えました。 ○ ハッシュを定義できるようなサブルーチンを作ろうと考えました。
だから、普通そういうやり方はしないんだって。
明らかにコーディングミス 再設計をおすすめします
簡単にやる方法は知ってるが好んで使う物じゃない
727 :
708 :2007/09/23(日) 22:40:58
>>724-726 分かりました。周辺知識を得てからまたこの問題を考えます。
無知さを思い知りました。
>>722 そういう時は「ハッシュのハッシュ」を使うと幸せになれる希ガス
>>700 エラーメッセージは出てないのか?
あと、ユーザー名にマルチバイト文字(漢字とか)使ってない? もしそうなら
ACTIVEPERL_PPM_HOME って環境変数に適当なディレクトリを設定すりゃOK。
%hash = (); @hash{hoge, huga, hugo} = (1, 20, 300); みたいなことをハッシュリファレンスでやりたいんですけど $hash = {}; $hash->{hoge, huga, hugo} = (1, 20, 300); こういうコードじゃダメみたいなんですが、 どうすればいいんですか?
731 :
730 :2007/09/24(月) 09:33:58
自己解決しました>< いろいろ自分でデリファレンスあたりを考えてみたら %$hashにとりあえずデリファレンスしてそこから上のコードを見ながら書きなおしたら $hash = {}; @$hash->{hoge, huga, hugo} = (1, 20, 300); こうなりました スレ汚し申し訳ありませんでした
732 :
730 :2007/09/24(月) 09:35:00
間違えた @$hash{hoge, huga, hugo} = (1, 20, 300); こうでした どっちにしろすみませんでした
>>730 $hash = {
hoge => 1,
huga => 20,
hugo => 300,
}
スライスでどーしてもやりたいってんなら
@{ $hash }{'hoge','huga','hugo'} = (1,2,300) ;
リロードしろよ>オレ
perlインストしたらHDDの空き領域が4GBぐらい増えたんだが これは大丈夫なのか?
それはLarryからの贈り物です。
737 :
sakura :2007/09/24(月) 13:29:42
下記の入力ファイルを読んで、$dateと@accidentのリファレンスを格納 した@journalの配列を作製したいのですが表現が分かりません。宜し く、お願いします。 070901 1030 高速道路での4重衝突。4人死亡 1100 山で遭難。2名救助 070912 0200 飲酒運転で、現行犯逮捕 下記のソースは、データ作製の処理が未完成です。 open(IN,'01.txt'); my @journal=(); while(<IN>){ chomp; if(/^\d/){ #日付の処理 my $date=$_; my @accident=(); }elsif(/^ /){ #明細の処理 s/^ //;push(@accident,$_); }elsif(/^$/){ #データ作製 }else{ print "形式誤り\n"; } } close(IN);
>>737 > my $date=$_;
> my @accident=();
は@journalと同じところで宣言すべき。
> elsif(/^$/){
> #データ作製
closeしてから処理すれば?
入力データからしてどこかのニュースサイトとかで使うのかな?
こわこわー
>>737 use strict;
my @journal;
my $entry;
while(<DATA>) {
chomp;
if(/^\d/) {
$entry = {date => $_, accidents => []};
push @journal, $entry;
} elsif(/^ /) {
push @{$entry->{accidents}}, $' if $entry and $';
}
}
>>737 とりあえず use strict; したらわかるんだけど
my @accident=(); はそのifの中のスコープでしか使えない。
>>738 の通り。
次に@journalにpushする時\@accidentを使うと同じ参照を何度もpushすることになるから
[@accident]でコピーの無名配列を作り直してpushする必要がある。
とりあえずおっぱいな
誤爆した スマン
こんにちは。 macでperlをやってみようと思い始めたばかりの初心者です。 初歩の初歩で申し訳ないのですが、自力で解決できなかったので、 ご教授いただければ幸いです。 今いろんなサイトみながら「まずはターミナルでperlを実行してみよう」 という流れになり、 print "Hello, World¥n"; print "Hello, Perl¥n"; と書いたテキストを「hello.pl」という名前で保存して ターミナルで「perl hello.pl」と実行しても 「Can't open perl script "hello.pl": No such file or directory」 と表示されます。 保存場所が間違っているのでしょうが、デスクトップとライブラリの perlフォルダに入れても動きません。 この場合、どうしたら「hello.pl」は動くのでしょうか? ご回答お願いします。
>>743 PerlはLinuxでしか扱った事がないのだけども、
まずはそのhello.plファイルに実行権限があるか確認してみては如何?
レスありがとうございます。 実行権限ですね。 ちょっと調べて確認してみます!
>>743 保存場所が間違っているのでしょうが
本質的にperlの話とは関係ないが・・・
cd ~/Desktop
でそこへ移動してから
perl hello.pl
でOK。または、どこからでも
perl ~/Desktop/hello.pl
747 :
sakura :2007/09/24(月) 17:25:15
>>739 早速の回答、有り難う御座います。以下の様に、判断しましたが間違っていないでしょ
うか?
日付の行は、まだ明細行は無いので$entryのリファレンスとしてはdateのみを格納し
て、accidentsは、無名の配列コンストラクタで領域のみを確保してリファレンスを格
納する。その$entryのリファレンスを@journalの最終的なリストに蓄積して行く。
明細の行で、accidentsは日付の時に取得したリファレンスを元にして$entryのリス
トを順次作製蓄積して行く。
と言う事で理解しましたが、これで良いですか?リファレンスは使った事が無いの
で、憶測で書いています。最後にprint for @journal;では
HASH(0x2754b4)HASH(0x18333fc)の値が表示されました。データとしては、日付は2件
有りますのできちんとリファレンスが出力されている様です。
しかし、今度は@journalの出力の方法が分かりません。申し訳有りませんが、
@journalを出力する方法をお教え願います。
>>747 あってるよ。
print $journal[0]{date}, "\n";
print $journal[0]{accidents}[0], "\n";
print $journal[0]{accidents}[1], "\n";
print $journal[1]{date}, "\n";
print $journal[1]{accidents}[0], "\n";
accidentsの配列がほしければこうだな @{$journal[0]{accidents}}
>>747 出力というとちょっと違うけど、こうやってまずは構造を知るところから。
use Data::Dumper;
print Dumper \@journal;
752 :
デフォルトの名無しさん :2007/09/24(月) 21:38:18
Perlを8月から勉強しはじめて、リャマ、アルパカ、EffectivePerlは通読しました。 リファレンスを使えるようにはなりました。 オブジェクトもCPAN moduleのコードを読むだけならできます。 書くのは無理ですが。 そこで次のステップに,と思うのですが、なかなか遅々として進めないでいます。 Web applicationを作りたいです。 CPAN moduleをあさったりしてますが、他にどんな勉強しかたがありますか? オープンソースのWeb applicationから勉強するにはどうしたらいいですか? 良く分からないのですが、sf.netで十分ですか? それから、いつも書くコードが数十行なので、大規模なアプリを作る基礎力がついていない 気がします。何か題材があればいいのですが、先輩方はどうやってPerl codingの題材を見つけて こられたのですか?
>751 Perlのデータ構造を見るんだから、Data::Dumperのほうがいいと思う。 あれなら $VAR1 = [ {'foo' => 'bar'}, {'hoge' => 'fuga'}, ]; みたいに無名配列に無名ハッシュが入ってるって見てわかるし。 ある程度なれた人間がdebug printとして使うんならYAMLのほうがいいだろうけど。
>>752 > 気がします。何か題材があればいいのですが、先輩方はどうやってPerl codingの題材を見つけて
> こられたのですか?
何か題材を決めて書いてみる。わたしゃ最近は新しい言語を学ぶ時は、
2-gramの全文検索システムを作ってみる。
755 :
752 :2007/09/24(月) 22:07:26
>>754 ちなみに、言語はPerlしか知りません。
javascript, cがかろうじて初歩的な部分が分かりはしますが。
他の言語に手をだすより、Perlにしぼってやろうと考えての判断ですが、
最近はC,javaもそのうちやったほうがいいのではとか、いやPerlに専念すべきだといった
葛藤があってパニックになっています。
正直、自分でもあせりすぎなことは分かっていますが、急いでいます。
急務というのは、こういうことを言うのでしょうか。
それで、N-gramというのも良く知りませんので、ちょっと調べてみました。
こういった検索技術というのはWeb applicationを作るうえで大切そうですね。
ただ、最近はWeb APIで形態素解析 [1]が出来るそうなので、情報学科の学生のように
深く勉強しなくてもサイト運営は出来るのでしょうか?
とにかく、作ってみてからものを言えと言われそうですが、これまでも作り続けてきました。
のべ10000行は書いたと思います。8月から。
ただ、題材が本[2]を見て改変というパターンなので、数十行のものばかりとなり、限界を感じています。
脚注
[1] Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析
http://developer.yahoo.co.jp/jlp/MAService/V1/parse.html [2] アルパカ、リャマ、EffectivePerl
「何をやるか」という事を先に決めて、 それを実現させる道具としてPerlを勉強すると、 モチベーションを保てるしなあ。
757 :
752 :2007/09/24(月) 22:20:06
>>756 目標イメージがどれだけ鮮明かと言われるとイメージ力が苦手なもので自信がないですが、
A4用紙30枚くらいは書ける自信ならあります。
つまり、具体的なビジネスのアイデアは一応あります。
これまでにないSNSを作ろうかと思っています。
これまでにあるSNSだと流行らないので、これまでにないものを、と。
ただ、computer初心者なので(いやマジで)、TCP/IP, UNIX, HTTP, とかも逐次知識補充していかないと
codingできないありさまで、いつになったら作れるのやらという感じです。
たとえていえば、目標はハッキリしているつもりだが、途中の階段が暗黒なんです。
困りました。
だから、最近はオープンソースのWeb applicationに興味もってます。
ただ、実際に公開されてるものは大規模で、初心者向きではないですよね。
何かお勧めありますか?
エロサイト作ろう エロパワーは偉大だ
どんなSNSだよ
760 :
752 :2007/09/24(月) 22:26:03
761 :
752 :2007/09/24(月) 22:29:56
>>759 mixiとは違って、はてなダイアリーのキーワードやamazonの「この商品を買った人はこの商品も買ってます」
みたく、関連する情報を自動提示してくれるSNSですね。
まあ、そうするための具体的なアイデアもあるわけですが。
mixiだと自分の周りの人だけで交友が閉じてしまうのが残念なところだと考えています。
762 :
sakura :2007/09/24(月) 22:30:45
>>748 749 750
貴重な時間を割いて、回答して戴き有り難う御座います。今迄はリス
トやスカラーで用が足りていた物ですから、今回の様にリファレンス
を使わないといけないと言う物は、今迄は敬遠していました。
お陰で、少しは以前よりかは近くなった様な気がします。特に最後の
Data::Dumperは初めて使いました。大変参考になります。やはり、現
実の実務は、簡単な事でもデータ構造は複雑になりがちです。
今回は、実務では簡単な方で、まだ複雑な事は山の様にありますの
で、それに応用したいと思っています。どうも有り難う御座いまし
た。
> エロサイトもいいかもと期待に股間をふくらませています 公共の場であんま膨らまさないようにな
764 :
752 :2007/09/25(火) 17:35:33
Data::Dumper知らないってレベルなら、初めてのPerlとかから始めた方がいいよ。 オライリーの出してるPerl本なら駄本はないから、大きな本屋行って自分にあったのを買ってきたほうがいい。
766 :
デフォルトの名無しさん :2007/09/25(火) 18:21:24
モジュールを使うとサーバのメモリ制限(2MB)でプロセスが止められてしまうのですが、 何か良い回避方法はないでしょうか? HTML::Templateはループ回数が多くなると停止、Jcodeに至っては文字コードの変換さえ出来ませんでした。 jcode.plは使えるのですが。。PerlのVerは5.00503です。
いい加減そんな腐った鯖窓から投げ捨てちゃえ
769 :
デフォルトの名無しさん :2007/09/26(水) 00:21:02
$EXP = `/home/〜/***.exp [引数1] [引数2]`; みたいな形でPerlでexpectファイルを実行してその結果を変数$EXPに入れてる この.expファイルではTelnetで別マシンにログインしてそこで実行したコマンドと その結果を全て変数内に入れるようにしてるんだけど この.expファイルを全てNet::Telnetを使ってwaitforとprintで対話式に書いたPerlのファイルに書き直したい。 expectを使った場合は[user@domain] #なども含めてプロンプトで表示される内容全てが 返ってくるけどそれと同じようにNet::Telnetを使った場合でもログインからログアウトまでの プロンプトの表示内容全てが返ってくるようにしたいんだけど何か簡単な書き方はない? waitforの部分全てを変数に入れてprintしても全てが出されるわけじゃないしどうしたらいいか分からない。
>>757 ビジネスのアイデアあるのに自分でコーディングするのはもったいない。
コーディングの得意な人に任せてビジネスに専念すべし。
>>757 Catalyst でも使ってみるといいかも。
>>770 自分でコーディングできるのに
他人にまかせるのはカネがもったいない。
自分でアイデアを出して
自分でコーディングしたほうがいい
> A4用紙30枚くらいは書ける自信ならあります。 100 枚くらい書けないとだめじゃね?
>>772 本当に優れたアイデアなら金なんて後でいくらでも回収できる。
機会損失がある方が勿体ない。自分でなんでもやるのはプログラマに見られる悪傾向。
Perl付属のpiconvって入力側の文字コードを自動判定する機能や改行コードの変換機能ってあるんでしょうか? 今、Linuxで文字コード変換用の為にnkfを入れるか既に入っているPerlで済ませるか迷っているのですが。
Linux に nkf 入れてないとか・・・
>>777 「自分で調べるなんてのは下等人種のやること」ってやつだろ。
>>776 piconvよりもPerlのEncodeで正規表現とパイプさせれば一気に改行も出来るんじゃねえの?
781 :
776 :2007/09/26(水) 16:07:58
とりあえずmanやperldocでは改行の変換についての記述が無かったのでここで聞いてみたのですが…。 あるのでしょうかないのでしょうか?
perldocになければないんじゃないの?
なければ自分で書き換えたバッチファイル作ればいいんじゃない?piconvt参考にしてさ。
Encodeモジュール知ってれば大した作業じゃないっしょ。
>>777 は何が言いたいんだろ。それに合いの手を入れる
>>779 も。おまいらマジで病んでる。
nkfなくてもperlならたいていあるので perl -pe 'BEGIN{binmode STDIN,":encoding(sjis):crlf";binmode STDOUT,":encoding(euc-jp)"}' みたいにやることはたまにある。
>>784 >:crlf
こんなもんあったのか。知らんかったよ。
786 :
776 :2007/09/26(水) 17:01:57
>>780 >>782 >>784 レスありがとうございます。
>>784 さんのやり方で改行の変換も出来そうですね。
Encodeのperldocは一通り読んだつもりでしたけど、
encogingは見落としていました。
改行指定出来たんですね、これはとても助かります。
nkfはわざわざ入れなくても済みそうです。
おーどりーたんが改行文字が何であってもも一つに統一するスクリプトを5、6行くらいで書いていたな。
モジュール関連もここでいいのかな Expect.pmを使ってsshでログインするときにキーを保存するか聞いてくる場合、 既に保存しててそのままパスワードの入力に移行するとき、 何かしらの理由でタイムアウトしたときでsendの内容を分けたいんだけど どうやって分岐させればいいか分からない。if文でやろうかと思ったけど if($exp -> expect($timeout , $(yes/no)?)){ send("yes\n"); } と書くとマッチしないときでもtimeoutまで待たされるしtimeout書かないと次々に入力されて 使い物にならないしsleepだとマッチした場合も無駄に待つ羽目になるしスマートな書き方が思いつかない。 通常のexpectみたいに expect "assword: " {send "password\n"} \ "(yes/no)? " {send "yes\n";expect "assword: "; send "password\n"} \ timeout { 〜 } といった感じでexpectの中だけでプロンプトの内容毎にsendでの出力を分けたりできないの?
>>788 例があるじゃん。マニュアル嫁。
# then do some pattern matching with either the simple interface
$patidx = $exp->expect($timeout, @match_patterns);
# or multi-match on several spawned commands with callbacks,
# just like the Tcl version
$exp->expect($timeout,
[ qr/regex1/ => sub { my $exp = shift;
$exp->send("response\n");
exp_continue; } ],
[ "regexp2" , \&callback, @cbparms ],
);
環境はfedoracore6。cgi(webフォーム)を経由させてpostfixを起動させたいのですが、なぜか できません。端末でcgiを実行させたら起動したのですが、cgi経由では起動しません。web上で行うと、 ユーザーモードになるので、root権限を持ってないとpostfixの起動や停止は出来ないというところ まではわかったのですが・・・・。アドバイスよろしくお願いします。 cgi文 #!/usr/bin/perl use CGI; $choushu = '/etc/rc.d/init.d/postfix'; system("$choushu start &"); print "Content-type: text/html\n\n"; print "<html><body>\n"; print "長州力発進!!\n"; print "</body></html>\n"; 以下はhtml文 <html> <head> <title>Registration</title> </head> <body> <form action="sansan.cgi" method="post"> <input type="submit" value="起動!!"> </form> </body> </html>
設定を直す。
postfixの設定を見直すか強引にsudo使っちゃうか・・・
>>791 Webminでも入れた方が幸せになれそうだが。
CGI プログラムからは適当なトリガファイルを触るだけにして、
そのファイルを監視して変化があればアクションを起こす root 権限
持ちのスクリプトをデーモンなり cron なりで動かすのが、
こういう場合の常套手段の一つ。
>>791 perint "長州力発進!!\n"; が妙に気に入った
どこにperintってあるの?
perl -pe "s/perint/print/"
お助けを!! \n(0x0A)を含む任意の2文字を表すエレガントな書き方教えて下さい。 jpegファイルのブロックヘッダーからブロック長を取り出すのに 苦し紛れに/^\xff(.)([\x00-\xFF][\x00-\xFF])(.)/とか書いて unpack ('n', $2)としてるんですが、どうにもばばっちくてorz
うわっ 早速ありがとうござります。 /^\xFF(.)(..)(.)/s
むしろunpackの使い方をもっと調べるべきだろう
802 :
791 :2007/10/01(月) 18:24:23
>>793 >>794 >>795 返事遅れましたがありがとうございます。とにかく起動させてみたいのでsudoで強引に
起動させることに決めました。ところで質問なんですが、/etc/sudoersの設定の中でroot ALL=(ALL) ALL以外
の他に書き込めばいいんですよね?例えば、sudoでroot権限を与えたいユーザーをebizouとした場合、設定の中にebizou ALL=(ALL) ALL
と書きむのであっているでしょうか?また、httpd.confにUser apache,Group apacheと書かれているのですがこれにも/etc/sudoersの設定
に書き込まなければいけないのでしょうか?長文すいません。よろしくお願いします。
もはやPerlの質問じゃないぜ
現在Perlを勉強中なのですが、 括弧を省略できるとか、サブルーチンの呼出の&が抜ける とか、今までやって来たプログラミング言語の常識が 全く通用しないので、色々と戸惑っているのですが、 こういうものは、なれるもんなんですかね?
見易さを優先させるなら 省略できるものは省略しない あとは自由に書け
807 :
804 :2007/10/02(火) 03:36:09
>>805 自分で書く場合は、もちろんそうしてますし
use strictもしてます。
ですが、人のかいたコードを読む場合、その人の考えで書いてるんで
私の考えが通用しません。
以下の用な簡単な計算を行うプログラムなのですが質問させてください。 文字列があり、各文字に対応する数字があるとします。 例: 文字列:ABCA A=4 B=5 C=6 この場合に文字に対応する数字の合計を出したい場合、 (文字列の数字の合計=4+5+6+4=19)どうすればいいでしょうか? 書く前は「簡単にできるだろう」と思っていたのですが いざ書こうとしたらどうやって書いたらいいか思いつきませんでした。
>>808 $num{'A'} = 4
と言うようにハッシュに対応する数値を入れて、文字毎に数値を取り出して計算する
{'A'}
>>807 文法は一つしかないんだから、全部覚えればいいだけの話だよ。
頭固すぎ
別に無理して人が書いたものを読む必要ないんじゃないかな。 仕事が嫌なら、地面で穴を掘っている周辺で腕をくるくる回す簡単なお仕事に 転職すればよろし。
>>804 > こういうものは、なれるもんなんですかね?
慣れるか否かという点にもっとも大きく関係するファクターは、あなたの知的能力。
ウホ いい言語
Aがキーで 4が実体?
ヴァリューじゃね?
正規表現 /\s*([0-9A-Za-z]+)=([\x22\x27])([^\2]*)\2\s*/ でHTMLタグの属性を取得を試みたのですがうまくいかねぇっす。 後方参照の否定マッチってどうやってやるの?
HTMLの解析に正規表現を使うべからず。
>>821 ,822
質問の仕方が悪かったです。
HTMLの話は抜きで正規表現で後方参照で否定マッチする方法はありますか?
#Web::ScraperやHTML::Parser、HTML::TreeBuilderの使用の検討はしましたが
#タグにidやclassが振ってなくて構造体でのスクレイピングが行いにくいので正規表現でやってます。
(["'])(.*?)\2 じゃあかんの?
>>824 HTMLならそれでOKっすね。
ありがとうございます。
後方参照の否定マッチってできないもんですかね?
否定読みを駆使すれば出来る。
827 :
デフォルトの名無しさん :2007/10/03(水) 18:13:57
おまえウザイよ。いいかげんにしろ。
828 :
デフォルトの名無しさん :2007/10/03(水) 21:24:25
POSTデータを数値に変換したいんですが どうすればいいんでしょうか? 例えばフォームからSJISの「あ」という文字を取ると「82A0」 という文字列が取れるんですが これを16進数の数値として扱って10進数に変換ってどうやればいいんでしょう? ord関数使うのが一般的でしょうか?
830 :
デフォルトの名無しさん :2007/10/03(水) 21:59:01
>>829 ありがとうございます
バイナリ→10進数の変換でいけるのかな?
やってみます
831 :
デフォルトの名無しさん :2007/10/03(水) 22:21:22
>>829 できませんでした…orz
そもそもポストで取ってるので
文字コードが文字列で入ってる状態です
「あ」で「%82%A0」です
この「%82%A0」を数値に変換したいんですが
どうすればいいんでしょ?
例えばCならintで宣言した変数にぶっこんだら勝手に数値として扱ってくれますが
perlだとどうすればいいのやら…
ためしに「%82%A0」+「%82%A0」みたいなことすると「%82%A0」は数字の1として扱われてるよう
「あ」でも「い」でも同じ数値の1
832 :
デフォルトの名無しさん :2007/10/03(水) 22:36:44
自己解決しました $hoge="「%82%A0"; $hoge10=~ s/%//g; $hoge100 = hex($hoge10); %がよけいでした、これ抜いたら普通に16進数として扱ってくれました
^^
834 :
デフォルトの名無しさん :2007/10/04(木) 01:07:59
またおまえか。いらん事すんな
後方参照の否定マッチってできないもんですかね?
836 :
デフォルトの名無しさん :2007/10/04(木) 17:21:08
Class::DBI を使って Postgres のデータを操作したいのですが、 Postgres のテーブル内に update という名のカラムがあるとまずいのでしょうか? Column 'update' in My::Class::Hoge clashes with built-in method at 〜 カラム名を変えないとだめですか?
スレ違い カラム名変えてやってみろよクソが
>>836 > Column 'update' in My::Class::Hoge clashes with built-in method at 〜
>
> カラム名を変えないとだめですか?
Class::DBI の _make_method から出てるエラーですね。
update メソッドなのか、カラム名から生成されたアクセサなのかわからなくなるので、
カラム名変えるべきなのかも。
839 :
デフォルトの名無しさん :2007/10/05(金) 16:27:46
>カラム名を変えないとだめですか? 自分で気づいているなら、なぜ自分で試さない? このスレの住人に試させてオイシイとこだけ持ていくつもりか?
BMPの中に指定された色があるか判断する関数がないかなといろいろ探しているのですが見つからないので 知っていたら教えていただけないでしょうか 例えばRGBの赤(ff0000)があるかどうか判断するような関数がないものでしょうか
GD とか ImageMagick とか Imager とか
BMP はベタイメージだから、ヘッダを除いたデータに対して ABGR で検索してみて 見つかった場合にその値が4バイト境界にまたがっていなければ (4の倍数で割れる位置にあれば) 指定色の発見 で良いかと思います。 パレットつきならパレットに対してサーチすりゃいいだけなので、その画像がフルカラーなのかパレット付きなのか チェックするのが最初の手順ってことですかね
843 :
デフォルトの名無しさん :2007/10/05(金) 17:11:03
844 :
836 :2007/10/05(金) 17:39:07
>>837-839 既存のプログラムに影響があるので、できれば Postgres のテーブルの変更は
避けたかったのですが、やむを得ないようですね。
ご回答ありがとうございました。
846 :
デフォルトの名無しさん :2007/10/05(金) 20:21:07
↑ 自作自演かっこ悪い
って書く奴もかこ悪い
ということにしたいのですね。
自分自身を誉め称える
それがここだ
852 :
デフォルトの名無しさん :2007/10/05(金) 23:03:49
Jcodeに空白文字列のリファレンス渡したら 変な文字列が詰め込まれて帰ってくるんだけど うちだけ?じかに値渡すとなんとも無いのだが。
それさ初期化して無いやつのリファレンス渡してない? my $str = ''; ってやってるのと my $str; は中身違うよ
>>853 もしかしたら途中でundef帰ってたかもしれない
ありがとう
Perlプログラムでこういう記述があるわけだが間違っているのか? $bankgold += 1000; &bankwrt; (※ここでは$bankgoldに50000が代入されているとする) $bankgoldという変数に1000を+し、&bankwrtを実行するというものなんだが。 しかし、これだと何故だか+した数値(1000)になってしまう。 俺の理想では$bankgold(50000)に+1000しているから51000になってほしいのだが、 なぜ、+した数値になるのかがわからん。 因みに&bankwrtの中身は open(BANK,">********"); flock(BANK,2); print BANK "$bankgold"; close(BANK); } このサブルーチンを実行すれば最新(その都度、代入された)$bankgoldが *******ファイルに保存される。 (************は例で実際にはこうは書いていないです)
値を渡してないのに51000になるわけがないw
>>855 gold じゃなくて silver に変えればいけると思います
…って書くと本当にやりそうだなこの人
日本語でおk
gold を silver に変えるとこれまでのアトピーがうそのように治り、 今では毎晩女の子とエッチな夜を過ごしています。
861 :
844 :2007/10/06(土) 10:00:46
862 :
デフォルトの名無しさん :2007/10/06(土) 10:34:39
>>855 こんなのカンタン。1行目に
$bankgold = 50000;
って書いてごらんよ。
>(※ここでは$bankgoldに50000が代入されているとする)
どこにも代入してないじゃん。
>>858 ほっほんとうですか!?
親切にありがとうございます!!!
これでいいか?
>>862 ここでは代入してないけど、別ファイルで代入してるから、
一応、50000になっていると考えてくれ。
それが代入されてないんだろ
取りあえず&bankwrt;を消してどうなるか書き込んでくれ。
あー、すまん。$bankgold += 1000;だった。
プロクラムは、プログラマの意図したとおりに動くのではなく、書いたとおりに動いているだけである。 原因は、 $bankgoldに50000を代入していない +=1000する前か、した後でbankwrt()を呼び出す前に値を書き換えてしまっている bankwrt()内のopenに失敗している のいずれかでしょ。 グローバル変数を使って、あちこちで扱うと、途中で何しているか自分でも分からなくなるので、 値渡しのサブルーチンを作ると吉。 use strict; my $bankgold = 50000; $bankgold += 1000; bankwrt($bankgold); sub bankwrt { my $bankgold = shift; ### 受け取った引数を… open(BANK,">********") or die $!; ### 必ずエラートラップすべし flock(BANK,2); print BANK $bankgold; ### …ただ書き込むだけ! close(BANK); }
やさしい奴だな、 だがuse warningsもほしい。
だから、デバッグしろよ。
870 :
デフォルトの名無しさん :2007/10/06(土) 19:42:28
Crypt::RC6を使おうと思ってるんだが 16bitの秘密鍵はどうやって作ればいいんだ? だいたい、bitがどのくらいなのかもよく分からん俺なんだけど。
16byteの間違いじゃないの?
872 :
デフォルトの名無しさん :2007/10/06(土) 19:49:06
>>871 ああ、ゴメン そう16byte
どうやって作るの?
873 :
デフォルトの名無しさん :2007/10/06(土) 20:01:55
ちなみに、コードは #! /usr/bin/perl # rc6.pl use Crypt::RC6; my $key = ""; my $cipher = new Crypt::RC6 $key; my $plaintext = "This is apple."; my $ciphertext = $cipher->encrypt($plaintext); print "$ciphertext"; で、エラーは Error: key must be 16, 24, or 32 bytes in length. at rc6.pl line 8.
874 :
デフォルトの名無しさん :2007/10/06(土) 20:02:30
$keyは分からなかったから入れてないんだ
for (0..0xf) { $key .= pack("C", rand(0x100)) }
876 :
デフォルトの名無しさん :2007/10/06(土) 20:30:20
875 じゃないけど簡単に書くと my $key = ''; for(my $i = 0; $i++; $i < 16){ $key .= pack("C", rand(256)); }
環境が許すなら/dev/urandomから読むのがお勧め if (open my $fh, '<', '/dev/urandom') { read($fh, $key, 16); }
879 :
デフォルトの名無しさん :2007/10/06(土) 21:12:25
>>877 ,878
thx
どっちも、それぞれ書いて、$keyだけprintしてみたんだけど
877のは、何にもprintされなくて、878のは、文字化けっぽい(?とかが入ってる)のがprintされたよ・・・
どうしたら良いのか
>>879 > どうしたら良いのか
勉強する。それしかない。
881 :
デフォルトの名無しさん :2007/10/06(土) 21:32:52
じゃあ、おねがいだ 16bytesがどんなものかだけ、教えてくれないか
128bitsのことだろう
半角16文字
>>881 君の最後の一文「教えてくれないか」 が16bytesだ。さては狙ったな
885 :
デフォルトの名無しさん :2007/10/06(土) 22:09:50
16bytesのキーは出来た。勉強しマスタ で、そうすると今度は Error: block size must be 16 bytes. ってエラーが・・・
unicode の半角 16 文字が 16byte であるはずがない
887 :
デフォルトの名無しさん :2007/10/06(土) 23:03:40
プッ・・・知ったかぶり
16bytes単位に切り詰めろと言う事。 $plaintext = "A" x 0x10; にしたらエラー出んだろ。
889 :
デフォルトの名無しさん :2007/10/07(日) 13:00:16
このスレはキチガイの寄り合い所帯だな
890 :
デフォルトの名無しさん :2007/10/07(日) 13:01:22
>>888 なるほど、アルファベット16文字ならOKだな
んでも、これで、利用価値あるんだかどうなんだか
/ニYニヽ (ヽ /( ゚ )( ゚ )ヽ /) (((i ) /::::⌒`´⌒::::\ ( i))) でっていうwwwwwwww /∠_| ,-)___(-, |_ゝ \ ( ___、 |-┬-| ,__ ) | `ー'´ /´ | /
1年くらい前から思ってたんだけど、このスレってやたらレベル低くね? WebProgのPerlスレに統合しちゃった方がいいと思うよ。
CGIって何ですか?みたいな質問連発されるのは御免被る。
テンプレを読まない質問者は論外だけど 回答者も、どうでもいいことで揚げ足取ってたり 問題解決にも何にもなってない返答して得意になってる奴の返答が多かったりで 昔と比べるとかなり程度が低くなってるのは否めないな、 というのがROMってる俺の感想。
んじゃ回答は君に任せた
ROMってるって奴に「んじゃ回答は君に任せた」って書いてもしょうがないのでは
897 :
デフォルトの名無しさん :2007/10/07(日) 14:42:00
Crypt::RC5の方が断然使いやすかったと言うことに気付いたよ
読解力や理解力の無い 質問者が多過ぎるのが問題。
activeperlだと、getppidとか実装されてませんでした(´・ω・`)
902 :
デフォルトの名無しさん :2007/10/07(日) 20:17:10
ちょっと、お尋ねするが Gmailのfeedの認証はBASICだとダメなの? LWP::UserAgentで、BASIC認証してみたけどエラーが返ってきた。
903 :
デフォルトの名無しさん :2007/10/08(月) 00:17:15
perl と CGI の区別が付かないバカ発見〜〜〜〜 ⇒⇒⇒892
すげぇ知能低そう。よくプログラミングなんて出来るな・・・。
プログラミングできるかどうか、そのレスだけから判断するのは不可能だ。
>>900 裸の王様がいっぱい居そうなスレだなww
どんなバカでもコードを書けるようにしてくれるPerl
その点PHPには敵わない
このスレにも裸の王様が何人かいてワロス。
俺にとってはPerl=コマンドラインツールだな
そんなことは聞いてないよ
912 :
デフォルトの名無しさん :2007/10/08(月) 21:07:10
,.;'‐、____,:-;';:、. /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ. /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ. /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:ヽ. i;:;:;:;:;:/ノ-'-''~ヽ;:;:;ヽ'''-ヽ、;:;:;:;:;| {;:;:;:;:ノ■■■ ■■■ヽ;:;:;} ヽ;:;{ _ _ |;:;:{ };:;|三/ ●),. 、(● ヽ三 |〈 ヽ| ~ ゙='~/:::ヾ='~゙ | } { |∫ ∴ (,.、::,. ) ∵ |/ ゝ::●. ...:人:人:::..... ...! {;;ヽ:.:.:.:.:.:.:.<Ξ>:.::.:.:.:.:.:.:/;} <perl と CGI の区別がつかないヤツ必死だな / ヽ:.:.:.:.::.:.:.:.:.:.:.:.:.:.:/ \ / |ヽ:.:.:.:.:.:.:.:.:.:/| \ ヽ ̄ ̄ ̄ / ヽ___/
C++からPerlを呼び出す方法はありますか? JavaやRubyはC/C++から呼び出すことができますが、Perlも できればいいなと思いまして。
>>913 Windows でActivePerl を使っているなら、PerlEzを使う.
C/C++のプログラムのなかに自作のパールモジュールのサブルーチンを組み込むためには どういうコードをすればいいでしょうか? perlcall prlembedのドキュメントではとくにモジュールやサブルーチンの場所を記述していない?ようでしたが、 libフォルダのどこのモジュールを使う、というふうに指定するのはどうするのでしょう?
>C/C++のプログラムのなかに スレタイ100回読んでこい
fpingの出力値の数字だけを抜き出すプログラムを作りたいのですが、うまくできません。 www.yahoo.co.jp:[0], 84 bytes, 18.1 ms (18.1 avg, 0% loss)の始めの18.1だけ抜き出したいです。 substrコマンドを使ったんですが、これだとURLの数がかわると変なところを抜き出してしまいます。 例えばbytes,より前を切り取り、ms ( も切り取る方法ってありますか?
(.*?)bytes, (\d{1,4}\.\d{1,2} ms) \( 正規表現
>>920 ありがとうございます!
やってみます!
>>917 OSは何使ってんの?WindowsのActive Perl なら、簡単にできるけど、
UNIXはいじったことないから知らん。
923 :
デフォルトの名無しさん :2007/10/10(水) 19:28:29
system("unko.pl");
924 :
917 :2007/10/10(水) 21:20:48
>>922 winXP, ActivePerlです。
もしよければ簡単な例を示していただけないでしょうか?
>>924 やっぱりそうか。あのね、他人のアドバイスをないがしろにしていると、
誰にも相手をしてもらえなくなるよ。
>Windows でActivePerl を使っているなら、PerlEzを使う.
と
>>916 で言われたなら、PerlEzのドキュメントぐらい読んでみたらどうなのさ。
次の質問は、それからだ。
926 :
デフォルトの名無しさん :2007/10/11(木) 13:00:23
ここは基地外スレだな
927 :
デフォルトの名無しさん :2007/10/11(木) 20:22:10
ちょっとすみません! 超初心者なんですけど、100から300までの整数で、素数じゃないならその数字を、素数なら数字の代わりにPrimeと表示したいんですけど全然わからないんで教えてください
宿題は宿題スレでやれ。
ここまでストレートな宿題依頼も珍しいw
930 :
デフォルトの名無しさん :2007/10/11(木) 20:48:32
すみません。 Perlの宿題スレがなかったもんでレスしました
素数の求め方ぐらい中学校で習ってるだろ それをそのままコードにしろよ
932 :
デフォルトの名無しさん :2007/10/11(木) 21:00:25
その素数の求め方がわからない・・・・
933 :
デフォルトの名無しさん :2007/10/11(木) 21:13:07
それまでの整数でわって小数のくらいがでたら素数って判定にすれば いいじゃん。2重ループで終了
934 :
デフォルトの名無しさん :2007/10/11(木) 21:37:56
/ヾ〜〜╋┓ ┣¨┣¨┣¨┣¨┣¨ ┃┃¨╋┓┃┃¨╋┓
もういいじゃない。教えてやろうぜ
>>932 これで大丈夫だぞ。
$,=" ";
print grep{ (1 x $_) =~ /^(11+)\1+$/ or $_ = "Prime"} (100..300);
936 :
デフォルトの名無しさん :2007/10/11(木) 23:03:13
また黒魔術な書き方しやがって。
昔見たときは意味わからなかったな。懐かしい。
いい答えだ
940 :
デフォルトの名無しさん :2007/10/12(金) 01:01:16
コピペうざい
提出したら提出したで困る気がするなw
素直にforループ使えよ。明らかにforループの練習問題だろ。
(1 x $_) =~ /^(11+)\1+$/ 誰か解説して
無茶しやがって
1. 調べたい数値と同じ長さだけ '1' を並べた文字列を作る。 e.g. $_ == 9 なら '111111111' 2. その文字列と同じ長さの文字列を、「ある長さの文字列」を 繰り返すだけで作れるか = 割り切れるかどうか調べる。 e.g. '111111111' =~ /^(11+)\1+$/ は (11+) が '111' に、\1+ が '111''111' にマッチした時点で真 3. 割り切れなければ (マッチ演算子が偽を返せば) 素数なので $_ に 'Prime' を代入 「抽出」や「除外」ではなく「変換」という行為が求められている場面で grep を使ったり、ブロック中で $_ を変更している辺りは「黒」だと思う。
なるほどー、よく分かったわ。thx
提出したら、先生に か わ い が っ て もらえそうだな。
948 :
デフォルトの名無しさん :2007/10/12(金) 11:43:02
ユーザにコードを入力させて実行させたいのですが、 use Safe意外に何か良い方法あるでしょうか?
実行させたい→実行したい 意外→以外
>>948 セキュリティを重視するなら、共有レンタルサーバと同じ方法をとることも考えられる。
具体的にどうすればいいのかはWeb板で。
5.10まだ〜?
953 :
デフォルトの名無しさん :2007/10/13(土) 00:46:33
ActivePerl5.8.8で バッチファイルからwperl実行すると wperl以降のバッチファイルの行が 実行されないのですが どうすれば回避できるでしょうか
>>953 さてはバッチコマンドに call があるの知らないな?
>>954-955 すいません、DOSコマンドは並べ立てる程度しか分からないのでorz
当てずっぽうにcmdとか試してみたのですがうまくいかなくて、
無理やりperl側からcmdプロセスを潰してました・・
これでバッチファイルだけできれいにできそうです。ありがとー
100の要素数を持つ配列を定義し すべての要素に初期値として1を入れたいのですが 一番簡単な(できれば早い)コードはどういうのでしょう? $a[$_] = 1 for (0..99); ↑これだと遅いですよね?
map {$_++} @x[0..99];
my @a = (1) x 100;
960 :
デフォルトの名無しさん :2007/10/14(日) 00:33:50
引数が全然違うだろうが。ヴァカか?(藁
>>958-959 ありがとうございます 数パターン試してみました
$ cat timethese_array.pl
#!/usr/bin/perl
#use strict;
#use warnings;
use Benchmark qw(timethese cmpthese);
timethese(1,{
PatternFor => '$a[$_] = 1 for (0..999999);',
PatternForeach => '$_ = 1 foreach (@b[0..999999]);',
PatternMap => 'map {$_ = 1} @c[0..999999];',
PatternList => '@d = (1) x 1000000;',
});
$ perl timethese_array.pl
Benchmark: timing 1 iterations of PatternFor, PatternForeach, PatternList, PatternMap...
PatternFor: 0 wallclock secs ( 0.41 usr + 0.03 sys = 0.44 CPU) @ 2.28/s (n=1)
(warning: too few iterations for a reliable count)
PatternForeach: 1 wallclock secs ( 0.30 usr + 0.00 sys = 0.30 CPU) @ 3.37/s (n=1)
(warning: too few iterations for a reliable count)
PatternList: 0 wallclock secs ( 0.11 usr + 0.00 sys = 0.11 CPU) @ 9.17/s (n=1)
(warning: too few iterations for a reliable count)
PatternMap: 1 wallclock secs ( 0.55 usr + 0.02 sys = 0.56 CPU) @ 1.78/s (n=1)
(warning: too few iterations for a reliable count)
> 引数が全然違うだろうが。ヴァカか?(藁 あたまたりてる?
誤爆じゃねえの?
>>961 追試。
#!/usr/bin/perl -w
use strict;
use Benchmark qw(timethese);
timethese(-5, {
For1 => sub { my @arr; $arr[$_] = 1 for 0..9999; 1 },
For2 => sub { my @arr; $_ = 1 for @arr[ 0..9999 ]; 1 },
List => sub { my @arr; @arr = (1) x 10000; 1 },
Map1 => sub { my @arr; map $arr[$_] = 1 , 0..9999; 1 },
Map2 => sub { my @arr; map $_ = 1 , @arr[ 0..9999 ]; 1 },
Map3 => sub { my @arr; map { $arr[$_] = 1 } 0..9999; 1 },
Map4 => sub { my @arr; map { $_ = 1 } @arr[ 0..9999 ]; 1 },
});
For1: 5 wallclock secs ( 5.27 usr + 0.00 sys = 5.27 CPU) @ 129.33/s (n=681)
For2: 5 wallclock secs ( 5.27 usr + 0.00 sys = 5.27 CPU) @ 151.32/s (n=798)
List: 5 wallclock secs ( 5.32 usr + 0.00 sys = 5.32 CPU) @ 367.46/s (n=1955)
Map1: 6 wallclock secs ( 5.27 usr + 0.00 sys = 5.27 CPU) @ 117.95/s (n=622)
Map2: 6 wallclock secs ( 5.24 usr + 0.00 sys = 5.24 CPU) @ 152.23/s (n=798)
Map3: 5 wallclock secs ( 5.27 usr + 0.00 sys = 5.27 CPU) @ 112.07/s (n=591)
Map4: 5 wallclock secs ( 5.30 usr + 0.00 sys = 5.30 CPU) @ 71.93/s (n=381)
気にするほど差がある訳じゃないな。
>>964 追試ありがとうございます
Map2とMap4は、自分の環境で試してみると
それでも1.5倍ほどの差がありました
ブロックの有無だけで何故これだけの差がでるのか不思議ですね
すみません、XML::SimpleのXMLin関数の HTML版みたいなのってありますか? HTML::Parserを中心にCPANを色々 探したのですが分からず…もしかして HTMLは厳格な構造ではないので、 そういうのは無理なのでしょうか?
>>967 ようはデータの構造体に変換したいってことよね?
HTML::TreeBuilderじゃだめ?
HTML::DOMとかそんなんなかったっけ? それのソースを眺めてみるのも手かもしれない
>>968 ありがとうございます。HTML::TreeBuilderを見て、
HTML::Elementの関数を調べてみたのですが
XMLinみたいに綺麗なリファレンスを返してくれる
関数は自分では見つけられませんでした(英語も読めません)
お手数をお掛けしますが関数名等を教えて頂けると助かります。
>>969 ちょっとこの量のソースを読むには
気が滅入ります…すみません
レスから1時間も経ってないじゃん もうちょい頑張れよwww
草い
973 :
デフォルトの名無しさん :2007/10/15(月) 17:01:58
プログラムの「前」ってどっちですか? $k = 0; ← こっちが前? for ($i = 0; $i < 10; $i++) { $k += $i; } print "こたえ=", $k, "\n"; ← こっちが前?
>>973 ↑ 後方 backward
$k = 0;
for ($i = 0; $i < 10; $i++) {
$k += $i;
}
print "こたえ=", $k, "\n";
↓ 前方 forward
「以前」の前じゃなく、「前に進む」の前って覚えるといいよ とか言ってみるテスト
後方 → orz ← 前方
977 :
デフォルトの名無しさん :2007/10/15(月) 19:11:54
>>973 > プログラムの「前」ってどっちですか?
↑
前
後
↓
場合によりけり
979 :
デフォルトの名無しさん :2007/10/15(月) 19:43:55
じゃぁ 前方参照ってどっち? 後方参照ってどっち?
小出しにせずに全部書いてくれ。 まだなんかあるだろ? それデータかなんか絡んでねーか?
981 :
デフォルトの名無しさん :2007/10/15(月) 20:15:29
ただ上司に「プログラムの前の方を見ろ」と言われただけです。 で、「前ってどっち?」と聞き返したら、 「そんな事も分からないのか?前は前だろが。分からなかったら小学校からやりなおしてこい」 ・・・と怒られちゃいました。もう涙目デスorz でもほんとうに分からないんです。前ってどっちなのか。 人間の「前」ならわかります。顔があるほうですよね? Q「人間の「前」ってどっちですか?」 A「小出しにせずに全部書いてくれ!」 フツー、そんな会話は無いですよね。前は前だから。決まってるもん。 プログラムの「前」は決まっていないんですか?
俺は前は上の方だな。以前って意味に取るな。
>>979 コンパイラは上から下へ読み勧めるから、
前方参照の前方はソースコードの下方向。
コードの前ならたぶん上方向じゃね?
まえとうしろ 方向なので進行方向がまえ まえとあと 時間経過なので進行方向の逆がまえ ソースの前を見ろとか言う場合は時間経過のほうだね普通 まだ通過してない部分が時間をさかのぼって手前に影響することはありえない ていうかおれ釣られた?w
聖徳太子知ってる?
>>981 気にせずソース全部見れば?
つーか「前は前だろうが」なんて答える上司もバカだな
普通に教えれりゃいいのに
>>981 そんな事も分からないのか?前は前だろが。
その上司って何歳よ?
991 :
デフォルトの名無しさん :2007/10/15(月) 21:10:00
フクロウ本には前方参照と後方参照の混乱について書いてあったな。
うん
993 :
デフォルトの名無しさん :2007/10/15(月) 21:14:36
ソースコードの「前-後」は混乱の元なので、 「あたま-しっぽ」「上-下」と呼称したりする。
>981 横書きの本をオマエは後ろ (下) から読むのか? おまえ小学生からやり直せって
そもそも、ソースコードの位置を前とか後ろとかで呼ぶか?
996 :
デフォルトの名無しさん :2007/10/15(月) 21:22:19
普通、サブルーチン モジュール だよな
997 :
デフォルトの名無しさん :2007/10/15(月) 21:43:46
箸を持つ方が前だろう
ティムティムがいつも寄ってるほうが前
それ右じゃね
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。