# [Perl 日本語処理の基礎の基礎] # このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。 # このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。 # 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。 # まず、以下の行を先頭に入れて下さい。 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; # ※1 use Encode; # 次に、あなたが実行したい処理の内容を入れて下さい。 $file = 'C:/なんたら/かんたら.txt'; open my $fh, '<', encode("cp932", $file) or die $! ; # ※2 print <$fh>; # 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう # おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。 # 【注】※1. の行を入れると、DOS 窓への日本語出力は簡便になりますが、 # ソースファイル名に非 ANSI 文字が含まれる場合に die 文の出力が失敗します。 # ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、 # この例のように cp932 でエンコードする必要があります。
乙
ところで整数の算数を文字列でやってるんだけど 250桁同士の掛け算に15分かかる。 効率いい方法ってある?
10 :
デフォルトの名無しさん :2010/07/31(土) 19:13:40
use Math::BigInt lib => 'GMP';
今まで時間かかってた600桁同士の掛け算が0.1秒くらいで終わったよ…… どうもです
12 :
デフォルトの名無しさん :2010/07/31(土) 20:21:18
UNIXの勉強中。 基礎を学んでUNIXC少しやってVBちょっとやったらCGIに入る予定だ。 目標KENT WEB! 多少なりとも足固めしてしてからサイトから落として徐々に作り変えて自分のサイトにしていく。 どうせ誰も見てないサイトだ。何やってるかなんてわかりゃしない。 がんばろ!
釣り針でかすぎだろw
14 :
PHPヲタ :2010/07/31(土) 23:36:57
15 :
PHPヲタ :2010/07/31(土) 23:40:17
16 :
PHPヲタ :2010/08/01(日) 00:09:38
>>12 君は最高だ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!っ
なんか基地外がいついたな
18 :
デフォルトの名無しさん :2010/08/01(日) 01:13:05
CGI覚えてちゃんとできるようになったら仕事もらって在宅ビジネスにするんだ。 KENTのように10年くらいで覚えて独立も視野にいれて頑張る。 儲かるぞーーーー、夢の上では^^; 貸借対象表と損益計算書でROA計算してROEもだしてヂュポンシステムで財務レバレッジの適正値も出すんだ。 KENTに仕事回してもらえるくらいにならんといかんな。 無いな^^; だが、ROAはだせるはずだ。がんばろ。
1のテンプレの順番変えたんだけど逆効果だったか
すれたておつ 逆効果ってこたないだろうけど効果もないような気はする
21 :
デフォルトの名無しさん :2010/08/01(日) 08:11:03
>>18 僕にはコミュニケーション能力と英語力があるので雇ってください
私はプログラミングにはTOEICが必要だと思っています
私はTOEICで900点以上目指して日々がんばっています
楽天が英語を使っているので 「今の企業は全て英語じゃないと行けない」と思いました
プログラミングなんて今時時代遅れなのです!今はコミュニケーション能力とクラウドの時代です
これからKENTWEBを使ったクラウドが沢山展開されると思っています!
KENTを利用することで大規模なクラウドが作り上げられます!
KENTを使ったホスティングサービスはクラウドというんです 私は5年前から目をつけてました
そもそもPerlなんて時代おくれです!!ですがCGI言語を使うために私はperlを使います
CGI=Perlなので CGI言語を取得すれば大丈夫です 私はIISをつかってますIISを使って高機能なサーバを提供できます
OSは一番最新なものがいいのです 私はWindows7をつかっています
CGI言語はActivePerlでかいているので・・・ あとCGI言語をみてると my our localなどuse xxx;
などと意味不明な文字が見つかります・・・なんなんでしょうねあれは かっこつけてるんでしょうか
私にはコミュニケーション能力と英語力と経営学、マネージメント力があるので
プログラミングより人をプログラミングするのです 今時TOEICをもってないプログラマはプログラマではありません
TOEICもってない英語のできない人はプログラミングがへたでしょう
あと毎日新聞読んでます あとは株などFXやって世界の事に関心をもってます
プログラミング歴はVB1年です 現在は自宅療養で職探しです
BigInt使わないときのアルゴリズムってどんなの?
23 :
21 :2010/08/01(日) 14:54:54
テンプレ見ない奴はどうしたってみないもの
25 :
21 :2010/08/01(日) 16:51:09
やはりPerlはテキスト処理とか得意ですよね いまActivePerlをインストールしたんですが 最初は何入れた方が良いですか? エディタは禿丸使ってます
26 :
名無し :2010/08/01(日) 17:40:13
HTML::TagParserやったら utf8のファイルをinnerTextで表示してるのに文字化けしてるなんでですか教えてください! use strict; use Encode::Guess; use HTML::TagParser; use Encode qw/from_to/; my $html=HTML::TagParser->new("chat2.html"); my $elem=$html->getElementsByTagName("font"); my $data=$elem->innerText(); my $enc=guess_encoding($data); print $enc->name."\n"; print $data; ファイルの文字コードutf8ですし 読み込んだ文字も判別した結果もutf8なのに なんで文字化けするんですか!!!教えてください!!端末の設定はutf8です! utf8 ���������(6)鐚�T ってでます
推測に失敗してんじゃないの? 文字化けしないって思う方が理解できん
28 :
名無し :2010/08/01(日) 17:49:32
>>27 早く解決方法教えろやこら?!
なあ?推測とか単語並べてんじゃねえ世早く教えロやこら!!
クソがよwwwwwなあ?wwww教えろよ派やくwwwwなあ?wwww早く教えてください
と・・判別には成功してるのか。 とりあえず出力を16進数ダンプするとかfr、何が出力されてるか確認してみては
30 :
名無し :2010/08/01(日) 17:56:25
0000000: e88e 87ef bfbd efbf bdef bfbd efbf ........ 0000010: b6bd efbf bdef bfbd efbf bdef bfbd efbf ................ 0000020: bdef bfbd efbf bdef bfbd efbf bdef bd83 ................ 0000030: efbf bdef bfbd efbf bdef bfbd efbf bd0a ................ ・・・・・・・
31 :
名無し :2010/08/01(日) 18:05:18
文字化けしてるワードは「超初心者チャット」です 教えてくださいお願いします
32 :
名無し :2010/08/01(日) 18:09:09
間違えました 文字化けしてるワードは他のやつです教えてください
さっきふと思ったけど、端末への出力の時点で 化けてる可能性はないんだろうか。 あとテスト書いた方が問題切り分けやすいよ
>>32 たぶんchat2.htmlのcharset指定が間違ってるためだと思う
<html>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<font>超初心者チャット</font>
</html>
$ ./hoga.pl |od -x
0000000 7475 3866 e80a 878e bfef efbd bdbf bfef
0000020 efbd bdbf b6e7 efbd bdbf bfef efbd bdbf
0000040 bfef efbd bdbf bfef efbd bdbf bfef efbd
0000060 bdbf bdef ef83 bdbf bfef efbd bdbf bfef
0000100 efbd bdbf
WindowsならSJISだから、utf8で出力すると化ける
>>26 はOS何?
36 :
名無し :2010/08/01(日) 18:35:32
>>34 できました!!ありがとうございます!!
HTML::TagParser で取り出した文字コードは UTF-8 となります。
META タグで文字コード(エンコーディング)が指定されている場合、自動的に文字コードを UTF-8 変換します。
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
って書いてあったんで UTF-8に変換してくれるとおもったら
EUCのままでしたそうじゃないんですね ありがとうございました
本当にありがとうございます
37 :
名無し :2010/08/01(日) 18:36:41
>>35 MacOSXです^^
自分に非はありませんでした^^
xslateというテンプレートエンジンが速いそうですが、mobasifと比べてどっちが速いでしょうか。 ベンチマーク探したけど、両者を比較しているのは見つかりませんでした。 というか xslate のほうは後発なんだから、高速だと主張するならTTなんかじゃなくて mobasifと比べてほしいよね。
41 :
PHPヲタ :2010/08/01(日) 22:05:14
なんで2chって名無しなの? まじ名前ってあんだから名前つければいいのにwwwwwばかじゃねえのほんとあほくせえ
sub foo($;$){ ↑これの$;$はどういう意味ですか?
プロトタイプ
ありがとうございます。 受け取る引数の型や数を指定できるんですね。
既存のパッケージのクラスにメンバ変数を追加する方法を教えてくれ use foo::bar { package foo::bar; my %hash sub hash {return \%hash} } としてみたんだが、どうもこれはクラス変数になるっぽい メンバ変数を追加する方法を教えてください
46 :
PHPヲタ :2010/08/01(日) 23:32:59
>>42 しってるのに聞くてめえは老人かぼけが!!!!!!^^
47 :
デフォルトの名無しさん :2010/08/02(月) 22:37:10
今ここで質問したら、自力でやったのでは無く2chの人たちに教えてもらった形になるので質問したくないです どうすればいいですか?ここで質問したら恥ずかしいと思ってます かといってPerlの場所できいたら 初心者だなこいつ って思われるから聞きたくないです どうすればいいでしょうか教えてください
48 :
PHPヲタ :2010/08/02(月) 22:44:45
49 :
名無し :2010/08/03(火) 12:02:23
LWP::UserAgentでEUC-JPのログをUTF8にしたいんですが
$req=
HTTP::Request- >new(GET=>"
http://xxxxxxxx.xxx/xx.html ");
$res=$ua->request($req);
print "Content-Type: text/html;charset=utf-8\n\n";
print $res->content;
やっぱりこれだと 読み込んだのがEUCなので文字化けされてしまいます
charset=euc-jpに変えれば問題なく表示されるんですが
utf-8で読み込んで表示させたいです
なんかrequestで読み込むとき HTML::TagParserみたいに自動でutf8で読み込まれる方法ないんですか???
教えてください!
50 :
名無し :2010/08/03(火) 12:04:23
binmode
$res->decoded_content(charset => "euc-jp")
↑flagged utf8になるから出力するときはencode_utf8してくれ
54 :
名無し :2010/08/03(火) 13:26:34
use Encode qw(encode_utf8);
my $ua=LWP::UserAgent->new();
my $req=
HTTP::Request- >new(GET=>"xxxxxxx");
my $res=$ua->request($req);
print "Content-Type: text/html;charset=utf-8\n\n";
print encode_utf8($res->content);
出来ないです!!!!教えてください!!
56 :
名無し :2010/08/03(火) 13:32:22
URL先は EUC-JPでエンコーディングされてます charsetもEUC-JPです
57 :
名無し :2010/08/03(火) 13:33:41
my $res=$ua->request($req); $res->decoded_content(charset => "euc-jp"); print "Content-Type: text/html;charset=utf-8\n\n"; print encode_utf8($res->content); すみません $res->decoded_content(charset => "euc-jp") これぬけてました これがあってもできません
print encode_utf8($res->decoded_content(charset => 'euc-jp'));
59 :
名無し :2010/08/03(火) 13:52:46
>>58 できました ありがとうございます
ちゃんと表示されました。
encode_utf8つかえばsocketで1行1行読みこんでもutf8にできるんですかね?
LWPで1行ずつ読み込む方法ないんですか?
requestだと一気に読み込まれてるんですが
やっぱりuse Socket;使わないと 1行単位での処理はむりでしょうか?
いちいちsocketでprnt socket "ファイルパス";みたいにするのがめんどくさいので
LWPみたいにurl指定して 1行読み込む奴無いですか?おしえてください
60 :
名無し :2010/08/03(火) 16:04:42
正規表現かいてて途中でみづらくなってエンタおしちゃうと\n(改行)が入っちゃう場合どうすればいんですか 教えてください!!!!!!!!
>>59 use Encode qw(from_to);
use IO::All;
my $io = io("
http://example.com ");
$io->autoclose(1);
while(my $line = $io->getline){
from_to($line, 'euc-jp', 'utf8');
print $line;
}
>>60 x修飾子
62 :
名無し :2010/08/03(火) 17:10:09
>>61 きみすごいな〜 よかったらボクの弟子になりませんか?
天才すぎるよ〜本やサイトみるより君にきいたほうがすごいからねえ
彼なりの感謝の言葉なので責めないであげてください
64 :
デフォルトの名無しさん :2010/08/04(水) 17:36:22
ネット系でおすすめのモジュールありますか? HTML::TagParser LWP::UserAgent の他にネットで加工する時に役に立つモジュール教えてください。
66 :
デフォルトの名無しさん :2010/08/04(水) 17:43:54
>>65 ありがとうございます。
他の人々もあったら教えてください。
LWPで取得したHTMLファイルのAタグのhrefを絶対パスに書き換えたいんですけど、 URIを相対パス→絶対パスに置換してくれるモジュールないですかね?
68 :
PHPヲタ :2010/08/04(水) 19:17:35
>>67 てめえそんなの正規表現でやりぇお!!!!!!!!!!!
あたりまえだろ!?!!!!てめえそれでもperlやってんのか!?
モジュールとかなら質問してもいいけどなああ?そんな当たり前の素人みたいな質問してんじゃねえぞ!!!!!!!!!!!!
>>67 URIでいいんじゃねーの? LWPあるんなら入ってるだろ。
70 :
PHPヲタ :2010/08/04(水) 19:19:12
だぶるコンボ成功・・・・ 2010/08/04(水) 19:17:35 2010/08/04(水) 19:17:38
$i=2; my $a="\x{304$i}"; my $a=encode("utf-8",$a); print $a; これ 「あ」 ってでるはずなんだえどでません \x{3042};だとでますが ブレースのなかで変数展開をするにはどうすればいんでしょうか?教えてください あいうえおって表示させたいです 2ずつ繰り上げて
73 :
デフォルトの名無しさん :2010/08/05(木) 08:47:53
IO::Allってすごいな!!!!!!!!!!!!!!!!!!!
74 :
デフォルトの名無しさん :2010/08/05(木) 10:04:14
>>61 my $io=io("
http://xxxx.com ");
while(my $line=$io->getline)
{
form_to($line,'euc-jp','utf-8');
print $line;
}
$io->close;
それやると
Can't find a class for method 'http' at test.pl line 11
ってでるんだけどな!!!
75 :
デフォルトの名無しさん :2010/08/05(木) 10:09:15
xxxx.com:80でいいのか?!
76 :
デフォルトの名無しさん :2010/08/05(木) 10:12:57
嘘教えたな!!!!
78 :
デフォルトの名無しさん :2010/08/05(木) 10:46:40
79 :
デフォルトの名無しさん :2010/08/05(木) 11:00:14
>>77 入れたら
できましたよ!!!!!!!!ありがとうございます!!
80 :
デフォルトの名無しさん :2010/08/05(木) 14:31:43
>>67 もう解決しちゃったかもしれんが、
HTML::ResolveLinkっつーのがあるよ
81 :
名無し :2010/08/05(木) 14:32:02
say.txt utf-8 改行LF ################## わろす うしね^^b きんも ################## use utf8; use Encode qw(encode from_to); open FH,"say.txt" or die "error"; our $c=0; while(<FH>) { push @list,$_; $c++; } close FH; my $a="あいうえお"; print encode("euc-jp",$a); print "\n"; print encode("euc-jp",$list[0]); EUCで出力すると 〓〓〓〓〓〓〓〓 あいうえお ãⅺ?ãⅺ?ãⅺ?
82 :
名無し :2010/08/05(木) 14:33:37
っとでます my $a="あいうえお"; print encode("euc-jp",$a); print "\n"; print encode("euc-jp",$list[0]); これって同じじゃないんですか? ファイルから@listに読み込んだのはutf-8だし $a="あいうえお";これもutf-8なんで2個目の print encode("euc-jp",$list[0]);はeucに変換してるのに 文字化けするんでしょうか? $a=あいうえお のほうはちゃんと変換できてるんですが 教えてください
83 :
名無し :2010/08/05(木) 14:34:53
間違えました print $list[0]; my $a="あいうえお"; print encode("euc-jp",$a); print "\n"; print encode("euc-jp",$list[0]); でした 教えて下し
84 :
名無し :2010/08/05(木) 14:38:27
push @list,decode("utf-8",$_); これやったらできましたwwwwwwwwwwwwwwwwwwww
85 :
デフォルトの名無しさん :2010/08/05(木) 20:11:08
外部文字列 内部文字列 覚えました 外部か読み込んだ奴はencodeするんですね。 次覚えた方が良いのありますか??教えてください!
86 :
デフォルトの名無しさん :2010/08/05(木) 23:01:37
my $io=io("xxx.com"); $io->autoclose(1); foreach(1..7) { $line=$io->getline; if($_==7) { from_to($line,"euc-jp","utf8"); } } if($line=~//) { decode("utf-8",$1); print $1; } これを繰り返したいのですが while(1)でかこってもできません・・・ 1回ならちゃんとマッチされた文字がかえるのですが くりかえしやると 1回目の表示すらされません おしえてくだい
87 :
デフォルトの名無しさん :2010/08/05(木) 23:30:06
誰か教えてくれ!!!
contentのbodyは一行しかない
89 :
デフォルトの名無しさん :2010/08/05(木) 23:39:35
どういうこですか!!!! 1回しか読み込まれないってことですか? $ioのバッファクリアするにはどうすればいいんですか?
90 :
デフォルトの名無しさん :2010/08/05(木) 23:49:41
最後等編をに替えてもだめでした・・・while(1)をつかって繰り返させたいのですが $io->clear(); $io->close(); sleep(20);
91 :
デフォルトの名無しさん :2010/08/06(金) 08:29:04
誰か教えてーーーーーーーーーーーーーーーーー
92 :
デフォルトの名無しさん :2010/08/06(金) 08:57:45
教えてくれ!!!!
93 :
デフォルトの名無しさん :2010/08/06(金) 09:19:51
教えてください一生のお願いです!!!!
94 :
デフォルトの名無しさん :2010/08/06(金) 11:40:27
while($line=$io->getline || $io->getline) { if($i==6) { $line=decode("euc-jp",$line); if($line=~/(aiueo)/) { print $1; } $1をクリアして ずっと$1を使う事はできますか? $1=undef;とやってもできませんでした 教えてください
96 :
デフォルトの名無しさん :2010/08/06(金) 12:27:49
どうすれば良いんですか教えてください
<FONT COLOR="green"><B>aaaa</B></FONT> <B><FONT size="4" >aiueo </FONT></B>
こういうデータの <font>のなかの aiueoをとりだしたいんです 一番目の場所がaaaaではなく
aiueoだったらまずいので どうしても <font size=\"\d\" >のやつをとりだしたいんです
ですが$1つかってやると 無限ループみたいになっちゃって
my $i=0;
my $io=io("
http://aaa.com/a.html ");
my @a;
while($line=$io->getline || $io->getline)
{
if($i==6)
{
$line=decode("euc-jp",$line);
if($line=~/(aiueo)/)
{
print $1;
}
$i=-1;
$io->close;
}
$i++;
}
$io->close();
=========
print $1;のあとにlast;つかうと ちゃんと aiueoって表示されて終了するんですが
ログを監視したいので ずっとループさせたいです ですが$1の場合だとよみこまれません空表示
print $line;だともちろ<FONT COLOR="green"><B>aaaa</B></FONT> <B><FONT size="4" >aiueo </FONT></B>
って表示されてましてどうか教えてください
$1の代わりとか マッチ変数しりませんか?なんかどうすればいいんでしょうかreset();やってもだめでしたが
97 :
デフォルトの名無しさん :2010/08/06(金) 12:29:11
>>95 返事ありがとうございます
なんかいい解決方法ありませんか?
誰だよ初心者にIO教えた奴は
何がしたいかが全く伝わらない $|=1;ってこと?
100 :
デフォルトの名無しさん :2010/08/06(金) 12:47:36
ちょっとやってみるので後で聞くから待っててください
質問ぐらい分り易く書けよ
102 :
デフォルトの名無しさん :2010/08/06(金) 12:53:02
$|=1; これやったらなんか できそうです 又後で質問します
103 :
デフォルトの名無しさん :2010/08/06(金) 13:00:08
$|=1; 一つで解決しました!!!!!!!!!!!!!!!!!!!! うおおおおおおおお!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!
105 :
デフォルトの名無しさん :2010/08/06(金) 13:06:48
おいこれでボットつくれた!!!!!!!!!!!! ありがとう感謝するよ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 最高だよ!!!!!!!!!!!!!!!!!!
分かったから!少なくして
夏休み時期らしい展開だねぇ。
夏ですから。
2chはこんなもんだ。 高望みするなよ。
110 :
名無し :2010/08/06(金) 16:28:15
>>109 了解しました!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!
!!!!!!!!!!!
!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ageんなsageろよボケ
112 :
名無し :2010/08/06(金) 17:42:16
114 :
名無し :2010/08/06(金) 17:51:25
筋悪なコードばっかり書いてると伸びしろがなくなるぞ。 つーか、もういっぱいいっぱいだろ。
116 :
名無し :2010/08/06(金) 23:56:43
117 :
名無し :2010/08/07(土) 00:04:15
>>115 誰に言ってるのかな?
どこが悪いとかいってみ?な?おめえの判断がむかつくんだよ みすかされてるみたいでよなあ
おめえ strictとかきにしてるばかくそばかだろ?何番目のレスのコードがわるいかいってみ?
いっぱいいっぱいとかウゼエなお前は死んじまえよ速く レスじゃなくて 他のこいってるのかな?
お前死ねよな?クソがネット社会や著名人にすがりついていきがってんじゃねえよかす
その筋悪とか伸びしろとかいわれるとむかつくんだ 謝れ 謝罪しろ
いっぱいいっぱいとか 謝罪しろ お前マジ死んでほしい
はいはい夏夏
今年の夏は暑いせいか厨の活動も活発的だな
perl -lpe '' hoge.txt 行末改行を削除したいのですが、-lオプションの使い方が間違ってるのかうまくいきません。 初歩的な質問で申し訳ないですが、どうやればいいか教えて下さい。
>>120 無難に行けば良いんじゃないだろうか。
perl -e 'print map{chomp; $_} <>'
>>121 もっと短くかけるよ
p -e 'p m{c;$_}<>'
123 :
デフォルトの名無しさん :2010/08/07(土) 13:10:56
連想配列で、キーのところに $ha{'hoge'} って感じで ' ' で囲うけど、ここって 囲わなくても正常に動作しちゃうよね。 これって仕様? それとも糖衣構文?
仕様でしょ
そうかー!仕様かー!ありがとう!
連想配列のキーの仕様について 書いてあるHPとかある? 仕様といわれてもソース無しだと納得できん
ていうか、今はじめて知ったんだけど $a = hoge ; ってエラーになんないんだな。いいのかこれ。
barewordって仕様
そんな君にはuse strict。あと$aはやめとけ
>>129 use strict; つけてもbarewordって有効になっちゃう・・・
うちのperlがバグってんのか
131 :
120 :2010/08/07(土) 18:17:11
>>121 ,122
ありがとうございます。
結局、-lは使い方が分かりませんでしたが解決することができました。
use strict信者おおすぎ^^; 夏だね^^;
自己紹介ですか
use strict use strcit騒ぎさわぎすぎですね そんなの昔からしってましたし^^;(汗
20〜30代の若造は何で 株、マネジメントなど経済学をかじるやつが増えるんですかね? なんでですか(笑) バカ企業人さん教えてください^^;
バカ企業じゃなくてニートでしたか(苦笑)
コテ付けろ NG出来ない
$a=`ls`; とかやって実行結果取得したときの結果から改行を取るのって やっぱchopとかchompとかしかないの?
>>139 正規表現で置換するか、分割して結合するか
ってのもあるけど、格好悪いじゃん。
141 :
名無し :2010/08/07(土) 21:24:40
$u=`ls|tr -d "\n"`; print $u; ^^;
142 :
名無し :2010/08/07(土) 21:26:47
$u=`ls|tr "\n" " "`; print $u; これで改行がスペースにかわるよ^^;
143 :
名無し :2010/08/07(土) 21:32:20
ばかすぎるよおおおおおおおおおきみは!!!!!!!!!!!!!!!!!!!!!!!!!! どういうことだね!?!!!!!!!!!!!!!!!!!!!僕はニートみたいなもんだぞ!!!!!
144 :
名無し :2010/08/07(土) 21:34:19
僕が答えられた理由 1、頭が良すぎた 2、努力 3、問題が低レベルすぎた ^^;
!!!と^^;をNGしとけば事足りるか
146 :
デフォルトの名無しさん :2010/08/07(土) 21:39:26
コテつけてほしいですか? 〜か 〜だな って僕が言えば回避できませんね(笑)
147 :
デフォルトの名無しさん :2010/08/07(土) 21:44:51
みなさんガリガリ君は何味が好きですか? 私はパイナップル味とコーラ味が好きです 今日はマスカット・アレキサンドリア味食べたら美味しかったです ガリガリきみが40円台で買えるから嬉しいです きみ等も食べたまえ
CGIをやろうと思いperlをはじめたのですが、どこでPerlをダウンロードするのかわかりません。 あと、Perlのメリットって何ですか? どなたか教えてください。
どこにでもまず最初からインストールされてることがメリットなので いまからインストールしますとかいってるやつにはメリットは無い。
>>149 Active perlいれろと言われたんですが ダウンロード先とかがわからないです
英語が苦手なので
DOSプロンプトとかでインストールしたりしますか?あまりPCいじったことないので
メリットどうこう、そういうのは人によって違うのでは?こちらが悪いならあやまります。
すみません。
10日までに教えてくれませんか? 研究でPerlを使うので、10日までに入れないと間に合いません。 インストール方法教えてくれる人が要らしたらご教授ください。
152 :
120 :2010/08/08(日) 18:01:40
153 :
151 :2010/08/08(日) 18:03:16
すみません、
>>151 の名前は残ってしまっていただけなので無視して下さい
154 :
152 :2010/08/08(日) 18:04:46
また間違った・・・ ×151 ○152
>>152 そこ見ました。
どれをダウンロードすればいいんですか?
時間的に足りるか心配です。
ここはそういうことを聞く場所じゃないから Yahoo知恵袋でやってろよ
>>155 多分、「Download ActivePerl 5.12.1 for Windows (x86)」って書いてあるボタン。
>>155 おめえ最高ノバカだなwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
やっぱりWindows使ってるやつってろくにインスコできねえしかすすぎwwwww
しかもそれで研究とかごみwwwwwwww
アホだろwwwwwwwwwwwwwwwwwwwwwww
本当ごみだなwwwww技術的な質問ならいいのに インストできいてるばかwwwww
インストもできない Windows使ってるばかはこれだからだめなんだよwwww
(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
Yahooの珍言袋で聞いてろよwwwwwwwwwwwwwwwwwwwwwwwwwwww(笑)(笑)(笑)
(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)
159 :
デフォルトの名無しさん :2010/08/08(日) 20:51:43
夏休みはやくおわらねーかな
160 :
デフォルトの名無しさん :2010/08/09(月) 12:44:22
Perl刀七人衆って誰ですか?教えてください
・宮川達彦 ・高木浩光 ・牧大輔 ・池?智洋 ・山口徹 ・大沢和宏 ・伊勢幸一
162 :
デフォルトの名無しさん :2010/08/09(月) 16:10:14
霧隠れの忍び刀七人衆ですね・・・・ ? じゃねえよwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
163 :
デフォルトの名無しさん :2010/08/09(月) 16:13:30
伝説の3忍とうたわれた人は誰ですか教えてください
164 :
デフォルトの名無しさん :2010/08/09(月) 16:19:24
暁みたいな人たちは誰ですか教えてください
そういうのはYahoo知恵袋あたりで訊け
166 :
デフォルトの名無しさん :2010/08/09(月) 19:27:12
質問したんですが 回答がきません教えてください
ファイルから1行だけ読むかっこいい関数無い?
168 :
デフォルトの名無しさん :2010/08/09(月) 20:29:54
外部コマンド実行したときの戻り値を取得する方法を教えて。 標準出力や標準エラー出力なんかどうでもいい。
perldoc -f system
171 :
デフォルトの名無しさん :2010/08/09(月) 20:50:44
>>167 $u=<FH>;だけでいいだろ
おまえばか?
>>168 禁術をおおしえてやろう火遁
$u=system("ls|true")?$?:$?;
print $u;
173 :
デフォルトの名無しさん :2010/08/09(月) 21:05:05
>>172 コマンドつかえよなああああああ
がりがりくん食ってて片手でうってるから思いつかねえんだよ
>>173 ところでついでに質問なんだけどさ、
<FH>;
だけで$_に入るんだとばっかり思ってたけど実際には
$_=<FH>;
って書かないと入らないんだな。知ってた?
175 :
デフォルトの名無しさん :2010/08/09(月) 21:22:48
知ってたけどあえていわなかったんだよ なめてんのか?
>>175 で本題なんだけど、なんで while(<FH) とかだと $_ に入るの?
仕様
Larryちゃんがそう決めたから
文法上なにがどういう省略されてるのかわからない これ結構 謎なんだけど <FH>だけでは$_に入らないのに while( $_=条件式 )みたいな隠れ代入があるわけ? でももしそうならwhile(1)の中は$_=1になっちゃうよね?
180 :
デフォルトの名無しさん :2010/08/09(月) 21:29:43
>>177-178 入力シンボルだけが while ループの条件文の中にある場合は (そしてこの場合にかぎり)、 値は変数"$_" に自動的に代入されます。
ほんと例外的な仕様だったんだなー。勉強になったわ。
182 :
デフォルトの名無しさん :2010/08/09(月) 21:41:51
僕のチームに入りたい人いますか?
そこらへんも詳しく書いてあるリャマはやっぱり良書だぬ
184 :
デフォルトの名無しさん :2010/08/09(月) 21:48:02
186 :
デフォルトの名無しさん :2010/08/09(月) 22:03:39
>>185 俺が持ってるのは第三版でpp.104-105に詳しく書いてある
版が違うか別の本の話をしてるのかもね
188 :
デフォルトの名無しさん :2010/08/09(月) 22:17:03
俺ってまともなレス返された事無いしな
普段の行いの問題
190 :
デフォルトの名無しさん :2010/08/09(月) 23:18:46
Perlでリンクドリストを使いたいときはどうしたらいいですか?
192 :
デフォルトの名無しさん :2010/08/09(月) 23:25:44
194 :
デフォルトの名無しさん :2010/08/09(月) 23:28:23
>>193 おおめえどこまで つれてくんだよ
つぎはライブドアでやれ
アメブロでやれ
グリーでやれとかなあ????
うん
196 :
デフォルトの名無しさん :2010/08/09(月) 23:50:05
うんwwwwwwwwwwwwww wwwwwwwwwwwwww wwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwww
ここが Grass のスレだっとは
198 :
デフォルトの名無しさん :2010/08/10(火) 04:08:30
perlのワンライナーをこれ以上短くできますかね。 UNIX版 perl -e'print"\"$_\","for 0..9,A..Z,a..z' WIN 版 perl -e"print\"'$_',\"for 0..9,A..Z,a..z" 望んでいる出力結果 "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", いわゆるGolf的なことがしたいのです。 シングルクオートでもダブルクオートでも構いません。ただしきちんとクオートが対応していることが条件とします。
引用符のエスケープやめて q や qq でクオートすればかすかに短くなるかな
>>171 phpのfile関数みたいなのがほしい
201 :
デフォルトの名無しさん :2010/08/10(火) 10:34:56
関数つくれよはげ
202 :
☆忍者Perl☆ ◆M5ZWRnXOj6 :2010/08/10(火) 11:45:28
var GET_eq = '_%%eq%%_'; var GET_amp = '_%%amp%%_'; これってどういういみ? PerlやってるやつでJavascriptやってる人いるだろ?なあ?教えてください eqとampって最初からあるやつだよな? %%なんで2個つけてるの?おしえて
後のほうでどんな意味があるか知らんけど、単なる代入でしょ。
>>199 ありがとうございます。
でも、微かに長くなりました
UNIX版
perl -e'print qq("$_",)for 0..9,A..Z,a..z'
perl -e'print"\"$_\","for 0..9,A..Z,a..z'
Win版
perl -e"print qq('$_',)for 0..9,A..Z,a..z"
perl -e"print\"'$_',\"for 0..9,A..Z,a..z"
引数の省略を上手く使えたら良いのですがなかなか上手くいかないですねぇ
あとprintが長すぎ。`echo `も上手くは使えないですねぇ
perl -e'print qq(").join(qq(","),0..9,A..Z,a..z).qq(",)'
perl -e'for(0..128){print"\"".chr."\","if chr=~/[a-zA-Z0-9]/}'
↑こんなのも書いてみました
205 :
☆忍者Perl☆ ◆M5ZWRnXOj6 :2010/08/10(火) 20:40:46
よくワンライナーでかくきあるね^^; めんどくさそうだし しょぼそうだし ファイルにかいたほうがいいしね^^;
206 :
perl ninja ◆M5ZWRnXOj6 :2010/08/11(水) 00:24:02
pspからも書き込めるんだな!!!!!!!!!!!!!!! !! ! ! ! !! ! ! ! ! ! !! ! ! !!! !!! !!!!!!!!! KENT-WEBマンせー
http://codepad.org/KFzgb4MH 数独を解くプログラムを作っているのですが2つ数字が入ったところで止まってしまいます
どうしたらよいかお教えください
q001.txtの中身はこれです↓
004001020
000300005
507060400
030009008
005020600
600700040
003050102
900004000
060100300
よろしくお願いします
209 :
☆忍者Perl☆ ◆M5ZWRnXOj6 :2010/08/11(水) 22:02:28
あいうえお かきくけこ わおん まで表示するのって my @a=unpack("C*","あ"); $a[2]+=2; とかやって繰り返すしかないの? 簡単な方法あったらおしえて
210 :
デフォルトの名無しさん :2010/08/12(木) 01:26:05
Image::ExifToolの使い方がイマイチわかりません Exifを全て削除したいのですが、どうすればいいのですか?
212 :
☆忍者Perl☆ ◆M5ZWRnXOj6 :2010/08/13(金) 15:52:41
VVSは、日本のクラッカー。数学者である事が知られるが、所属組織等は不明。数種のコンピュータ言語を使いこなすが主にPerlを得意とする。
彼の作成した「ちりりduke」は現在、掲示板荒らし系スクリプトの中で最も高性能であるとされている。
VVSってやつここにいるの?誰だ?Perlやってるしwwww
http://ja.wikipedia.org/wiki/VVS きになる忍刀とかのなかにはいないよね?
>>212 そろそろうざいわ
言っとくけど俺をあまりナメないほうがいいよ
VIPでコテハンやってるしクソコテ潰すくらいの影響力は持ってるから
くだらないことで刺激して後悔しないようにね
214 :
デフォルトの名無しさん :2010/08/14(土) 08:16:22
キムチがムキになってるヽ(・∀・。)ノ☆
DBICのサンプルで「AutoCommit => q{1}」という書き方を見たんですが、これってどうして「AutoCommit => '1'」と書かないんでしょうか? 同じ意味になると思ってるんですが、間違っていますか?
216 :
▲☆◎Perl忍者◎☆▼ ◆M5ZWRnXOj6 :2010/08/15(日) 14:43:24
>>215 文字列リテラルとして意味は同じなので、あとは書いた奴に聞けとしか。
'...'をさらに文字列化しようとするとエスケープとかめんどくさいけど
q{..}ならバランス見てくれるので楽という人はいた。
俺ならはじめから単に 1 と書くけどな。
219 :
デフォルトの名無しさん :2010/08/17(火) 15:45:55
#!/opt/local/bin/perl use strict; my @file=<*.jpg>; my $i=0; my @list; foreach (@file) { my $time=(stat "$_")[9]; my ($sec,$min,$hour,$day,$mon,$year)=localtime($time); $year+=1900; $mon++; $list[$i]=join ":",($year,$mon,$day,$hour,$min,$sec); $i++; } map {print "$_\n"} sort @list; 2010:8:16:21:32:24 2010:8:16:22:9:22 2010:8:8:14:53:47 2010:8:9:12:23:59 これを日付の昇順でやりたいんですが でません 教えてください
join のとこを sprintf に置き換え
unix timeのまま配列かなんかに保存してソートしたほうが 絶対楽だと思うぞ。表示用の文字列を作るのは最後にしろ。
222 :
デフォルトの名無しさん :2010/08/17(火) 15:58:06
はい sprintfためしてみます これってアップローダでファイルをcopy()して新しい順にするときは ↑の方法で良いんですか? perlでアップローダつくってて そのとき10件ずつ画像表示させたいんです これで日順にして もしファイルが14個とかだったら 10個表示して次のページとかやりたいんですが なんかモジュール使うんでしょうか? 引数で xxx.cgi?next=1 これで10県表示で とかやって残りの4件を表示ささせるやりかたは next=2ってやるんですか? ファイルが14個あって (最大10個表示)そして最初のページに10個表示させて あまりの4個は次のページみたいに表示させたいんですが お教えください
223 :
デフォルトの名無しさん :2010/08/17(火) 15:59:43
unix timeもしらべてみますいい方法おしえてください
unix timeはお前が my $time=(stat "$_")[9]; で$timeに入れてる数のことだよ。1970年1月1日0時0分0秒(UTC)からの 秒数で表した日時で、1つの数だから大小比較や足したり引いたりが楽。 つーかわかっててlocaltimeで変換してたんじゃないんかい。
全データ件数÷1ページに表示させたい件数=ページ数 上記の計算結果が割り切れ無ければ、ページ数を1足す (この余りが幾つかは気にしなくていい) 全データ件数−(最初に割り出したページ数×1ページに表示させたい件数)=最後のページの件数 全ページ数の範囲外のページ指定は1ページ目にしてしまう
pagerも作れないようならプログラマはあきらめろ
Data::Pager オススメ。たいした計算じゃないんだけど めんどくさいのでこれ使うと楽だよ。
228 :
デフォルトの名無しさん :2010/08/17(火) 17:26:49
>>224 ネットではお前 おいクソで良いけど リアルでは君かさんずけしろクソ^-^
あああそうか そういういみね 11223434333みたいな数値ね 文字だけだったからみのが
>>225 やっぱ割ればいいのかあ
そういう公式どっかにのってるの??
きみあたまいいね〜〜〜〜
229 :
デフォルトの名無しさん :2010/08/17(火) 17:33:15
>>226 逆鱗にふれたようだねえきみは
クソガリそうだけど 殴りアイする?
ぼこぼこになるよ君 プログラマに鳴りたくてもなれない奴いんだからな
てめえは死んでほしいよ
プログラミングは発想だよ
さすがに小学校の算数の知識は必要だと思うぞ。
>やっぱ割ればいいのかあ 小学校からやり直した方がいいんじゃね?
ActivePerl-5.10.1(WinXP)のWin32::OLEでhotmailにログインすると、 Pass長16文字くらいまでしか対応できないのでしょうか? (20字以上ログイン失敗、17〜19字は未確認) どこか参考になるドキュメントとかあれば教えてください。
LWP を使いなよ
235 :
デフォルトの名無しさん :2010/08/17(火) 22:15:00
Data::Pager 英語ばりばり クソイですねえしらべますかあ
236 :
デフォルトの名無しさん :2010/08/17(火) 22:26:11
ページング処理むずすぎvvvvvvvvvvvvvvvvvvvvvvvvvvvv
237 :
233 :2010/08/18(水) 00:56:41
>>234 すみません、情報不足でした。
IEでログインして、そのままhotmail(WindowsLive)を使いたいのです。
「ブラウザとして振舞う」事は出来ても、そのセッションをIE/Fxで使ったりできませんよね?
・・・と確認してたらWin32::IEAutomationなるものを見つけましたので、調べて見ます。
(ぶっちゃけランダムな英数記号16字のパスワードで何も問題ないのですが・・・)
239 :
デフォルトの名無しさん :2010/08/18(水) 12:46:40
[% xxxx %]ってなんなの? 教えて [% %]これよくみかけるど
240 :
デフォルトの名無しさん :2010/08/18(水) 13:00:13
誰か Data::Page Data::Pagerのサンプルみせて 10県表示みたいな
つSYNOPSIS
242 :
デフォルトの名無しさん :2010/08/18(水) 13:20:06
ファイルの数でやりたいんですが ファイルが14個あったら ファイルをリストに保存するんですよね? それでunix timeで並び替えて @a=(ファイル14個); my $page = Data::Page->new($total_entries, $entries_per_page, $current_page); my $page = Data::Page->new($#a+1, 10); どうやって使っていいか分からない 10個になるまで 表示させて 次のページ 前のページってやるんだけど 10こ表示したとかカウントはどうするの? <img src="xxxx.jpg"><img src="xxxx.jpg"><img src="xxxx.jpg">とかを10個ちゃんと認識してくれてるの? 意味が分からないんですが教えてください
例えば全要素数が14個ページあたり10個の1ページ目 といったら何番から何番の要素を出せばいいかって計算 するだけで、実際にその数字にしたがって物を揃えたり 表示したりするのは使う人の仕事だよ。
244 :
デフォルトの名無しさん :2010/08/18(水) 14:40:00
<a hrefでnextページのやつつかえばいいんだろ^^ xxx.cgi?page=$xx->next_pageみたいに
246 :
デフォルトの名無しさん :2010/08/18(水) 16:08:55
#!/opt/local/bin/perl use strict; use CGI; use Data::Page; my $page=Data::Page->new(20,5); my $next=$page->next_page; my $back=$page->previous_page; print "Content-type: text/html\n\n"; print <<"HTML" <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Page</title> </head> <body> <a href="./test.cgi?page=$next">次のページ</a> <br> <a href="./test.cgi?page=$back">前のページ</a> </body> </html HTML これ次のページやっても ずっと 2のまま 20/4で5ページまで表示されるはずなのに 何でか教えてください
247 :
デフォルトの名無しさん :2010/08/18(水) 16:11:21
次のページってやって リンク先みると ずっと2のままです 3、4、5ってなってほしいんですが 次のページのリンクのやつが
248 :
デフォルトの名無しさん :2010/08/18(水) 16:26:20
HTML Template +1ってなだったけ? +1の意味知ってる人居ますか? +1って何だったか教えてください
>>246 全項目数とページあたりの項目数しか指定してないだろ。
現在のページが何ページか指定しなかったらデフォルトの
1ページ目になるのでずっとそのままだぞ。
$page->current_page(現在のページ);
で設定しろな。
250 :
デフォルトの名無しさん :2010/08/18(水) 17:18:14
>>249 うひぃひょ〜〜〜〜〜〜〜〜できたよ〜〜
my $cgi=CGI->new();
my $current=$cgi->param("page");
my $page=Data::Page->new(20,5,$current);
きみあたまいいな〜
251 :
デフォルトの名無しさん :2010/08/18(水) 19:32:55
perl長年使ってる人はいまでも perl最高!!とか思ってたりするんですか?教えてください
Perl大嫌い! って人も同じくらい居そうだがw
254 :
デフォルトの名無しさん :2010/08/18(水) 20:58:28
Perlのすごいところってやっぱり 正規表現やテキストファイルの扱いやすさ?
などネットワーク系?CPANのモジュール?
これしか知らないけどなにかある?
>>253 そういうひともいるみたいですねえ〜^ ー^
255 :
デフォルトの名無しさん :2010/08/18(水) 20:59:25
Perl通っぽくいうにはどんなのあるかな? 上のだとありがちだから
モジュールのたぐいは一切使えない環境ですが それでもperlはよく使います。
バッチ処理代わりに使ってるなあ。
perl -i -pe 's/OLD/NEW/g'は標準コマンドレベル。
259 :
デフォルトの名無しさん :2010/08/20(金) 10:51:09
@file=<f/*.jpg f/*.png f/*.gif f/*.bmp> これって略したりできませんか? 正規表現みたいに f/*.jpe?g||*.png みたいにやりたいんですが
>>259 出来合いのは知らないけど
*CORE::GLOBAL::glob = \&適当な関数
でオーバーライドできるから好きなの書けばいいんじゃないか?
261 :
デフォルトの名無しさん :2010/08/20(金) 11:10:53
262 :
デフォルトの名無しさん :2010/08/20(金) 11:40:19
@file=<f/*.{jpg,png,gif,bmp,JPG,PNG,GIF,BMP}>; こっちのほうがはやいかな^^; 考えるより
@file=grep/\.(jpe?g|png|gif|bmp)$/i,<f/*>;
264 :
デフォルトの名無しさん :2010/08/20(金) 12:14:37
それかんがえたけどね 拡張子がそれだとうまくとれないんだよね 他の名前のファイルはいるからね グロブで正規表現使えたら最高だけどね^
glob関数はUNIXシェルのファイルグロブ互換だから、
それ以上のことがやりたきゃ他の方法と併用するのが筋だと思う
というか
>>263 でだめな理由がわからん
267 :
デフォルトの名無しさん :2010/08/20(金) 17:15:22
>>265 頭の良い人はそういうところまで考えるんですよ
268 :
デフォルトの名無しさん :2010/08/20(金) 22:55:12
>>268 __DATA__から先の部分はDATAというファイルハンドルで読み込むことができる。
perlとして決まってるのはここまでで、読んだ後どう使われるかはプログラム次第。
270 :
デフォルトの名無しさん :2010/08/20(金) 23:43:09
@@と%%は?
>>270 たぶんそれを目印にしてなんか加工するプログラムなんだろうけど、それは
プログラムを読んで理解しろってことだ。perlとしてはただの文字列。
my @arr = qw(foo bar); print map { s/^(.+)$/「$1」\n/g, $_ } @arr; 実行結果 1「foo」 1「bar」 この"1"はどこから出てきて、どうすれば消えるのでしょうか?
print map { s/^(.+)$/「$1」\n/g, $_ } @arr; ↑ foreachで書き直すとこうなってる foreach (@arr){ print (s/^(.+)$/「$1」\n/g, $_); } printに(s/^(.+)$/「$1」\n/g, $_)のリストが渡されてる だから1はs/^(.+)$/「$1」\n/gの評価結果 1を消したいなら、 print map { s/^(.+)$/「$1」\n/g, $_ } @arr; ではなく print map { s/^(.+)$/「$1」\n/g; $_ } @arr; にすればいい コンマでなくセミコロンで区切る
>>274 1はs///gで置き換えられた要素の数。
s///gの後がセミコロンじゃなくてコンマになってるせいで
mapの返り値が (1, "「foo」\n", 1, "「bar」\n") になってる。
>>274 s///の戻り値。(1回置換したから1)
方法はいくつかあるけど、簡単なのは「,」じゃなくて「;」にしろ。
print map { s/^(.+)$/「$1」¥n/g; $_ } @arr;
おまえら張り切りすぎww
281 :
忍者Perl ◆M5ZWRnXOj6 :2010/08/21(土) 11:55:34
グリー社員の説明が一番わかりやすいっす!!シュッシュ
こういうケースでありがちなトンデモ解説が混じってなくてつまんねえお
じゃあトンデモ解説をねつ造しようぜ!
284 :
274 :2010/08/21(土) 12:06:32
>>275-277 ありがとうwww
いや、すみません、思わず草生やしたくなりました。
久しぶりにmap使ったので「;」で区切ることを完全に忘れてました。
>>279 >>275 はとても丁寧でした。最初真偽が返ってるのかと思ったけど、評価数なのですね。
>>276 はとても簡潔で、原因もずばり突いてくれてるので分かりやすかったです。
>>277 もとても簡潔で、初心者には一番理解しやすいかもしれませんね。
285 :
グリー社員 ◆M5ZWRnXOj6 :2010/08/21(土) 12:08:19
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!! wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!! wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!! シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!! wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!! wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!! シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
>>283 Larryがコミケでプリキュア同人誌の売り子やってた
emacsスレを荒らしてるやからをこっちで引き取ってもらえないだろうか
真性のようなので黙してNGすべし
つーか彼は8/10にこのスレで発生したからもうすでに見えなくなってた
290 :
忍者Perl ◆M5ZWRnXOj6 :2010/08/21(土) 23:26:48
$a=10; \$aって$aのリファレンスですが $a=[ {a=>10,b=>20},{u=>30,i=>40}]; これってなんていえばいいんですか? 無名ハッシュの無名配列っていうんですか? 読み方が分からないです教えてください。
略して、ムハムハって呼べばいいんじゃね?
プログラムを一気に起動させたいんですが シェルで perl xx.plっていうのを新規ウインドウを立ち上げまくってやるのが大変です っでwhileで繰り返しやってsystem(perl xx.pl)ってやっても1回しか起動されず どうやれば一気に起動して実行することができるのでしょうか? 教えてください
バッチファイルかシェルスクリプト
perl のwebフレームワークでおすすめなのは何がありますか?
>>292 system("$^X xx.pl &")
>>269 ヒアドキュメントってやつ?
ヒアじゃない感じだけど
openするとき、どうして open my $FH "< hoge"; はOKなのに open my FH "< hoge"; がNGなのはなぜ?
これは酷い質問w
299 :
Perl忍者 ◆M5ZWRnXOj6 :2010/08/24(火) 13:33:12
myとかは変数につけるやつだから そんなのもわからないの? 知恵おくれ(笑)
ファイルハンドルと変数について勉強し直せば分かるよ
ファイルハンドラを変数に入れるメリットがよくわからない。 というか、どうしてファイルハンドラをレキシカルスコープで 持てるようになってないの? ラリーさん耄碌してるの?
じゃあコレで open local(*FH), "<", "/etc/passwd";
>>303 ありがとう。 さすがラリーさん、しっかりしてるわ。
こんなのグローブ型で無理やりスコープつけただけだろ
ラリーさんdisってんのか?
localはレキシカルスコープじゃないんだけどな
308 :
Perl忍者 ◆M5ZWRnXOj6 :2010/08/25(水) 08:59:26
strictバカがわめいてますね
何を求めてるのか分からないから、答えようがない。
310 :
Perl忍者 ◆M5ZWRnXOj6 :2010/08/25(水) 09:09:40
バカの特徴
自分が答えられないモノがあると
「何がしたいのかわからない っで? 答え用が無い 何を求めてるのか分からない」
まじ簡単なものは クソ詳しく熱弁するけど 難しい質問には
>>309 みたいにクソみたいな答えかたしかできない(苦笑)
>>310 分かるように説明してくれたら回答するよ。
お前も回答してやれ。
>>309 ていうか、ほんとうにわからないの?馬鹿なのは君じゃないのか?
perlにレキシカルスコープな物は変数しかない。 localはダイナミックスコープだし、型グロブはグローバルスコープ。 だから、レキシカル変数にファイルハンドルを渡せば解決。 という理解なんだが、求めるものは違うわけだろ?
314 :
Perl忍者 ◆M5ZWRnXOj6 :2010/08/25(水) 11:23:24
俺が質問したんじゃないんだけどね(笑) 勘違い妄想 幻術にかかってるwwwwwwwwwwwwwww いますぐ俺のレスみて 「解!!!!!!!!!!!」って叫んだ方が良いよ(苦笑)
315 :
Perl忍者 ◆M5ZWRnXOj6 :2010/08/25(水) 11:28:20
珍言(笑)
309 :デフォルトの名無しさん:2010/08/25(水) 09:03:25
何を求めてるのか分からないから、答えようがない。
312 :デフォルトの名無しさん:2010/08/25(水) 09:51:00
>>309 ていうか、ほんとうにわからないの?馬鹿なのは君じゃないのか?
>>313 >レキシカル変数にファイルハンドルを渡せば解決。
内部でダブらないようにユニークなファイルハンドルを
作ってるって解釈でいいの?
317 :
Perl忍者 ◆M5ZWRnXOj6 :2010/08/25(水) 14:23:11
誰かポケモンwifi対戦しましょう ともだちコード 2149 7693 9978 【対戦ルール 6on6 シングル 【対戦レベル】50 【使用ロム】ハートゴールド 【ボイスチャット】× 募集します。 対戦したいやつはコード教えて下さい
318 :
デフォルトの名無しさん :2010/08/27(金) 21:28:48
引数の文字数が一定であれば、文字列を変数にセットし、違えば終わらせたいのですが、 my $isbn13 = length( ARGV[0]) eq 13 ? ARGV[0] : die( "13keta"); これでは動きません。 どのようにかけばいいのでしょうか?
$ARGV
my $isbn13 = length($ARGV[0]) eq 13 ? $ARGV[0] : undef; if(!defined($isbn13)){ 〜エラー処理〜 } 丁寧にやるならこんな感じかな?
すみませんでした・・。 以後、誤字には気をつけます・・
my $isbn13 = $ARGV[0]; length $isbn13 == 13 or die "13桁で入力しろってんだよボケカス"; これでいいだろ
my $isbn13 = shift; でいいような気もしなくは無い
324 :
nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 08:02:43
+ . * + . / ーーーーーーーーーーーーーーー\ / _,,,... ヽ;: /""ヽ ヽ . + | ;'" "\ l /;:;;:::-'''"ヽ, i * . | /::::::::-'''''"~ ヽ, .|, . | |;:" ヽ ! . + | / | | * | 人 ,,,,;;::''''' i, | . | '; ,,,,;;::::::::::;;; .: ,,,,,, ヽ ヽ | | " ,,,,,,,,, .:: ;''“”` | | * 「フッ use strict 使わないとライブドアとか入れない。」 + | |: ;::''“”“~` ::::. |. i . | i:: ::::: i | ,;| + | ヽ. ::::::: , _〉 .| ,| . + | ノ:: | |, . | 人::::.. ___,,,,,,,,...:;-' | | + .. * |;:'" `、ヽ '"''=.:;;:;ノ゛ / | + | ヽ:: \ :::::: ./ | . ::;|::. `ヽ、_ /'|ヽ./" + ,/. ::::::::::::;;:::人:. `'''----―'' .|: ヽ * /;:;:;:;;:;;;;;;;;;;;;/ `ー、 ;-'" \ー-、 . ,.-'" \ \ ;:-''" .| `-:;;,,
朝鮮人の部下に成りたいとは思わんね
326 :
nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 10:43:37
+ . * + . / _,,,... ヽ;: /""ヽ ヽ . + | ;'" "\ l /;:;;:::-'''"ヽ, i * . | /::::::::-'''''"~ ヽ, .|, . | |;:" ヽ ! . + | / | | * | 人 ,,,,;;::''''' i, | . | '; ,,,,;;::::::::::;;; .: ,,,,,, ヽ ヽ | | " ,,,,,,,,, .:: ;''“”` | | * 「フッ use strict 使わないとライブドアとか入れない。」 + | |: ;::''“”“~` ::::. |. i . | i:: ::::: i | ,;| + | ヽ. ::::::: , _〉 .| ,| . + | ノ:: | |, . | 人::::.. ___,,,,,,,,...:;-' | | + .. * |;:'" `、ヽ '"''=.:;;:;ノ゛ / | + | ヽ:: \ :::::: ./ | . ::;|::. `ヽ、_ /'|ヽ./" + ,/. ::::::::::::;;:::人:. `'''----―'' .|: ヽ * /;:;:;:;;:;;;;;;;;;;;;/ `ー、 ;-'" \ー-、 . ,.-'" \ \ ;:-''" .| `-:;;,,
327 :
nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 10:45:52
>>325 君はミスドでアルバイトしてなさい!!!!!!
328 :
nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 10:55:02
Perlの事なら何でも聞きたまえ
329 :
nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 11:00:48
ミスターイケベ(上司)に毎日コードが雑など怒鳴られてます CTOの座を狙っています この前はホリエと一緒に中2病発症して バイクのって総合格闘技見てきました 30代デビューです 口癖は 「〜とか」 です
330 :
nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 11:12:46
ネットなのにマジレスしちゃうクセがあります
331 :
nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 11:17:43
コネを作りすぎて むやみに変な発言いえません マジレスしちゃいます
332 :
nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 12:56:20
webでよく使われるspacer.gifをperlで判断することは可能でしょうか? 画像の処理をしていてspacer.gifなファイルは除外したいので。
334 :
Perl忍者 ◆M5ZWRnXOj6 :2010/08/28(土) 21:47:03
ファイル内容が少なすぎるとかでチェックすれば 馬鹿だろ?脳味噌たりてる? ファイルのサイズとかとかとかとかとかとかとかとかとかとかとかとかとかとか
80byte 未満の GIF ファイルを開いてみて 1x1 のサイズ は処理の対象外 何をどう迷うのか分からない
>>333 ということで、問題はperlではなくgifのフォーマットにシフトした。
gifのスレに行くといいよ。
>>336 ほったらかしかよww
いくらなんでも、画像の種類を判定するようなモジュールはCPANにあるだろw
そんな機械的な作業よか難しいのは、文脈的にみてその画像がスペーサーかどうか判定することじゃね?
ひねくれた人間はjpgやpngでスペーサーつくるかも知れないし。
画像の種類と名まえと大きさとサイズだけ見てスペーサーと判定できりゃいいけどな
338 :
Perl忍者 ◆M5ZWRnXOj6 :2010/08/29(日) 12:21:16
image::infoとかコマンドつかえばいいじゃん
>>337 >にみてその画像がスペーサーかどうか判定
その判定基準はすでに提示されているからいいんじゃね?
判定をもれる件についてはあとでも対処すればいいわけだし
そこは本質では無いと思う
エロ画像の収集なんだろうから、 10x10ピクセル以下の画像を捨てれば済む話。
341 :
ホリエ ◆M5ZWRnXOj6 :2010/08/29(日) 21:29:03
〜∞ 彡川川川三三三ミ〜 プーン 川|川\ /|〜 ‖|‖ ・ ・|〜 川川‖ 3 ヽ〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川 ∴)〆(∴)〜 < Perl難しくて挫折したんだよね 川川 〜 /〜 | 宮川君にまかせちゃったんだ ブヒッ! 川川‖ 〜 /‖〜 \______________ 川川川川 (⌒)川‖〜 ヴィシッ! //::::::::|-、 ,-/::::::ノ ~.レ-r┐ / /:::::::::::| /:::::ノ__ | .| ト、 | /:::::::::::::::| 〈 ̄ `-Lλ_レ′
perl ベスト プラクティスの280、281ページでわからないことがあります。 以下のコードに対する注釈で 「この正規表現は、monkeyとマッチするが、その場合にマッチするはずの変則的な複数形はmoneyである」 となっている理由がわかりません。 どこが原因で、moneyがマッチしてしまうのでしょうか? #変則的な複数形のテーブル my %irregular_plural_of = ( 'child' => 'children', 'brother' => 'brethren', 'money' => 'monies', 'mongoose' => 'mongooses', 'ox' => 'oxen', 'cow' => 'kine', 'soliloquy' => 'solioquies', 'prima donna' => 'prime donne', 'octopus' => 'octopodes', 'tooth' => 'teeth', 'toothfish' => 'toothfish', ); 次に続きます
343 :
342 :2010/08/30(月) 00:42:24
#変則的な複数形のパターンマッチ my $has_irregular_plural = qr{ child | brother | mongoose | ox | cow | monkey | soliloquy | prima donnna | octopus | tooth(?:fish)? }xms; #複数形の組み立て while (my $word = <>) { chomp $word; if ($word =~ m/\A ($has_irregular_plural) \z/xms) { print $iregular_plural_of{$word}, "\n"; } else{ print form_regular_plural_of{$word}, "\n"; } }
日本語の訳が変なだけじゃねーの(英文読んでないけど)。 「マッチパターンとテーブルを別々に用意したら(コピペしたら)、 タイポが紛れ込むから止めときな」 って例でmoney(monkey=typo)を使ってるだけ。 当たり前だがmoneyは、その例での m{\A ($has_irregular_plural) \z}xms にはマッチしない。
>>342 >「この正規表現は、monkeyとマッチするが、その場合にマッチするはずの変則的な複数形はmoneyである」
これは「このコードを書いた人間がマッチすることを期待しているのはmoneyであるはずだが、実際にはミスタイプによりmonkeyがマッチしてしまう」ってことじゃないの?
同じ単語をハッシュを作るときと正規表現パターンを作る時とで2回ずつ書くのは無駄だし、
たとえばmoneyと書くべきところを片方だけmonkeyと書いてしまうような間違いをする確率を増やしてしまうので、こういう書き方はやめましょう、って話だと思うんだが。
コピペじゃねえ。各自別々にタイプしたら、だな。
なるほど、納得しました。 ありがとうございました。
1x1 かどうかの判断は Image::Size でできる。
349 :
デフォルトの名無しさん :2010/08/30(月) 17:16:38
PHPで作成されたメールフォームでなんら問題なく使用しています。(mb_send_mail) 今度、Perlでのメールフォームを作成してみたのですが、メールが送信できません。 sendmail のパスは /usr/lib/sendmail で間違ってはいないのですが、 PHPのmail関数(mb_send_mail)と、同じ処理をしたのです。 何かチェックするところはありますか? PHPのmail関数って便利ですが..
351 :
349 :2010/08/30(月) 17:23:28
??
>>349 どこでどんなエラーが出てるかチェックするといいよ。
この件に限らず、エラーチェックは必ずする癖をつけるといい。
353 :
349 :2010/08/30(月) 18:04:11
/usr/lib/sendmail は、確かにあるのですが、 usr/sbin/sendmail の方にもありましたので、そちらにしましたら動作しました。 アクセス権の問題のようです。 お騒がせしました ペコm(_ _;m)三(m;_ _)mペコ
354 :
デフォルトの名無しさん :2010/08/31(火) 16:37:31
Perlで、すでにprintした文字列を消すにはどうしたらいいですか?
改行する前にその行を消したいなら ¥r 出力した画面全体を消したいなら・・・system('cls') とかw
Curses.pm
358 :
Perl忍者 ◆M5ZWRnXOj6 :2010/08/31(火) 17:47:45
バックスペースとかいみわかんないんだけどwwwwwwwww
白痴は黙ってろよ
360 :
354 :2010/08/31(火) 17:57:07
>>355-357 `clear`でうまくいきました
ありがとうございます。
ところで改行は\bでは消えないんでしょうか・・・?
361 :
Perl忍者 ◆M5ZWRnXOj6 :2010/08/31(火) 18:04:35
>>360 なんの改行さしてんの? 意味分からないよw
だったら改行いれなければいいじゃんw
$tmp = 0; for($i=0;$i<=10;$i++){ printf("%g %d\n", $tmp, $tmp*10); $tmp+=0.1; } これを実行すると 0 0 0.1 1 0.2 2 0.3 3 0.4 4 0.5 5 0.6 6 0.7 7 0.8 7 0.9 9 1 9 となってしまうのですが、なぜ0.8の10倍が7になってしまうのでしょうか?
環境はThis is perl, v5.10.1 built for MSWin32-x64-multi-threadです
$" = "|"; my @pattern = ("color", "red"); my $str1 = "background color red"; my $str2 = "color hoge"; if ($str =~ /@pattern/){ print "$str\n"; } $str2 だけに、マッチさせたいんだけど、 patternの前方一致をマッチ my @pattern = ("^color", "^red"); こうしたり、 /^@pattern/ こしたけど駄目だった。 どうすりゃいいの?
366 :
デフォルトの名無しさん :2010/09/01(水) 18:29:23
ん、あげ。
foreach my $tmp_pattern (@pattern){ if($str2 =~ /^$tmp_pattern/){ 〜処理〜 last; # ← 処理を続けたいならコメントアウト } } grep とかで書き直せると思うけど、今は無理せず分かりやすく書くことを心がけたほうがいいと思う。
$str =~ /join("|",@pattern)/e
sub is_prefix_match { $_[0] =~ /^\Q$_\E/ && return 1 for @_[1..$#_]; 0 } for my $str ($str1, $str2) { if (is_prefix_match($str, @pattern)) { print "$str\n";
370 :
365 :2010/09/01(水) 21:09:24
みなさんありがとう御座います。
>>369 こんなのを、さらっと書ける人になりたい。
\Qなんて使ったことないし・・・。
動作は思いどおりなんだけど、自分で読めないんで、
制御に追加があると困るので、勉強して理解出来てからにします。
>>368 エラーでした。
>>367 そうですね。
感覚的に「この処理って正規表現だと簡潔にかけるんじゃねーの」
みたいな感じだったので・・・。ご指摘の様に自分にとって適当かなと
思いました。
条件次第ではスマートマッチで済む話だけど、あまりお勧めはしない。 my @pattern = (qr/^foo/, qr/bar/, qr/baz\z/); my @str = qw(quuxfoo bquaurx qubarux bazquux quuxbaz); $_ ~~ @pattern && print "$_\n" for @str;
Perlらしくなら。 foreach my $str ($str1, $str2){ grep !index($str, $_), @pattern and print "$str\n"; } 自分で使うならこっち。 foreach my $str ($str1, $str2){ foreach my $ptn (@pattern){ index($str, $ptn) and next; print "$str\n"; last; } }
373 :
デフォルトの名無しさん :2010/09/02(木) 14:21:31
Perlでの多次元配列とは、配列のリファレンスの配列なのでしょうか? Perlでの多次元連想配列とはハッシュのリファレンスのハッシュなのでしょうか? Perlでのオブジェクトとはblessで名前が付けられたハッシュのリファレンスなのでしょうか?
Yes Yes ハッシュ以外のリファレンスでもよい
まずCantなんとかをちゃんとコピペするところからだな。
はじめのエラーは Can't locate IO/All/LWP.pm in @INC (@INC contains: 長いので省略) at tomoya/yuyu.pl line 6. BEGIN failed--compilation aborted at tomoya/yuyu.pl line 6. CPANでインストールしたら動きました。 ですが今度は Unmatched right curly bracket at tomoya/yuyu.pl line 383, at end of line syntax error at tomoya/yuyu.pl line 383, near "}" Execution of tomoya/yuyu.pl aborted due to compilation errors. と出てきてしまいました
>>377 よくわからんけど俺がそこから拾ってきてperl -wcした限りでは
構文エラーは出なかったので、コピペをミスったんじゃねーの?
LWPが入ってなかったり?
ImageMagicが生成する/tmp/magick-XXxxxって巨大なファイルは何者? ImageMagicは後片付けしてくれないの?
ワーク用とかじゃなくて? 異常終了してたり、終了処理をちゃんとしてなかったり
>>346 ありがとうございます。二進数の小数では0.8をきっぱりと書くことができないのが原因なんですね。
printf("%d", 0.8*10);で7が出力されるのはどうも納得できないというかなんとかならなかったのかと思いますが。。
0.1を、プログラム上では整数の1として扱えば良いと思うよ。 小数として必要なときにだけ、10で割る。
浮動小数点が弱い頃のゲーム機で使われてた手法やね 計算前に値を1000倍 色々計算 結果を割る1000 これで欲しい値が もちろんそんな単純じゃないとは思うけどw
g単価: 123.456円 使用量/個: 7.89g/個 個数: 1234個 月別原価係数: 1.001 (中略) 原価: 銭単位まで出す 原価 = 123.456 * 7.89 * 1234 * 1.001 * 中略 / 100 大昔にこんなのを全部整数化して最後にまとめて割る方式で組んでたら 整数乗算時点でオーバーフローした思い出
386 :
デフォルトの名無しさん :2010/09/04(土) 06:44:33
とあるプログラム(perl)に、下記のような記述がありました。 print "<a href=\"$link?mode=all&number=$FORM{'number'}\">表示</a>"; $FORM{'number'}の内容をそのまま表示してますが、問題ないものなのでしょうか?
中身をちゃんと確認して、不正な値のチェックをしてから使ってるなら大丈夫 ただ、その一文だけじゃなにも分からないよw
HTML::Elementで、タグをエスケープしたテキストコンテンツを入れようと、 $h->push_content("&lt;"); #実際は半角です。 とすると、内部では「&amp;lt;」ってエスケープ処理されてしまうのですが、 エスケープ処理させないようには出来ないでしょうか?
期待通りの動きのように見えるけど・・? もし "<" じゃなく、"<" を入れたいのなら、 $h->push_content("<"); とすればいいのでは? push_content()がそういう仕様なんだから・・・
Perlもうダメだろ・・・ プログラミング教えてくれっていう甥にはsed,awkやらせてる
それをここで言う必要はあるのかな
CSVから一度<IN>に読み込み、それを$data=<IN>にしてchompして行ごとの抽出をしてるのですが この$dataに格納されている行ごとのデータをランダムにするにはどうしたら良いですか?
>>392 sedの正規表現はうんこなので、sed使うときはむしろperl使ってるわ
>>394 1.CSVを配列に入れる
2.配列の添え字でランダム性を確保する
slurpもあるよ!
>>396 直接スカラー変数に入れて改行コード別に区切るよりも、配列変数として扱ったほうが良いって事ですね?
ちょっと試してみます。
テストしてないけど open(IN, '<', 'test.txt'); my $pos = int(rand(-s IN)); seek(IN, $pos, 0); my $dataline; while (defined ($char = getc(IN)){ seek(IN, -1, 1); # getc で進んだファイル位置を戻す if(tell(IN) = 0 || $char =~ /\x0D|\x0A/){ $dataline = <IN>; last; } seek(IN, -1, 1); # ファイル位置をマイナス方向へ進ませる } close(IN); 1行が数千文字に達する場合はものすごく遅くなるかも。
>>397 そんなに行ないならこんなんどう?
@data = <IN>;
chomp @data;
my $i = @data;
while($i--){
my $j = int(rand($i + 1));
@data[$i, $j] = @data[$j, $i];
}
WWW::Mechanizeを使ってブラウジングしてます。 一度終了しても次にブラウジングするときは前回の続きから行いたいです。 ブラウジングを終了するときにWWW::Mechanizeの情報を保存し、 ブラウジングを開始するときにWWW::Mechanizeの情報を読み込むことはできないでしょうか?
->content で得た内容をファイルに保存して、 次回の閲覧時はそのファイルを表示するところから始めればいい Mech の機能にはなく、自分で実装する必要あり。 ただそこまで難しくは無いかと思う。
>>398-399 ありがとうございます。
両方を参考にしてみましたが、
>>399 の方法が一番簡単っぽかったです。
あくまで配列としてロードしたあと、乱数を発生させて成功しました。
1行はせいぜい半角500文字程度なので、速度もとりあえず問題なさそうです。
SSIで実際動かしてるのですが、今度は複数のSSIがあるページで
今回作った物をhtml上、一番最後に置かないと実行出来ないというトラブルに遭遇しました。
こちらはスレ違いなので、試行錯誤して調整してみます…。
アドレスそのものからリファレンスを得ることはできたりしませんか?しないだろうなー $hash_addr = sprintf {access => 'success'}; # この $hash_addr から success という文字列を得ることができるでしょうか
そういうことができるかどーかは知らんけど、 これだと無名ハッシュリファレンスのREFCNTが0になって即消滅しちゃうんじゃないの?
>>404 ガベージコレクタが動くタイミングはまちまちってどっかで聞いたから即は消えないと思う
あと、リファレンスカウンタを増やすことはできるはずだからその問題は解決可能かと
別にこれが出来たからどうこうってわけじゃないけど、
なんでもできるPerlならこんなこともできるのかなーと気になっただけでした
>>401 実装してみました。
しかしワンタイムトークンを使っている場合に問題がありました。
具体的にはヤフオクの取引ナビです。
メッセージのURIにcrumb=xxxxxというワンタイムトークンが指定されて、
このメッセージのURIにアクセスするとcrumb=xxxxxが違うようで400BadRequestが返って来てしまいます。
そこでcookieもファイルに保存するようにしましたが、結果は同じでした。
cookie以外でも情報を保持しているものってありますか?
>>406 なんかのパラメタが足りないのかもしれないしなんともいえないね。
一度終了しなければ続きのアクセスができるのなら、できるときと
だめなときで通信内容を比べてみるとかそういうところから追い
かけてみたら?
ヤフオクの取引ナビはメッセージを表示 URL は、メッセージ一覧から行かないとだめかも というのは、普通にブラウザで見てても、どんなタイミングかわからないけど 履歴から直接メッセージの表示しようとしたらはじかれる事が多々あるので。 たぶん Yahoo のシステムがどんな動きするのかを調べた方が早いかもです。
>>407-408 レスありがとうございます。
解決しました。恥ずかしいことに「次回からIDの入力を省略」のチェックを入れずにログイン処理していました。
チェックを入れてログイン処理したところ、ブラウジングを途中で終わらせてもちゃんと続きから開始してメッセージを見れました。
お騒がせしました。
文字列を1文字単位で配列にするにはどうやればいいんですか $str = "hogefuga"; @ar = split(//,$str); これではうまくいきませぬ
セミコロンが抜けてただけで、うまくいってました。失礼しました
ActivePerlからSQLserver2005に接続したいのですが、おススメサイトを紹介してください。 Linux/SolarisのPerlからOracleに接続するのはわかるのだけど、Windowsはよくわかりません。
Rubyから来ました。Perlのオブジェクト指向を勉強中です。 Mooseというのがありますが、これからPerlでクラスを書く場合 こちらで書くべきなのでしょうか?個人的に型を指定できるのがキモいので あんまり使いたくないのです。
>>414 別に分かってやるなら好きにすればいいんじゃねーの?
416 :
414 :2010/09/10(金) 12:06:54
>>415 さすがPerlですね。でも主流がどっちなのか気になります。。。
CatalystやPerl6を見る限りではMooseが主流に「なっていく」だろうけど好きにすればいいと思う。
activeperlでtkの代わりにtkxが付いてたので、 tkを入れたいけど、何かのセキュリティでppmが使えない@職場 家でダウンロードしておいて、USBメモリでインストール用の何かを持ちこめる?
逆に言うと、ネットに繋がってない環境でモジュールを入れるのは無理ということか 意外な落とし穴だな
程度が同じだと頭悪い話でも違和感なく完結してしまうのだな
日本語でおk
ppmのリポジトリにローカルドライブを指定する方法がネットのどっかで解説されてる。
不可能ではないにしても、裏ワザ的な方法で、 メニューから辿っていって誰でもできるようなものではない
前はZip版を自由に落とせたけど、今はビジネスエディションのIDとパスワードを 要求されるようになってる。ローカルにリポジトリ立てるしか無いかも。
裏ワザw
面倒そうだな tkxに慣れるか
429 :
デフォルトの名無しさん :2010/09/11(土) 16:56:20
perl/tkのcanvasで、クリッピング(描画される領域の制限)を行うにはどうしたらいいのですか?
430 :
デフォルトの名無しさん :2010/09/13(月) 00:11:56
パスワードノ暗号化、解読のプログラムで、 下記の $1って何が入っているのでしょうか? $crptkey = 3になる条件が理解できないので困ってます。 ---------------- # # パスワード暗号化 # sub cry_ { $time = time; ($p1, $p2) = unpack("C2", $time); $wk = $time / (60*60*24*7) + $p1 + $p2 - 8; @saltset = ('a'..'z','A'..'Z','0'..'9','.','/'); $nsalt = $saltset[$wk % 64] . $saltset[$time % 64]; $epasswd = crypt($FORM{'delkey'}, $nsalt); } # # パスワード解読 # sub cryma_ { if ($de =~ /^\$1\$/) { $crptkey = 3; } #<---- $1 って何?? else { $crptkey = 0; } $ok = "n"; if (crypt($FORM{'delkey'}, substr($de,$crptkey,2)) eq $de) { $ok = "y"; } }
一部だけ見せられてもわかるわけない どうみたってグローバル変数多用してるし
この骨董品級のコードに対する突っ込みはさておいて、 $1に何が入ってるとか関係なくて$deの先頭に「$1$」という文字が入ってるかどうかをチェックしてるだけじゃないの
$deが$1$で始まる文字列なら3
最初はグローバル変数か?と思ったのですが、その気配は無かったです。 $1などは正規表現でマッチした変数で混乱しました。 単純に「$deが$1$で始まる文字列なら3」 で納得しました。ありがとうございます
ヒント:エスケープ
437 :
デフォルトの名無しさん :2010/09/13(月) 01:42:04
>>430 2ch互換掲示板の一番最初につまづいているようですねえ。
0chを選ばない理由はなんでしょうか?
439 :
デフォルトの名無しさん :2010/09/13(月) 02:08:13
ここ最近、自分さえ良ければ OK 的なスクリプトばかり書いてたら sub すら作ってないことに気がついたw このままだと 関数? なにそれ 状態になる
リファレンス渡すことに慣れたからlocalとかどうでもいい
>>439 この質問に答えるのに局所化云々は不要だろ。
> 一部だけ見せられてもわかるわけない
該当する一行だけで余裕で分かりますが。
444 :
デフォルトの名無しさん :2010/09/13(月) 12:52:41
>>437 plus
(+Φ Φ)…† Sheet!!
445 :
デフォルトの名無しさん :2010/09/13(月) 18:27:40
PerlでJPEG画像のExifを全て削除したいのですが、どうすればできますか?
Exifデータを全部削除するならImage::MagickのStripでも出来たと思う。
PerlでImacrosというマクロを使いたくて下のサンプルを組んでみたが
Win32::OLE->new('imacros')のところで、dieのエラーに引っかかってしまう
普通に動かすには何か環境設定が必要なんですかね?
http://wiki.imacros.net/Perl
あ、ちなみにImacrosのアドオン(firefox)はインストール済みで 単体での動作も確認済みです
Webプラミングが今回始めてです WWW::Mechanizeを使ってブラウジングしてます。 xxx->click();したときにどんな風にPOSTデータを送っているのか調べたいです FireFoxのPOSTデータもどんなデータを送っているのか調べて比較したいです どんな方法が正確に簡単に比較できますかね?ツールとか使うことになるんでしょうか よろしくお願いします
Win32::OLEがインストールされていないじゃねーの インスタンスが生成されていないってことだろ
>>450 パケットキャプチャすればいいのではないかしら
ffならLive HTTP headers
LiveHTTPHeadersってPOSTの中身見れたっけ?HttpFoxなら確実に大丈夫だけど。 Mechのほうはソース読め。
Content-Type: multipart/form-dataも含めて見れた、バイナリデータは表示されなかったけど
requestを直接とれるようにmechを弄ればよさそう?
>>451 Win32::OLEは当然インストールされてます
>>450 ざっくりやるならProxomitronでいいんじゃないの。
単純なのだったら、ローカルにHTTPサーバ立ててキャプチャしてみるとか。
>>457 ならインスタンスが生成されない理由を探れよ
そりゃそうだ
462 :
450 :2010/09/15(水) 17:07:12
どうもありがとうございます LiveHTTPHeadersを使ってみてみます 問題はWWW::Mechanizeのほうですね ソース読むっきゃないんですかね・・・これは大変そうだ・・
463 :
450 :2010/09/15(水) 17:10:57
あるサイトでWWW::Mechanizeのほうを規制されてしまったんですよね ffでやる分には普通に出来るけどWWW::Mechanizeで動かしたいので 何でWWW::Mechanizeを使っていると判断しているのかを調べたかったので それともHTTP_USER_AGENTあたりで微妙な違いで判断してるのかな・・
464 :
458 :2010/09/15(水) 17:13:37
はぁ、最近、回答を無視されることが多くてつらいわ。 しばらく2chやめるかね。
465 :
458 :2010/09/15(水) 17:14:51
ああ、Windowsじゃなかったら、すまんな。
パケットキャプチャでいいのになぜパケットキャプチャをしないのか
467 :
450 :2010/09/15(水) 17:19:09
すみません。ProxomitronとかローカルにHTTPサーバ立ててとかだと さらにそこでの質問が増えそうだったので。 たまたま入っていたLiveHTTPHeadersの手軽さを選択しました
468 :
450 :2010/09/15(水) 17:30:25
パケットキャプチャがいまいち分かりません Perlだけでなくその辺の知識も初心者なので・・・ 調べてきます
ヤッパリだめかー 超難しい 挫折しそう
470 :
448 :2010/09/15(水) 18:42:45
$word = Win32::OLE->new('Word.Application') or die "Win32:OLE\n"; の1行でテストしてみた。こっちはdieには引っかからないようだ 'imacros'っていうのがやはりおかしいのかな。ダメだわからねぇ
冗長モードってどういう意味ですかね
Perlに関係のある質問?
どう見てもスレチですねはい。
perlってめちゃくちゃ難しいな
Perlはそうでもないけどperlならそうかもしれない。
意味わからん
パールはそうでもないけどパールならそうかもしれない。
これの意味が分からない人もいるのかw。
>480は意味が分からなくて良いんだよな?
いや、わかるひとはいないでしょ
WWW::Mechanizeで$mech->click()などでクリックは可能だけど キーバインドを送ることは不可能かな?どこ見てもそういったことはやっていないみたいだけど
perlxstut, perlxs, h2xs, perlguts, perlapi の違いはなんですか?
>>479 "perlだけがPerlを解釈することができる"
でググるといいよ
490 :
nipotan応援団 :2010/09/16(木) 14:04:46
nipotan応援歌 書けよー!書けよー!書け書けよー! 書けよ書けよーモジュール! お前が書かなきゃ誰が書く!!かっとばせー!nipotan!ゴーゴーレッツゴーnipotan!燃えろ燃えろ! 光 輝く!大空高く! 燃える男のチャンスに強いnipotan! あなたの目標は何ですか!?宮川超える事そうですか! 宮川以上のスーパースーパースーパースーパースーパーコーティング( イェイェイェイ!!
Perlにて2chなどに書き込むIP、自分のグローバルIPアドレスを取得する方法で 一番スマートなのはどういったコードを書けばいいのかな
>>491 nslookupやらを公開しているサイトにアクセスして
結果から盗むってのが手っ取り早いかな
Perlにて現在起動中のfirefoxのヘッダー情報を取得することって可能ですかね 可能ならどう取得すればいいのか教えてもらえればありがたいです
>>493 %ENVをぐるぐる回れば見れるよ!
と思ったけどヘッダーかぁ
リクエストヘッダーはサーバに食われちゃうから
成功法じゃあ見る方法ってないんじゃね?
>>491 UPnPを使うのが一番スマートじゃないか
>>493 FirefoxにはLive http headerというアドオンがあったはずだけれど、これでいいかな?
ログファイルやエラーログファイルへの出力でお勧めのパッケージってありますか
ない
>>492 ありがとう。やっぱりその方法が手軽かな
>>495 UPnPですか。調べてみます
ありがとう
pythonのnumpyに相当する数値計算、行列計算パッケージはperlにはありますか
>>499 >>502 どうもありがとう
自分で作るっきゃないんすね
レベル指定で色々出力したりしようと思ったけど
>>505 だあらSys::Syslogつかえっつってんだろひとのhなしきいてんのかぉよ
>>505 使ったこと無いけど、 log4perl
>>506 ありがと。
SyslogじゃなくてSys::Syslogかあ。
Syslogで必死にぐぐってみたけど変なのしか出てこなくて
再度ぐぐってみる
>>508 ありがと。ぐぐってみる
窓環境でSys::Syslogって意味あるの
use strict; my %hash; $hash{'234'}=["山田太郎\n", "ほげほげ\nあいうえお\n"]; $hash{'236'}=["鈴木花子\n", "ふがふが\nかきくけこ\n"]; print @{$hash{'234'}}; print @{$hash{'235'}}; print @{$hash{'236'}}; このコードを実行すると print @{$hash{'235'}}; の所で Can't use an undefined value as an ARRAY reference とエラーが出て終了する。 先頭のマークを変えて%{$hash{'235'}}や${$hash{'235'}}としても同様のメッセージが出る。 しかしprint ${$hash{'235'}}[0}; や ${$hash{'235'}}{'hoge'}とすると何もエラーがでず何も出力されず、次の処理に移る。 なぜこの場合はエラーが出ないのでしょうか?
>>512 print しようとしてるものが undef だから。
use warnings すればおしらせが出る。
>>513 未定義なのは@{$hash{'235'}} も ${$hash{'235'}}[0} も同じですよね?
それなのに片方ではエラーが出て、片方では出ないのは何故なのかと思いました。
515 :
デフォルトの名無しさん :2010/09/17(金) 20:52:12
Perlを勉強中なのですが、 $math += $_ * ($count--%2?3:1) foreach( @strArray); これの読み方がよくわかりません。 解説していただけませんか?
肝はここかな。 >$count--%2?3:1 3項演算子を使っている。 この場合、$countを2で割った余りが1なら3を返す。あまりが0なら1を返す。 $count--とあるので、処理が終わった後$countは1減る。 foreach(@strArray) { if($count%2==1){ $math += $_*3; } else { $math += $_*1; } $count--; }
>>511 ありがとう
いろいろ調べてみた
Sys::SyslogはWin環境だと微妙だと判断
log4perlは便利だけど日本語資料が乏しく結構覚えるのが大変そう
Log::Handlerは結構シンプルだね
今のところlog4perlで難しかったらLog::Handlerでいこうかな
518 :
デフォルトの名無しさん :2010/09/17(金) 21:18:53
>>514 undef自体をデリファレンスしようとすれば当然エラーになるが
リファレンス階層では存在しない値は自動生成されるのでエラーにならない
とかだった気がする
>>518 わざわざそのページの作者さんがwikiのURL張ってくれてんじゃん
13桁だからチェックデジットの計算が12回
log4perlは日本語対応してないのかな Webから取得したのを丸ごと出力しておきたいんだけど 日本語が入っているから文字化けしてる
wikiってゆうな。クズ。
>>519 レスありがとうございます。
>undef自体をデリファレンスしようとすれば当然エラーになるが
納得できます
>リファレンス階層では存在しない値は自動生成されるのでエラーにならない
リファレンス階層とはどういう事でしょうか?
${$hash{'235'}}[0]は@{$hash{'235'}}という配列の要素でそれはundefをデリファレンスした配列なのに、、
| print ${$hash{'235'}}[0];しても エラーでないのは | なんでだろ〜♪ \____ _______________ V | | なんでだろ〜♪ \_____ _____ V _,ヾゝー'"'"'"ー、,; ,.:-‐―‐-.、_ ,ラ 、_ ヽ,、 / \ イ r-'ー゙ "ー‐、, ミ/ ヽ i! ,! i! ミi ,ハ i ,j i /ニ=、 ,r==、i ,,ハ ,ノヽi! ゙'レ>ヾ-、 ,!r' i V <(・)>i i!(・)>゙!,i !!イ(・)) <.(・)>゙ i /!i ゙!ji! ., j .i_ /j i 。 。, ト-' ,ィi:. ;" ー-‐' ト' .! ,.=、 / ̄ ゙̄ー-、_ __ノ !ハ : 0 ; ,/ _,.-‐''\ ゙='' ,/ / \\  ̄ ,// ゙ー-‐‐" / \.゙ー-イ ,/
log4perlでWindowsのコマンドプロンプトで標準出力させると日本語のutf8が文字化けします mainのほうでは、binmode STDIN, ":encoding(cp932)"; で標準出力をs-sjisにして出力しているので 自分で出力する分には文字化けしないんだけど、log4perlのモジュールを介して出力させると binmode が効いてないっぽい。何か方法はないですかね。文字コード変換は面倒だからbinmodeで なんとかならないですかね
作ったサブルーチンは undef を返すんだけど、 my $result = testfun($data); みたいに undef を変数に入れても問題無いですよね? 普通に使ってきたけど、「そういや undef って未定義だよな・・・」 って思ったら正しいやり方なのか不安になってきた。
未定義値の認識を誤ってなければ大丈夫です。
>>528 おお、なるほど、分かりやすい。
| $array[$x]->{"foo"}->[0] = "January";
|これが、先の左辺値コンテキストで用いるとリファレンスが存在するようになるというケースの一つです。
|この文以前には、$array[$x] は未定義かもしれません。その場合自動的にハッシュリファレンスと定義
|されて、{"foo"} が検索できるようになります。同じように $array[$x]->{"foo"} が配列リファレンスで定義
|されるので、 [0] をそこで探すことができます。このプロセスは 自動有効化 (autovivification) と呼ばれます。
こういう明文化された仕様があったんですね。
(ほげほげ)->[0]の場合、自動でリファレンスを作ってくれると。
丁寧なレスありがとうございました。
サブルーチン内で下記のように処理3を行うかどうかを 第三引数で渡したか渡してないかで判断して処理しようと思うんだけど こんな方法でも特に問題になることはないですかね?ちょっと不安で &abc('test1','test2'); &abc('test1','test2','test3'); sub abc{ my ($test1, $test2, $test3) = @_; if(defined($test1)) { 処理1 } if(defined($test2)) { 処理2 } if(defined($test3)) { 処理3 }
abc(1,2,undef); scalar @_ == 2 ? 処理2 : 処理3
>>530 サブルーチンを呼び出す側で第三引数を渡したつもりでも
undefな変数を渡していたら処理されないような。
>>531 >>532 531のように引数の数でチェックしたほうがよさそうですね
思わぬバグになるところでした。聞いて良かったありがとう
それと &abc('test1','test2'); よりも、 abc(1,2,undef); のように明示的にundefしたほうがよさそうですね 単純に忘れたのか明示的に外したのかが上だと分からないし 勉強になりましたありがとう
すいません。
>>534 は、勘違いでした。
undefでも引数の数は3になるのか・・
やっぱり
&abc('test1','test2');
scalar @_ == 2 ? 処理2 : 処理3
のようなチェックのほうがいいか
>>281 Low 2058 (Q9650+2GB+Ge9600GT)
夏仕様(VGAクロック半減)で Low1020
下記のようなC言語の関数へのポインタ配列処理はPerlでも可能ですかね? Perlだとどう書くとスマートなのかな。解説しているサイトでもいいので もし知っていたらスマートな書き方を教えてください。よろしくお願いします int main(int argc, char** argv) { int (*pfunc[2])() = {plus, minus}; printf ("3 + 5 = %d\n", (*pfunc[0])(3, 5)); printf ("3 - 5 = %d\n", (*pfunc[1])(3, 5)); return(0); } int plus(unsigned int a, unsigned int b) { return((int)(a + b)); } int minus(unsigned int a, unsigned int b) { return((int)(a - b)); }
@func = (plus, minus); print $func[0](1,2); print $func[1](1,2); sub plus { ($a, $b) = @_; return $a+$b; } sub minus { ($a, $b) = @_; return $a-$b; }
>>538 Perlのほうが、やっぱり記述が短いですね
参考になりました。
ありがとうございました。
>>538 を試しに実行してみたらエラーが出た・・
Bareword "plus" not allowed while "strict subs" in use at f.pl line 10.
Bareword "minus" not allowed while "strict subs" in use at f.pl line 10.
Execution of f.pl aborted due to compilation errors.
どこに()をつければいいんだろう
付けるのは \& だろ
>>542 ありがとう
my @func = (\&plus, \&minus);
print $func[0](1,2);
print $func[1](1,2);
sub plus {
($a, $b) = @_;
return $a+$b;
}
sub minus {
($a, $b) = @_;
return $a-$b;
}
実行結果
3-1
で、うまく動きました。間に-が入るのが気になるけど
あ、いいんだ -1だからか。これでうまく行きましたね みなさんどうもありがとう
my $level = 'AT'; if($level == 'EAT') { print "ok\n"; } 上のところ。なぜかif文が通ってしまいます なぜですかね。書き方が間違っているのでしょうか
545です 自己レスです。 文字列は==ではなくeqみたいですね Active perl, v5.10.1 を使ってます 原因がわかるまで凄い苦労した・・・ スレ汚し失礼しました
知っててもたまにはまる
比較するつもりで代入してて常にtrueだったりもする。
つ use warnings;
>>525 Appenderはどれ使ってるの? ScrernとFileならutf8オプションあるだろ。
Fileならさらにbinmode指定するオプションで凝ったこともできる。
>>550 ありがとうございます
Scrernです。コマンドプロンプロトがShift_JIS なのでShift_JIS で出力せたいです
utf8オプションなんてあるんですか?ファイルのほうは別にutf8でいいです
何かしらエディッタなら対応してますから。メモ帳でも
ただコマンドプロンプロトの変わりはそうはないのでつらいですね。
諦めて画面にはPRINT文で出すことにしました
>>551 ScreenならSTDOUTかSTDERRをbinmodeで設定しておきゃいいんじゃないの?
utf8オプションも結局それやってるだけだし。
>>552 binmode STDIN, ":encoding(cp932)";
っていうのを呼び元のところで設定しているけどうまくいかない・・・
標準出力はこっちかな binmode STDOUT, ":encoding(cp932)"; 自分でPRINTする分には出るんだけどね
use strict; って、パッケージ宣言ごとに書かないとだめですか。 今、ひとつのファイルに複数のパッケージを書いているのですが、 ファイルの先頭で use strict; すれば、そのファイル全体で有効だと 思いこんでいたのですが、なんか違うような気がしてきました。
>>555 そうです。基本的なことですから押さえておきましょう。
ニヨニヨ。
ActivePerlをインストールしたら、よりモダンなOOPが出来る Moose なるパッケージを見つけました。 ドキュメントや入門ページを見るとナルホドなかなか良いなとも思ったのですが、 Perlで仕事をしている方々の評判はどんな感じなんでしょうか。 自分一人ならいいけど他のPGが読めなくなるから使わないとか、、 それとも今時のPerl使いはこれくらいは知っていて当然なのでしょうか?
Image::Magickでnewしたときにファイルを読み込むことはできないでしょうか? my $image2 = new Image::Magick; $image2->Read("foo.gif"); $image1->Composite(image => $image2, compose => 'Over'); を $image1->Composite(image => Image::Magick->new()->Read("foo.gif"), compose => 'Over'); のようにしたいのです。
無理なものは無理だ
561 :
デフォルトの名無しさん :2010/09/20(月) 20:55:49
>>559 Readの戻り値がImage::Magickオブジェクトじゃないからしょうがないね。
お望みの動作をするMyReadでも勝手に定義すれば?
>>561 ::の意味もわからない奴に教えるのは大変すぎるので
頑張ってperlの勉強してください。
>>555 use strictの有効範囲はレキシカルスコープだからファイルの最後まで
効くんじゃねーの? use varsと混同してない?
use strict;
package Package1;
use vars '$x';
our $y;
$x = 1;
$y = 2;
package Package2;
$x = 3; # これはエラーになる
$y = 4;
565 :
555 :2010/09/21(火) 01:24:46
>>556 ,564
どっちが正しいんでしょうか。
自分で試したところ、
use strict;
package Package1;
my $x = 1;
package Package2;
print $x, "¥n";
print $y, "¥n"; # use stric ありならエラー
となったので、564氏が正しいように思いますが、どうなんでしょうか。
Perlにて 1000件ぐらいのデータから1件だけをマッチさせて抜き出す処理を考えています データ的には 日本語20,30文字と数字3桁の2つ 日本語で検索を賭けて抜き出します こういった処理に適しているお勧めのパッケージってありますかね CSVファイルにしてText::CSV::Simpleあたりのモジュールで読み込んでやろうかなとも考えているのですが
>>565 失礼
use strict;
{ package Test1;
sub test(){
$x = 1;
print "no strict\n";
}
}
Test::test();
> Global symbol "$x" requires explicit package name at test1.pl line 9.
Execution of test1.pl aborted due to compilation errors.
ついでに同一パッケージで効くかどうか調べてみた
{ package Test;
use strict;
}
{ package Test;
sub test(){
$x = 1;
print "no strict\n";
}
}
Test::test();
> no strict
>>568 強いて言うなら DBI::SQLite とか?
そんくらいならモジュール使わんでも適当に書けるんじゃね?
>>570 どうもありがとう。DBI::SQLiteだとDB関連ですかね。
このデータは随時追加したり頻繁に変更したりしたいのでCSVにして
エクセルにて色々弄ろうかとも考えているんですよね
DBはちょっと自分には敷居が高いなあー
やっぱりモジュール使わんでも適当に書いたほうがいいですかね
>>571 多分リレーショナルな部分は使わんだろうけど、いい機会だと思ってSQL勉強しときなさい
一度覚えたら他の言語に移っても使えるからな
ちなみに厳密に言うとCSVファイルもDBだぞ
>>568 Tokyo CabinetかKyoto Cabinetで
rubyではObjectクラスにto_s()というメソッドがあって、文字列への変換が 必要な時には自動的に呼ばれます。 たとえば class Hello def to_s return "hello" end end obj = Hello.new() print obj #=> obj.to_s() メソッドが自動的に呼ばれる これと同じような機能は、Perlにあるでしょうか。 package Hello; があって、 my $obj = Hello->new(); my $s = 'value=' . $obj; としたときに、$obj->to_s() とか何かが自動的に呼ばれるようにしたいです。
>>574 use strict;
package Hello;
use overload q{""} => \&to_s, fallback => 1;
sub new { bless {}, shift }
sub to_s { "hello" }
package main;
my $obj = Hello->new();
my $s = 'value=' . $obj;
print "$s\n";
%result = ( "urls" => \@urls, … ); $ref_result = \%result; $ref_resultから@urlsを取り出す方法を教えてください
@{$ref_result->{urls}}
my @tmp = split(/,/, $s); my $a = ¥@tmp; これを一発でかくにはどうしたらいいの?おしえてえらいひと
my $aref = [split(/,/, $s)]; $a と $b は sort が(ry
Perlで、GCを自分で起動・停止することはできますか。 参照カウント方式で起動もくそもないように思いますが、 もしあればおしえてください。 なお「Perl GC」でググってみましたが、それらしいのは みつかりませんでした。
use strict; を書くと、変数宣言していない変数を指摘してくれますが、 これと同じことを行ってくれるパーサはありますでしょうか。 use strict; だとスクリプトを実行しないといけないので、それだと 副作用があって危険なので、実行せずに構文解析だけでできるのが希望です。
perl -cwT
アクティブ perl, v5.10.1で SJISファイルをそのまま読み込んだ場合で 内部のUTF8とマッチング処理をするときは どっちをどうやってコード変換すれば一番いいんですかね?
自分は読み込んだ方をコーディングしてるファイルの文字コードに変換してる
>>585 さんくす
できれば外部コマンドとして起動するのではなく、ライブラリとして使いたいです。
無理でしょうか。
WEB上にあがってるPerlのことについて書かれている日本語のサイトって Perl 5.8ばっかりだね。ふるいのばかり。今5.8使っている人いるのかな 細々とはいるだろうけど
perl5.10.0 で追加された機能をつかわないのであれば、perl5.8.x を使いつづけてもなんら問題がないし、99.9%のライブラリはperl5.8系をサポートしているから積極的に移行する必要はない。
591 :
デフォルトの名無しさん :2010/09/22(水) 12:38:12
Jcode-2.07のインストールについて教えてください。 Shift_JISからJISに変換する際、Encodeでは未定義文字が正しく変換されないので Jcode-0.88を使用していたのですが、今度2.07にバージョンアップすることになりました。 これまでのアルゴリズムを利用するには、同梱されているJcode::_Classicを使えばよい ということまでは分ったのですが、いざJcode-2.07をインストールしてみても 肝心のJcode::_Classicや、内部で使用するJcode::H2Zがインストールされません。 正確にいうと、Jcode-2.07.tar.gzを展開したJcodeディレクトリには入っているのですが、 make installまで行ってもlibディレクトリにコピーされず、 perl -MJcode::_Classic -e '' で Can't locate エラーになってしまいます。 Jcode/*.pmはどうやってインストールしたらよいのでしょうか? もし手動でコピーするしかないのだとしたら、コピー先はJcode.pm本体と同じ libディレクトリでよいでしょうか? 以上、よろしくお願い致します。
>>588 使用状況がいまいち想定できないんだけど、どういう使い方したいの?
Perlでどう解釈されてるか見たいという要望にはB::Deparseオススメしとく
594 :
デフォルトの名無しさん :2010/09/22(水) 17:36:14
wgetでhtmlのURLを指定するともちろん取得できます。 ところが、cgiを使ったURLを取得すると、cgiが作成したhtmlは取得できません。 方法としては wget -E と Eオプションをつけることで解決するのでしょうか?(これを試しても取得できませんでしたが) cgiが作成したhtmlをクロールするにはどうすればいいのでしょうか?
perl無関係
596 :
デフォルトの名無しさん :2010/09/22(水) 18:44:59
誰もperlに関係あるなんていってませんが?
? ? ?
600 :
デフォルトの名無しさん :2010/09/22(水) 20:44:49
perlのsedモードをperlスクリプトの中から使いたいときは どうしたらいい?
ファイルをオープンしてテキスト書いてクローズする ってのを1行でかっこよく書きたいんだけどどうしたらいい? open( my $fh,"hoge" ) and print $fh ・・・ とか書くのめんどうくさい
File::Slurp::write_file
>>591 Encode で正しく変換されないというよりも
shiftjis と cp932 をごっちゃに思ってた
なんてオチだったりして?
Encode::Guess はデータの文字コードの判断に失敗した時は
デフォルト値で誤魔化さずオブジェクトの代わりにスカラーで候補を返すから
何が何でも変換したいなら
判断に失敗した場合の決め打ちを自分で書けば良いのでは?
604 :
デフォルトの名無しさん :2010/09/22(水) 23:40:00
>>600 system("echo $bakatext > bakafile");
605 :
デフォルトの名無しさん :2010/09/22(水) 23:41:37
外部ファイルからバイナリでそのまま何もせずに読んだ場合(パッケージなので仕方なく) 内部コードとのキーとマッチング処理を行うときに Encode::_utf8_onとしないと外部ファイルからのデータはutf8として比較してくれないのですかね? Perl5.10で、use utf8;指定しています。(binmode STDIN, ":encoding(cp932)";も)
>>607 ちなみに外部ファイルは日本語でutf8で
内部も日本語でutf8で比較しています
609 :
591 :2010/09/23(木) 00:41:19
>>603 >shiftjis と cp932 をごっちゃに思ってたなんてオチだったりして?
違います。
EncodeはいちいちUnicodeを経由して変換を行いますが、
恐らくマッピング上の問題で、Shift_JISの未定義領域をJISの未定義領域へ
正しく変換できないのです。
そのため、コード位置を計算で求める従来のアルゴリズムが必要なのです。
>判断に失敗した場合の決め打ちを自分で書けば良いのでは?
Jcodeにこだわっているのは、上記のアルゴリズムで実装されたJcode-0.88に
強く依存したコードがあちこちに存在するためです。
Jcode::_Classicが使えるなら、use部分+αの細工だけで済みますので。
>>604 やっぱそれしかないん?
インジェクションがおっかないからやなんだよなそれ
systemにはリストで渡せよ
613 :
デフォルトの名無しさん :2010/09/23(木) 17:27:30
perlで最大公約数を計算するプログラムを組みたいのですが、さっぱりわかりません 2つの引数からサブルーチンを返すプログラムを作成しそれを使うそうなのですが教えていただけないでしょうか
>>613 わざわざ作らなくてもMath::BigIntを使えば?
そんなモジュールあるんだ 613じゃないけど
616 :
613 :2010/09/23(木) 17:41:38
>>614 練習を兼ねて使ってはいけないみたいです・・・
2つの引数からサブルーチンを返すってどういうことだろう 何も考えずにかいたのがこんなん sub gcd{ my ($a,$b)=@_; if($a==0){$b}elsif($a<=$b){gcd($a,$b-$a)}else{gcd($b,$a-$b)}; } こんなのを指すんかな? sub gcd2{ my ($a,$b)=@_; sub aux{ my ($c,$d)=@_; if($c<=0){$d}else{aux($d-$c,$c);} } if($a>=$b){aux($b,$a);}else{aux($a,$b);} } 速度を求めるなら再帰は使わない方がいいけど perl久しぶりにさわったから、色々変かもしれない return書いてないけど文法的に大丈夫か自信ないw
2数の最大公約数を計算する方法がわかってないのか、 わかってるけどPerlでそれを実現する方法がわからないのか。 ……前者だったら救いようがないぞ
619 :
613 :2010/09/23(木) 17:47:40
>>617 すいません・・・
2つの整数を引数として最大公約数を返すサブルーチンの作成しそれを使うプログラムでした
宿題は自分でやれ
sub gcd{ my ($foo,$baa)=@_; return $baa ? gcd($baa,$foo%$baa) : $foo } 掲示板の都合上全角空白だけど動かすなら半角にしなければエラー吐く
>>623 どうもありがとう。時間があるのときにそれで試してみます
ファイルから行を読み込んで、文字列比較をしています。 ファイルの文字列はurlのようにエスケープ文字を含んでいて、 比較対象もエスケープ文字を含んでいます。 完全一致の==で、ifしていますが、上手くいきません。 比較する2つの変数(文字列)を、\マークでエスケープしても うまく動いていないようなのですか、どうすればいいでしょうか? ご助言、参考サイトの紹介等お願いします。
eq
書き間違えました、eqです、 でも上手くいってません。
うまくいかない具体例を出してくれないことにはなんとも ありがちなのはファイルから読み込んだほうの改行落としてないとか
失礼しました、ザックリこんな感じです。
my $f_files="";
my $hikaku_moji="
http://www.xxxx.com/index.html ";
open( FILE ,"< $filename") ;
while( $f_lines=<FILE>){
#ファイル文字列側 改行削除
$f_lines =~ s/\r//g;
$f_lines = ~s/\n//g;
#ファイル文字列のエスケープ文字に\マークを付けている。
# 同じパターンで、"や'などもエスケープ
$f_lines =~ s/\//\\\//g ;
#比較側の$hikaku_mojiもここで同じ処理をしている。
if( $f_lines eq $hikaku_moji ){
print "同じです\n";
}else{
print "違います\n";
}
}
close( FILE );
エスケープ対象文字に漏れはありません。
文字列に円マークを入れていくのは変でしょうか?
chomp使えよ…… 上手くいかないのはエスケープしてるからだろ
そうですか・・ ちょっと見直します。 有難う御座いました。
そもそも比較するだけなのになぜエスケープする必要があるのか。 不必要に複雑にしてるとしか思えない。
完全一致なのだからエスケープする必要は無い
********1**********2***********3*********4******** 上記の文字列から数字だけを取り出して1個ずつ配列に格納するには どうかくのがベストなのでしょうか。お願いします
べ、別にベストじゃないんだからねッ DB<9> $mojiretsu = "********1**********2***********3*********4********"; DB<10> @hairetsu = grep(/[0-9]/, split(/\*/, $mojiretsu));
>>636 どうもありがとうございます。
なるほどsplitとかを使うのか。
参考になりました。
my @n = '********1**********2***********3*********4********' =~ /[0-9]+/g;
>>638 どうもありがとうございます。
そんな方法初めて知った。勉強になりました
/( )/gでマッチさせて配列に、はスクレイピングしてると頻繁に使う
/( )/gだと$1に1が $2に2が っていう感じでマズはいるんだよね
特定の日時から5分前、10分前、15分前・・・と時刻を得るにはどうしたらいいでしょうか?
$before_5minute = localtime(time - 300); $before_10minute = localtime(time - 600); $before_15minute = localtime(time - 900);
Date::Calc::Add_Delta_DHMS
647 :
デフォルトの名無しさん :2010/09/27(月) 20:32:36
>>644 perldoc DateTimeで詳しくみてないけど、
use strict;
use warnings;
use DateTime;
my $d = DateTime::Duration->new(minutes => 5);
my $now = DateTime->now(time_zone => 'Asia/Tokyo');
warn $now;
warn $now - $d;
warn $now - (2 * $d);
warn $now - (3 * $d);
こんな感じでいけた
>>647 DateTimeつかうならこれで十分。
use DateTime;
my $now = DateTime->now(time_zone => 'Asia/Tokyo');
print $now->clone->subtract(minutes => $_), "\n" for 5,10,15;
649 :
デフォルトの名無しさん :2010/09/28(火) 15:08:27
>>648 おぉ。そんな風にいけるのか。ありがとう
650 :
Perl忍者 ◆M5ZWRnXOj6 :2010/09/28(火) 16:23:58
こっちみんなYappo
>>648 ありがとうございます。コードがスマートになりました。
Perlってどのバージョン位までサポートすることを考えたほうがいいんですかね? 5.10を動かしてるところもあれば、5.8をつかってるところもあるんですけど。 5.6も考えたほうがいいんですか?
>>652 Encode や今と同仕様の UTF-8 フラグを使えるのが 5.8.1 から。
モジュールの事を考えずに済むのなら、恐らく大半の人は 5.005_03 でも困らない筈。
flockは万能じゃないなど、いくつかの記事を見たので flockについてしらべてみたのですが、どういう問題があるのかなどわかりませんでした。 どのような問題があるのでしょうか?
記事に書いてあったんじゃないの?
>>654 すみません。
私が読んだ記事には万能でないということしか書いておらず、
理由を探しております。
理由として探せたのはNFS上では使えないというものくらいでした。
(Windows9xで使えないというのもありましたが、最近では関係ないと思っております。
5.007003みたいなバージョンが出てくるんですが、 このバージョンの書き方って、どう読めばいいんですか?
ごーてんぜろぜろななぜろぜろさん?
5.007003=5.7.3 ぱーるふぁいぶせぶんすりー
661 :
デフォルトの名無しさん :2010/09/29(水) 21:59:53
localtimeを取る時に、月とか年のためにいらない変数を一杯使いますが、 日付だけ取ることはできませんか?¥
(undef, undef, undef, undef, $mon, $year) = localtime;
配列の要素を直接指定できることがわかりました
>>662 よりみじかくかけました
>>661 perl 初心者がカキコ
my ($day) = (localtime(time))[3];
とかでいいのかな?
665 :
664 :2010/09/29(水) 22:18:58
あ、遅かったか。 で、もうちょっと考えてみて もし自分で書くなら DateTime モジュール入れて use DateTime; my $tn = DateTime->now( time_zone => 'Asia/Tokyo' ); say $tn->day; こんな感じにするかもしれない。 # 月とか扱いやすいしね
my $yyyy = (split ' ', localtime)[4]; my $wdy = (split ' ', localtime)[0]; # Wed etc. my $mon = (localtime =~ /[^ ]+/g)[1]; # Sep etc. my $hh_mm_ss = (localtime =~ /[^ ]+/g)[3];
それだけの目的ならTime::Pieceのがいいんじゃない?DateTimeよか軽いし。
use Time::Piece;
print localtime->mday; #=> 29
>>664 ($day)の括弧はこの場合は余計。
Windowsで名前付きパイプって作れる? linux なら POSIX::mkfifo で作れたけど、CamelBoxではムリポだった
>>667 Time::Piece は 5.8.x 系までは標準モジュールでなかったので、
「それだけの目的」の為に可搬性を落とす必要はないという考え方もある。
pythonから「やっぱだめだ」と感じてperlに移ってきた俺のような奴はめずらしいのだろうか
俺はRubyを勉強しているけどむずい
RubyもPythonもオブジェクト指向がPerlみたいに気持ち悪くないからとっつきやすいと思うけどな
オブジェクト指向部分は使わないからperlが使いやすい Pythonはちょろっとさわって、2x系と3系の違いが結構微妙だったので使うのをやめた もっとこなれたらさわるかもしれない
perlは新しいモジュール覚える気がしない もう限界と感じるようになった
自分でモジュールを作る方に回るのか
Perlなんて大嫌いだ! 便利だから使うけどな! って人も結構多いよね。
日本語処理に困ったら国産ruby
俺はC言語からPerl組みだな まともにPerlを勉強してないけど ある程度C言語の知識があると書けるね
>>677 あー。確かにPerlは日本語とWindows環境で苦労してるわ
何度悩んで数日無駄にしたことか
さすがにC言語の知識だけだと短くかけない
C言語はいらないけど、Perlは正規表現も必要だね。sedやviで正規表現は研いていた
Perlは豊富なモジュールが。だけど日本製が少なく ドキメントも情報も英語が多いのとモジュールだと枝葉にいってしまうので 知っている人が少ない。日本語処理もおかしくなるときがあるので 逆にモジュールを使ってしまって失敗したケースもあるな。
改行コードが
1行目0D
2行目0D
3行目0D 0A
以降. 0D 0A
...
というちょっと困ったサイトがあります。これは特に問題ではなかったのですが、
このサイトをLWPのrequestを使って保存し、エディタで開いたところ
改行の後ろに空行が入る状態になってしまいました。
バイナリを見てみると
1行目0D 0A
2行目0D 0A
3行目0D 0D 0A
以降. 0D 0D 0A
...
となってしまっていました。置換が入っておかしな事になってしまったようでした。
いらぬ置換が入る前に自分で置換すれば良いですが、私としては元のままの状態で保存したいです。
$ua->mirror()を使ったところ改行コードの状態はそのまま保持されたのですが、
取得したデータをスクレイピングするので、mirrorを使うと、データを取得してファイルに保存してそしてそれを開くことになり、
これは如何なものかと思いました。$ua->request()を使った場合でも改行状態をそのまま保存する方法はないでしょうか?
684 :デフォルトの名無しさん [sage] :2010/09/30(木) 22:11:12
>>683 データ保存時にopen(FH, ">:raw", "filename.html");
685 :683 [sage] :2010/09/30(木) 22:11:20
>>684 おお、>:rawを指定して保存すると0Aが0D 0Aに置換されなくなるんですね。
無事そのままの状態で保存することができました。即レスありがとうございました。
なんかお前大変なことになってないか?
何言ってんだこいつ
便乗(なのか?w)質問 binmode と >:raw はイコール? とすれば一々binmodeするのやめたいのだが・・・
質問その1 rubyのinclude?に相当する関数または演算子はありますか。 ['a', 'b', 'c'].include?('b') #=> true ['a', 'b', 'c'].include?('x') #=> false 質問その2 use Hogehoge; をすると必ず Hogehoge.pm を読みにいくようですが、 Hogehoge.pmを読みにいかないようにできますか。 動機は、ひとつのファイルに複数のパッケージを定義したときに、 そのうちのひとつをuseしようとすると、存在しないファイルを読みにいって しまうからです。 たとえばHoge.pmの中にHoge::AとHoge::Bというパッケージを定義したとして、 use Hoge; は問題なくできますが、use Hoge::A; を実行すると Hoge/A.pm を 探しにいってエラーとなってしまいます。 %INCを触ればいいのかと思いましたが、そうでもないようで行き詰まりました。 どなたかアドバイスお願いします。
688 :
デフォルトの名無しさん :2010/10/01(金) 00:51:07
Hogehoge.pmを読ませずにどーやってHoge::A部分を読ませるつもりだ?ばーか そういう新興宗教言語が欲しければ自分で作りなさい。
>>687 1. !!(grep { $_ eq 'b' } ('a'..'c')
2. use Hoge; Hoge::A->any_method(); # => ok
>>689 ありがとうございます。
>1. !!(grep { $_ eq 'b' } ('a'..'c')
grepだとリストを全件見るんですよね。
そうではなくて、見つかった時点で即座に真を返すような関数はありませんでしょうか。
>
>2. use Hoge; Hoge::A->any_method(); # => ok
これは希望する動作ではないです。
今は Hoge.pm の中に Hoge::A も Hoge::B も定義されているんですが
将来的にファイルを分割した場合でも使い方を変えないですませたいです。
(あるいは逆に現在分割しているパッケージを1ファイルに集約した場合も。)
つまりファイルを分割してようがしてなかろうが、
use Hoge; use Hoge::A; または use Hoge; use Hoge::B;
のように使えたらうれしいんですけど、Perlでは難しいでしょうか。
>>690 作ればおk
sub include($@){
my($char, @array) = @_;
foreach(@array){
return 1 if $char eq $_;
}
return 0;
}
新しく空のパッケージを作成しておく
-- Hoge/A.pm --
package Hoge::A;
1;
またはモジュールロード用のパッケージを作成しておき、処理の最初に必ず読み込むようにする
STDINとかでキーボードから入力を受けとるときに、 入力部分にあらかじめ文字列を表示(入力)させておくことはできますか? はじめから「hoge」と入力されてて、それに続けて入力できるような
Curses
>>690 use List::Util 'first';
if ( defined first { $_ eq 'b' } 'a'..'c' ) { ... }
>>687 use strict;
package Foo;
$INC{'Foo.pm'} = '/fake/path/to/Foo.pm'; print __PACKAGE__, " loaded.\n";
sub qux { "$_[0]::qux\n" }
package Bar::Baz;
$INC{'Bar/Baz.pm'} = '/fake/path/to/Bar/Baz.pm'; print __PACKAGE__, " loaded.\n";
sub qux { "$_[0]::qux\n" }
package Quux;
$INC{'Quux.pm'} = '/fake/path/to/Quux.pm'; print __PACKAGE__, " loaded.\n";
sub qux { "$_[0]::qux\n" }
1;
のような同一の中身で Foo.pm、Bar/Baz.pm、Quux.pm を作れば
#!/usr/bin/perl -w
use strict;
use Quux;
use Bar::Baz;
use Foo;
print Foo->qux, Bar::Baz->qux, Quux->qux, map "$_:[$INC{$_}]\n", sort keys %INC;
のように重複したりバラバラの順序で use してもエラーにならないし、スクリプト
からの見かけ上は use Foo; のみで Foo->qux が使える (実際は Foo.pm 内の
不要なパッケージも全て有効になっている)。ただ当然の帰結として、Quux を
分離したければ Foo.pm と Bar/Baz.pm から Quux を削除しておかないと、
use Foo; use Quux; のような順序で use しているスクリプトは Foo.pm 内の
Quux を使ってしまうといった下らない罠に自らはまる事になる。
use strict; use warnings; print "Input Data (Default: TEST) > TEST\r"; print "Input Data (Default: TEST) > "; my $input = <STDIN>; chomp $input; $input = 'TEST' if !$input; print $input; 欠点は4文字より少ない入力をするときにデータはちゃんと受け取れるが、 入力中が、例えば 「12ST」 のようになってしまう。
ありがとうございます。その発想はなかったです その「TEST」の後ろから続けて入力できて、またバックスペースで「TEST」のところまで消したりできるようにしたいんです 「TEST」に続いて「hoge」と入力したら「TESThoge」が受けとれるようにしたいです
>>694 List::Utilという便利パッケージがあるんですね。ありがとうございます。
ただinclude?相当の関数ぐらい標準であってもよさそうなもんですが、以外とそうでもないんですね。
>>695 まさにこれが知りたかった情報でした。ありがとうございます。
自分で%INCをいじってたときにはうまくいかなかったのですが、
このスクリプトはうまく動作することを確認しました。
自分のは何がまずかったのだろうか。
あと、perlではパッケージごとに別ファイルにするのが推奨なのでしょうか。
自分で%INCいじってると、そうとしか思えません。
クラスは細かくわけたいけど、ファイルまでわけるのはちょっと。
別の言語なんだから標準関数が違うのは当たり前
関数呼び出しのとき、カッコは省略したほうがいいのでしょうか。 最近読んだソースがみなカッコを省略する傾向にあったので、 Perlではそういう流儀なのかなと思って質問してみました。 なんかPerl標準のコーディング規約があればおしえてください。
()はつけてもつけなくても構わない 好み
演算子の優先度をちゃんと覚えてるなら省略でいい
>>704 >ケースバイケース。
それをいっちゃうと身もふたもないような。
>ただ指標として、実現手段が異様に複雑だと感じたなら設計を見直すべき。
実現手段が複雑というのはどういう意味でしょうか。
今はパッケージごとにファイルを分割するべきかどうかを質問しているのですが、
その話の流れの中で「実現手段の複雑さ」とか「設計を見直す」とか言われても、何を意図しているのかよくわかりません。
>あとは手元の環境にインストールされている沢山のモジュールをお手本に。
いやだから、そのたくさんのモジュールたちはどういう基準でファイルを分割しているのかが知りたいんですが。
>ケースバイケース。
>ただ指標として、実現手段が異様に複雑だと感じたなら設計を見直すべき。
>あとは手元の環境にインストールされている沢山のモジュールをお手本に。
パッケージ名しか知らない人がファイルを探しだす手段をどうするかだな
707 :
デフォルトの名無しさん :2010/10/01(金) 23:35:30
mac用のこまんどをwinで実行しても無意味
>>705 > それをいっちゃうと身もふたもないような。
曖昧模糊とした質問にはそう答えるしかないな。万能解は無いさ。
君の作ったパッケージ群がどういった基準で分けられていて、それぞれがどういう関係に
あって、何処からどれを使いたいかを俺は知らないからね。
> どういう基準でファイルを分割しているのかが知りたいんですが。
それぞれの作者が自分のやりたい事を Perl で実装する上で理に適ってると考えた
分け方をしてると思う。茶化してるわけじゃないよ。目的によって最適な手段は変わるから、
手段だけ切り離して必ずこうすべきとは言えないんだ。そして目的と手段を組み合わせた
実例が目の前のモジュールだから、自分のやりたい事と似たケースを探せばいい。
実装レベルでなく設計レベルの話ならその手の専門書でも読んでね。
> 実現手段が複雑というのはどういう意味でしょうか。
Perl は use Foo; で Foo.pm を読む仕組みになっているから、Foo::func() を使いたかったら
Foo.pm に package Foo; を書いて use Foo; するのが Perl 的にシンプル。
>>695 のように
複雑で面倒な事が必要になるのは、「ファイルは1つにまとめたいけど個別に use したい」
という要求に原因がある。パッケージごとにファイルを分けるべきかどうかや
>>695 のような
アプローチを採るべきかどうかは、この要求がどのくらい切実かによって変わるんだよ。
まずい設計に引っ張られてまずい実装になっているなら設計を見直すべきだし、
実装レベルの工夫によってトータルで楽ができるならそうしたらいい。
>>705 インターフェースかそうでないかでパッケージ分ければ?
俺はあとあとの変更が面倒だから全部最初から分けてるけど
データを s/\x0D\x0A|\x0D|\x0A/\x0D\x0A/g と置換してからencoding出力しても0D 0Aが0D 0D 0Aになってしまうので調べてみました。 # どれも正常 open(HOGE, ">:raw", encode('CP932', "改行チェック0A.txt")); print HOGE "あいうえお\x0Aかきくけこ\x0A"; # -> 0A close HOGE; open(HOGE, ">:raw", encode('CP932', "改行チェック0D.txt")); print HOGE "あいうえお\x0Dかきくけこ\x0D"; # -> 0D close HOGE; open(HOGE, ">:raw", encode('CP932', "改行チェック0D0A.txt")); print HOGE "あいうえお\x0D\x0Aかきくけこ\x0D\x0A"; # -> 0D 0A close HOGE; # 1,2番目は正常なファイル 3番目は異常なファイル open(HOGE, ">:encoding(cp932)", encode('CP932', "改行チェック0A.txt")); print HOGE "あいうえお\x0Aかきくけこ\x0A"; # -> 0D 0A close HOGE; open(HOGE, ">:encoding(cp932)", encode('CP932', "改行チェック0D.txt")); print HOGE "あいうえお\x0Dかきくけこ\x0D"; # -> 0D close HOGE; open(HOGE, ">:encoding(cp932)", encode('CP932', "改行チェック0D0A.txt")); print HOGE "あいうえお\x0D\x0Aかきくけこ\x0D\x0A"; # -> 0D 0D 0A close HOGE; >:encoding()を使って出力した場合、単純に0Aが0D 0Aに置換されていました。perl内部において改行コードは0Aで統一されているという事のようですね。 s/\x0D\x0A|\x0D/\x0A/g とすることにしました。
\r\n でいいじゃないか
テキストモードで\x0aに統一されるのは、 Cのライブラリに依存してる気もするけど、 実際どうなんだろ。
716 :
デフォルトの名無しさん :2010/10/02(土) 23:44:51
UTF-8の改行コードLFでコード書けば日本語の問題も起きないし楽 未だにECUやSJISで書いてる奴ってなんなの?
基本的にはUTF8だけどたまにShift_JISで書かざるを得ない時もある
open(HOGE, ">:raw:encoding(cp932)", encode('CP932', "改行チェック0D0A.txt")) or die $!; print HOGE "あいうえお\x0D\x0Aかきくけこ\x0D\x0A"; # -> 0D 0D 0A close HOGE;
>>716 EUC-JP にしとけば大丈夫! って思ってた時期がありました
今も EUC-JP なのはその名残
新しく書き起こすのは UTF-8 にしてるけど、以前に作ったやつは今も稼動中なので、
そのサイト内で作る場合は EUC-JP なんだよね
改行コードは OS は \r\n なのでそれにあわしてる
改行コードはテキストモードの\nを使えばOSに合うようになってるし、 HTTPのようにCRLFに固定させたいなら、バイナリモードで扱えばいい。
スクリプト自体は基本的にEUCだな 出力のエンコーディングや改行コードは状況に合わせる
eucで書いてeucに変換して作業すれば基本的に何でもできる 世の中にはsjisとeucだけあればいい
723 :
デフォルトの名無しさん :2010/10/03(日) 20:22:35
CP932を無視できるとは剛の者だな。仕事してんの?
JIS 系は無視とは書いてないけどw
CP51932も忘れないであげてください。
726 :
デフォルトの名無しさん :2010/10/03(日) 22:14:01
何をもって「JIS系」と称してるのか知らないが、shift-jis はJIS『日本工業規格』でも無ければJISC『日本工業標準調査会』規格でも無い。 MicroSoftが勝手にでっちあげた文字コードを、日本IBMやらNECやらの当時の乞食どもがさらにいじくり回して分けワカメ状態にして、その上さらに本家MSが泥沼状態に輪を掛けた、私企業謹製カオス文字コードだ。 ちなみに昔のNECのPC-9801シリーズでは、小細工すれば別々の漢字の左半分と右半分を合成して1文字枠に表示できたし、1つの漢字の文字面を左右逆転する事もできた。 今なら何も不思議では無いかもしれないが、当時はROMに搭載されている固定フォントしか表示出来なかった時代だ。 shift-jisの「shift」とは、元々はこの意味(半角単位でイメージ登録しているROMフォントの表示位置をずらす)だ。
JIS X 0208の符号化方式とJIS X 0213の符号化方式(Shift_JIS-2004)、 MS-KanjiとCP932 この二つは分けて考えるべきだと思うんだ。 出所がMS-DOSだったとしても。
つ デファクトスタンダード
SJIS JIS CP932 携帯からこう書くのが面倒だったので省いただけw 誰も工業規格とか言ってましぇんよぅ
出力がShift_JISだと、ついスクリプトもShift_JISで書いてしまうことが。 悪い癖だ。
>>728 なんか良さそうだね。
俺も読んでみるわ。
最近のWebサイトは大体文字コードがUTF-8だから スクリプトもUTF-8で書いて処理、出力もUTF-8 CGIはeucなんて書いてるサイトもあるが、昔の話だと個人的には思ってる。 まだまだsjisのサイトとか残ってるから、絶対にUTF-8とは言えんが。 自分のPC内で処理させるだけなら、自分の好きな文字コード使えばいいだろ。 仕事でPerl使ってると、また別の話。
use strict; use utf8; use Encode; use Encode::JP::H2Z; my $str_z = "Hello World.全角カタカナデス。 12345 67890"; my $str_h = "Hello World.全角カタカナデス。 12345 67890"; binmode STDIN, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; # 全角カナ→半角カナ Encode::_utf8_off($str_z); Encode::from_to($str_z, "utf-8", "euc-jp"); Encode::JP::H2Z::z2h(\$str_z); Encode::from_to($str_z, "euc-jp", "utf-8"); Encode::_utf8_on($str_z); print $str_z, "\n"; # => Hello World.全角カタカナデス。 12345 67890 # 半角カナ→全角カナ Encode::_utf8_off($str_h); Encode::from_to($str_h, "utf-8", "euc-jp"); Encode::JP::H2Z::h2z(\$str_h); Encode::from_to($str_h, "euc-jp", "utf-8"); Encode::_utf8_on($str_h); print $str_h, "\n"; # => Hello World.全角カタカナデス。 12345 67890 めんどくせぇぇぇぇ・・・
use strict; use Lingua::JA::Regular::Unicode; use utf8; binmode STDOUT, ":encoding(cp932)"; my $str_z = "Hello World.全角カタカナデス。 12345 67890"; my $str_h = "Hello World.全角カタカナデス。 12345 67890"; print katakana_z2h($str_z), "\n"; print katakana_h2z($str_h), "\n";
コードもDBも出力もutf-8の場合use utf8のありがたみがあまり感じられない
ActivePerlならppmでも入るよ。
ppmも試してみたのですが、Lingua::JA::Regular::Unicodeはヒットしませんでした。 と思って今もう一度試してみたら登録名がLingua-JA-Regular-Unicodeになっていた。
>>734 Encode.pmのeuc縛りとutf8フラグのコンボが見事に炸裂しとるな
@hoge = qw(-1 1 2 3 4 5 6 7 8 9); @huga = qw(3 6 7 7 7 7 9); @mixed = arrayMix(\@main, \@sub); print @mixed; sub arrayMix(){ my @ary1 = (sort {$b<=>$a} @{$_[0]}); #(1) my @ary2 = (sort {$b<=>$a} @{$_[1]}); my @q = (); my $x = shift @ary1; my $y = shift @ary2; while(1){ if($x>=$y){ push(@q,$x); $x = shift @ary1; next if $x ne ""; push(@q,@ary2); last; }else{ push(@q,$y); $y = shift @ary2; next if $y ne ""; push(@q,@ary1); last; } } return @q; } 2つの昇順の配列を1つの配列にする関数をあれこれと書きなおしつつやっと完成させた。 ついでに並びがバラバラの配列にも対応させようと、(1)の部分にソート処理を付け加えている時に気づいたんだが、 この関数、my @mixed = (sort {$b<=>$a} (@hoge,@huga)); の一行で・・・
今だに携帯向けサイトの大半はshift-JISらしいな。
出力時だけSJISにエンコードすればいいのにね
>>745 〜とか狂うだろ。iconvは頭悪いからな。
windows環境で標準入力が文字化けしてしまいます。 STDOUTをutf-8にすると何故かうまく表示できるのですが、それ以外が化けてしまいます。 これはどういうことなのでしょうか? use utf8; binmode STDIN, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; print @ARGV, "\n"; print "ほげほげ\n"; >test.pl あいう "\x{0082}" does not map to cp932 at test.pl line 5. "\x{00a0}" does not map to cp932 at test.pl line 5. "\x{0082}" does not map to cp932 at test.pl line 5. "\x{0082}" does not map to cp932 at test.pl line 5. "\x{00a4}" does not map to cp932 at test.pl line 5. \x{0082}\x{00a0}\x{0082}¢\x{0082}\x{00a4} ほげほげ STDINを変えても変化なし、しかしSTDOUTを":utf-8"に変えると >test.pl あいう あいう Wide character in print at test.pl line 6. 縺サ縺偵⊇縺・
748 :
747 :2010/10/05(火) 14:25:35
STDINを変えても結果が全く変わらないのはおかしいと思い 引数@ARGVは標準出力じゃないのではないかと思いました。 ぐぐってみるとSTDINと@ARGVは別物で@ARGVの文字コードを指定することは出来ないようでした。 binmode STDINのように簡単に変更することは出来ないんですね。やや面倒くさい。 @ARGV = map{decode('cp932', $_)} @ARGV;としたらうまくいきました。 STDOUTを":utf-8"とするとうまく表示できた理由は、 cp932の引数がutf-8としてエンコードされていたからutf-8としてデコードすると元のcp932に戻る、という過程による物のようでした。
750 :
747 :2010/10/05(火) 15:21:26
間違っていますか。そうですよね。
もしcp932の引数がutf-8として無理やりデコードされているなら
mapでは{decode('cp932', encode('utf-8', $_))}としないといけないはずですから。
実際の所そのコードは化けてしまい何故かdecode('cp932', $_)で正常動作したので疑問に思っていました。
(それと
>>748 ではエンコードとデコードの言葉遣いが逆でした。)
色々と試してみました。
まずrawで出力すると正常に表示されました。
binmode STDOUT, ":raw";
print $ARGV[0],"\n"; # つまり$ARGV[0]はcp932
次にcp932で出力すると化けました。これはcp932をさらにcp932にエンコードしているので当然。
binmode STDOUT, ":encoding(cp932)";
print $ARGV[0],"\n";
次にutf-8で出力すると何故か化けない。これが不思議。
cp932がutf-8として無理やりデコードされているから、utf-8にエンコードして出力するとするとcp932に戻ると思った。
binmode STDOUT, ":utf-8";
print $ARGV[0],"\n";
しかし、不思議なことにこうするとなぜか化ける。
binmode STDOUT, ":raw";
printf "%s\n", decode('utf-8', $ARGV[0]);
もしやと思いこうしてみた。
binmode STDOUT, ":encoding(utf-8)";
print $ARGV[0],"\n";
ビンゴ、同様に化けた。
":utf-8"はutfフラグが立っている場合のみエンコードして、立っていない場合はそのまま出力するんですね。
なぜutf-8の場合だけ":encoding(utf-8)"ではなく":utf-8"と省略して書けるんだろうと思っていましたが、意味が違ったんですね。スッキリしました。
perlもUTF推奨なの? kakasiとか使ってる古いモジュールがEUC限定だったりはしないの?
>>750 use Encode;
my $str = "\x82\xa0\x82\xa2\x82\xa4"; # (CP932) あいう
binmode STDOUT, ':utf8';
print $str, "\n";
binmode STDOUT, ':encoding(utf-8)';
print $str, "\n";
exit;
結果
ツつ�ツつ「ツつ、
ツつ�ツつ「ツつ、
手元では化けるけど、何が違ってるんだろうか。
>>752 my $str = "\x82\xa0\x82\xa2\x82\xa4"; # (CP932) あいう
binmode STDOUT, ':utf8';
print $str, "\n";
binmode STDOUT, ':encoding(utf-8)';
print $str, "\n";
だと
|ツつ�ツつ「ツつ、
|ツつ�ツつ「ツつ、
になるけど
binmode STDOUT, ':utf8';
print $ARGV[0], "\n";
binmode STDOUT, ':encoding(utf-8)';
print $ARGV[0], "\n";
だと
|あいう
|ツつツつ「ツつ、
になった
どういう事だろう
utf に限っては encoding(utf-8) ってやっちゃいけない ってどこかに書いてあったよ なので 「なんでだろう?」 じゃなくて 「そうゆうもんなんだ」 って思うようにしてる
質問させてください
IPアドレスが書かれたtxtから100個ずつ読み込み
このエントロピー計算に当てはめ計算結果を出していく
http://ourfilehost.net/up/file1/img/up1922.bmp 以下のプログラムを作ったのですがどうしても上手くいきません・・・
txtには300個のIPが以下のように書かれています
http://ourfilehost.net/up/file1/img/up1923.txt デバックしてみたところ、問題点は
最初にtxtからIPを100個読み込むif文がうまく行っていないようです
最初のifで1個目から100個目のIPを読み、計算後カウンターを0にして
101〜200まで読み・・・の動作を行うつもりで作ったのですが
どうしても一巡目の100までしか読みません。(プログラムが終了してしまう)
もう一つの問題点は1〜100までの数値で計算結果は1つであるはずなのに
1〜100間の計算でなぜか7個も答えが出てしまう
ここで使用されている計算は100個中に出現するIPを集計して公式に当てはめます
「192〜1」のIPは100個中25個の場合25/100と100個内にある全ての種類を集計します
(25/100、20/100、5/100、18/100、32/100)結果としてはこのような感じです
なので計算結果は300個なら3つしか出ないのですが
計算をする部分でおかしくなっているようです(公式はあっています)
かなり悩んだのですがどうしても答えが出ないので
どうかご教授御願いします
#! c:/perl/bin/perl open(FILE,"testIP.txt"); #ファイル読み込み open(out,">>testccc.cvs"); use strict; use warnings; use utf8; my $count; my $t; my $key; my $nu; my $ref_freq; my %ref_freq; my @x; my @syu; my $v; my $b; my $count = 0; #全体IPカウント my $numcount =0; #抽出するIP用のカウンター my $b = 0;
while ($t = <FILE>){ #IPファイル展開 #IP集計 if($t){ ++$ref_freq{$t}; $numcount +=0; print"++$ref_freq{$t} \n\n"; #チェック用 print"$allcount \n\n"; #値チェック用 if($numcount==100){ #IP100個で集計で計算開始 print"100ko syuukei simasita! \n\n"; #チェック用 foreach my $syu (keys %ref_freq) { #IPの種類分ループ @x[$b] = $ref_freq{$syu}; $count += @x[$b]; my $y=$count; my $num =0; my @pi = map $_ / $y, @x; my $i; for($i=0;$i<=$#pi;$i++){ print"keisann kaisi desu! \n\n"; #チェック用 print"beha $syu \n\n"; #値チェック用 print"pi-ai @pi \n\n"; #値チェック用 print"ekkusuha @x[$b] \n\n"; #値チェック用 print"bunbo $count \n\n"; #値チェック用 print"@pi\n\n"; $num += -($pi[$i]*log($pi[$i]) / log(2)); } 改行の関係で非常に読みにくいので plを最後にうpします
面倒だから全部は読んでないけど、 $numcount +=0; 折角のカウンタ $numcount をカウントアップしてねーじゃん。 このケースなら $. が利用出来るから、 while ($t = <FILE>){ 前処理 if ( $. % 100 == 0 ){ 処理 } 後処理 } の方がスマート。
761 :
756 :2010/10/05(火) 22:50:36
>>760 アドバイスありがとうございます
$numcount +=0; は
うpするときに間違えてました
実際は$numcount +=1;で
実行結果は
>>756 様になります
$. なんか使っちゃ駄目だ
$b はインクリメントも何もやってないが、 @x[$b] の意味は? つか、$b は sort が(略 &shu = 0 # って何だよ? lvalue サブルーチンでも使ってるのか? つか &shu をどこで使ってんだよ、本当は。 $ref_freq = 0; # って一個も使ってないぞ。 %ref_freq=0; # ハッシュの初期化になってねーよ。%ref_freq = (); ってこんな風にかたっぱしからチェックしろと言うのか?
ダウンロードして perl -wc en.pl したところで気が済んだ。
766 :
756 :2010/10/05(火) 23:48:37
>>763 返信ありがとうございます
ネット上から調べて書いているので
見よう見まねで不透明な部分も非常に多いです
foreach my $syu (keys %ref_freq) { #IPの種類分ループ
@x[$b] = $ref_freq{$syu};
$count += @x[$b];
$bには$syuの値が入ってると思っていましたが
実際にプログラムを書いてる最中に
インクリメントしていないのと気がついたので
削ったのですが、削ると計算結果がおかしくなり
でも途中で入ってる数値をprintで確認しても0のまま・・・
keyでハッシュ(連想配列)の中身を取り出す際に必要な物かと
勝手に想像していました。
>>763 は、
「こんなナメた質問をするんじゃねーよ。答える気にもならんよ。」
って暗に書いたつもりだ。言い訳のレスが欲しいわけじゃない。
俺にレスる時間があれば、
>>764 氏のソースをきっちり読み込めば?
(当方は未読だから本当に求めるものが出るか知らんが、)
test
769 :
756 :2010/10/06(水) 00:06:33
>>764 模範解答ありがとうございます
エントロピーの計算は少々違う物でしたが
データ流れは私が求めている物でした
コレを見ながら勉強させていただきます
>>764 には一か所ミスがあるよ!
答えはトリップ!
正解者にはperl一年分をプレゼント!!
ruby一年分なら考えたのに
> calcEntropy ( $#dummy , %ipf ) ; ちゃんと読んでないけどこれたぶん 0+@dummy とか書くべきとこだよね あと$ips[0]が読み飛ばされてたりするけど、 そもそも最初からファイル全部読み込んでおいていいんだったらカウントして100行ごとに云々とかせんでも my $start = 0; while (my @ip100ko = grep { defined } @ips[$start..$start+99]) { 処理 $start += 100; } で終いだよね
>>772 正解!!
#[$i-1]
例えばIPが352個あるときは100,100,100,52の組にすることを想定
my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10');
$ua->timeout(60);
my $cookie_jar =
HTTP::Cookies- >new(file => 'cookie.txt', autosave => 1);
$ua->cookie_jar($cookie_jar);
my $mov_req =
HTTP::Request- >new(GET => $movie_url);
open(MOVFH, '>', $localflvfile);
binmode MOVFH;
my $mov_res = $ua->request($mov_req, ':content_cb' => \&ProgressDownload);
close(MOVFH);
sub ProgressDownload{
my ($chunk, $res, $proto) = @_;
print 'test';
}
LWP のダウンロードの進捗状況を表示してみようと、上記のようにやっているのですがコールバックが呼ばれません。
ダウンロードしようとしてる動画 URL は合っています。 (改造前ではダウンロード出来ています)
なんでコールバック関数が呼ばれないんでしょか・・・
$ua->get($url, ':content_cb' => \&ProgressDownload); これだと呼ばれるのですが、個人的には request で処理したいのに・・・
すんません。 解決しましたw $ua->request($mov_req, ':content_cb' => \&ProgressDownload); じゃなくて $ua->request($mov_req, \&ProgressDownload); っていうだけだった・・・
perlのミスなんてほんのささいなことさ
WWW::Mechanizeオブジェクトの変数を、ファイル化→別プログラムでファイル読み込み→変数再現、ということをやりたくて
Storableを使ってWWW::Mechanizeオブジェクトのクーロンを作ってみたのですが、$mech_clone->contentでエラーとなってしまいました。
どうしたら動作するように出来るでしょうか?
# cat a.pl
use WWW::Mechanize;
use Storable;
$Storable::Deparse = 1;
$Storable::Eval = 1;
my $mech = WWW::Mechanize->new();
my $serialized = Storable::freeze \$mech;
my $mech_clone = ${ Storable::thaw($serialized) };
$mech_clone->get("
http://google.co.jp ");
print $mech_clone->content();
# perl a.pl
Error GETing
http://google.co.jp: Can't call method "add_cookie_header" on an undefined value at a.pl line 11
779 :
デフォルトの名無しさん :2010/10/06(水) 21:10:14
分数でコマンドライン引数を受けてそれを数値化するにはどうしたら良い? $ARGV[1]に (1+1/2)/2 とかが入る。 $argv1 = $ARGV[1]; if($var > $argv1){ 処理; }
>>779 $argv1 = eval($ARGV[1]);
$ARGV[1] =~ m#^[\d()*+/-]+$# or die "こえーのです。\n"; 自分専用ならいきなり eval で済ませそうだけど。
@data =( [qw(data1 data2 data3)], [qw(hugahuga ほげ apa)], [qw(3 のののの jljljkla)], [qw(30987029847 ラリーウォール jljljkla)], ); foreach(@data){ @tmp = @$_; print "$tmp[0]\t$tmp[1]\t$tmp[2]\n"; } >test.pl |data1 data2 data3 |hugahuga ほげ apa |3 のののの jljljkla |30987029847 ラリーウォール jljljkla タブで区切ってもずれてしまうことがあるのですが こういうものをずれないように出力する方法はありませんか? printf("%s\t%s\t%s\n", map{substr($_,0,6)} @tmp);では |data1 data2 data3 |hugahu ほげ apa |3 のののの jljljk |309870 ラリーウォー jljljk のような感じになってしまいました。
>>783 こんなモノがあったんですね。知りませんでした。
どういう事が出来るのか色々と試してみたいと思います。
レスありがとうございました。
HTML::AAとはなんだったのか
正規表現が利用可能なファイル名変更perlスクリプト下さい!
>>786 perl -e '$re = shift; for (@ARGV) { $old = $_; eval $re; rename $old, $_ }' 's/foo/bar/' foo*
788 :
786 :2010/10/08(金) 00:11:13
取得した HTML クッキー この2つを保存しておきゃえぇんとちゃうのん?
>>789 クロージャに対応してないからうまくいかない。
対応してるData::Dump::Streamer等を使え
質問です。 以下のコードで$tmpという一時変数を使わずに同じ処理を行うにはどうすればよいでしょうか? my @lst = ({hoge=>1, foo=>2}, {hoge=>3, foo=>4}); my $tmp = shift @lst; print $$tmp{hoge};
パスワードを sha256 で ランダムの salt付きでハッシュ化して保存するにはどうしたらいいのでしょうか?
print +(shift @lst)->{hoge};
>>794 ありがとうございます。
あなたのおかげで理解が深まりました。
${shift @lst}{hoge}
としてもできるようですね。
だいぶ前に図書館で読んだ本で"コメントが多すぎると実行速度がおちる"と書いてあったのですが、 それは本当なのでしょうか。 もしそれが本当ならばどれほど影響するものなのでしょうか。
>>796 perl はスクリプトを中間形式にコンパイルしてから実行するので、コメントの量と処理速度は関係ない。
ただ同じ内容のスクリプトでも、ファイルサイズや、コード部とコメント部の入れ替わり回数に極端な
差があるなら、ディスクの読み込み速度やCPUパワーが体感差に現れるかも知れない。
それらがどのくらいの差になるかは当然実行環境依存。
798 :
796 :2010/10/08(金) 17:26:46
>>797 気にする程でもない、ってことでいいですか?
本体が数行しかないのにコメントが1GBぐらいついてるとか、 猛烈にコメントつけた文字列のevalをループの中でぶん回すといった ほとんどありえないことをしない限り気にしなくていいと思います。 % cat hoge.pl use Benchmark qw(timethese); use constant BASE => '$x = 100;'; use constant COMMENTED => ("# hoge hoge \n" x 10000) . '$x = 100;'; timethese(undef, { base => sub { eval BASE; }, commented => sub { eval COMMENTED; }, } ); % perl hoge.pl Benchmark: running base, commented for at least 3 CPU seconds... base: 4 wallclock secs ( 3.19 usr + 0.00 sys = 3.19 CPU) @ 53085.27/s (n=169342) commented: 3 wallclock secs ( 3.00 usr + 0.00 sys = 3.00 CPU) @ 940.33/s (n=2821)
下記のtest.plを動かすと何も出力されないのですが、 パイプをオープンした場合には文字コードを指定することが出来ないのでしょうか? <test.pl> use utf8; binmode STDOUT, ":encoding(cp932)"; open(TEST, "<:encoding(cp932)", "perl test2.pl|"); #open(TEST, "perl test2.pl|"); print while(<TEST>); close TEST; <test2.pl> use utf8; binmode STDOUT, ":encoding(cp932)"; print "hoge\n"; print "huga\n"; print "あいうえお\n";
test2.pl STDOUT = utf8 test1.pl STDOUT = CP932 TEST = utf8 test1.pl binmode STDOUT, ":encoding(cp932)"; open(TEST, "perl test2.pl|") or die $!; binmode TEST, ":utf8"; print while(<TEST>); close TEST; test2.pl use utf8; binmode STDOUT, ":utf8"; print "hoge\n"; print "huga\n"; print "あいうえお\n";
803 :
デフォルトの名無しさん :2010/10/08(金) 20:53:26
>>796 インタプリタがコメントを読み飛ばすのに微量なCPUパワーを使うからじゃないの?
コンパイルして使う言語は、コンパイル時にコメント削ぎ落とすけど
インタプリタ型はソースを直接読むじゃない
これは滅茶苦茶スペースやタブとか改行とか入れる場合も該当するでしょう
痛くも痒くも無い程度には低下する筈
そんなナノセカンドのパフォーマンスの低下も許せないなら
実行ファイル作るべき
interpret 開始前に注釈は除かれますお
>>804 ではその除く作業に微量なCPUパワーを消費するのでしょう
Perlはコンパイルしてから実行するんだが何言ってんのこの子
釣りかどうか迷う書込みが
>>806 コンパイラでもインタプリタでもなんでも、
コンパイルとかするときにはどうしてもコメント取らなきゃいけないじゃん
でもそのためのCPUの仕事なんて微々たるもんだとおもうよ
コメントの末尾が5Cになってると次の行も無視されるけどな
コメントが仮に1G付いてるなら、その1Gファイルを読破しなきゃ どこを取り除けばいいのかコンパイラは分かりませんがな
テキストフォームの一文字目に禁止文字を設定するにはどうしたらいいですか? (金額入力場所で文頭に0をつけさせたくない)
speedycgi使おうぜ
>>811 unless($data =~ /^[1-9][0-9]*/){
# 例外処理
ハッシュでkeyの値が hoge{'1.2'} hoge{'1.3'} hoge{'1.7'} hoge{'0.5'} hoge{'2.1'} みたいなパラメタがあるとき key値が1〜2の間の値のものをまとめて処理する、ということをしたいです (上の場合だと、1.2 1.3 1.7のもの hoge{'1.*'}みたいなことを) このときどういうアクセスの仕方があるでしょうか?
>>814 1例として、
for my $key ( grep { 1 < $_ && $_ < 2 } keys %hoge ) {
print $hoge{$key}, "\n";
}
配列に値が入っていて、それをコンマ区切りで出力したい 最後だけコンマを付けないスマートなやり方は?
join ',', @array
引数について 3つの帰り値と引数を持つ関数を作ったら、1つ目の引き数が受け取れませんでした。 my($a, $b, $c) = kansuu( "aaa", "bbb", "ccc"); sub kansuu{ my $p1=$_[0]; my $p2=$_[1]; my $p3=$_[2]; } $p1には"bbb"、$p2に"ccc"で、$p3には値が入りません。 これは何が悪いのでしょうか。 Perlの仕様を調べてみても分りませんでした。
値の返し方では
>>796 CGIブームの頃に低レベルな著者が書いたperl解説本が世にあふれた。
ラクダ、ラマ、などの一部を除いてperl解説本は読んではいけない。
値の返し方は return( $rc1, $rc2, $rc3 ); で返してます。
じゃあ何も間違ってない筈だけど、
書いたのと
>>818 が違ってるとしか
有難う御座います。 とりあえず保留にして、配列渡しか何か別な方法で回避してみます。
>>823 回避もなにも、
>>818 が一番素直な方法
これでできないなら、何かが決定的におかしい
回避方法を探るよりも、別にあるだろう原因を探った方がいい
>>815 なるほど。確かにそのやり方はありますね。
grepとか使えない環境なので、perlのロジックのみでいければ助かります。
grepってperlの組み込み関数なんですけど
そういえば… ローカルにインストールしたperlには無い=unix環境じゃないと使えない と思い込んでしまっていました 大変失礼しました
玄人っぽい言葉と用語を並べる
>>814 が
何も知らないズブの素人だと露見した瞬間であった……
まったくもって、恥ずかしい限りで 少し頭冷してきますよ
>>818 には書いてないけど、どっかに shift があるんじゃね
>>818 $[ が-1になってるとかw
$[ = -1;
my($a, $b, $c) = kansuu( "aaa", "bbb", "ccc");
sub kansuu{
my $p1=$_[0];
my $p2=$_[1];
my $p3=$_[2];
print "p1=$p1¥n";
print "p2=$p2¥n";
print "p3=$p3¥n";
}
_ □□ _ ___、、、 //_ [][]// ,,-―''':::::::::::::::ヽヾヽ':::::/、 誰 弄 こ // \\ // /::::::::::::::::::::::::::::::i l | l i:::::::ミ だ っ の  ̄  ̄  ̄/ /:::::::::,,,-‐,/i/`''' ̄ ̄ ̄ `i::;| あ た 変 ―`―--^--、__ /:::::::::=ソ / ヽ、 / ,,|/ っ の 数 /f ),fヽ,-、 ノ | 三 i <ニ`-, ノ /、-ニニ' 」') !! は を i'/ /^~i f-iノ |三 彡 t ̄ 。` ソ ハ_゙'、 ̄。,フ | ) ,,, l'ノ j ノ::i⌒ヽ;;|  ̄ ̄ / _ヽ、 ̄ ゙i ) ` '' - / ノ::| ヽミ `_,(_ i\_ `i ヽ、 ∧ ∧ ∧ ∧ /// |:::| ( ミ / __ニ'__`i | Y Y Y Y Y ,-" ,|:::ヽ ミ /-───―-`l | // | | // l::::::::l\ ||||||||||||||||||||||/ | // | / ____.|:::::::| 、 `ー-―――┴ / __,,..-'| /゙ー、,-―'''XXXX `''l::,/| ー- 、__ ̄_,,-"、_,-''XXXXX | /XX/ XXXXXXXXXX| | _, /ノXXXXXXXXXX|
833 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/09(土) 19:05:12
はじめまして GD::GraphがJcode使っててむかつくので なんかグラフ表示させるやつ教えてください javascriptでもいいですか?教えてください クソコテですが まじめに教えてください
おまえは帰れ
CGIだったら別だけど、 グラフを得るのが最終目的だったら、Rとか使った方が綺麗
836 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/09(土) 20:02:09
javascriptでやるから
がんばってください
さようなら (・∀・)カエレ!!
839 :
デフォルトの名無しさん :2010/10/10(日) 20:30:12
my $y,$m,$d; $y = 2010; $m = 10; $d = 01; $r = $y . $m . $d; print $r; こうやると、 2010101 と表示されてしまうのですが、ゼロが消えないようにするにはどうすればいいですか? 20101001となるようにしたいです。 よろしくお願いします。
試してないけど$d = "01"
printfを使うのだ
>>839 my($y, $m, $d);
$y = 2010;
$m = 10;
$d = 1;
$r = sprintf('%04d%02d%02d', $y, $m, $d);
print $r;
0が先頭つけると8進数として評価されるから気をつけろ
print 010 #=> 8
フォーマット部分がシングルクオートだとなんか不思議な感じに見える
844 :
デフォルトの名無しさん :2010/10/10(日) 22:23:22
おまえら馬鹿か my ($y,$m,$d) = ('2010','10','01'); print "$y$m$d";
>0が先頭つけると 日本語でおk
846 :
デフォルトの名無しさん :2010/10/11(月) 01:33:13
>>845 0を数値の先頭につけると8進数として評価されるから気をつけろ
8進数は誰が使うんだろう
TMTOWTDIの問題なのに、なぜ
>>844 は罵倒せざるを得なかったのか。
>>847 PDP-11なんかで8進数がよく使われていたらしくてその残滓じゃないか
chmodの第1引数とか…
HTMLに埋め込みでテキストを表示させたいんだけど $file = "test.cgi"; open(FILE, "$file"); @logs = <FILE>; close(FILE); @logs = reverse(@logs); chomp(@logs); ($data,$text)=split(/<>/,@logs[0]); $text = "$data:$text<br>"; print "Content-type: text/html; charset=Shift_JIS\n\n"; print "document.write(\"$text\");\n"; これでテキストだけだと表示されるんだけど、 画像とかリンクはさむとなんにもでないんですよ
>>849 工作じゃねえよ
ネットに嘘の情報が蔓延らないように監視してんだろうが
ヒント:エスケープ
scriptタグもなしにdocument.writeが処理されてしまうのか
現在のコンソールのロケール?エンコード?を取得する方法を教えてください。
Windows(cp932)でもLINUX(UTF-8)でも動作するようにしたいんです。
>>4 の方法だと Windowsでしか動かせませんよね。
> binmode STDOUT => ":encoding(cp932)";
の「cp932」の部分を書き換えないと。
イメージとしてはこんな風にしたいんです。
> $encoding = エンコードを取得する何らかの方法;
> binmode STDOUT => ":encoding($encoding)";
本番では中国や台湾やフランス、ロシアなどで動かす予定があります。
いちいち手作業で書き換えてられません。
一覧用意して選ばせてその設定保存 固定メッセージとかは language とかのディレクトリに言語別に用意 なにか難しいことある?
長文を書いてしまったため論点がズレてしまったようですね。 もういっかい書きます。質問の趣旨は 現在のコンソールのロケール?エンコード?を取得する方法を教えてください。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ です。 無理ならあきらめます。
$ENV{LANG}
ActivePerl Win32::OLEでのエクセル操作についてお力を貸して頂ければ幸いです。 環境は OS:WinXP Excel2003 Perl 5.12.2 クリップボードにあるUnicodeのテキスト(簡体字やハングル)を貼付けたいのですが、うまくいきません。 PasteSpecial()を使ってみましたが指定が悪いのか、処理が帰ってこず、固まったままになってしまいます。 ↓ソースここから use strict; use Win32::OLE; use Win32::OLE::Const 'Microsoft Excel'; use Tkx; # Unicodeをクリップボードにコピーするので Win32::Clipboard ではない use HTML::Entities; use utf8; my $excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit') || die; my $book = $excel->Workbooks->Add || die; my $sheet = $book->Worksheets('Sheet1') || die; my $str = HTML::Entities::decode('丽'); Tkx::clipboard('clear'); Tkx::clipboard('append', $str); $sheet->Cells(1,1)->Select; $book->ActiveSheet->PasteSpecial(); #←ここがよく分からない $excel->{DisplayAlerts} = 'False'; $book->SaveAs('c:\test.xls'); $book->Close(); VBAのPasteSpecialのリファレンスも見てみたのですが、Perlでの引数の指定の仕方が分からず苦戦しております。 どなたかよろしくお願い致します
863 :
862 :2010/10/11(月) 23:18:14
訂正します ×my $str = HTML::Entities::decode('丽'); ○my $str = HTML::Entities::decode('&#20029;'); 要するに、数値文字参照をUnicodeで変換してエクセルに貼ることをしたいです。 $sheet->Cells(1, 1)->{Value} = Tkx::clipboard('get'); としてみましたが、これだと文字化けしてしまってダメでした。 なので、エクセルの 形式を選択して貼付け→Unicodeテキスト を実現したいです。 何方かお知恵を貸してください。お願い致します。
初めてのPerl第5版を読んでいるんですが、 given ("alfred") { when (/fred/i) { say "Name has fred in it"; continue } when (/^Fred/) { say "Name starts with Fred"; continue } when ('Fred') { say "Name is Fred"; continue } # しまった! default { say "I dont see a Fred"; } } みたいなコードは、 Name has fred in it I don't see a Fred となるので、I dont see a Fredにならないために3番目のcontinueをbreakにすればいいよ! そしてbreakは省略できるよ!ってかいてるけど、やっぱりI dont see a Fredになっちゃいます ほとんど本に書いてあるコードそのままなんですが、間違ってますかね?
865 :
864 :2010/10/11(月) 23:46:45
書き忘れましたが274,275ページです
>>859 `chcp` でどうなのよ。
Perl板で質問しているから論点がずれているん
だと思うけど。これは OS ごとに違うから残りは
別の板で聞くといいよ。
>>864 continueはwhen/defaultの評価を続けるって意味で、
Cみたいなfall throughは出来ないよ。
last で抜けられるんじゃない?
引っかからない条件のところをbreakにしても効果ないだろ。 when (/fred/i) {...} をdefaultの手前に移動してcontinueを 取れば望んだ動作になると思うけど。 given ("alfred") { when (/^Fred/) { say "Name starts with Fred"; continue } when ('Fred') { say "Name is Fred"; continue } when (/fred/i) { say "Name has fred in it"; } default { say "I dont see a Fred"; } }
RSS ですべてのタイトルとリンクを取得するにはどうしたらいいのでしょうか?
以下のコードを実行すると最新のいくつかしか取得できません。Google
Reader だと、どんどん掘り下げて古いものを読んでいけるのでやり方がある
と思うんですが、、、 教えください。
#!/usr/local/bin/perl
use strict;
use Encode;
use LWP::Simple;
use XML::RSS;
my @RSS_URLs = ("
http://slashdot.jp/slashdotjp.rss ");
for $url (@RSS_URLs) {
my $document = LWP::Simple::get($url) or die "cannot get content from $url";
my $rss = XML::RSS->new;
$rss->parse($document)
for (@{$rss->{items}}) {
print encode('shift_jis', $_->{title}), "\n";
}
}
>>870 取得したRSSにそこまでしか書かれてないからなので
XML::RSSの使い方としては問題ない。
それ以上掘り進むやり方はサイトごとに違うので
Perlの話題じゃないね。
872 :
864 :2010/10/12(火) 09:51:07
>867-869 ありがとうございます。 本にはbreakするかのように書いてあったのですが間違ってるみたいですね >869 のようにするのが正解っぽいです ありがとうございました
HTML が過去ログへのリンクを勝手に張ってくれる規格じゃないのと同じ。 あくまでも提供される1つのファイルに過ぎない。 Google が過去のまで取得できてるのは、RSS を講読してからのデータを保持してるから出来てるわけです。
本も読んでないし given〜when文も使ったことないけど
ふつう常識的にはこう書くでしょ。
given ("alfred") {
when (/fred/i) { say "Name has fred in it"; break }
when (/^Fred/) { say "Name starts with Fred"; break }
when ('Fred') { say "Name is Fred"; break }
default { say "I dont see a Fred"; break }
}
で、break は省略しても構わないから、こう書いてもオッケってこと。
given ("alfred") {
when (/fred/i) { say "Name has fred in it" }
when (/^Fred/) { say "Name starts with Fred" }
when ('Fred') { say "Name is Fred" }
default { say "I dont see a Fred" }
}
本の例題がひねくれ過ぎてるのか、
>>864 が曲解してるのか。
switch文の中でcontinueを使う場面は滅多にないから、そんな書き方を覚える必要はない。
>>864 がしようとしてることは、昔でいえば、GOTO文だらけのスパゲッティプログラム
の書き方を覚えようとしてるようなもんだな。
>>874 お前はもとのプログラムでやりたいことを全くわかってないな。
はい、わかってませんよ
878 :
デフォルトの名無しさん :2010/10/12(火) 16:34:38
よく1ライセンス1万円とかでCGI(Perl言語)が販売されているけど、 あれ、一回買っちゃえば、もうひとつライセンスが欲しくてもコピペしちゃえば ばれなくない? インデックスもされないし…
>>878 バレなければ何をしてもいいという発想はモラルを疑う
中国人は国へお帰りください ( `ハ´)
いいえ、生真面目にライセンスを結ぶ日本人が世界的に見て特殊なのです。
882 :
デフォルトの名無しさん :2010/10/12(火) 21:31:18
やっぱりばれないですよね? 別にやるとは言ってないですけど…
はいはいばれないんじゃないしらねーよくそしてねろかす
884 :
デフォルトの名無しさん :2010/10/12(火) 21:42:20
ですよねw
timelocalで、実存しない日付を指定すると、out of rangeで終了してしまうのだけど、 エラー判定だけもらって、終了させない方法を教えてください。
use Time::Local; my $time = eval { timelocal(0, 0, 0, 29, 1, 2010); }; unless ($time) { エラーのときの処理 } print $time; エラー文の内容まで必要だったら$@を参照するなりTry::Tinyなりで
evalですね、ありがとう。
標準出力に出力していたものを、代わりに変数に入れたいと考えています。 print "hoge" このprint行には変更を加えず、前後行の変更のみで 変数に hoge を入れるにはどうすればよいでしょうか?
889 :
デフォルトの名無しさん :2010/10/14(木) 05:08:05
hoge = hoge =hage
my $hoge = eval( (<<'HOGE' =~ /^\s*print\b(.+)/m)[0] ); print "hoge"; HOGE
891 :
s :2010/10/14(木) 07:43:13
tie使っていけるんじゃいっけ?
892 :
s :2010/10/14(木) 07:54:19
893 :
デフォルトの名無しさん :2010/10/14(木) 07:56:35
perlてこの先生き残れるの? すでに人気でも開発頻度でもphpに抜かれてるじゃん いまさらやるメリットは?
open(my $fh, ">", \(my $str)) or die $!; my $old = select($fh); print "hoge"; close($fh); select($old);
phpなんてwebぐらいにしか使えんがPerlは汎用だし
898 :
デフォルトの名無しさん :2010/10/14(木) 19:36:11
phpって宗教がかった新書版出す出版社じゃないの?
RubyやPythonも触ってみたけどやっぱPerlが一番しっくりくるな。俺みたいな変態には。
900 :
デフォルトの名無しさん :2010/10/14(木) 20:13:55
Python遅すぎワロエナイ
901 :
888 :2010/10/14(木) 20:47:17
902 :
デフォルトの名無しさん :2010/10/14(木) 21:08:33
なぜlastの代わりにbreakと書いても誰も怒らない
Rugyって早いの?
Rubyだた・・
>>905 rubyは1.8と1.9でも違うし、JRubyやIronRubyなど複数の実装があるから、
rubyスレで聞いたほうが早いと思うぞ。
breakがlastの代わりにならないから
909 :
デフォルトの名無しさん :2010/10/14(木) 23:07:32
phpは4と5で違うのはもちろん、5.0と5.1と5.2とで全然違うよ。 5.3(実質php6 - unicode)なんて別次元。 死んだほうが早いと思うぞ。 っーか、21世紀にもなってunicode未対応とか、goto文始めましたとか・・・冷やし中華かよ!
日本語でおk
911 :
デフォルトの名無しさん :2010/10/14(木) 23:13:31
英語でおk
>>907 それはそうなんだけど、perl使いから見た体感速度を聞きたかったの。
913 :
デフォルトの名無しさん :2010/10/14(木) 23:18:08
perl遅いよ
お前は何を言っているんだ
915 :
デフォルトの名無しさん :2010/10/14(木) 23:34:22
るびーのほうがはやいよ
r、 ぃ ヽ、 _ノ〃 、\ `丶、 , ' ´// 、ヽ `丶\ rvy'´ ' \\ ヽ ゝ ‐ 7⌒く 厶ィ′ / ヽ、 y'′ `ァ ☆ 、_フ_彡' . / L _人 _ハ ′ ` '. ′ , ノ y=-ミ、 >‐=く ヽ、_ `て_ " 、ニ, " >^ ⌒^丶 、_/^Y^、_, '⌒′ { ∧_ } _厂(::X::)^{ (/ 、 { } └-ー冖ー-┘
ヒマだったので30行程度のどうでも良いようなアクセサを、Moose使って書き直してみました。 その後でClass::Accessor::Fastとベンチ比較すると、 CAF>>>>>>>>>>>>>>(60倍の壁)>>>>>>>>>.Mooseだったのですが、そんなモンでしょうか。 ちなみに比較内容は use Class::Accessor::Fast qw(antlers); # or use Moose; has 'hoge' => (is => 'rw', isa => 'Str'); の2行だけです。
>>912 エラトステネスの篩でベンチしてみた。
言語ごとに調整してないから、あまりアテにならないが。
つーことで、私は、Ruby1.8は遅くて、Ruby1.9は速いという認識。
Ruby1.8.7 100%
PHP5.2.6 146%
Python2.5.2 294%
Perl5.10.0 534%
Ruby1.9.0 539%
amazonのAWSにアクセスして商品情報とれるようなパッケージがperl以外にあるんなら 他のも使ってみる
920 :
デフォルトの名無しさん :2010/10/15(金) 14:06:19
ある とだけ言っておこう
Rubyのことは知らないけど下らない使い捨てスクリプトまでOOで書くのは嫌だなあって感じ OOで書く必要があるならJavaを使うし・・・ 実行速度重視ならC/C++を使うだろうし なんだかRubyって中途半端な感じがしてならない
まあ、趣味でしょ 習得していちばん得しそうなのはpythonだろうし
>>922 得するために値切ろうとして努力を惜しむと、結局得しないという説もある
わりと有名な話
Pythonじゃ飯は食えないから使えねえ
飯とか関係ないし cost-benefitのことだよ
関係あるだろ しかもなんか言葉の使い方おかしいし
ま、なんだかんだ言ってPerlが一番カッコいいからな。
確かに
!stock
飯を食うというならVB最強となる不思議
VB って意外と求人多いんだよねw
技術というよりは、ごちゃごちゃの集団の中に何があるかを把握していることが求められる CPANもそんなようなもんだが
933 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/16(土) 14:08:27
Perlやってるやつって 情報発信能力が高い なんで??????
ま、どの言語やれば一番飯食えるかとか言ってるやつは能無しだわな
ごはんはおかず
御飯のおかずにはPythonがいちばんおいしそう Pythonの干物とか
Perlは汁物的扱い
なでしこは観賞用
初めて聞いてみます。 perlは始めて三日の初心者です。 CentOSのマシンのCOM1にシリアル接続のモデムを繋いで、 以下のようなscomm.plを実行してみたのですが、 OK[cr]が返ってきてほしいのに、AT[CR]が返ってきます。 なぜでしょうか? ********************* #! /usr/bin/perl use Fcntl; sysopen (COM, "/dev/ttyS0", O_RDWR) || die; # ttyS0=COM1, S1=COM2, ... syswrite (COM, "AT\n", 3) || die; $buf = ""; $data=""; do { $buf=""; sysread (COM, $buf, 1) || die; $data=$data . $buf; } while ($buf ne "T"); #sysread (COM, $data, 2) || die; print $data, "\n"; *********************
940 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/16(土) 23:52:02
今すげえむかついてるんですよね
$a ||= 'a'; という書き方はどういう構文なのでしょう? $a = $a || 'a'; と同じ?
はい
943 :
941 :2010/10/17(日) 02:03:57
>>942 ありがとう。
perlのソースで分からない部分って、ググってヒットさせるの難しいよね…
記号の短い組み合わせなので、キーワードを無視されてるような。
>>943 それはPerlに限ったことじゃねぇ
Perlならperldoc見るかラクダ本見るか汁
その手のはPerl 代入演算子 でググればヒットする
最近のPerlなら以下も使うよね。 $a //= 'a';
pythonでワンライナーって出来る?
>>947 可能か不可能かといえば可能だからぐぐってみ。やりたくなるのは相当の
変態さんだけだと思うがw
ラクダ本(p.267) に書いてある通りやってみたのですが、うまくいきません。 何でなんでしょうか? sub test(\$) { my $x = shift; print $x; } my $x = "foo"; test $x; ラクダ本の通りならば "foo" になるはずなんですが、 実際には、変数 x のアドレスの様なものが表示されます。 Active Perl の 5.10.1 です。
print $$x;
>>952 なるほど!ラクダ本は
print "you gave me $$x\n"
の様になっていたのですが、余分の $ は、お金の単位だと思ってましたw
ありがとうございました。
954 :
デフォルトの名無しさん :2010/10/18(月) 03:01:47
perlでunicodeのU+010000 … U+1FFFFFの文字列を全て、 〓(U+3013)に置き換えたいのですが、 元データがutf8の場合、置換式をどのように書けばいいでしょうか 上記範囲のutf8文字コードは、 [F0-F7] [80-BF] [80-BF] [80-BF] で、 〓のutf8文字コードは、 [E3] [80] [93] です よろしくお願いします
955 :
デフォルトの名無しさん :2010/10/18(月) 03:07:01
エスケープ文字だから
956 :
デフォルトの名無しさん :2010/10/18(月) 12:19:09
>>954 s/[\x{010000}-\x{1FFFFF}]/〓/g
でいけそうな気がする
>>954 utf8フラグ付きで、5.8.1以降なら
use utf8;
{
no warnings 'utf8';
tr/\x{010000}-\x{1fffff}/\x{3013}/;
}
no warnings 'utf8' は何のため?
>>958 unicodeの範囲を超えているので、use warningsしていると
(5.11以降?で)警告が出ます。その抑制です。
↓コレ
Unicode non-character %s is illegal for interchange
文字列$strの中に英数字と!、% 以外の文字が含まれているかどうか判定する為の効率のいい命令文教えてください。
>>960 命令じゃなくて正規表現でいいと思う
$hoge=~[^\w!%:]みたいな?
\wはアウアウ
>>954 s/([\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF])/\xE3\x80\x93/g;
>>959 なるほど。それは知らなかったので勉強になった。
ところで、
U+010000 … U+1FFFFF
と
[F0-F7] [80-BF] [80-BF] [80-BF]
って数が合わなくね?
後者はきっかり21ビット(2^21)だけど前者は上2桁が01〜1F
なので21ビットに少し足りない(2^21 - 2^16)
965 :
デフォルトの名無しさん :2010/10/19(火) 00:01:32
>>956-957 ,963
多くの方に質問に答えていただき、
ありがとうございました
そのまま変換したら一部文字化けが発生したので、
splitで1文字ごとに分離し、それを1文字ずつ、
s/^[\x{010000}-\x{1FFFFF}]$/〓/;
という式で変換したら、
無事目的の動作をしてくれました
>>964 最初の[80-BF]([F0-F7][80-BF]←この部分)は、
ちょっと変な扱いになっているようです
http://ja.wikipedia.org/wiki/UTF-8
966 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/19(火) 00:27:52
いたら返事して
CPAN から Module::Setup を入れてみたんだが、 CPANシェルで upgrade すると、 >Package namespace installed latest in CPAN file >Locale::Maketext::Guts undef 1.13 FERREIRA/Locale-Maketext-1.13.tar.gz >Module::Setup::Flavor::CodeRepos undef 0.01 YAPPO/Module-Setup-0.06.tar.gz なんて言われて、 Locale::Maketext が 1.16 から 1.13 に、 Module::Setup が 0.09 から 0.06 になってしまうのは何故なんだろう?
970 :
デフォルトの名無しさん :2010/10/19(火) 22:43:13
perlはライブラリ入れられない時があるから捨てた
なら来るなよ
>>969 COBOLとPerlのキメラみたいなソース…メンテナンスどうすんだろw
>>969 まさにダクトテープ。
Perlらしい使い方だね。
>>969 最初以外なぜオーディエンスが笑っているのかがわからん
ヲタトーク
976 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/20(水) 00:07:12
ルー大島はもうかえれ
979 :
デフォルトの名無しさん :2010/10/20(水) 12:11:33
猫いじり
HTML::TreeBuilderでtree->parse_file("foo.html")するとき、ファイルサイズが大きいとものすごく時間掛るんですけど速くする方法ないですか?
perl test.pl とすると次のようなエラーがでます。 何か足らないものがあるのでしょうか?cygwinを使っています。 Can't locate Win32/IEAutomation.pm in @INC (@INC contains: /usr/lib/perl5/5.10/i686-cygwin /usr/lib/perl5/5.10 /usr/lib/perl5/site_perl/5.10/i686-cygwin /usr/lib/perl5/site_perl/5.10 /usr/lib/perl5/vendor_perl/5.10/i686-cygwin /usr/lib/perl5/vendor_perl/5.10 /usr/lib/perl5/vendor_perl/5.10 /usr/lib/perl5/site_perl/5.8 /usr/lib/perl5/vendor_perl/5.8 .) at test.pl line 6. BEGIN failed--compilation aborted at aa.pl line 6.
Can't locate Win32/IEAutomation.pm
983 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/21(木) 17:03:16
PerlTK使って人いるかい!? そうかい!いないかい!
CGI::Sessionで、$session->header( -secure => 1 )みたいなカンジで secure flagつける方法はないでしょうか?
>>984 残念だけどCGI::SessionのheaderメソッドにはCGI::Cookieに追加のパラメタを渡す
機能が用意されてないようだ。
マニュアルにあるようにheaderメソッドの呼び出しは
$cookie = CGI::Cookie->new(-name=>$session->name, -value=>$session->id);
print $cgi->header(-cookie=>$cookie, @_);
と同じなので、ばらして書いて1行目のCGI::Cookie->newに好きなパラメタ追加すればいい。
986 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/21(木) 18:00:48
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
987 :
984 :2010/10/21(木) 18:01:13
>>985 うーん、やはりそうですか。
ご丁寧にありがとうございました。
988 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/21(木) 19:14:02
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
WEBサイトのヘッダーとボディーをくっつけて文字列として一挙に取得するにはどうすればいいのでしょうか?
一瞬、関数型言語の Grassスレかと思った。
クリックしたらカウントが増えるようなボタンって作れますか? 1日1回クリックをするとURL先に飛んでなおかつカウントを取るような感じで・・・
とりあえず見積りだせばいいですか?
>>993 5万でひきうけてやんよ。それ以下なら受けない。
Javaの方使ってできました ありがとうございました
998 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/22(金) 16:46:00
こんな
999 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/22(金) 16:48:40
クソスレ
1000 :
Perl忍者 ◆M5ZWRnXOj6 :2010/10/22(金) 16:49:24
必要です
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。