Perlについての質問箱 44箱目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://pc11.2ch.net/php/)

このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。

http://www.perl.org/get.html
● 2010/07/31 現在の最新版: 5.12.0

▼ 前スレ
Perlについての質問箱 43箱目
http://pc12.2ch.net/test/read.cgi/tech/1266565626/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-7 あたり
2デフォルトの名無しさん:2010/07/31(土) 10:54:14
[プログラミング自体の経験が無い奴はまずココを読め]
Perl プログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/9784873114279/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/books/detail/4-7561-3057-7.shtml (修正)
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perl5.8.x のドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi (停止中)
perldoc.jp: ttp://www.perldoc.jp/
perldoc.com: ttp://www.perldoc.com/
3デフォルトの名無しさん:2010/07/31(土) 10:55:55
4デフォルトの名無しさん:2010/07/31(土) 10:56:59
# [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 でエンコードする必要があります。
5デフォルトの名無しさん:2010/07/31(土) 10:58:19
6デフォルトの名無しさん:2010/07/31(土) 11:16:13
7デフォルトの名無しさん:2010/07/31(土) 12:48:42
8デフォルトの名無しさん:2010/07/31(土) 13:35:52
9デフォルトの名無しさん:2010/07/31(土) 18:28:59
ところで整数の算数を文字列でやってるんだけど
250桁同士の掛け算に15分かかる。
効率いい方法ってある?
10デフォルトの名無しさん:2010/07/31(土) 19:13:40
use Math::BigInt lib => 'GMP';
11デフォルトの名無しさん:2010/07/31(土) 19:53:59
今まで時間かかってた600桁同士の掛け算が0.1秒くらいで終わったよ……
どうもです
12デフォルトの名無しさん:2010/07/31(土) 20:21:18
UNIXの勉強中。
基礎を学んでUNIXC少しやってVBちょっとやったらCGIに入る予定だ。
目標KENT WEB!
多少なりとも足固めしてしてからサイトから落として徐々に作り変えて自分のサイトにしていく。
どうせ誰も見てないサイトだ。何やってるかなんてわかりゃしない。
がんばろ!
13デフォルトの名無しさん:2010/07/31(土) 23:34:40
釣り針でかすぎだろw
14PHPヲタ:2010/07/31(土) 23:36:57
>>12
こういう初心者最高すぎるよ!
15PHPヲタ:2010/07/31(土) 23:40:17
>>12
友達になろう
16PHPヲタ:2010/08/01(日) 00:09:38
>>12
君は最高だ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!っ
17デフォルトの名無しさん:2010/08/01(日) 00:34:59
なんか基地外がいついたな
18デフォルトの名無しさん:2010/08/01(日) 01:13:05
CGI覚えてちゃんとできるようになったら仕事もらって在宅ビジネスにするんだ。
KENTのように10年くらいで覚えて独立も視野にいれて頑張る。
儲かるぞーーーー、夢の上では^^;
貸借対象表と損益計算書でROA計算してROEもだしてヂュポンシステムで財務レバレッジの適正値も出すんだ。
KENTに仕事回してもらえるくらいにならんといかんな。
無いな^^;
だが、ROAはだせるはずだ。がんばろ。
19デフォルトの名無しさん:2010/08/01(日) 01:37:14
1のテンプレの順番変えたんだけど逆効果だったか
20デフォルトの名無しさん:2010/08/01(日) 02:34:46
すれたておつ
逆効果ってこたないだろうけど効果もないような気はする
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年です 現在は自宅療養で職探しです
22デフォルトの名無しさん:2010/08/01(日) 14:50:54
BigInt使わないときのアルゴリズムってどんなの?
2321:2010/08/01(日) 14:54:54
>>22
聞いてますか?
24デフォルトの名無しさん:2010/08/01(日) 16:33:24
テンプレ見ない奴はどうしたってみないもの
2521: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
ってでます

27デフォルトの名無しさん:2010/08/01(日) 17:48:23
推測に失敗してんじゃないの?
文字化けしないって思う方が理解できん
28名無し:2010/08/01(日) 17:49:32
>>27
早く解決方法教えろやこら?!
なあ?推測とか単語並べてんじゃねえ世早く教えロやこら!!
クソがよwwwwwなあ?wwww教えろよ派やくwwwwなあ?wwww早く教えてください
29デフォルトの名無しさん:2010/08/01(日) 17:50:46
と・・判別には成功してるのか。
とりあえず出力を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
間違えました
文字化けしてるワードは他のやつです教えてください
33デフォルトの名無しさん:2010/08/01(日) 18:29:27
さっきふと思ったけど、端末への出力の時点で
化けてる可能性はないんだろうか。
あとテスト書いた方が問題切り分けやすいよ
34デフォルトの名無しさん:2010/08/01(日) 18:31:29
>>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





35デフォルトの名無しさん:2010/08/01(日) 18:33:42
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です^^
自分に非はありませんでした^^
38デフォルトの名無しさん:2010/08/01(日) 18:51:55
>>37
非ありまくりだろ
39デフォルトの名無しさん:2010/08/01(日) 19:43:11
>>38 これにさわるなよ↓
^^;
40デフォルトの名無しさん:2010/08/01(日) 21:43:47
xslateというテンプレートエンジンが速いそうですが、mobasifと比べてどっちが速いでしょうか。
ベンチマーク探したけど、両者を比較しているのは見つかりませんでした。

というか xslate のほうは後発なんだから、高速だと主張するならTTなんかじゃなくて
mobasifと比べてほしいよね。
41PHPヲタ:2010/08/01(日) 22:05:14
なんで2chって名無しなの?
まじ名前ってあんだから名前つければいいのにwwwwwばかじゃねえのほんとあほくせえ
42デフォルトの名無しさん:2010/08/01(日) 22:29:58
sub foo($;$){
↑これの$;$はどういう意味ですか?
43デフォルトの名無しさん:2010/08/01(日) 22:35:13
プロトタイプ
44デフォルトの名無しさん:2010/08/01(日) 22:42:23
ありがとうございます。
受け取る引数の型や数を指定できるんですね。
45デフォルトの名無しさん:2010/08/01(日) 22:54:02
既存のパッケージのクラスにメンバ変数を追加する方法を教えてくれ
use foo::bar
{ package foo::bar;
my %hash
sub hash {return \%hash}
}
としてみたんだが、どうもこれはクラス変数になるっぽい
メンバ変数を追加する方法を教えてください
46PHPヲタ:2010/08/01(日) 23:32:59
>>42
しってるのに聞くてめえは老人かぼけが!!!!!!^^
47デフォルトの名無しさん:2010/08/02(月) 22:37:10
今ここで質問したら、自力でやったのでは無く2chの人たちに教えてもらった形になるので質問したくないです
どうすればいいですか?ここで質問したら恥ずかしいと思ってます
かといってPerlの場所できいたら 初心者だなこいつ って思われるから聞きたくないです
どうすればいいでしょうか教えてください
48PHPヲタ:2010/08/02(月) 22:44:45
>>47
しねよてめえはよ!!!!!!!!!!
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
http://xxxxxxxx.xxx/xx.htmlのcharsetがEUC-JPです utf8じゃないです
おしえてください
51デフォルトの名無しさん:2010/08/03(火) 12:32:53
binmode
52デフォルトの名無しさん:2010/08/03(火) 13:06:55
$res->decoded_content(charset => "euc-jp")
53デフォルトの名無しさん:2010/08/03(火) 13:10:02
↑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);

出来ないです!!!!教えてください!!
55デフォルトの名無しさん:2010/08/03(火) 13:29:49
>>53>>52の補足なんだけど
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")
これぬけてました
これがあってもできません
58デフォルトの名無しさん:2010/08/03(火) 13:43:10
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(改行)が入っちゃう場合どうすればいんですか
教えてください!!!!!!!!
61デフォルトの名無しさん:2010/08/03(火) 17:06:45
>>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
きみすごいな〜 よかったらボクの弟子になりませんか?
天才すぎるよ〜本やサイトみるより君にきいたほうがすごいからねえ
63デフォルトの名無しさん:2010/08/04(水) 03:22:01
彼なりの感謝の言葉なので責めないであげてください
64デフォルトの名無しさん:2010/08/04(水) 17:36:22
ネット系でおすすめのモジュールありますか?
HTML::TagParser
LWP::UserAgent の他にネットで加工する時に役に立つモジュール教えてください。
65デフォルトの名無しさん:2010/08/04(水) 17:40:40
>>64

use URI::Amazon::APA; # 弾氏作成モジュール
use LWP::UserAgent;
use XML::Simple; # http://search.cpan.org/~grantm/XML-Simple-2.18/lib/XML/Simple.pm
use YAML::Syck;
use Encode ;
66デフォルトの名無しさん:2010/08/04(水) 17:43:54
>>65
ありがとうございます。

他の人々もあったら教えてください。
67デフォルトの名無しさん:2010/08/04(水) 19:05:50
LWPで取得したHTMLファイルのAタグのhrefを絶対パスに書き換えたいんですけど、
URIを相対パス→絶対パスに置換してくれるモジュールないですかね?
68PHPヲタ:2010/08/04(水) 19:17:35
>>67
てめえそんなの正規表現でやりぇお!!!!!!!!!!!
あたりまえだろ!?!!!!てめえそれでもperlやってんのか!?
モジュールとかなら質問してもいいけどなああ?そんな当たり前の素人みたいな質問してんじゃねえぞ!!!!!!!!!!!!
69デフォルトの名無しさん:2010/08/04(水) 19:17:38
>>67
URIでいいんじゃねーの? LWPあるんなら入ってるだろ。
70PHPヲタ:2010/08/04(水) 19:19:12
だぶるコンボ成功・・・・
2010/08/04(水) 19:17:35
2010/08/04(水) 19:17:38
71デフォルトの名無しさん:2010/08/04(水) 19:50:03
>>69
まさに求めていたものでした。thx
72デフォルトの名無しさん:2010/08/05(木) 07:39:08
$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
嘘教えたな!!!!
77デフォルトの名無しさん:2010/08/05(木) 10:37:18
>>74
IO::All::LWPを突っ込め
78デフォルトの名無しさん:2010/08/05(木) 10:46:40
>>77
はい隊長!!!!!!!!!!
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
誰か教えてくれ!!!
88デフォルトの名無しさん:2010/08/05(木) 23:36:10
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;とやってもできませんでした
教えてください
95デフォルトの名無しさん:2010/08/06(金) 12:17:22
>>94
できません。$1は読み出し専用。マニュアルに書いてある。

ttp://perldoc.jp/docs/perl/5.10.1/perlvar.pod

# $<digits> $1 $2 $3

最後のパターンマッチで対応する括弧のサブパターンにマッチした文字列が入っているが、
既に抜けてしまったブロックでのパターンマッチは勘定に入れない。 (記憶法: \(数字) の
ようなもの。) これらの変数はすべて read-onlyで、現在の BLOCK に動的なスコープを
持ちます。
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
返事ありがとうございます
なんかいい解決方法ありませんか?
98デフォルトの名無しさん:2010/08/06(金) 12:39:57
誰だよ初心者にIO教えた奴は
99デフォルトの名無しさん:2010/08/06(金) 12:44:15
何がしたいかが全く伝わらない
$|=1;ってこと?
100デフォルトの名無しさん:2010/08/06(金) 12:47:36
ちょっとやってみるので後で聞くから待っててください
101デフォルトの名無しさん:2010/08/06(金) 12:48:20
質問ぐらい分り易く書けよ
102デフォルトの名無しさん:2010/08/06(金) 12:53:02
$|=1;
これやったらなんか できそうです

又後で質問します
103デフォルトの名無しさん:2010/08/06(金) 13:00:08
$|=1;
一つで解決しました!!!!!!!!!!!!!!!!!!!!
うおおおおおおおお!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


!!!!!!!!!!!!!!
104デフォルトの名無しさん:2010/08/06(金) 13:04:13
>>98
私ですが何か?
105デフォルトの名無しさん:2010/08/06(金) 13:06:48
おいこれでボットつくれた!!!!!!!!!!!!
ありがとう感謝するよ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
最高だよ!!!!!!!!!!!!!!!!!!
106デフォルトの名無しさん:2010/08/06(金) 13:16:32
分かったから!少なくして
107デフォルトの名無しさん:2010/08/06(金) 13:19:02
夏休み時期らしい展開だねぇ。
108デフォルトの名無しさん:2010/08/06(金) 13:21:33
夏ですから。
109デフォルトの名無しさん:2010/08/06(金) 15:45:16
2chはこんなもんだ。
高望みするなよ。
110名無し:2010/08/06(金) 16:28:15
>>109
了解しました!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!
!!!!!!!!!!!
!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
111デフォルトの名無しさん:2010/08/06(金) 16:29:37
ageんなsageろよボケ
112名無し:2010/08/06(金) 17:42:16
>>111
すみません
113デフォルトの名無しさん:2010/08/06(金) 17:44:28
>>110-112
コピペ化ケテーイ
114名無し:2010/08/06(金) 17:51:25
>>113
意味文恵

い み ふ み え
115デフォルトの名無しさん:2010/08/06(金) 23:52:00
筋悪なコードばっかり書いてると伸びしろがなくなるぞ。
つーか、もういっぱいいっぱいだろ。
116名無し:2010/08/06(金) 23:56:43
>>115
うぜえんだよしね
117名無し:2010/08/07(土) 00:04:15
>>115
誰に言ってるのかな?
どこが悪いとかいってみ?な?おめえの判断がむかつくんだよ みすかされてるみたいでよなあ

おめえ strictとかきにしてるばかくそばかだろ?何番目のレスのコードがわるいかいってみ?

いっぱいいっぱいとかウゼエなお前は死んじまえよ速く  レスじゃなくて 他のこいってるのかな?
お前死ねよな?クソがネット社会や著名人にすがりついていきがってんじゃねえよかす

その筋悪とか伸びしろとかいわれるとむかつくんだ 謝れ 謝罪しろ
いっぱいいっぱいとか 謝罪しろ  お前マジ死んでほしい
118デフォルトの名無しさん:2010/08/07(土) 00:14:53
はいはい夏夏
119デフォルトの名無しさん:2010/08/07(土) 00:23:45
今年の夏は暑いせいか厨の活動も活発的だな
120デフォルトの名無しさん:2010/08/07(土) 11:39:16
perl -lpe '' hoge.txt
行末改行を削除したいのですが、-lオプションの使い方が間違ってるのかうまくいきません。
初歩的な質問で申し訳ないですが、どうやればいいか教えて下さい。
121デフォルトの名無しさん:2010/08/07(土) 12:39:30
>>120
無難に行けば良いんじゃないだろうか。
perl -e 'print map{chomp; $_} <>'
122デフォルトの名無しさん:2010/08/07(土) 12:53:05
>>121
もっと短くかけるよ
p -e 'p m{c;$_}<>'
123デフォルトの名無しさん:2010/08/07(土) 13:10:56
連想配列で、キーのところに
$ha{'hoge'} って感じで ' ' で囲うけど、ここって
囲わなくても正常に動作しちゃうよね。
これって仕様? それとも糖衣構文?
124デフォルトの名無しさん:2010/08/07(土) 13:31:05
仕様でしょ
125デフォルトの名無しさん:2010/08/07(土) 14:03:18
そうかー!仕様かー!ありがとう!
126デフォルトの名無しさん:2010/08/07(土) 14:05:48
連想配列のキーの仕様について
書いてあるHPとかある?
仕様といわれてもソース無しだと納得できん
127デフォルトの名無しさん:2010/08/07(土) 14:14:39
ていうか、今はじめて知ったんだけど
$a = hoge ;
ってエラーになんないんだな。いいのかこれ。
128デフォルトの名無しさん:2010/08/07(土) 14:40:07
barewordって仕様
129デフォルトの名無しさん:2010/08/07(土) 15:49:25
そんな君にはuse strict。あと$aはやめとけ
130デフォルトの名無しさん:2010/08/07(土) 17:30:04
>>129
use strict; つけてもbarewordって有効になっちゃう・・・
うちのperlがバグってんのか
131120:2010/08/07(土) 18:17:11
>>121,122
ありがとうございます。
結局、-lは使い方が分かりませんでしたが解決することができました。
132デフォルトの名無しさん:2010/08/07(土) 19:10:06
use strict信者おおすぎ^^;
夏だね^^;
133デフォルトの名無しさん:2010/08/07(土) 19:17:16
自己紹介ですか
134デフォルトの名無しさん:2010/08/07(土) 19:19:17
use strict use strcit騒ぎさわぎすぎですね
そんなの昔からしってましたし^^;(汗
135デフォルトの名無しさん:2010/08/07(土) 19:21:25
20〜30代の若造は何で 株、マネジメントなど経済学をかじるやつが増えるんですかね?
なんでですか(笑) バカ企業人さん教えてください^^;
136デフォルトの名無しさん:2010/08/07(土) 19:28:14
バカ企業じゃなくてニートでしたか(苦笑)
137デフォルトの名無しさん:2010/08/07(土) 19:57:20
コテ付けろ
NG出来ない
138デフォルトの名無しさん:2010/08/07(土) 19:59:41
$a=`ls`;
とかやって実行結果取得したときの結果から改行を取るのって
やっぱchopとかchompとかしかないの?
139デフォルトの名無しさん:2010/08/07(土) 20:36:04
>>138
そんな簡単な事質問するまでの事か七?
140デフォルトの名無しさん:2010/08/07(土) 20:55:32
>>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、問題が低レベルすぎた

^^;
145デフォルトの名無しさん:2010/08/07(土) 21:37:55
!!!と^^;をNGしとけば事足りるか
146デフォルトの名無しさん:2010/08/07(土) 21:39:26
コテつけてほしいですか?
〜か 〜だな って僕が言えば回避できませんね(笑)
147デフォルトの名無しさん:2010/08/07(土) 21:44:51
みなさんガリガリ君は何味が好きですか?

私はパイナップル味とコーラ味が好きです

今日はマスカット・アレキサンドリア味食べたら美味しかったです

ガリガリきみが40円台で買えるから嬉しいです きみ等も食べたまえ
148デフォルトの名無しさん:2010/08/08(日) 12:55:27
CGIをやろうと思いperlをはじめたのですが、どこでPerlをダウンロードするのかわかりません。
あと、Perlのメリットって何ですか?
どなたか教えてください。
149デフォルトの名無しさん:2010/08/08(日) 16:56:46
どこにでもまず最初からインストールされてることがメリットなので
いまからインストールしますとかいってるやつにはメリットは無い。
150デフォルトの名無しさん:2010/08/08(日) 17:25:39
>>149
Active perlいれろと言われたんですが ダウンロード先とかがわからないです
英語が苦手なので
DOSプロンプトとかでインストールしたりしますか?あまりPCいじったことないので
メリットどうこう、そういうのは人によって違うのでは?こちらが悪いならあやまります。
すみません。
151デフォルトの名無しさん:2010/08/08(日) 17:31:56
10日までに教えてくれませんか?
研究でPerlを使うので、10日までに入れないと間に合いません。
インストール方法教えてくれる人が要らしたらご教授ください。
152120:2010/08/08(日) 18:01:40
153151:2010/08/08(日) 18:03:16
すみません、>>151の名前は残ってしまっていただけなので無視して下さい
154152:2010/08/08(日) 18:04:46
また間違った・・・
×151
○152
155デフォルトの名無しさん:2010/08/08(日) 19:45:53
>>152
そこ見ました。
どれをダウンロードすればいいんですか?
時間的に足りるか心配です。
156デフォルトの名無しさん:2010/08/08(日) 19:47:22
ここはそういうことを聞く場所じゃないから
Yahoo知恵袋でやってろよ
157デフォルトの名無しさん:2010/08/08(日) 20:05:00
>>155
多分、「Download ActivePerl 5.12.1 for Windows (x86)」って書いてあるボタン。
158PHPヲタ:2010/08/08(日) 20:09:59
>>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刀七人衆って誰ですか?教えてください
161デフォルトの名無しさん:2010/08/09(月) 15:40:18
・宮川達彦
・高木浩光
・牧大輔
・池?智洋
・山口徹
・大沢和宏
・伊勢幸一
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
暁みたいな人たちは誰ですか教えてください
165デフォルトの名無しさん:2010/08/09(月) 17:55:49
そういうのはYahoo知恵袋あたりで訊け
166デフォルトの名無しさん:2010/08/09(月) 19:27:12
質問したんですが 回答がきません教えてください
167デフォルトの名無しさん:2010/08/09(月) 20:12:04
ファイルから1行だけ読むかっこいい関数無い?
168デフォルトの名無しさん:2010/08/09(月) 20:29:54
外部コマンド実行したときの戻り値を取得する方法を教えて。
標準出力や標準エラー出力なんかどうでもいい。
169デフォルトの名無しさん:2010/08/09(月) 20:37:56
perldoc -f system
170デフォルトの名無しさん:2010/08/09(月) 20:39:03
>>169
サンキュー
171デフォルトの名無しさん:2010/08/09(月) 20:50:44
>>167
$u=<FH>;だけでいいだろ
おまえばか?

>>168
禁術をおおしえてやろう火遁
$u=system("ls|true")?$?:$?;
print $u;
172デフォルトの名無しさん:2010/08/09(月) 20:55:57
>>171
オープンとクローズがうっとおしいので
173デフォルトの名無しさん:2010/08/09(月) 21:05:05
>>172
コマンドつかえよなああああああ
がりがりくん食ってて片手でうってるから思いつかねえんだよ
174デフォルトの名無しさん:2010/08/09(月) 21:21:55
>>173
ところでついでに質問なんだけどさ、
<FH>;
だけで$_に入るんだとばっかり思ってたけど実際には
$_=<FH>;
って書かないと入らないんだな。知ってた?
175デフォルトの名無しさん:2010/08/09(月) 21:22:48
知ってたけどあえていわなかったんだよ
なめてんのか?
176デフォルトの名無しさん:2010/08/09(月) 21:25:22
>>175
で本題なんだけど、なんで while(<FH) とかだと $_ に入るの?
177デフォルトの名無しさん:2010/08/09(月) 21:28:28
仕様
178デフォルトの名無しさん:2010/08/09(月) 21:28:51
Larryちゃんがそう決めたから
179デフォルトの名無しさん:2010/08/09(月) 21:29:19
文法上なにがどういう省略されてるのかわからない
これ結構 謎なんだけど <FH>だけでは$_に入らないのに
while( $_=条件式 )みたいな隠れ代入があるわけ?
でももしそうならwhile(1)の中は$_=1になっちゃうよね?
180デフォルトの名無しさん:2010/08/09(月) 21:29:43
>>177
>>178
ありがとうチームメンバー
181デフォルトの名無しさん:2010/08/09(月) 21:32:30
>>177-178
入力シンボルだけが while ループの条件文の中にある場合は (そしてこの場合にかぎり)、 値は変数"$_" に自動的に代入されます。

ほんと例外的な仕様だったんだなー。勉強になったわ。
182デフォルトの名無しさん:2010/08/09(月) 21:41:51
僕のチームに入りたい人いますか?
183デフォルトの名無しさん:2010/08/09(月) 21:46:45
そこらへんも詳しく書いてあるリャマはやっぱり良書だぬ
184デフォルトの名無しさん:2010/08/09(月) 21:48:02
本に頼ってんじゃんじゃねえよ!!!
http://d.hatena.ne.jp/perlcodesample/20100228/1269445781
ここ最高だぞ^^
185デフォルトの名無しさん:2010/08/09(月) 21:55:23
>>183
詳しく書いてなかったぞ
186デフォルトの名無しさん:2010/08/09(月) 22:03:39
>>185
へりくつほざいてんじゃねえぞこら
187デフォルトの名無しさん:2010/08/09(月) 22:15:00
>>185
俺が持ってるのは第三版でpp.104-105に詳しく書いてある
版が違うか別の本の話をしてるのかもね
188デフォルトの名無しさん:2010/08/09(月) 22:17:03
俺ってまともなレス返された事無いしな
189デフォルトの名無しさん:2010/08/09(月) 22:29:00
普段の行いの問題
190デフォルトの名無しさん:2010/08/09(月) 23:18:46
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1345009138

質問したからこたえてね @_@
191デフォルトの名無しさん:2010/08/09(月) 23:19:14
Perlでリンクドリストを使いたいときはどうしたらいいですか?
192デフォルトの名無しさん:2010/08/09(月) 23:25:44
>>191
異星人乙津
193デフォルトの名無しさん:2010/08/09(月) 23:27:27
>>190
はてなでやれ
194デフォルトの名無しさん:2010/08/09(月) 23:28:23
>>193
おおめえどこまで つれてくんだよ

つぎはライブドアでやれ
アメブロでやれ
グリーでやれとかなあ????
195デフォルトの名無しさん:2010/08/09(月) 23:43:03
うん
196デフォルトの名無しさん:2010/08/09(月) 23:50:05
うんwwwwwwwwwwwwww
wwwwwwwwwwwwww
wwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwww
197デフォルトの名無しさん:2010/08/10(火) 00:51:58
ここが 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的なことがしたいのです。
シングルクオートでもダブルクオートでも構いません。ただしきちんとクオートが対応していることが条件とします。
199デフォルトの名無しさん:2010/08/10(火) 05:42:40
引用符のエスケープやめて q や qq でクオートすればかすかに短くなるかな
200デフォルトの名無しさん:2010/08/10(火) 10:27:36
>>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個つけてるの?おしえて
203デフォルトの名無しさん:2010/08/10(火) 17:33:58
後のほうでどんな意味があるか知らんけど、単なる代入でしょ。
204デフォルトの名無しさん:2010/08/10(火) 19:22:58
>>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
よくワンライナーでかくきあるね^^;
めんどくさそうだし しょぼそうだし
ファイルにかいたほうがいいしね^^;
206perl ninja ◆M5ZWRnXOj6 :2010/08/11(水) 00:24:02
pspからも書き込めるんだな!!!!!!!!!!!!!!! !! ! ! ! !! ! ! ! ! ! !! ! ! !!! !!! !!!!!!!!!    KENT-WEBマンせー
207デフォルトの名無しさん:2010/08/11(水) 16:47:06
http://codepad.org/KFzgb4MH

数独を解くプログラムを作っているのですが2つ数字が入ったところで止まってしまいます
どうしたらよいかお教えください

q001.txtの中身はこれです↓

004001020
000300005
507060400
030009008
005020600
600700040
003050102
900004000
060100300

よろしくお願いします
208デフォルトの名無しさん:2010/08/11(水) 16:49:20
>>207
一番手っ取り早いのは、動かないコードを捨てて動くコードを使う。
例えばココとか。
ttp://spring.sakurasaita.net/perl/28.html
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を全て削除したいのですが、どうすればいいのですか?
211デフォルトの名無しさん:2010/08/12(木) 02:00:03
212☆忍者Perl☆ ◆M5ZWRnXOj6 :2010/08/13(金) 15:52:41
VVSは、日本のクラッカー。数学者である事が知られるが、所属組織等は不明。数種のコンピュータ言語を使いこなすが主にPerlを得意とする。
彼の作成した「ちりりduke」は現在、掲示板荒らし系スクリプトの中で最も高性能であるとされている。

VVSってやつここにいるの?誰だ?Perlやってるしwwww

http://ja.wikipedia.org/wiki/VVS
きになる忍刀とかのなかにはいないよね?
213デフォルトの名無しさん:2010/08/14(土) 00:43:13
>>212
そろそろうざいわ

言っとくけど俺をあまりナメないほうがいいよ
VIPでコテハンやってるしクソコテ潰すくらいの影響力は持ってるから
くだらないことで刺激して後悔しないようにね
214デフォルトの名無しさん:2010/08/14(土) 08:16:22
キムチがムキになってるヽ(・∀・。)ノ☆
215デフォルトの名無しさん:2010/08/15(日) 09:09:41
DBICのサンプルで「AutoCommit => q{1}」という書き方を見たんですが、これってどうして「AutoCommit => '1'」と書かないんでしょうか?
同じ意味になると思ってるんですが、間違っていますか?
216▲☆◎Perl忍者◎☆▼ ◆M5ZWRnXOj6 :2010/08/15(日) 14:43:24
217デフォルトの名無しさん:2010/08/17(火) 14:48:39
>>213
いいから早く潰してみせろよバカ
218デフォルトの名無しさん:2010/08/17(火) 15:00:07
>>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

これを日付の昇順でやりたいんですが でません 教えてください
220デフォルトの名無しさん:2010/08/17(火) 15:50:50
join のとこを sprintf に置き換え
221デフォルトの名無しさん:2010/08/17(火) 15:53:59
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もしらべてみますいい方法おしえてください
224デフォルトの名無しさん:2010/08/17(火) 16:14:02
unix timeはお前が

my $time=(stat "$_")[9];

で$timeに入れてる数のことだよ。1970年1月1日0時0分0秒(UTC)からの
秒数で表した日時で、1つの数だから大小比較や足したり引いたりが楽。
つーかわかっててlocaltimeで変換してたんじゃないんかい。
225デフォルトの名無しさん:2010/08/17(火) 16:57:16
全データ件数÷1ページに表示させたい件数=ページ数

上記の計算結果が割り切れ無ければ、ページ数を1足す
(この余りが幾つかは気にしなくていい)

全データ件数−(最初に割り出したページ数×1ページに表示させたい件数)=最後のページの件数

全ページ数の範囲外のページ指定は1ページ目にしてしまう
226デフォルトの名無しさん:2010/08/17(火) 17:21:03
pagerも作れないようならプログラマはあきらめろ
227デフォルトの名無しさん:2010/08/17(火) 17:26:43
Data::Pager オススメ。たいした計算じゃないんだけど
めんどくさいのでこれ使うと楽だよ。
228デフォルトの名無しさん:2010/08/17(火) 17:26:49
>>224
ネットではお前 おいクソで良いけど リアルでは君かさんずけしろクソ^-^
あああそうか そういういみね 11223434333みたいな数値ね 文字だけだったからみのが

>>225
やっぱ割ればいいのかあ
そういう公式どっかにのってるの??
きみあたまいいね〜〜〜〜


229デフォルトの名無しさん:2010/08/17(火) 17:33:15
>>226
逆鱗にふれたようだねえきみは
クソガリそうだけど 殴りアイする?

ぼこぼこになるよ君 プログラマに鳴りたくてもなれない奴いんだからな
てめえは死んでほしいよ
230デフォルトの名無しさん:2010/08/17(火) 18:32:51
プログラミングは発想だよ
231デフォルトの名無しさん:2010/08/17(火) 19:51:20
さすがに小学校の算数の知識は必要だと思うぞ。
232デフォルトの名無しさん:2010/08/17(火) 20:29:01
>やっぱ割ればいいのかあ
小学校からやり直した方がいいんじゃね?
233デフォルトの名無しさん:2010/08/17(火) 21:07:55
ActivePerl-5.10.1(WinXP)のWin32::OLEでhotmailにログインすると、
Pass長16文字くらいまでしか対応できないのでしょうか?
(20字以上ログイン失敗、17〜19字は未確認)
どこか参考になるドキュメントとかあれば教えてください。
234デフォルトの名無しさん:2010/08/17(火) 21:32:36
LWP を使いなよ
235デフォルトの名無しさん:2010/08/17(火) 22:15:00
Data::Pager
英語ばりばり クソイですねえしらべますかあ
236デフォルトの名無しさん:2010/08/17(火) 22:26:11
ページング処理むずすぎvvvvvvvvvvvvvvvvvvvvvvvvvvvv
237233:2010/08/18(水) 00:56:41
>>234
すみません、情報不足でした。
IEでログインして、そのままhotmail(WindowsLive)を使いたいのです。
「ブラウザとして振舞う」事は出来ても、そのセッションをIE/Fxで使ったりできませんよね?

・・・と確認してたらWin32::IEAutomationなるものを見つけましたので、調べて見ます。
(ぶっちゃけランダムな英数記号16字のパスワードで何も問題ないのですが・・・)
238デフォルトの名無しさん:2010/08/18(水) 08:44:52
239デフォルトの名無しさん:2010/08/18(水) 12:46:40
[% xxxx %]ってなんなの?
教えて
[% %]これよくみかけるど
240デフォルトの名無しさん:2010/08/18(水) 13:00:13
誰か Data::Page Data::Pagerのサンプルみせて
10県表示みたいな
241デフォルトの名無しさん:2010/08/18(水) 13:07:47
つ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個ちゃんと認識してくれてるの?

意味が分からないんですが教えてください
243デフォルトの名無しさん:2010/08/18(水) 13:31:35
例えば全要素数が14個ページあたり10個の1ページ目
といったら何番から何番の要素を出せばいいかって計算
するだけで、実際にその数字にしたがって物を揃えたり
表示したりするのは使う人の仕事だよ。
244デフォルトの名無しさん:2010/08/18(水) 14:40:00
<a hrefでnextページのやつつかえばいいんだろ^^

xxx.cgi?page=$xx->next_pageみたいに
245デフォルトの名無しさん:2010/08/18(水) 14:56:08
>>244
うん
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って何だったか教えてください
249デフォルトの名無しさん:2010/08/18(水) 17:04:40
>>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最高!!とか思ってたりするんですか?教えてください
252デフォルトの名無しさん:2010/08/18(水) 19:39:47
>>251
うん
253デフォルトの名無しさん:2010/08/18(水) 20:16:12
Perl大嫌い! って人も同じくらい居そうだがw
254デフォルトの名無しさん:2010/08/18(水) 20:58:28
Perlのすごいところってやっぱり 正規表現やテキストファイルの扱いやすさ?
などネットワーク系?CPANのモジュール?

これしか知らないけどなにかある?

>>253
そういうひともいるみたいですねえ〜^ ー^
255デフォルトの名無しさん:2010/08/18(水) 20:59:25
Perl通っぽくいうにはどんなのあるかな?

上のだとありがちだから
256デフォルトの名無しさん:2010/08/19(木) 16:58:04
モジュールのたぐいは一切使えない環境ですが
それでもperlはよく使います。
257デフォルトの名無しさん:2010/08/19(木) 21:09:06
バッチ処理代わりに使ってるなあ。
258デフォルトの名無しさん:2010/08/19(木) 22:15:16
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
みたいにやりたいんですが
260デフォルトの名無しさん:2010/08/20(金) 11:08:42
>>259
出来合いのは知らないけど

*CORE::GLOBAL::glob = \&適当な関数

でオーバーライドできるから好きなの書けばいいんじゃないか?
261デフォルトの名無しさん:2010/08/20(金) 11:10:53
>>260
頭良いねえ
262デフォルトの名無しさん:2010/08/20(金) 11:40:19
@file=<f/*.{jpg,png,gif,bmp,JPG,PNG,GIF,BMP}>;

こっちのほうがはやいかな^^;
考えるより
263デフォルトの名無しさん:2010/08/20(金) 12:09:40
@file=grep/\.(jpe?g|png|gif|bmp)$/i,<f/*>;
264デフォルトの名無しさん:2010/08/20(金) 12:14:37
それかんがえたけどね
拡張子がそれだとうまくとれないんだよね
他の名前のファイルはいるからね

グロブで正規表現使えたら最高だけどね^
265デフォルトの名無しさん:2010/08/20(金) 15:46:50
glob関数はUNIXシェルのファイルグロブ互換だから、
それ以上のことがやりたきゃ他の方法と併用するのが筋だと思う
というか>>263でだめな理由がわからん
266デフォルトの名無しさん:2010/08/20(金) 16:19:10
267デフォルトの名無しさん:2010/08/20(金) 17:15:22
>>265
頭の良い人はそういうところまで考えるんですよ
268デフォルトの名無しさん:2010/08/20(金) 22:55:12
http://d.hatena.ne.jp/yukikimoto/20100201/1265032276
ここの

__DATA__

@@ index.html.ep

<%= $message %>

や@@とか% %とか_DATA_とかなんですか?
なんかよくわからないんですが検索してもひっかからないし
意味教えてくださいお願いします。
269デフォルトの名無しさん:2010/08/20(金) 23:11:14
>>268
__DATA__から先の部分はDATAというファイルハンドルで読み込むことができる。
perlとして決まってるのはここまでで、読んだ後どう使われるかはプログラム次第。
270デフォルトの名無しさん:2010/08/20(金) 23:43:09
@@と%%は?
271デフォルトの名無しさん:2010/08/21(土) 09:45:27
>>270
たぶんそれを目印にしてなんか加工するプログラムなんだろうけど、それは
プログラムを読んで理解しろってことだ。perlとしてはただの文字列。
272デフォルトの名無しさん:2010/08/21(土) 10:20:54
HTMLにコードを埋め込む目印によくそういうのを使う
簡単な解説もあったよ
http://d.hatena.ne.jp/perlcodesample/20091217/1260183022

ちなみにこれなんかと似てる
http://jp.rubyist.net/magazine/?0017-BundledLibraries
273デフォルトの名無しさん:2010/08/21(土) 10:54:38
Mojoliciousフレームワーク使ってるみたいだからそれの勉強もしないと。
とりあえずここ。

ttp://wiki.livedoor.jp/mojolicious/
274デフォルトの名無しさん:2010/08/21(土) 11:34:46
my @arr = qw(foo bar);
print map { s/^(.+)$/「$1」\n/g, $_ } @arr;

実行結果
1「foo」
1「bar」

この"1"はどこから出てきて、どうすれば消えるのでしょうか?
275デフォルトの名無しさん:2010/08/21(土) 11:45:22
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;
にすればいい
コンマでなくセミコロンで区切る
276デフォルトの名無しさん:2010/08/21(土) 11:47:32
>>274
1はs///gで置き換えられた要素の数。
s///gの後がセミコロンじゃなくてコンマになってるせいで
mapの返り値が (1, "「foo」\n", 1, "「bar」\n") になってる。
277デフォルトの名無しさん:2010/08/21(土) 11:48:17
>>274
s///の戻り値。(1回置換したから1)
方法はいくつかあるけど、簡単なのは「,」じゃなくて「;」にしろ。

print map { s/^(.+)$/「$1」¥n/g; $_ } @arr;
278デフォルトの名無しさん:2010/08/21(土) 11:48:57
おまえら張り切りすぎww
279デフォルトの名無しさん:2010/08/21(土) 11:49:07
>>275
>>276
>>277

誰の説明が一番わかりやすかった?
280デフォルトの名無しさん:2010/08/21(土) 11:49:23
>>278
しかも全員説明が違うw
281忍者Perl ◆M5ZWRnXOj6 :2010/08/21(土) 11:55:34
グリー社員の説明が一番わかりやすいっす!!シュッシュ
282デフォルトの名無しさん:2010/08/21(土) 11:55:59
こういうケースでありがちなトンデモ解説が混じってなくてつまんねえお
283デフォルトの名無しさん:2010/08/21(土) 11:57:49
じゃあトンデモ解説をねつ造しようぜ!
284274: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
286デフォルトの名無しさん:2010/08/21(土) 12:10:40
>>283
Larryがコミケでプリキュア同人誌の売り子やってた
287デフォルトの名無しさん:2010/08/21(土) 17:59:32
emacsスレを荒らしてるやからをこっちで引き取ってもらえないだろうか
288デフォルトの名無しさん:2010/08/21(土) 18:10:09
真性のようなので黙してNGすべし
289デフォルトの名無しさん:2010/08/21(土) 18:25:56
つーか彼は8/10にこのスレで発生したからもうすでに見えなくなってた
290忍者Perl ◆M5ZWRnXOj6 :2010/08/21(土) 23:26:48
$a=10;
\$aって$aのリファレンスですが

$a=[ {a=>10,b=>20},{u=>30,i=>40}];
これってなんていえばいいんですか?

無名ハッシュの無名配列っていうんですか?

読み方が分からないです教えてください。
291デフォルトの名無しさん:2010/08/22(日) 03:40:06
略して、ムハムハって呼べばいいんじゃね?
292デフォルトの名無しさん:2010/08/23(月) 12:24:09
プログラムを一気に起動させたいんですが

シェルで perl xx.plっていうのを新規ウインドウを立ち上げまくってやるのが大変です

っでwhileで繰り返しやってsystem(perl xx.pl)ってやっても1回しか起動されず
どうやれば一気に起動して実行することができるのでしょうか?
教えてください
293デフォルトの名無しさん:2010/08/23(月) 13:23:07
バッチファイルかシェルスクリプト
294デフォルトの名無しさん:2010/08/24(火) 01:14:11
perl のwebフレームワークでおすすめなのは何がありますか?
295デフォルトの名無しさん:2010/08/24(火) 03:16:03
>>292
system("$^X xx.pl &")
296デフォルトの名無しさん:2010/08/24(火) 11:28:46
>>269
ヒアドキュメントってやつ?
ヒアじゃない感じだけど
297デフォルトの名無しさん:2010/08/24(火) 12:01:49
openするとき、どうして
open my $FH "< hoge";
はOKなのに
open my FH "< hoge";
がNGなのはなぜ?
298デフォルトの名無しさん:2010/08/24(火) 13:25:13
これは酷い質問w
299Perl忍者 ◆M5ZWRnXOj6 :2010/08/24(火) 13:33:12
myとかは変数につけるやつだから

そんなのもわからないの?

知恵おくれ(笑)
300デフォルトの名無しさん:2010/08/24(火) 19:33:50
>>298
出来れば回答おねがいします
301デフォルトの名無しさん:2010/08/24(火) 19:41:34
ファイルハンドルと変数について勉強し直せば分かるよ
302デフォルトの名無しさん:2010/08/24(火) 20:01:36
ファイルハンドラを変数に入れるメリットがよくわからない。

というか、どうしてファイルハンドラをレキシカルスコープで
持てるようになってないの? ラリーさん耄碌してるの?
303デフォルトの名無しさん:2010/08/24(火) 20:09:06
じゃあコレで
open local(*FH), "<", "/etc/passwd";
304デフォルトの名無しさん:2010/08/24(火) 20:15:33
>>303
ありがとう。 さすがラリーさん、しっかりしてるわ。
305デフォルトの名無しさん:2010/08/24(火) 21:43:35
こんなのグローブ型で無理やりスコープつけただけだろ
306デフォルトの名無しさん:2010/08/24(火) 23:05:23
ラリーさんdisってんのか?
307デフォルトの名無しさん:2010/08/25(水) 08:41:14
localはレキシカルスコープじゃないんだけどな
308Perl忍者 ◆M5ZWRnXOj6 :2010/08/25(水) 08:59:26
strictバカがわめいてますね
309デフォルトの名無しさん:2010/08/25(水) 09:03:25
何を求めてるのか分からないから、答えようがない。
310Perl忍者 ◆M5ZWRnXOj6 :2010/08/25(水) 09:09:40
バカの特徴

自分が答えられないモノがあると

「何がしたいのかわからない っで? 答え用が無い 何を求めてるのか分からない」

まじ簡単なものは クソ詳しく熱弁するけど 難しい質問には
>>309
みたいにクソみたいな答えかたしかできない(苦笑)
311デフォルトの名無しさん:2010/08/25(水) 09:39:05
>>310
分かるように説明してくれたら回答するよ。
お前も回答してやれ。
312デフォルトの名無しさん:2010/08/25(水) 09:51:00
>>309
ていうか、ほんとうにわからないの?馬鹿なのは君じゃないのか?
313デフォルトの名無しさん:2010/08/25(水) 11:15:52
perlにレキシカルスコープな物は変数しかない。
localはダイナミックスコープだし、型グロブはグローバルスコープ。

だから、レキシカル変数にファイルハンドルを渡せば解決。
という理解なんだが、求めるものは違うわけだろ?
314Perl忍者 ◆M5ZWRnXOj6 :2010/08/25(水) 11:23:24
俺が質問したんじゃないんだけどね(笑)
勘違い妄想 幻術にかかってるwwwwwwwwwwwwwww


いますぐ俺のレスみて  「解!!!!!!!!!!!」って叫んだ方が良いよ(苦笑)
315Perl忍者 ◆M5ZWRnXOj6 :2010/08/25(水) 11:28:20
珍言(笑)


309 :デフォルトの名無しさん:2010/08/25(水) 09:03:25
何を求めてるのか分からないから、答えようがない。

312 :デフォルトの名無しさん:2010/08/25(水) 09:51:00
>>309
ていうか、ほんとうにわからないの?馬鹿なのは君じゃないのか?
316デフォルトの名無しさん:2010/08/25(水) 12:56:15
>>313
>レキシカル変数にファイルハンドルを渡せば解決。
内部でダブらないようにユニークなファイルハンドルを
作ってるって解釈でいいの?
317Perl忍者 ◆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");

これでは動きません。
どのようにかけばいいのでしょうか?

319デフォルトの名無しさん:2010/08/27(金) 21:37:09
$ARGV
320デフォルトの名無しさん:2010/08/27(金) 21:39:00
my $isbn13 = length($ARGV[0]) eq 13 ? $ARGV[0] : undef;

if(!defined($isbn13)){
 〜エラー処理〜
}


丁寧にやるならこんな感じかな?
321デフォルトの名無しさん:2010/08/27(金) 21:40:44
すみませんでした・・。
以後、誤字には気をつけます・・
322デフォルトの名無しさん:2010/08/27(金) 21:43:24
my $isbn13 = $ARGV[0];
length $isbn13 == 13 or die "13桁で入力しろってんだよボケカス";

これでいいだろ
323デフォルトの名無しさん:2010/08/28(土) 00:14:42
my $isbn13 = shift;
でいいような気もしなくは無い
324nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 08:02:43
          +                           .
  *               +
      .           / ーーーーーーーーーーーーーーー\        
                / _,,,...  ヽ;:  /""ヽ    ヽ         .
   +            | ;'"  "\ l /;:;;:::-'''"ヽ,   i    *
      .        | /::::::::-'''''"~        ヽ,   .|,
  .            |  |;:"               ヽ   !  .      +
              | /                |  |
      *       | 人           ,,,,;;::''''' i,  |     .
             |  ';  ,,,,;;::::::::::;;;   .:   ,,,,,, ヽ ヽ 
             |  |  "  ,,,,,,,,, .::    ;''“”`  |  |  *  「フッ use strict 使わないとライブドアとか入れない。」
   +          |  |:   ;::''“”“~` ::::.        |. i        .
              |  i::          :::::  i     | ,;|    +
              |  ヽ.        ::::::: , _〉    .| ,| .
       +       |   ノ::                | |,      .
                |  人::::..        ___,,,,,,,,...:;-'  |  |  +
.. *             |;:'" `、ヽ      '"''=.:;;:;ノ゛  /  |        +
                 | ヽ:: \       ::::::   ./  |       .
                 ::;|::.  `ヽ、_       /'|ヽ./"
    +      ,/.   ::::::::::::;;:::人:.     `'''----―'' .|: ヽ    *
         /;:;:;:;;:;;;;;;;;;;;;/   `ー、          ;-'"  \ー-、
  .         ,.-'"  \       \      ;:-''"    .|   `-:;;,,
325デフォルトの名無しさん:2010/08/28(土) 09:31:27
朝鮮人の部下に成りたいとは思わんね
326nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 10:43:37
          +                           .
  *               +
      .              
                / _,,,...  ヽ;:  /""ヽ    ヽ         .
   +            | ;'"  "\ l /;:;;:::-'''"ヽ,   i    *
      .        | /::::::::-'''''"~        ヽ,   .|,
  .            |  |;:"               ヽ   !  .      +
              | /                |  |
      *       | 人           ,,,,;;::''''' i,  |     .
             |  ';  ,,,,;;::::::::::;;;   .:   ,,,,,, ヽ ヽ 
             |  |  "  ,,,,,,,,, .::    ;''“”`  |  |  *  「フッ use strict 使わないとライブドアとか入れない。」
   +          |  |:   ;::''“”“~` ::::.        |. i        .
               | i::          :::::  i     | ,;|    +
              |  ヽ.        ::::::: , _〉    .| ,| .
       +       | ノ::                | |,      .
                |  人::::..        ___,,,,,,,,...:;-'  |  |  +
.. *             |;:'" `、ヽ      '"''=.:;;:;ノ゛  /  |        +
                 | ヽ:: \       ::::::   ./  |       .
                 ::;|::.  `ヽ、_       /'|ヽ./"
    +      ,/.   ::::::::::::;;:::人:.     `'''----―'' .|: ヽ    *
         /;:;:;:;;:;;;;;;;;;;;;/   `ー、          ;-'"  \ー-、
  .         ,.-'"  \       \      ;:-''"    .|   `-:;;,,
327nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 10:45:52
>>325
君はミスドでアルバイトしてなさい!!!!!!
328nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 10:55:02
Perlの事なら何でも聞きたまえ
329nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 11:00:48
ミスターイケベ(上司)に毎日コードが雑など怒鳴られてます
CTOの座を狙っています

この前はホリエと一緒に中2病発症して バイクのって総合格闘技見てきました
30代デビューです

口癖は 「〜とか」 です
330nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 11:12:46
ネットなのにマジレスしちゃうクセがあります
331nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 11:17:43
コネを作りすぎて

むやみに変な発言いえません

マジレスしちゃいます
332nipotan ◆M5ZWRnXOj6 :2010/08/28(土) 12:56:20
http://twitter.com/nipotan
光の速さでフォロー仕返すよ!!!
333デフォルトの名無しさん:2010/08/28(土) 21:42:16
webでよく使われるspacer.gifをperlで判断することは可能でしょうか?
画像の処理をしていてspacer.gifなファイルは除外したいので。
334Perl忍者 ◆M5ZWRnXOj6 :2010/08/28(土) 21:47:03
ファイル内容が少なすぎるとかでチェックすれば
馬鹿だろ?脳味噌たりてる?
ファイルのサイズとかとかとかとかとかとかとかとかとかとかとかとかとかとか
335デフォルトの名無しさん:2010/08/28(土) 22:14:16
80byte 未満の GIF
ファイルを開いてみて 1x1 のサイズ

は処理の対象外
何をどう迷うのか分からない
336デフォルトの名無しさん:2010/08/29(日) 11:57:44
>>333
ということで、問題はperlではなくgifのフォーマットにシフトした。
gifのスレに行くといいよ。
337デフォルトの名無しさん:2010/08/29(日) 12:02:51
>>336
ほったらかしかよww
いくらなんでも、画像の種類を判定するようなモジュールはCPANにあるだろw

そんな機械的な作業よか難しいのは、文脈的にみてその画像がスペーサーかどうか判定することじゃね?
ひねくれた人間はjpgやpngでスペーサーつくるかも知れないし。
画像の種類と名まえと大きさとサイズだけ見てスペーサーと判定できりゃいいけどな
338Perl忍者 ◆M5ZWRnXOj6 :2010/08/29(日) 12:21:16
image::infoとかコマンドつかえばいいじゃん
339デフォルトの名無しさん:2010/08/29(日) 12:35:43
>>337
>にみてその画像がスペーサーかどうか判定
その判定基準はすでに提示されているからいいんじゃね?

判定をもれる件についてはあとでも対処すればいいわけだし
そこは本質では無いと思う
340デフォルトの名無しさん:2010/08/29(日) 17:07:59
エロ画像の収集なんだろうから、
10x10ピクセル以下の画像を捨てれば済む話。
341ホリエ ◆M5ZWRnXOj6 :2010/08/29(日) 21:29:03
   〜∞
          彡川川川三三三ミ〜
      プーン  川|川\  /|〜
          ‖|‖ ・  ・|〜
          川川‖    3  ヽ〜  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          川川   ∴)〆(∴)〜 <  Perl難しくて挫折したんだよね
          川川      〜 /〜 |  宮川君にまかせちゃったんだ ブヒッ!
          川川‖    〜 /‖〜  \______________
         川川川川   (⌒)川‖〜 ヴィシッ!
        //::::::::|-、 ,-/::::::ノ ~.レ-r┐
       / /:::::::::::|  /:::::ノ__ | .| ト、
       | /:::::::::::::::| 〈 ̄   `-Lλ_レ′
342デフォルトの名無しさん:2010/08/30(月) 00:35:43
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',
);

次に続きます
343342: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";
}
}
344デフォルトの名無しさん:2010/08/30(月) 01:15:01
日本語の訳が変なだけじゃねーの(英文読んでないけど)。
「マッチパターンとテーブルを別々に用意したら(コピペしたら)、
タイポが紛れ込むから止めときな」
って例でmoney(monkey=typo)を使ってるだけ。

当たり前だがmoneyは、その例での
m{\A ($has_irregular_plural) \z}xms
にはマッチしない。
345デフォルトの名無しさん:2010/08/30(月) 01:15:32
>>342
>「この正規表現は、monkeyとマッチするが、その場合にマッチするはずの変則的な複数形はmoneyである」
これは「このコードを書いた人間がマッチすることを期待しているのはmoneyであるはずだが、実際にはミスタイプによりmonkeyがマッチしてしまう」ってことじゃないの?
同じ単語をハッシュを作るときと正規表現パターンを作る時とで2回ずつ書くのは無駄だし、
たとえばmoneyと書くべきところを片方だけmonkeyと書いてしまうような間違いをする確率を増やしてしまうので、こういう書き方はやめましょう、って話だと思うんだが。
346デフォルトの名無しさん:2010/08/30(月) 01:17:41
コピペじゃねえ。各自別々にタイプしたら、だな。
347デフォルトの名無しさん:2010/08/30(月) 02:31:17
なるほど、納得しました。
ありがとうございました。
348デフォルトの名無しさん:2010/08/30(月) 10:38:05
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関数って便利ですが..
350デフォルトの名無しさん:2010/08/30(月) 17:17:34
>>349
さぼんな平地
351349:2010/08/30(月) 17:23:28
??
352デフォルトの名無しさん:2010/08/30(月) 17:38:50
>>349
どこでどんなエラーが出てるかチェックするといいよ。
この件に限らず、エラーチェックは必ずする癖をつけるといい。
353349: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した文字列を消すにはどうしたらいいですか?
355デフォルトの名無しさん:2010/08/31(火) 16:40:25
>>354
バックスペースを出力します。
356デフォルトの名無しさん:2010/08/31(火) 16:42:49
改行する前にその行を消したいなら ¥r
出力した画面全体を消したいなら・・・system('cls') とかw
357デフォルトの名無しさん:2010/08/31(火) 17:14:59
Curses.pm
358Perl忍者 ◆M5ZWRnXOj6 :2010/08/31(火) 17:47:45
バックスペースとかいみわかんないんだけどwwwwwwwww
359デフォルトの名無しさん:2010/08/31(火) 17:49:37
白痴は黙ってろよ
360354:2010/08/31(火) 17:57:07
>>355-357
`clear`でうまくいきました
ありがとうございます。
ところで改行は\bでは消えないんでしょうか・・・?
361Perl忍者 ◆M5ZWRnXOj6 :2010/08/31(火) 18:04:35
>>360
なんの改行さしてんの? 意味分からないよw
だったら改行いれなければいいじゃんw
362デフォルトの名無しさん:2010/09/01(水) 02:09:12
$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になってしまうのでしょうか?
363デフォルトの名無しさん:2010/09/01(水) 02:10:57
環境はThis is perl, v5.10.1 built for MSWin32-x64-multi-threadです
364デフォルトの名無しさん:2010/09/01(水) 02:43:15
365デフォルトの名無しさん:2010/09/01(水) 18:28:28
$" = "|";
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
ん、あげ。
367デフォルトの名無しさん:2010/09/01(水) 18:36:22
foreach my $tmp_pattern (@pattern){
  if($str2 =~ /^$tmp_pattern/){
    〜処理〜
    last; # ← 処理を続けたいならコメントアウト
  }
}


grep とかで書き直せると思うけど、今は無理せず分かりやすく書くことを心がけたほうがいいと思う。
368デフォルトの名無しさん:2010/09/01(水) 18:39:39
$str =~ /join("|",@pattern)/e
369デフォルトの名無しさん:2010/09/01(水) 18:57:28

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";
  
370365:2010/09/01(水) 21:09:24
みなさんありがとう御座います。

>>369
こんなのを、さらっと書ける人になりたい。
\Qなんて使ったことないし・・・。
動作は思いどおりなんだけど、自分で読めないんで、
制御に追加があると困るので、勉強して理解出来てからにします。

>>368
エラーでした。


>>367
そうですね。
感覚的に「この処理って正規表現だと簡潔にかけるんじゃねーの」
みたいな感じだったので・・・。ご指摘の様に自分にとって適当かなと
思いました。




371デフォルトの名無しさん:2010/09/01(水) 23:39:07
条件次第ではスマートマッチで済む話だけど、あまりお勧めはしない。

my @pattern = (qr/^foo/, qr/bar/, qr/baz\z/);
my @str = qw(quuxfoo bquaurx qubarux bazquux quuxbaz);
$_ ~~ @pattern && print "$_\n" for @str;
372デフォルトの名無しさん:2010/09/01(水) 23:58:22
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で名前が付けられたハッシュのリファレンスなのでしょうか?
374デフォルトの名無しさん:2010/09/02(木) 14:41:14
Yes
Yes
ハッシュ以外のリファレンスでもよい
375デフォルトの名無しさん:2010/09/02(木) 16:24:35
http://d.hatena.ne.jp/treeboa/
ここのMagical YuYu 1.0を動かしたいのですが動きません。
Cantなんとかって出てきます
どうしたら動きますか?
376デフォルトの名無しさん:2010/09/02(木) 16:32:30
まずCantなんとかをちゃんとコピペするところからだな。
377デフォルトの名無しさん:2010/09/02(木) 16:56:17
はじめのエラーは
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.
と出てきてしまいました
378デフォルトの名無しさん:2010/09/02(木) 18:14:38
>>377
よくわからんけど俺がそこから拾ってきてperl -wcした限りでは
構文エラーは出なかったので、コピペをミスったんじゃねーの?
379デフォルトの名無しさん:2010/09/02(木) 18:25:11
LWPが入ってなかったり?
380デフォルトの名無しさん:2010/09/02(木) 19:27:19
ImageMagicが生成する/tmp/magick-XXxxxって巨大なファイルは何者?
ImageMagicは後片付けしてくれないの?
381デフォルトの名無しさん:2010/09/02(木) 19:45:19
ワーク用とかじゃなくて?

異常終了してたり、終了処理をちゃんとしてなかったり
382デフォルトの名無しさん:2010/09/03(金) 00:32:10
>>346
ありがとうございます。二進数の小数では0.8をきっぱりと書くことができないのが原因なんですね。
printf("%d", 0.8*10);で7が出力されるのはどうも納得できないというかなんとかならなかったのかと思いますが。。
383デフォルトの名無しさん:2010/09/03(金) 17:08:41
0.1を、プログラム上では整数の1として扱えば良いと思うよ。
小数として必要なときにだけ、10で割る。
384デフォルトの名無しさん:2010/09/03(金) 17:46:53
浮動小数点が弱い頃のゲーム機で使われてた手法やね

計算前に値を1000倍
色々計算
結果を割る1000
これで欲しい値が


もちろんそんな単純じゃないとは思うけどw
385デフォルトの名無しさん:2010/09/04(土) 05:24:03
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'}の内容をそのまま表示してますが、問題ないものなのでしょうか?
387デフォルトの名無しさん:2010/09/04(土) 09:30:34
中身をちゃんと確認して、不正な値のチェックをしてから使ってるなら大丈夫


ただ、その一文だけじゃなにも分からないよw
388デフォルトの名無しさん:2010/09/04(土) 11:45:58
HTML::Elementで、タグをエスケープしたテキストコンテンツを入れようと、
$h->push_content("&lt;"); #実際は半角です。
とすると、内部では「&amp;lt;」ってエスケープ処理されてしまうのですが、
エスケープ処理させないようには出来ないでしょうか?
389デフォルトの名無しさん:2010/09/04(土) 19:49:28
期待通りの動きのように見えるけど・・?

もし "&lt;" じゃなく、"<" を入れたいのなら、
 $h->push_content("<");
とすればいいのでは?
push_content()がそういう仕様なんだから・・・
390デフォルトの名無しさん:2010/09/05(日) 03:43:23
>>389
<を入れたら&lt;が入ることね?
391デフォルトの名無しさん:2010/09/05(日) 12:31:08
>>390
そう。
392デフォルトの名無しさん:2010/09/06(月) 04:06:21
Perlもうダメだろ・・・
プログラミング教えてくれっていう甥にはsed,awkやらせてる
393デフォルトの名無しさん:2010/09/06(月) 04:07:38
それをここで言う必要はあるのかな
394デフォルトの名無しさん:2010/09/06(月) 11:01:36
CSVから一度<IN>に読み込み、それを$data=<IN>にしてchompして行ごとの抽出をしてるのですが
この$dataに格納されている行ごとのデータをランダムにするにはどうしたら良いですか?
395デフォルトの名無しさん:2010/09/06(月) 11:13:00
>>392
sedの正規表現はうんこなので、sed使うときはむしろperl使ってるわ
396デフォルトの名無しさん:2010/09/06(月) 11:26:06
>>394
1.CSVを配列に入れる
2.配列の添え字でランダム性を確保する

slurpもあるよ!
397デフォルトの名無しさん:2010/09/06(月) 11:40:08
>>396
直接スカラー変数に入れて改行コード別に区切るよりも、配列変数として扱ったほうが良いって事ですね?
ちょっと試してみます。
398デフォルトの名無しさん:2010/09/06(月) 17:32:24
テストしてないけど

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行が数千文字に達する場合はものすごく遅くなるかも。
399デフォルトの名無しさん:2010/09/07(火) 01:41:21
>>397
そんなに行ないならこんなんどう?

@data = <IN>;
chomp @data;

my $i = @data;
while($i--){
my $j = int(rand($i + 1));
@data[$i, $j] = @data[$j, $i];
}
400デフォルトの名無しさん:2010/09/07(火) 05:19:49
WWW::Mechanizeを使ってブラウジングしてます。
一度終了しても次にブラウジングするときは前回の続きから行いたいです。
ブラウジングを終了するときにWWW::Mechanizeの情報を保存し、
ブラウジングを開始するときにWWW::Mechanizeの情報を読み込むことはできないでしょうか?
401デフォルトの名無しさん:2010/09/07(火) 07:55:42
->content で得た内容をファイルに保存して、
次回の閲覧時はそのファイルを表示するところから始めればいい

Mech の機能にはなく、自分で実装する必要あり。
ただそこまで難しくは無いかと思う。
402デフォルトの名無しさん:2010/09/07(火) 09:07:13
>>398-399
ありがとうございます。
両方を参考にしてみましたが、>>399の方法が一番簡単っぽかったです。
あくまで配列としてロードしたあと、乱数を発生させて成功しました。
1行はせいぜい半角500文字程度なので、速度もとりあえず問題なさそうです。

SSIで実際動かしてるのですが、今度は複数のSSIがあるページで
今回作った物をhtml上、一番最後に置かないと実行出来ないというトラブルに遭遇しました。
こちらはスレ違いなので、試行錯誤して調整してみます…。
403デフォルトの名無しさん:2010/09/07(火) 13:00:31
アドレスそのものからリファレンスを得ることはできたりしませんか?しないだろうなー

$hash_addr = sprintf {access => 'success'};
# この $hash_addr から success という文字列を得ることができるでしょうか
404デフォルトの名無しさん:2010/09/07(火) 13:35:59
そういうことができるかどーかは知らんけど、
これだと無名ハッシュリファレンスのREFCNTが0になって即消滅しちゃうんじゃないの?
405デフォルトの名無しさん:2010/09/08(水) 00:42:11
>>404
ガベージコレクタが動くタイミングはまちまちってどっかで聞いたから即は消えないと思う
あと、リファレンスカウンタを増やすことはできるはずだからその問題は解決可能かと

別にこれが出来たからどうこうってわけじゃないけど、
なんでもできるPerlならこんなこともできるのかなーと気になっただけでした
406デフォルトの名無しさん:2010/09/08(水) 07:51:03
>>401
実装してみました。
しかしワンタイムトークンを使っている場合に問題がありました。
具体的にはヤフオクの取引ナビです。
メッセージのURIにcrumb=xxxxxというワンタイムトークンが指定されて、
このメッセージのURIにアクセスするとcrumb=xxxxxが違うようで400BadRequestが返って来てしまいます。
そこでcookieもファイルに保存するようにしましたが、結果は同じでした。
cookie以外でも情報を保持しているものってありますか?
407デフォルトの名無しさん:2010/09/08(水) 08:56:30
>>406
なんかのパラメタが足りないのかもしれないしなんともいえないね。
一度終了しなければ続きのアクセスができるのなら、できるときと
だめなときで通信内容を比べてみるとかそういうところから追い
かけてみたら?
408デフォルトの名無しさん:2010/09/08(水) 13:58:00
ヤフオクの取引ナビはメッセージを表示 URL は、メッセージ一覧から行かないとだめかも
というのは、普通にブラウザで見てても、どんなタイミングかわからないけど
履歴から直接メッセージの表示しようとしたらはじかれる事が多々あるので。

たぶん Yahoo のシステムがどんな動きするのかを調べた方が早いかもです。
409デフォルトの名無しさん:2010/09/08(水) 21:30:43
>>407-408
レスありがとうございます。
解決しました。恥ずかしいことに「次回からIDの入力を省略」のチェックを入れずにログイン処理していました。
チェックを入れてログイン処理したところ、ブラウジングを途中で終わらせてもちゃんと続きから開始してメッセージを見れました。
お騒がせしました。
410デフォルトの名無しさん:2010/09/09(木) 01:37:43
文字列を1文字単位で配列にするにはどうやればいいんですか
$str = "hogefuga";
@ar = split(//,$str);
これではうまくいきませぬ
411デフォルトの名無しさん:2010/09/09(木) 01:42:33
セミコロンが抜けてただけで、うまくいってました。失礼しました
412デフォルトの名無しさん:2010/09/09(木) 19:42:23
ActivePerlからSQLserver2005に接続したいのですが、おススメサイトを紹介してください。

Linux/SolarisのPerlからOracleに接続するのはわかるのだけど、Windowsはよくわかりません。
413デフォルトの名無しさん:2010/09/09(木) 19:48:33
と思ってたら、、、、見つけました。

ttp://tuka.s12.xrea.com/index.xcg?p=Perl#p15
414デフォルトの名無しさん:2010/09/10(金) 11:50:44
Rubyから来ました。Perlのオブジェクト指向を勉強中です。

Mooseというのがありますが、これからPerlでクラスを書く場合
こちらで書くべきなのでしょうか?個人的に型を指定できるのがキモいので
あんまり使いたくないのです。
415デフォルトの名無しさん:2010/09/10(金) 12:03:53
>>414
別に分かってやるなら好きにすればいいんじゃねーの?
416414:2010/09/10(金) 12:06:54
>>415
さすがPerlですね。でも主流がどっちなのか気になります。。。
417デフォルトの名無しさん:2010/09/10(金) 20:06:19
CatalystやPerl6を見る限りではMooseが主流に「なっていく」だろうけど好きにすればいいと思う。
418デフォルトの名無しさん:2010/09/10(金) 20:30:32
activeperlでtkの代わりにtkxが付いてたので、
tkを入れたいけど、何かのセキュリティでppmが使えない@職場
家でダウンロードしておいて、USBメモリでインストール用の何かを持ちこめる?
419デフォルトの名無しさん:2010/09/10(金) 20:42:26
>>418
システム管理者にかけあうのが一番早い
420デフォルトの名無しさん:2010/09/10(金) 21:48:35
逆に言うと、ネットに繋がってない環境でモジュールを入れるのは無理ということか
意外な落とし穴だな
421デフォルトの名無しさん:2010/09/10(金) 23:00:50
程度が同じだと頭悪い話でも違和感なく完結してしまうのだな
422デフォルトの名無しさん:2010/09/11(土) 00:23:51
日本語でおk
423デフォルトの名無しさん:2010/09/11(土) 05:00:39
ppmのリポジトリにローカルドライブを指定する方法がネットのどっかで解説されてる。
424デフォルトの名無しさん:2010/09/11(土) 05:04:53
>>420
はい?できますよ?
425デフォルトの名無しさん:2010/09/11(土) 09:02:00
不可能ではないにしても、裏ワザ的な方法で、
メニューから辿っていって誰でもできるようなものではない
426デフォルトの名無しさん:2010/09/11(土) 10:03:29
前はZip版を自由に落とせたけど、今はビジネスエディションのIDとパスワードを
要求されるようになってる。ローカルにリポジトリ立てるしか無いかも。
427デフォルトの名無しさん:2010/09/11(土) 12:53:16
裏ワザw
428デフォルトの名無しさん:2010/09/11(土) 15:04:39
面倒そうだな
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";
}
}
431デフォルトの名無しさん:2010/09/13(月) 00:33:00
一部だけ見せられてもわかるわけない
どうみたってグローバル変数多用してるし
432デフォルトの名無しさん:2010/09/13(月) 00:43:23
この骨董品級のコードに対する突っ込みはさておいて、
$1に何が入ってるとか関係なくて$deの先頭に「$1$」という文字が入ってるかどうかをチェックしてるだけじゃないの
433デフォルトの名無しさん:2010/09/13(月) 00:49:28
$deが$1$で始まる文字列なら3
434デフォルトの名無しさん:2010/09/13(月) 00:58:43
最初はグローバル変数か?と思ったのですが、その気配は無かったです。

$1などは正規表現でマッチした変数で混乱しました。

単純に「$deが$1$で始まる文字列なら3」 で納得しました。ありがとうございます
435デフォルトの名無しさん:2010/09/13(月) 01:10:50
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/crypt.3.html
> もし salt の文字列が "$id$" で始まっていて、"$" で終わっている文字列が続いている場合:
>   $id$salt$encrypted
> DES を使う代わりに、 id で使用する暗号化手法を識別し、これがパスワード文字列の
> 残りの部分を解釈する方法を決定する。

らしいですよ
436デフォルトの名無しさん:2010/09/13(月) 01:17:22
ヒント:エスケープ
437デフォルトの名無しさん:2010/09/13(月) 01:42:04
>>430
2ch互換掲示板の一番最初につまづいているようですねえ。
0chを選ばない理由はなんでしょうか?
438デフォルトの名無しさん:2010/09/13(月) 02:01:34
あとついでにいうと、>>431は無能
439デフォルトの名無しさん:2010/09/13(月) 02:08:13
>>438
myやlocalを知らない人ですか?
440デフォルトの名無しさん:2010/09/13(月) 03:00:12
ここ最近、自分さえ良ければ OK 的なスクリプトばかり書いてたら
sub すら作ってないことに気がついたw

このままだと 関数? なにそれ 状態になる
441デフォルトの名無しさん:2010/09/13(月) 03:01:12
リファレンス渡すことに慣れたからlocalとかどうでもいい
442デフォルトの名無しさん:2010/09/13(月) 04:05:38
>>439
この質問に答えるのに局所化云々は不要だろ。

> 一部だけ見せられてもわかるわけない
該当する一行だけで余裕で分かりますが。
443デフォルトの名無しさん:2010/09/13(月) 07:34:48
あと、ついでにいうと、>>438は余計
444デフォルトの名無しさん:2010/09/13(月) 12:52:41
>>437 plus

(+Φ Φ)…† Sheet!!
445デフォルトの名無しさん:2010/09/13(月) 18:27:40
PerlでJPEG画像のExifを全て削除したいのですが、どうすればできますか?
446デフォルトの名無しさん:2010/09/13(月) 20:06:29
>>445
Image::ExifToolというのが定番みたい。
スレ違いだけど時期的にα55でも買った?

Image::ExifTool - search.cpan.org
http://search.cpan.org/~exiftool/Image-ExifTool-8.25/lib/Image/ExifTool.pod
Image::ExifToolでGPS情報を除去する | ちょめちょめ通信
http://ch0me2.blogspot.com/2010/08/imageexiftoolgps.html
447デフォルトの名無しさん:2010/09/13(月) 21:57:13
Exifデータを全部削除するならImage::MagickのStripでも出来たと思う。
448デフォルトの名無しさん:2010/09/15(水) 12:54:03
PerlでImacrosというマクロを使いたくて下のサンプルを組んでみたが
Win32::OLE->new('imacros')のところで、dieのエラーに引っかかってしまう
普通に動かすには何か環境設定が必要なんですかね?
http://wiki.imacros.net/Perl
449デフォルトの名無しさん:2010/09/15(水) 12:55:19
あ、ちなみにImacrosのアドオン(firefox)はインストール済みで
単体での動作も確認済みです
450デフォルトの名無しさん:2010/09/15(水) 13:09:05
Webプラミングが今回始めてです

WWW::Mechanizeを使ってブラウジングしてます。
xxx->click();したときにどんな風にPOSTデータを送っているのか調べたいです
FireFoxのPOSTデータもどんなデータを送っているのか調べて比較したいです
どんな方法が正確に簡単に比較できますかね?ツールとか使うことになるんでしょうか
よろしくお願いします
451デフォルトの名無しさん:2010/09/15(水) 13:27:06
Win32::OLEがインストールされていないじゃねーの
インスタンスが生成されていないってことだろ
452デフォルトの名無しさん:2010/09/15(水) 13:46:57
>>450
パケットキャプチャすればいいのではないかしら
453デフォルトの名無しさん:2010/09/15(水) 13:52:08
ffならLive HTTP headers
454デフォルトの名無しさん:2010/09/15(水) 14:03:58
LiveHTTPHeadersってPOSTの中身見れたっけ?HttpFoxなら確実に大丈夫だけど。
Mechのほうはソース読め。
455デフォルトの名無しさん:2010/09/15(水) 14:10:25
Content-Type: multipart/form-dataも含めて見れた、バイナリデータは表示されなかったけど
456デフォルトの名無しさん:2010/09/15(水) 14:30:07
requestを直接とれるようにmechを弄ればよさそう?
457デフォルトの名無しさん:2010/09/15(水) 16:02:22
>>451
Win32::OLEは当然インストールされてます
458デフォルトの名無しさん:2010/09/15(水) 16:35:59
>>450
ざっくりやるならProxomitronでいいんじゃないの。
単純なのだったら、ローカルにHTTPサーバ立ててキャプチャしてみるとか。
459デフォルトの名無しさん:2010/09/15(水) 16:50:03
>>457
ならインスタンスが生成されない理由を探れよ
460デフォルトの名無しさん:2010/09/15(水) 16:53:11
>>459
探れないのでここで聞いてまする
461デフォルトの名無しさん:2010/09/15(水) 16:54:29
そりゃそうだ
462450:2010/09/15(水) 17:07:12
どうもありがとうございます
LiveHTTPHeadersを使ってみてみます
問題はWWW::Mechanizeのほうですね
ソース読むっきゃないんですかね・・・これは大変そうだ・・
463450:2010/09/15(水) 17:10:57
あるサイトでWWW::Mechanizeのほうを規制されてしまったんですよね
ffでやる分には普通に出来るけどWWW::Mechanizeで動かしたいので
何でWWW::Mechanizeを使っていると判断しているのかを調べたかったので
それともHTTP_USER_AGENTあたりで微妙な違いで判断してるのかな・・
464458:2010/09/15(水) 17:13:37
はぁ、最近、回答を無視されることが多くてつらいわ。
しばらく2chやめるかね。
465458:2010/09/15(水) 17:14:51
ああ、Windowsじゃなかったら、すまんな。
466デフォルトの名無しさん:2010/09/15(水) 17:16:30
パケットキャプチャでいいのになぜパケットキャプチャをしないのか
467450:2010/09/15(水) 17:19:09
すみません。ProxomitronとかローカルにHTTPサーバ立ててとかだと
さらにそこでの質問が増えそうだったので。
たまたま入っていたLiveHTTPHeadersの手軽さを選択しました
468450:2010/09/15(水) 17:30:25
パケットキャプチャがいまいち分かりません
Perlだけでなくその辺の知識も初心者なので・・・
調べてきます
469デフォルトの名無しさん:2010/09/15(水) 18:28:15
ヤッパリだめかー
超難しい
挫折しそう
470448:2010/09/15(水) 18:42:45
$word = Win32::OLE->new('Word.Application') or die "Win32:OLE\n";

の1行でテストしてみた。こっちはdieには引っかからないようだ
'imacros'っていうのがやはりおかしいのかな。ダメだわからねぇ
471デフォルトの名無しさん:2010/09/15(水) 23:39:13
冗長モードってどういう意味ですかね
472デフォルトの名無しさん:2010/09/15(水) 23:44:59
Perlに関係のある質問?
473デフォルトの名無しさん:2010/09/15(水) 23:50:05
>>472
http://perldoc.jp/docs/modules/Win32-GuiTest-1.3/GuiTest.pod
ここ読んで意味がわからなかったもので
474デフォルトの名無しさん:2010/09/16(木) 00:27:41
どう見てもスレチですねはい。
475デフォルトの名無しさん:2010/09/16(木) 00:31:10
perlってめちゃくちゃ難しいな
476デフォルトの名無しさん:2010/09/16(木) 00:33:55
Perlはそうでもないけどperlならそうかもしれない。
477デフォルトの名無しさん:2010/09/16(木) 00:39:02
意味わからん
478デフォルトの名無しさん:2010/09/16(木) 00:39:52
>>477
これはひどい
479デフォルトの名無しさん:2010/09/16(木) 00:39:52
>>476
日本語でおk
480デフォルトの名無しさん:2010/09/16(木) 00:43:51
パールはそうでもないけどパールならそうかもしれない。
481デフォルトの名無しさん:2010/09/16(木) 00:47:12
これの意味が分からない人もいるのかw。
482デフォルトの名無しさん:2010/09/16(木) 00:48:03
483デフォルトの名無しさん:2010/09/16(木) 00:55:54
>480は意味が分からなくて良いんだよな?
484デフォルトの名無しさん:2010/09/16(木) 00:56:19
いや、わかるひとはいないでしょ
485デフォルトの名無しさん:2010/09/16(木) 01:56:38
WWW::Mechanizeで$mech->click()などでクリックは可能だけど
キーバインドを送ることは不可能かな?どこ見てもそういったことはやっていないみたいだけど
486デフォルトの名無しさん:2010/09/16(木) 01:58:00
>>482
日本語でおk
487デフォルトの名無しさん:2010/09/16(木) 03:16:07
perlxstut, perlxs, h2xs, perlguts, perlapi
の違いはなんですか?
488デフォルトの名無しさん:2010/09/16(木) 05:31:54
>>487
h2xs は perl の付属ツールでその他はドキュメント。
それぞれのドキュメントは説明されている内容が違う。

perlXStut - Tutorial for writing XSUBs
http://perldoc.perl.org/perlxstut.html
http://perldoc.jp/docs/perl/5.10.0/perlxstut.pod
> このチュートリアルは読者にPerlのエクステンションを作るのに必要なステップを教えるものです。

perlxs - XS language reference manual
http://perldoc.perl.org/perlxs.html
http://perldoc.jp/docs/perl/5.10.0/perlxs.pod

h2xs - convert .h C header files to Perl extensions
http://perldoc.perl.org/h2xs.html

perlguts - Introduction to the Perl API
http://perldoc.perl.org/perlguts.html
http://perldoc.jp/docs/perl/5.10.0/perlguts.pod
> このドキュメントでは Perl API の使い方、および Perl コアの基本的な動作に関する
> いくばくかの情報を提供しようとしています。

perlapi - autogenerated documentation for the perl public API
http://perldoc.perl.org/perlapi.html
http://perldoc.jp/docs/perl/5.10.0/perlapi.pod
> このファイルは embed.pl で生成された perl の公式な API のドキュメントです;
> 特にエクステンションの作者が使うかもしれない関数、マクロ、フラグ、変数の一覧です。
489デフォルトの名無しさん:2010/09/16(木) 10:53:12
>>479
"perlだけがPerlを解釈することができる"
でググるといいよ
490nipotan応援団:2010/09/16(木) 14:04:46
nipotan応援歌

書けよー!書けよー!書け書けよー! 書けよ書けよーモジュール!

お前が書かなきゃ誰が書く!!かっとばせー!nipotan!ゴーゴーレッツゴーnipotan!燃えろ燃えろ!

光 輝く!大空高く! 燃える男のチャンスに強いnipotan!

あなたの目標は何ですか!?宮川超える事そうですか!
宮川以上のスーパースーパースーパースーパースーパーコーティング( イェイェイェイ!!
491デフォルトの名無しさん:2010/09/16(木) 14:26:42
Perlにて2chなどに書き込むIP、自分のグローバルIPアドレスを取得する方法で
一番スマートなのはどういったコードを書けばいいのかな
492デフォルトの名無しさん:2010/09/16(木) 15:26:03
>>491
nslookupやらを公開しているサイトにアクセスして
結果から盗むってのが手っ取り早いかな
493デフォルトの名無しさん:2010/09/16(木) 16:16:18
Perlにて現在起動中のfirefoxのヘッダー情報を取得することって可能ですかね
可能ならどう取得すればいいのか教えてもらえればありがたいです
494デフォルトの名無しさん:2010/09/16(木) 18:18:13
>>493
%ENVをぐるぐる回れば見れるよ!

と思ったけどヘッダーかぁ
リクエストヘッダーはサーバに食われちゃうから
成功法じゃあ見る方法ってないんじゃね?
495デフォルトの名無しさん:2010/09/16(木) 18:51:32
>>491
UPnPを使うのが一番スマートじゃないか
496デフォルトの名無しさん:2010/09/16(木) 18:52:28
>>493
FirefoxにはLive http headerというアドオンがあったはずだけれど、これでいいかな?
497デフォルトの名無しさん:2010/09/16(木) 21:35:07
ログファイルやエラーログファイルへの出力でお勧めのパッケージってありますか
498デフォルトの名無しさん:2010/09/16(木) 21:44:12
ない
499デフォルトの名無しさん:2010/09/16(木) 22:14:55
>>497
Syslogつかえ
500デフォルトの名無しさん:2010/09/16(木) 22:53:37
>>492
ありがとう。やっぱりその方法が手軽かな
501デフォルトの名無しさん:2010/09/16(木) 23:22:18
>>495
UPnPですか。調べてみます
ありがとう
502デフォルトの名無しさん:2010/09/16(木) 23:25:44
>>497
IO::Fileモジュール
503デフォルトの名無しさん:2010/09/17(金) 00:10:33
>>494
>>496
どうもです。うーむ難しそうですね
もっと調べてみます
504デフォルトの名無しさん:2010/09/17(金) 05:40:53
pythonのnumpyに相当する数値計算、行列計算パッケージはperlにはありますか
505デフォルトの名無しさん:2010/09/17(金) 06:08:47
>>499 >>502
どうもありがとう
自分で作るっきゃないんすね
レベル指定で色々出力したりしようと思ったけど
506デフォルトの名無しさん:2010/09/17(金) 11:33:10
>>505
だあらSys::Syslogつかえっつってんだろひとのhなしきいてんのかぉよ
507デフォルトの名無しさん:2010/09/17(金) 11:37:47
>>464,506
涙ふけよ
508デフォルトの名無しさん:2010/09/17(金) 11:44:56
>>505
使ったこと無いけど、 log4perl
509デフォルトの名無しさん:2010/09/17(金) 11:57:14
>>506
ありがと。
SyslogじゃなくてSys::Syslogかあ。
Syslogで必死にぐぐってみたけど変なのしか出てこなくて
再度ぐぐってみる

>>508
ありがと。ぐぐってみる
510デフォルトの名無しさん:2010/09/17(金) 19:05:47
窓環境でSys::Syslogって意味あるの
511デフォルトの名無しさん:2010/09/17(金) 19:46:00
>>497
Log::Handler使ってる
512デフォルトの名無しさん:2010/09/17(金) 20:02:57
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'}とすると何もエラーがでず何も出力されず、次の処理に移る。
なぜこの場合はエラーが出ないのでしょうか?
513デフォルトの名無しさん:2010/09/17(金) 20:16:19
>>512
print しようとしてるものが undef だから。
use warnings すればおしらせが出る。
514デフォルトの名無しさん:2010/09/17(金) 20:21:18
>>513
未定義なのは@{$hash{'235'}} も ${$hash{'235'}}[0} も同じですよね?
それなのに片方ではエラーが出て、片方では出ないのは何故なのかと思いました。
515デフォルトの名無しさん:2010/09/17(金) 20:52:12
Perlを勉強中なのですが、
$math += $_ * ($count--%2?3:1) foreach( @strArray);
これの読み方がよくわかりません。

解説していただけませんか?
516デフォルトの名無しさん:2010/09/17(金) 21:09:54
肝はここかな。
>$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--;
}
517デフォルトの名無しさん:2010/09/17(金) 21:12:45
>>511
ありがとう

いろいろ調べてみた

Sys::SyslogはWin環境だと微妙だと判断
log4perlは便利だけど日本語資料が乏しく結構覚えるのが大変そう
Log::Handlerは結構シンプルだね

今のところlog4perlで難しかったらLog::Handlerでいこうかな
518デフォルトの名無しさん:2010/09/17(金) 21:18:53
>>516
ありがとうございます。
http://masaya.w32.jp/?p=248
これを見てるのですが、なぜ$countが12なのかもわかりません。
519デフォルトの名無しさん:2010/09/17(金) 21:21:13
>>514
undef自体をデリファレンスしようとすれば当然エラーになるが
リファレンス階層では存在しない値は自動生成されるのでエラーにならない

とかだった気がする
520デフォルトの名無しさん:2010/09/17(金) 22:47:59
>>518
わざわざそのページの作者さんがwikiのURL張ってくれてんじゃん
13桁だからチェックデジットの計算が12回
521デフォルトの名無しさん:2010/09/17(金) 23:35:41
log4perlは日本語対応してないのかな
Webから取得したのを丸ごと出力しておきたいんだけど
日本語が入っているから文字化けしてる
522デフォルトの名無しさん:2010/09/17(金) 23:42:29
wikiってゆうな。クズ。
523デフォルトの名無しさん:2010/09/17(金) 23:45:07
>>519
レスありがとうございます。
>undef自体をデリファレンスしようとすれば当然エラーになるが
納得できます

>リファレンス階層では存在しない値は自動生成されるのでエラーにならない
リファレンス階層とはどういう事でしょうか?
${$hash{'235'}}[0]は@{$hash{'235'}}という配列の要素でそれはundefをデリファレンスした配列なのに、、
524デフォルトの名無しさん:2010/09/17(金) 23:52:28
|  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 ;  ,/ _,.-‐''\ ゙=''  ,/
  /   \\   ̄ ,//     ゙ー-‐‐"
/       \.゙ー-イ ,/
525デフォルトの名無しさん:2010/09/18(土) 00:27:15
log4perlでWindowsのコマンドプロンプトで標準出力させると日本語のutf8が文字化けします
mainのほうでは、binmode STDIN, ":encoding(cp932)"; で標準出力をs-sjisにして出力しているので
自分で出力する分には文字化けしないんだけど、log4perlのモジュールを介して出力させると
binmode が効いてないっぽい。何か方法はないですかね。文字コード変換は面倒だからbinmodeで
なんとかならないですかね
526デフォルトの名無しさん:2010/09/18(土) 00:34:26
作ったサブルーチンは undef を返すんだけど、

my $result = testfun($data);

みたいに undef を変数に入れても問題無いですよね?

普通に使ってきたけど、「そういや undef って未定義だよな・・・」 って思ったら正しいやり方なのか不安になってきた。
527デフォルトの名無しさん:2010/09/18(土) 00:53:46
未定義値の認識を誤ってなければ大丈夫です。
528デフォルトの名無しさん:2010/09/18(土) 01:46:15
>>512
http://perldoc.perl.org/perlref.html#Using-References の 3.
http://perldoc.jp/docs/perl/5.10.0/perlref.pod
http://perldoc.perl.org/perldsc.html
http://perldoc.jp/docs/perl/5.10.0/perldsc.pod

-> (矢印演算子)の左辺にはリファレンス(かパッケージ名)が期待されていて、
左辺が「未定義」かつ「代入可能な何か」なら、右辺と辻褄のあうリファレンスが
自動生成・代入される仕組みになっている。

${$hash{'235'}}[0] は $hash{'235'}->[0] と等価で、上記の仕様に従いまず
$hash{'235'} = []; が暗黙の内に行われる。然る後 $hash{'235'}->[0]、即ち
undef が print される。よってこの文の後、$hash{'235'} には空の配列
リファレンスが代入された状態になっている。

翻って print @{$hash{'235'}}; における @{$hash{'235'}} は print という「リストを
受け取る単項演算子」のオペランドであって上記機能の対象とならず、既に
配列リファレンスであるという前提の元にデリファレンスされるのでエラーとなる。
529デフォルトの名無しさん:2010/09/18(土) 02:01:50
>>528
おお、なるほど、分かりやすい。

| $array[$x]->{"foo"}->[0] = "January";
|これが、先の左辺値コンテキストで用いるとリファレンスが存在するようになるというケースの一つです。
|この文以前には、$array[$x] は未定義かもしれません。その場合自動的にハッシュリファレンスと定義
|されて、{"foo"} が検索できるようになります。同じように $array[$x]->{"foo"} が配列リファレンスで定義
|されるので、 [0] をそこで探すことができます。このプロセスは 自動有効化 (autovivification) と呼ばれます。

こういう明文化された仕様があったんですね。
(ほげほげ)->[0]の場合、自動でリファレンスを作ってくれると。
丁寧なレスありがとうございました。
530デフォルトの名無しさん:2010/09/18(土) 13:38:37
サブルーチン内で下記のように処理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
}
531デフォルトの名無しさん:2010/09/18(土) 13:53:04
abc(1,2,undef);
scalar @_ == 2 ? 処理2 : 処理3
532デフォルトの名無しさん:2010/09/18(土) 13:53:11
>>530
サブルーチンを呼び出す側で第三引数を渡したつもりでも
undefな変数を渡していたら処理されないような。
533デフォルトの名無しさん:2010/09/18(土) 13:58:51
>>531 >>532
531のように引数の数でチェックしたほうがよさそうですね
思わぬバグになるところでした。聞いて良かったありがとう
534デフォルトの名無しさん:2010/09/18(土) 14:02:47
それと

&abc('test1','test2');

よりも、

abc(1,2,undef);

のように明示的にundefしたほうがよさそうですね
単純に忘れたのか明示的に外したのかが上だと分からないし
勉強になりましたありがとう
535デフォルトの名無しさん:2010/09/18(土) 14:05:53
すいません。>>534は、勘違いでした。
undefでも引数の数は3になるのか・・
やっぱり

&abc('test1','test2');

scalar @_ == 2 ? 処理2 : 処理3

のようなチェックのほうがいいか
536デフォルトの名無しさん:2010/09/18(土) 23:07:36
>>281
Low 2058 (Q9650+2GB+Ge9600GT)
夏仕様(VGAクロック半減)で Low1020
537デフォルトの名無しさん:2010/09/18(土) 23:14:43
下記のような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));
}
538デフォルトの名無しさん:2010/09/18(土) 23:38:02
@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;
}
539デフォルトの名無しさん:2010/09/18(土) 23:47:31
>>538
Perlのほうが、やっぱり記述が短いですね
参考になりました。
ありがとうございました。
540デフォルトの名無しさん:2010/09/18(土) 23:50:33
>>538
()付けろよ
541デフォルトの名無しさん:2010/09/18(土) 23:52:24
>>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デフォルトの名無しさん:2010/09/19(日) 00:00:00
付けるのは \& だろ
543デフォルトの名無しさん:2010/09/19(日) 00:10:16
>>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

で、うまく動きました。間に-が入るのが気になるけど
544デフォルトの名無しさん:2010/09/19(日) 00:13:08
あ、いいんだ
-1だからか。これでうまく行きましたね

みなさんどうもありがとう
545デフォルトの名無しさん:2010/09/19(日) 02:53:54
my $level = 'AT';

if($level == 'EAT') {
    print "ok\n";
}


上のところ。なぜかif文が通ってしまいます
なぜですかね。書き方が間違っているのでしょうか
546デフォルトの名無しさん:2010/09/19(日) 02:58:28
545です

自己レスです。
文字列は==ではなくeqみたいですね
Active perl, v5.10.1 を使ってます
原因がわかるまで凄い苦労した・・・

スレ汚し失礼しました
547デフォルトの名無しさん:2010/09/19(日) 10:08:38
知っててもたまにはまる
548デフォルトの名無しさん:2010/09/19(日) 10:29:46
比較するつもりで代入してて常にtrueだったりもする。
549デフォルトの名無しさん:2010/09/19(日) 12:51:32
つ use warnings;
550デフォルトの名無しさん:2010/09/19(日) 17:36:52
>>525
Appenderはどれ使ってるの? ScrernとFileならutf8オプションあるだろ。

Fileならさらにbinmode指定するオプションで凝ったこともできる。
551デフォルトの名無しさん:2010/09/19(日) 20:03:04
>>550
ありがとうございます
Scrernです。コマンドプロンプロトがShift_JIS なのでShift_JIS で出力せたいです
utf8オプションなんてあるんですか?ファイルのほうは別にutf8でいいです
何かしらエディッタなら対応してますから。メモ帳でも
ただコマンドプロンプロトの変わりはそうはないのでつらいですね。
諦めて画面にはPRINT文で出すことにしました
552デフォルトの名無しさん:2010/09/20(月) 01:23:08
>>551
ScreenならSTDOUTかSTDERRをbinmodeで設定しておきゃいいんじゃないの?
utf8オプションも結局それやってるだけだし。
553デフォルトの名無しさん:2010/09/20(月) 01:26:08
>>552
binmode STDIN, ":encoding(cp932)";

っていうのを呼び元のところで設定しているけどうまくいかない・・・
554デフォルトの名無しさん:2010/09/20(月) 01:27:07
標準出力はこっちかな
binmode STDOUT, ":encoding(cp932)";

自分でPRINTする分には出るんだけどね
555デフォルトの名無しさん:2010/09/20(月) 08:11:21
use strict;
って、パッケージ宣言ごとに書かないとだめですか。
今、ひとつのファイルに複数のパッケージを書いているのですが、
ファイルの先頭で use strict; すれば、そのファイル全体で有効だと
思いこんでいたのですが、なんか違うような気がしてきました。
556デフォルトの名無しさん:2010/09/20(月) 13:30:08
>>555
そうです。基本的なことですから押さえておきましょう。
557デフォルトの名無しさん:2010/09/20(月) 14:58:16
ニヨニヨ。
558デフォルトの名無しさん:2010/09/20(月) 15:08:27
ActivePerlをインストールしたら、よりモダンなOOPが出来る Moose なるパッケージを見つけました。
ドキュメントや入門ページを見るとナルホドなかなか良いなとも思ったのですが、
Perlで仕事をしている方々の評判はどんな感じなんでしょうか。
自分一人ならいいけど他のPGが読めなくなるから使わないとか、、
それとも今時のPerl使いはこれくらいは知っていて当然なのでしょうか?
559デフォルトの名無しさん:2010/09/20(月) 17:28:14
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');

のようにしたいのです。
560デフォルトの名無しさん:2010/09/20(月) 18:00:47
無理なものは無理だ
561デフォルトの名無しさん:2010/09/20(月) 20:55:49
http://perl.no-tubo.net/category/paypal/

これのやり方がわかりません
そもそもコードはどうやって表示させるのでしょうか?
初心者すぎですが、どなたか教えて下さい<m(__)m>

:: の意味もわからないです
562デフォルトの名無しさん:2010/09/20(月) 21:23:18
>>559
Readの戻り値がImage::Magickオブジェクトじゃないからしょうがないね。
お望みの動作をするMyReadでも勝手に定義すれば?

563デフォルトの名無しさん:2010/09/20(月) 21:24:23
>>561
::の意味もわからない奴に教えるのは大変すぎるので
頑張ってperlの勉強してください。
564デフォルトの名無しさん:2010/09/20(月) 21:28:20
>>555
use strictの有効範囲はレキシカルスコープだからファイルの最後まで
効くんじゃねーの? use varsと混同してない?

use strict;

package Package1;
use vars '$x';
our $y;
$x = 1;
$y = 2;

package Package2;
$x = 3; # これはエラーになる
$y = 4;
565555: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氏が正しいように思いますが、どうなんでしょうか。
566デフォルトの名無しさん:2010/09/21(火) 02:41:17
http://d.hatena.ne.jp/minesouta/20080227/p1
これ便利そうじゃね?使っている人いる?
567デフォルトの名無しさん:2010/09/21(火) 03:08:36
>>565
実験してみた
568デフォルトの名無しさん:2010/09/21(火) 03:11:53
Perlにて
1000件ぐらいのデータから1件だけをマッチさせて抜き出す処理を考えています

データ的には
日本語20,30文字と数字3桁の2つ
日本語で検索を賭けて抜き出します

こういった処理に適しているお勧めのパッケージってありますかね
CSVファイルにしてText::CSV::Simpleあたりのモジュールで読み込んでやろうかなとも考えているのですが
569デフォルトの名無しさん:2010/09/21(火) 03:17:52
>>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
570デフォルトの名無しさん:2010/09/21(火) 03:21:10
>>568
強いて言うなら DBI::SQLite とか?

そんくらいならモジュール使わんでも適当に書けるんじゃね?
571デフォルトの名無しさん:2010/09/21(火) 03:39:44
>>570
どうもありがとう。DBI::SQLiteだとDB関連ですかね。
このデータは随時追加したり頻繁に変更したりしたいのでCSVにして
エクセルにて色々弄ろうかとも考えているんですよね
DBはちょっと自分には敷居が高いなあー

やっぱりモジュール使わんでも適当に書いたほうがいいですかね
572デフォルトの名無しさん:2010/09/21(火) 04:02:03
>>571
多分リレーショナルな部分は使わんだろうけど、いい機会だと思ってSQL勉強しときなさい
一度覚えたら他の言語に移っても使えるからな

ちなみに厳密に言うとCSVファイルもDBだぞ
573デフォルトの名無しさん:2010/09/21(火) 06:37:33
>>568
Tokyo CabinetかKyoto Cabinetで
574デフォルトの名無しさん:2010/09/21(火) 06:43:49
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() とか何かが自動的に呼ばれるようにしたいです。
575デフォルトの名無しさん:2010/09/21(火) 06:48:13
>>572
ありがとう。もうちょっと調べてみる

>>573
ありがとう。ぐぐってみます。
576デフォルトの名無しさん:2010/09/21(火) 07:36:08
>>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";
577デフォルトの名無しさん:2010/09/21(火) 17:25:50
%result = ( "urls" => \@urls, … );
$ref_result = \%result;
$ref_resultから@urlsを取り出す方法を教えてください
578デフォルトの名無しさん:2010/09/21(火) 18:10:05
@{$ref_result->{urls}}
579デフォルトの名無しさん:2010/09/22(水) 00:04:29
my @tmp = split(/,/, $s);
my $a = ¥@tmp;
これを一発でかくにはどうしたらいいの?おしえてえらいひと
580デフォルトの名無しさん:2010/09/22(水) 00:12:09
my $aref = [split(/,/, $s)];

$a と $b は sort が(ry
581デフォルトの名無しさん:2010/09/22(水) 00:21:16
Perlで、GCを自分で起動・停止することはできますか。
参照カウント方式で起動もくそもないように思いますが、
もしあればおしえてください。
なお「Perl GC」でググってみましたが、それらしいのは
みつかりませんでした。
582デフォルトの名無しさん:2010/09/22(水) 00:51:28
>>581
この辺で分からなければ無いんじゃない。
http://perldoc.perl.org/perl.html#Internals-and-C-Language-Interface
http://search.cpan.org/modlist/Development_Support
http://search.cpan.org/search?m=all&q=Devel&n=100

perl本体のハック目的でもない限り、そんな事気にしながらじゃLL使う意味無いしな。
583デフォルトの名無しさん:2010/09/22(水) 01:18:29
>>580
ありがとう
584デフォルトの名無しさん:2010/09/22(水) 02:39:50
use strict; を書くと、変数宣言していない変数を指摘してくれますが、
これと同じことを行ってくれるパーサはありますでしょうか。
use strict; だとスクリプトを実行しないといけないので、それだと
副作用があって危険なので、実行せずに構文解析だけでできるのが希望です。
585デフォルトの名無しさん:2010/09/22(水) 02:44:00
perl -cwT
586デフォルトの名無しさん:2010/09/22(水) 03:25:19
アクティブ perl, v5.10.1で
SJISファイルをそのまま読み込んだ場合で
内部のUTF8とマッチング処理をするときは
どっちをどうやってコード変換すれば一番いいんですかね?
587デフォルトの名無しさん:2010/09/22(水) 03:30:14
自分は読み込んだ方をコーディングしてるファイルの文字コードに変換してる
588デフォルトの名無しさん:2010/09/22(水) 03:47:04
>>585
さんくす
できれば外部コマンドとして起動するのではなく、ライブラリとして使いたいです。
無理でしょうか。
589デフォルトの名無しさん:2010/09/22(水) 07:14:23
WEB上にあがってるPerlのことについて書かれている日本語のサイトって
Perl 5.8ばっかりだね。ふるいのばかり。今5.8使っている人いるのかな
細々とはいるだろうけど
590デフォルトの名無しさん:2010/09/22(水) 12:32:53
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ディレクトリでよいでしょうか?

以上、よろしくお願い致します。
592デフォルトの名無しさん:2010/09/22(水) 13:29:55
>>588
使用状況がいまいち想定できないんだけど、どういう使い方したいの?
Perlでどう解釈されてるか見たいという要望にはB::Deparseオススメしとく
593デフォルトの名無しさん:2010/09/22(水) 13:32:45
>>590
ありがと。そうなんだ
594デフォルトの名無しさん:2010/09/22(水) 17:36:14
wgetでhtmlのURLを指定するともちろん取得できます。
ところが、cgiを使ったURLを取得すると、cgiが作成したhtmlは取得できません。

方法としては
wget -E と Eオプションをつけることで解決するのでしょうか?(これを試しても取得できませんでしたが)

cgiが作成したhtmlをクロールするにはどうすればいいのでしょうか?
595デフォルトの名無しさん:2010/09/22(水) 18:20:04
perl無関係
596デフォルトの名無しさん:2010/09/22(水) 18:44:59
誰もperlに関係あるなんていってませんが?
597デフォルトの名無しさん:2010/09/22(水) 18:48:29

 ?
  ?
598デフォルトの名無しさん:2010/09/22(水) 18:52:05
CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://pc11.2ch.net/php/)

このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。

http://www.perl.org/get.html
● 2010/07/31 現在の最新版: 5.12.0

▼ 前スレ
Perlについての質問箱 43箱目
http://pc12.2ch.net/test/read.cgi/tech/1266565626/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-7 あたり
599デフォルトの名無しさん:2010/09/22(水) 19:01:26
>>587
ありがとう
600デフォルトの名無しさん:2010/09/22(水) 20:44:49
perlのsedモードをperlスクリプトの中から使いたいときは
どうしたらいい?
601デフォルトの名無しさん:2010/09/22(水) 21:09:16
ファイルをオープンしてテキスト書いてクローズする
ってのを1行でかっこよく書きたいんだけどどうしたらいい?
open( my $fh,"hoge" ) and print $fh ・・・
とか書くのめんどうくさい
602デフォルトの名無しさん:2010/09/22(水) 21:20:13
File::Slurp::write_file
603デフォルトの名無しさん:2010/09/22(水) 22:53:19
>>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
あっごめん >>601 だった
606デフォルトの名無しさん:2010/09/22(水) 23:42:07
>>600
sedモードというのが何を指して言っているのか分からないが、
cmd.exe のような環境で走らせている場合も含め、
shebang に付けられたオプションを perl 自身が解釈してくれる。

http://perldoc.perl.org/perlrun.html
http://perldoc.jp/docs/perl/5.10.0/perlrun.pod

> シェルから以下のように起動すると:
>
>  $ perl -p -i.orig -e "s/foo/bar/; ... "
>
> プログラムで以下のようにするのと同じで:
>
>  #!/usr/bin/perl -pi.orig
>  s/foo/bar/;
607デフォルトの名無しさん:2010/09/22(水) 23:57:52
外部ファイルからバイナリでそのまま何もせずに読んだ場合(パッケージなので仕方なく)
内部コードとのキーとマッチング処理を行うときに
Encode::_utf8_onとしないと外部ファイルからのデータはutf8として比較してくれないのですかね?
Perl5.10で、use utf8;指定しています。(binmode STDIN, ":encoding(cp932)";も)
608デフォルトの名無しさん:2010/09/23(木) 00:15:49
>>607ちなみに外部ファイルは日本語でutf8で
内部も日本語でutf8で比較しています
609591:2010/09/23(木) 00:41:19
>>603
>shiftjis と cp932 をごっちゃに思ってたなんてオチだったりして?
違います。
EncodeはいちいちUnicodeを経由して変換を行いますが、
恐らくマッピング上の問題で、Shift_JISの未定義領域をJISの未定義領域へ
正しく変換できないのです。
そのため、コード位置を計算で求める従来のアルゴリズムが必要なのです。

>判断に失敗した場合の決め打ちを自分で書けば良いのでは?
Jcodeにこだわっているのは、上記のアルゴリズムで実装されたJcode-0.88に
強く依存したコードがあちこちに存在するためです。
Jcode::_Classicが使えるなら、use部分+αの細工だけで済みますので。
610デフォルトの名無しさん:2010/09/23(木) 02:44:48
>>607>>608
は解決しました。取り下げます。
どうもスレ汚し失礼しました。
611デフォルトの名無しさん:2010/09/23(木) 16:01:53
>>604
やっぱそれしかないん?
インジェクションがおっかないからやなんだよなそれ
612デフォルトの名無しさん:2010/09/23(木) 16:35:36
systemにはリストで渡せよ
613デフォルトの名無しさん:2010/09/23(木) 17:27:30
perlで最大公約数を計算するプログラムを組みたいのですが、さっぱりわかりません
2つの引数からサブルーチンを返すプログラムを作成しそれを使うそうなのですが教えていただけないでしょうか
614デフォルトの名無しさん:2010/09/23(木) 17:34:37
>>613
わざわざ作らなくてもMath::BigIntを使えば?
615デフォルトの名無しさん:2010/09/23(木) 17:37:48
そんなモジュールあるんだ
613じゃないけど
616613:2010/09/23(木) 17:41:38
>>614
練習を兼ねて使ってはいけないみたいです・・・
617デフォルトの名無しさん:2010/09/23(木) 17:43:43
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
618デフォルトの名無しさん:2010/09/23(木) 17:45:05
2数の最大公約数を計算する方法がわかってないのか、
わかってるけどPerlでそれを実現する方法がわからないのか。
……前者だったら救いようがないぞ
619613:2010/09/23(木) 17:47:40
>>617
すいません・・・
2つの整数を引数として最大公約数を返すサブルーチンの作成しそれを使うプログラムでした
620デフォルトの名無しさん:2010/09/23(木) 18:08:44
宿題は自分でやれ
621デフォルトの名無しさん:2010/09/23(木) 18:19:57
sub gcd{
 my ($foo,$baa)=@_;
 return $baa ? gcd($baa,$foo%$baa) : $foo
}
掲示板の都合上全角空白だけど動かすなら半角にしなければエラー吐く
622デフォルトの名無しさん:2010/09/24(金) 03:39:18
http://sv2ch.baila6.jp/chk_proxy3.cgi
こういうEUC?コートでかかれているサイトをゲットしてきて
ソース内部のUTF8コードで書かれているものでキー検索するときは
どういった感じでコード変換かけてやればいいですかね?
623デフォルトの名無しさん:2010/09/24(金) 03:48:59
LWP::UserAgent->new->get("http://sv2ch.baila6.jp/chk_proxy3.cgi")->decoded_content(charset => "euc-jp");
624デフォルトの名無しさん:2010/09/24(金) 03:52:52
>>623
どうもありがとう。時間があるのときにそれで試してみます
625デフォルトの名無しさん:2010/09/24(金) 14:12:53
ファイルから行を読み込んで、文字列比較をしています。

ファイルの文字列はurlのようにエスケープ文字を含んでいて、
比較対象もエスケープ文字を含んでいます。

完全一致の==で、ifしていますが、上手くいきません。

比較する2つの変数(文字列)を、\マークでエスケープしても
うまく動いていないようなのですか、どうすればいいでしょうか?

ご助言、参考サイトの紹介等お願いします。
626デフォルトの名無しさん:2010/09/24(金) 14:26:10
eq
627デフォルトの名無しさん:2010/09/24(金) 14:44:59
書き間違えました、eqです、

でも上手くいってません。
628デフォルトの名無しさん:2010/09/24(金) 14:50:16
うまくいかない具体例を出してくれないことにはなんとも
ありがちなのはファイルから読み込んだほうの改行落としてないとか
629デフォルトの名無しさん:2010/09/24(金) 15:29:52
失礼しました、ザックリこんな感じです。

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 );


エスケープ対象文字に漏れはありません。
文字列に円マークを入れていくのは変でしょうか?
630デフォルトの名無しさん:2010/09/24(金) 15:33:25
chomp使えよ……
上手くいかないのはエスケープしてるからだろ
631デフォルトの名無しさん:2010/09/24(金) 15:52:56
>文字列に円マークを入れていくのは変でしょうか?
変。

>#比較側の$hikaku_mojiもここで同じ処理をしている。
これwhileの中でやってたら何回も回すうちに http:\\\\\\\\\\/\\\\\\\\\\/ みたいになるんじゃねーの
632デフォルトの名無しさん:2010/09/24(金) 16:00:56
そうですか・・ ちょっと見直します。

有難う御座いました。
633デフォルトの名無しさん:2010/09/24(金) 16:01:22
そもそも比較するだけなのになぜエスケープする必要があるのか。
不必要に複雑にしてるとしか思えない。
634デフォルトの名無しさん:2010/09/24(金) 18:08:10
完全一致なのだからエスケープする必要は無い
635デフォルトの名無しさん:2010/09/25(土) 14:41:38
********1**********2***********3*********4********

上記の文字列から数字だけを取り出して1個ずつ配列に格納するには
どうかくのがベストなのでしょうか。お願いします
636デフォルトの名無しさん:2010/09/25(土) 14:53:49
べ、別にベストじゃないんだからねッ

DB<9> $mojiretsu = "********1**********2***********3*********4********";

DB<10> @hairetsu = grep(/[0-9]/, split(/\*/, $mojiretsu));
637デフォルトの名無しさん:2010/09/25(土) 14:57:01
>>636
どうもありがとうございます。
なるほどsplitとかを使うのか。
参考になりました。
638デフォルトの名無しさん:2010/09/25(土) 14:57:21
my @n = '********1**********2***********3*********4********' =~ /[0-9]+/g;
639デフォルトの名無しさん:2010/09/25(土) 15:03:02
>>638
どうもありがとうございます。
そんな方法初めて知った。勉強になりました
640デフォルトの名無しさん:2010/09/25(土) 15:51:18
>>638がスマートかと思いまーす
641デフォルトの名無しさん:2010/09/25(土) 17:29:29
/( )/gでマッチさせて配列に、はスクレイピングしてると頻繁に使う
642デフォルトの名無しさん:2010/09/25(土) 17:43:18
/( )/gだと$1に1が
$2に2が
っていう感じでマズはいるんだよね
643デフォルトの名無しさん:2010/09/25(土) 20:59:39
>>612
ほほーう!
644デフォルトの名無しさん:2010/09/26(日) 22:48:11
特定の日時から5分前、10分前、15分前・・・と時刻を得るにはどうしたらいいでしょうか?
645デフォルトの名無しさん:2010/09/26(日) 23:02:49
$before_5minute = localtime(time - 300);
$before_10minute = localtime(time - 600);
$before_15minute = localtime(time - 900);
646デフォルトの名無しさん:2010/09/26(日) 23:09:11
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);

こんな感じでいけた
648デフォルトの名無しさん:2010/09/28(火) 13:30:54
>>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
おぉ。そんな風にいけるのか。ありがとう
650Perl忍者 ◆M5ZWRnXOj6 :2010/09/28(火) 16:23:58
こっちみんなYappo
651デフォルトの名無しさん:2010/09/29(水) 00:37:00
>>648
ありがとうございます。コードがスマートになりました。
652デフォルトの名無しさん:2010/09/29(水) 10:21:29
Perlってどのバージョン位までサポートすることを考えたほうがいいんですかね?

5.10を動かしてるところもあれば、5.8をつかってるところもあるんですけど。
5.6も考えたほうがいいんですか?
653デフォルトの名無しさん:2010/09/29(水) 10:27:41
>>652
Encode や今と同仕様の UTF-8 フラグを使えるのが 5.8.1 から。
モジュールの事を考えずに済むのなら、恐らく大半の人は 5.005_03 でも困らない筈。
654デフォルトの名無しさん:2010/09/29(水) 13:56:26
flockは万能じゃないなど、いくつかの記事を見たので
flockについてしらべてみたのですが、どういう問題があるのかなどわかりませんでした。

どのような問題があるのでしょうか?
655デフォルトの名無しさん:2010/09/29(水) 14:13:21
記事に書いてあったんじゃないの?
656デフォルトの名無しさん:2010/09/29(水) 14:20:56
>>654
すみません。
私が読んだ記事には万能でないということしか書いておらず、
理由を探しております。
理由として探せたのはNFS上では使えないというものくらいでした。
(Windows9xで使えないというのもありましたが、最近では関係ないと思っております。

657デフォルトの名無しさん:2010/09/29(水) 15:29:20
5.007003みたいなバージョンが出てくるんですが、
このバージョンの書き方って、どう読めばいいんですか?
658デフォルトの名無しさん:2010/09/29(水) 16:04:44
ごーてんぜろぜろななぜろぜろさん?
659デフォルトの名無しさん:2010/09/29(水) 16:11:53
5.007003=5.7.3
ぱーるふぁいぶせぶんすりー
660デフォルトの名無しさん:2010/09/29(水) 16:37:54
>>659
正解
661デフォルトの名無しさん:2010/09/29(水) 21:59:53
localtimeを取る時に、月とか年のためにいらない変数を一杯使いますが、
日付だけ取ることはできませんか?¥
662デフォルトの名無しさん:2010/09/29(水) 22:04:30
(undef, undef, undef, undef, $mon, $year) = localtime;
663デフォルトの名無しさん:2010/09/29(水) 22:09:23
配列の要素を直接指定できることがわかりました
>>662よりみじかくかけました
664デフォルトの名無しさん:2010/09/29(水) 22:09:54
>>661

perl 初心者がカキコ

my ($day) = (localtime(time))[3];

とかでいいのかな?
665664:2010/09/29(水) 22:18:58
あ、遅かったか。

で、もうちょっと考えてみて
もし自分で書くなら DateTime モジュール入れて

use DateTime;
my $tn = DateTime->now( time_zone => 'Asia/Tokyo' );
say $tn->day;

こんな感じにするかもしれない。
# 月とか扱いやすいしね

666デフォルトの名無しさん:2010/09/29(水) 22:24:23
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];
667デフォルトの名無しさん:2010/09/29(水) 23:02:25
それだけの目的ならTime::Pieceのがいいんじゃない?DateTimeよか軽いし。
use Time::Piece;
print localtime->mday; #=> 29

>>664
($day)の括弧はこの場合は余計。
668デフォルトの名無しさん:2010/09/30(木) 02:44:01
Windowsで名前付きパイプって作れる?
linux なら POSIX::mkfifo で作れたけど、CamelBoxではムリポだった
669デフォルトの名無しさん:2010/09/30(木) 08:06:23
>>667
Time::Piece は 5.8.x 系までは標準モジュールでなかったので、
「それだけの目的」の為に可搬性を落とす必要はないという考え方もある。
670デフォルトの名無しさん:2010/09/30(木) 16:36:13
pythonから「やっぱだめだ」と感じてperlに移ってきた俺のような奴はめずらしいのだろうか
671デフォルトの名無しさん:2010/09/30(木) 17:16:19
俺はRubyを勉強しているけどむずい
672デフォルトの名無しさん:2010/09/30(木) 17:18:09
RubyもPythonもオブジェクト指向がPerlみたいに気持ち悪くないからとっつきやすいと思うけどな
673デフォルトの名無しさん:2010/09/30(木) 17:28:07
オブジェクト指向部分は使わないからperlが使いやすい
Pythonはちょろっとさわって、2x系と3系の違いが結構微妙だったので使うのをやめた
もっとこなれたらさわるかもしれない
674デフォルトの名無しさん:2010/09/30(木) 18:06:03
perlは新しいモジュール覚える気がしない
もう限界と感じるようになった
675デフォルトの名無しさん:2010/09/30(木) 18:52:26
自分でモジュールを作る方に回るのか
676デフォルトの名無しさん:2010/09/30(木) 21:13:03
Perlなんて大嫌いだ! 便利だから使うけどな!
って人も結構多いよね。
677デフォルトの名無しさん:2010/09/30(木) 21:13:43
日本語処理に困ったら国産ruby
678デフォルトの名無しさん:2010/09/30(木) 21:23:05
俺はC言語からPerl組みだな
まともにPerlを勉強してないけど
ある程度C言語の知識があると書けるね
679デフォルトの名無しさん:2010/09/30(木) 21:23:49
>>677
あー。確かにPerlは日本語とWindows環境で苦労してるわ
何度悩んで数日無駄にしたことか
680デフォルトの名無しさん:2010/09/30(木) 21:27:23
さすがにC言語の知識だけだと短くかけない
681デフォルトの名無しさん:2010/09/30(木) 21:29:32
C言語はいらないけど、Perlは正規表現も必要だね。sedやviで正規表現は研いていた
682デフォルトの名無しさん:2010/09/30(木) 21:32:12
Perlは豊富なモジュールが。だけど日本製が少なく
ドキメントも情報も英語が多いのとモジュールだと枝葉にいってしまうので
知っている人が少ない。日本語処理もおかしくなるときがあるので
逆にモジュールを使ってしまって失敗したケースもあるな。
683デフォルトの名無しさん:2010/09/30(木) 22:11:09
改行コードが
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に置換されなくなるんですね。
無事そのままの状態で保存することができました。即レスありがとうございました。
684デフォルトの名無しさん:2010/09/30(木) 22:13:43
なんかお前大変なことになってないか?
685デフォルトの名無しさん:2010/09/30(木) 22:43:49
何言ってんだこいつ
686デフォルトの名無しさん:2010/09/30(木) 23:05:55
便乗(なのか?w)質問
binmode と >:raw はイコール?
とすれば一々binmodeするのやめたいのだが・・・
687デフォルトの名無しさん:2010/10/01(金) 00:28:51
質問その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部分を読ませるつもりだ?ばーか
そういう新興宗教言語が欲しければ自分で作りなさい。
689デフォルトの名無しさん:2010/10/01(金) 01:01:37
>>687
1. !!(grep { $_ eq 'b' } ('a'..'c')

2. use Hoge; Hoge::A->any_method(); # => ok
690デフォルトの名無しさん:2010/10/01(金) 01:38:14
>>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では難しいでしょうか。
691デフォルトの名無しさん:2010/10/01(金) 01:52:02
>>690
作ればおk
sub include($@){
my($char, @array) = @_;
foreach(@array){
return 1 if $char eq $_;
}
return 0;
}

新しく空のパッケージを作成しておく
-- Hoge/A.pm --
package Hoge::A;
1;
またはモジュールロード用のパッケージを作成しておき、処理の最初に必ず読み込むようにする
692デフォルトの名無しさん:2010/10/01(金) 03:40:13
STDINとかでキーボードから入力を受けとるときに、
入力部分にあらかじめ文字列を表示(入力)させておくことはできますか?
はじめから「hoge」と入力されてて、それに続けて入力できるような
693デフォルトの名無しさん:2010/10/01(金) 08:04:04
Curses
694デフォルトの名無しさん:2010/10/01(金) 08:38:33
>>690
use List::Util 'first';
if ( defined first { $_ eq 'b' } 'a'..'c' ) { ... }
695デフォルトの名無しさん:2010/10/01(金) 10:18:04
>>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 を使ってしまうといった下らない罠に自らはまる事になる。
696デフォルトの名無しさん:2010/10/01(金) 15:46:58
>>693
どうやればよいですか
697デフォルトの名無しさん:2010/10/01(金) 16:51:10
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」 のようになってしまう。
698デフォルトの名無しさん:2010/10/01(金) 17:31:28
ありがとうございます。その発想はなかったです

その「TEST」の後ろから続けて入力できて、またバックスペースで「TEST」のところまで消したりできるようにしたいんです
「TEST」に続いて「hoge」と入力したら「TESThoge」が受けとれるようにしたいです
699デフォルトの名無しさん:2010/10/01(金) 20:44:20
>>694
List::Utilという便利パッケージがあるんですね。ありがとうございます。
ただinclude?相当の関数ぐらい標準であってもよさそうなもんですが、以外とそうでもないんですね。

>>695
まさにこれが知りたかった情報でした。ありがとうございます。
自分で%INCをいじってたときにはうまくいかなかったのですが、
このスクリプトはうまく動作することを確認しました。
自分のは何がまずかったのだろうか。

あと、perlではパッケージごとに別ファイルにするのが推奨なのでしょうか。
自分で%INCいじってると、そうとしか思えません。
クラスは細かくわけたいけど、ファイルまでわけるのはちょっと。
700デフォルトの名無しさん:2010/10/01(金) 21:20:12
別の言語なんだから標準関数が違うのは当たり前
701デフォルトの名無しさん:2010/10/01(金) 21:36:43
関数呼び出しのとき、カッコは省略したほうがいいのでしょうか。
最近読んだソースがみなカッコを省略する傾向にあったので、
Perlではそういう流儀なのかなと思って質問してみました。
なんかPerl標準のコーディング規約があればおしえてください。
702デフォルトの名無しさん:2010/10/01(金) 21:39:56
()はつけてもつけなくても構わない
好み
703デフォルトの名無しさん:2010/10/01(金) 21:40:37
演算子の優先度をちゃんと覚えてるなら省略でいい
704デフォルトの名無しさん:2010/10/01(金) 21:49:25
>>699
> パッケージごとに別ファイルにするのが推奨なのでしょうか。
ケースバイケース。
ただ指標として、実現手段が異様に複雑だと感じたなら設計を見直すべき。
あとは手元の環境にインストールされている沢山のモジュールをお手本に。

>>701
http://perldoc.perl.org/perlstyle.html
http://perldoc.jp/docs/perl/5.10.0/perlstyle.pod
705デフォルトの名無しさん:2010/10/01(金) 22:19:12
>>704
>ケースバイケース。
それをいっちゃうと身もふたもないような。
>ただ指標として、実現手段が異様に複雑だと感じたなら設計を見直すべき。
実現手段が複雑というのはどういう意味でしょうか。
今はパッケージごとにファイルを分割するべきかどうかを質問しているのですが、
その話の流れの中で「実現手段の複雑さ」とか「設計を見直す」とか言われても、何を意図しているのかよくわかりません。
>あとは手元の環境にインストールされている沢山のモジュールをお手本に。
いやだから、そのたくさんのモジュールたちはどういう基準でファイルを分割しているのかが知りたいんですが。
>ケースバイケース。
>ただ指標として、実現手段が異様に複雑だと感じたなら設計を見直すべき。
>あとは手元の環境にインストールされている沢山のモジュールをお手本に。
706デフォルトの名無しさん:2010/10/01(金) 22:30:26
パッケージ名しか知らない人がファイルを探しだす手段をどうするかだな
707デフォルトの名無しさん:2010/10/01(金) 23:35:30
Perlを覚えようと思うのですが、私のPCはwinXP-SP3の32bit機で、
現在ダウンロード可能な64bit用のソフトを下記サイトのように
転用しようと考えています。

http://builder.japan.zdnet.com/sp/snow-leopard-09/story/0,3800100196,20412692,00.htm

上記サイトで出ているコマンド(下記)
$ defaults write com.apple.versioner.perl Prefer-32-Bit -bool yes

を実行することで解決しようと考えておりますが、
このコマンドを実行するにはどうしたらよいのでしょうか、
ご存じの方ご教示ください。
708デフォルトの名無しさん:2010/10/01(金) 23:47:36
mac用のこまんどをwinで実行しても無意味
709デフォルトの名無しさん:2010/10/02(土) 00:00:30
>>698
ReadLine
710デフォルトの名無しさん:2010/10/02(土) 00:39:50
>>705
> それをいっちゃうと身もふたもないような。
曖昧模糊とした質問にはそう答えるしかないな。万能解は無いさ。
君の作ったパッケージ群がどういった基準で分けられていて、それぞれがどういう関係に
あって、何処からどれを使いたいかを俺は知らないからね。

> どういう基準でファイルを分割しているのかが知りたいんですが。
それぞれの作者が自分のやりたい事を Perl で実装する上で理に適ってると考えた
分け方をしてると思う。茶化してるわけじゃないよ。目的によって最適な手段は変わるから、
手段だけ切り離して必ずこうすべきとは言えないんだ。そして目的と手段を組み合わせた
実例が目の前のモジュールだから、自分のやりたい事と似たケースを探せばいい。
実装レベルでなく設計レベルの話ならその手の専門書でも読んでね。

> 実現手段が複雑というのはどういう意味でしょうか。
Perl は use Foo; で Foo.pm を読む仕組みになっているから、Foo::func() を使いたかったら
Foo.pm に package Foo; を書いて use Foo; するのが Perl 的にシンプル。 >>695 のように
複雑で面倒な事が必要になるのは、「ファイルは1つにまとめたいけど個別に use したい」
という要求に原因がある。パッケージごとにファイルを分けるべきかどうかや >>695 のような
アプローチを採るべきかどうかは、この要求がどのくらい切実かによって変わるんだよ。
まずい設計に引っ張られてまずい実装になっているなら設計を見直すべきだし、
実装レベルの工夫によってトータルで楽ができるならそうしたらいい。
711デフォルトの名無しさん:2010/10/02(土) 01:35:06
>>705
インターフェースかそうでないかでパッケージ分ければ?

俺はあとあとの変更が面倒だから全部最初から分けてるけど
712デフォルトの名無しさん:2010/10/02(土) 07:22:35
データを 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 とすることにしました。
713デフォルトの名無しさん:2010/10/02(土) 10:43:29
\r\n でいいじゃないか
714デフォルトの名無しさん:2010/10/02(土) 12:48:55
テキストモードで\x0aに統一されるのは、
Cのライブラリに依存してる気もするけど、
実際どうなんだろ。
715デフォルトの名無しさん:2010/10/02(土) 18:25:45
>>709
どうやればよいですか
716デフォルトの名無しさん:2010/10/02(土) 23:44:51
UTF-8の改行コードLFでコード書けば日本語の問題も起きないし楽
未だにECUやSJISで書いてる奴ってなんなの?
717デフォルトの名無しさん:2010/10/02(土) 23:47:35
基本的にはUTF8だけどたまにShift_JISで書かざるを得ない時もある
718デフォルトの名無しさん:2010/10/03(日) 01:52:52
open(HOGE, ">:raw:encoding(cp932)", encode('CP932', "改行チェック0D0A.txt")) or die $!;
print HOGE "あいうえお\x0D\x0Aかきくけこ\x0D\x0A"; # -> 0D 0D 0A
close HOGE;
719デフォルトの名無しさん:2010/10/03(日) 08:44:43
>>716
EUC-JP にしとけば大丈夫! って思ってた時期がありました
今も EUC-JP なのはその名残
新しく書き起こすのは UTF-8 にしてるけど、以前に作ったやつは今も稼動中なので、
そのサイト内で作る場合は EUC-JP なんだよね


改行コードは OS は \r\n なのでそれにあわしてる
720デフォルトの名無しさん:2010/10/03(日) 13:43:17
改行コードはテキストモードの\nを使えばOSに合うようになってるし、
HTTPのようにCRLFに固定させたいなら、バイナリモードで扱えばいい。
721デフォルトの名無しさん:2010/10/03(日) 15:36:50
スクリプト自体は基本的にEUCだな
出力のエンコーディングや改行コードは状況に合わせる
722デフォルトの名無しさん:2010/10/03(日) 19:11:32
eucで書いてeucに変換して作業すれば基本的に何でもできる
世の中にはsjisとeucだけあればいい
723デフォルトの名無しさん:2010/10/03(日) 20:22:35
CP932を無視できるとは剛の者だな。仕事してんの?
724デフォルトの名無しさん:2010/10/03(日) 20:58:57
JIS 系は無視とは書いてないけどw
725デフォルトの名無しさん:2010/10/03(日) 20:59:12
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フォントの表示位置をずらす)だ。
727デフォルトの名無しさん:2010/10/03(日) 23:06:13
JIS X 0208の符号化方式とJIS X 0213の符号化方式(Shift_JIS-2004)、
MS-KanjiとCP932
この二つは分けて考えるべきだと思うんだ。
出所がMS-DOSだったとしても。
728デフォルトの名無しさん:2010/10/03(日) 23:21:37
ttp://www.amazon.co.jp/dp/477414164X/
ちょうどこれを読み終わったところ
面白かったし為になった
eucにしとけば大丈夫とか思ってる奴は読んどけ
729デフォルトの名無しさん:2010/10/03(日) 23:29:27
つ デファクトスタンダード
730デフォルトの名無しさん:2010/10/04(月) 00:36:24
SJIS
JIS
CP932

携帯からこう書くのが面倒だったので省いただけw
誰も工業規格とか言ってましぇんよぅ
731デフォルトの名無しさん:2010/10/04(月) 06:34:55
出力がShift_JISだと、ついスクリプトもShift_JISで書いてしまうことが。
悪い癖だ。
732デフォルトの名無しさん:2010/10/04(月) 07:51:19
>>728
なんか良さそうだね。
俺も読んでみるわ。
733デフォルトの名無しさん:2010/10/04(月) 12:05:37
最近のWebサイトは大体文字コードがUTF-8だから
スクリプトもUTF-8で書いて処理、出力もUTF-8
CGIはeucなんて書いてるサイトもあるが、昔の話だと個人的には思ってる。

まだまだsjisのサイトとか残ってるから、絶対にUTF-8とは言えんが。

自分のPC内で処理させるだけなら、自分の好きな文字コード使えばいいだろ。
仕事でPerl使ってると、また別の話。
734デフォルトの名無しさん:2010/10/04(月) 16:15:06
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


めんどくせぇぇぇぇ・・・
735デフォルトの名無しさん:2010/10/04(月) 16:27:11
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";
736デフォルトの名無しさん:2010/10/04(月) 16:44:46
>>734はアホってこと?
737デフォルトの名無しさん:2010/10/04(月) 21:20:43
738デフォルトの名無しさん:2010/10/04(月) 23:39:24
コードもDBも出力もutf-8の場合use utf8のありがたみがあまり感じられない
739デフォルトの名無しさん:2010/10/05(火) 02:20:55
Lingua::JA::Regular::Unicodeってのはデフォでは入ってないんだね。初めて外部のモノ入れてみた。
http://search.cpan.org/~tokuhirom/Lingua-JA-Regular-Unicode-0.04/lib/Lingua/JA/Regular/Unicode.pm
からLingua-JA-Regular-Unicode-0.04.tar.gzをダウソして、解凍して、Makefile.plを動かしてみると
|サポートされていない16ビットアプリケーション
|64ビットバージョンでの Windows での非互換性のため、プログラムまたは機能
|である"\??\C:\Perl64\bin\Nmake15.exe"を開始または実行できません。ソ
でインスコ失敗。
http://www.fxfrog.com/?p=194 ここ見て64bit版のnmakeを入れてから上の手順をやってみると、
it looks like goodのようなメッセージが出たので成功したように見えた。しかし実際にスクリプト内で
use Lingua::略をしてみると見つからないとのエラーが出た。インスコはうまくいってなかった。
今度はcpan Lingua::JA::Regular::Unicodeとしてみるとダラ〜っと色んな表示が出て勝手に色々
やってくれてうまく行った。
740デフォルトの名無しさん:2010/10/05(火) 02:34:50
ActivePerlならppmでも入るよ。
741デフォルトの名無しさん:2010/10/05(火) 02:38:30
ppmも試してみたのですが、Lingua::JA::Regular::Unicodeはヒットしませんでした。
と思って今もう一度試してみたら登録名がLingua-JA-Regular-Unicodeになっていた。
742デフォルトの名無しさん:2010/10/05(火) 06:19:11
>>734
Encode.pmのeuc縛りとutf8フラグのコンボが見事に炸裂しとるな
743デフォルトの名無しさん:2010/10/05(火) 06:30:49
@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)); の一行で・・・
744デフォルトの名無しさん:2010/10/05(火) 07:13:03
今だに携帯向けサイトの大半はshift-JISらしいな。
745デフォルトの名無しさん:2010/10/05(火) 07:57:38
出力時だけSJISにエンコードすればいいのにね
746デフォルトの名無しさん:2010/10/05(火) 11:01:35
>>745
〜とか狂うだろ。iconvは頭悪いからな。
747デフォルトの名無しさん:2010/10/05(火) 13:41:58
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.
縺サ縺偵⊇縺・
748747: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に戻る、という過程による物のようでした。
749デフォルトの名無しさん:2010/10/05(火) 15:00:47
>>748
下の二行は間違い
750747: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"と省略して書けるんだろうと思っていましたが、意味が違ったんですね。スッキリしました。
751デフォルトの名無しさん:2010/10/05(火) 16:23:25
perlもUTF推奨なの?
kakasiとか使ってる古いモジュールがEUC限定だったりはしないの?
752デフォルトの名無しさん:2010/10/05(火) 18:19:47
>>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;

結果
ツつ�ツつ「ツつ、
ツつ�ツつ「ツつ、

手元では化けるけど、何が違ってるんだろうか。
753デフォルトの名無しさん:2010/10/05(火) 18:39:41
>>752
集団でなにかを差し出しているようだ
754デフォルトの名無しさん:2010/10/05(火) 18:43:54
>>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";
だと
|あいう
|ツつツつ「ツつ、

になった
どういう事だろう
755デフォルトの名無しさん:2010/10/05(火) 19:11:59
utf に限っては encoding(utf-8) ってやっちゃいけない
ってどこかに書いてあったよ

なので 「なんでだろう?」 じゃなくて 「そうゆうもんなんだ」 って思うようにしてる
756デフォルトの名無しさん:2010/10/05(火) 21:36:08
質問させてください
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つしか出ないのですが
計算をする部分でおかしくなっているようです(公式はあっています)

かなり悩んだのですがどうしても答えが出ないので
どうかご教授御願いします
757デフォルトの名無しさん:2010/10/05(火) 21:40:55
#! 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;
758デフォルトの名無しさん:2010/10/05(火) 21:42:42
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します
759デフォルトの名無しさん:2010/10/05(火) 21:48:33
print(out"$num\n");
print "$num \n"; #値チェック用
}
#####値の初期化########
@x=0;
&shu=0;
$ref_freq=0;
%ref_freq=0;
$count=0;
$numcount=0;
}
}

}

ファイルはこちらになります
http://ourfilehost.net/up/file1/upload.php?id=1925
よろしく御願いします
760デフォルトの名無しさん:2010/10/05(火) 22:03:22
面倒だから全部は読んでないけど、
$numcount +=0;
折角のカウンタ $numcount をカウントアップしてねーじゃん。

このケースなら $. が利用出来るから、
while ($t = <FILE>){
 前処理
 if ( $. % 100 == 0 ){
  処理
 }
 後処理
}
の方がスマート。
761756:2010/10/05(火) 22:50:36
>>760
アドバイスありがとうございます
$numcount +=0; は
うpするときに間違えてました
実際は$numcount +=1;で
実行結果は>>756様になります
762デフォルトの名無しさん:2010/10/05(火) 23:10:19
$. なんか使っちゃ駄目だ
763デフォルトの名無しさん:2010/10/05(火) 23:14:51
$b はインクリメントも何もやってないが、 @x[$b] の意味は?
つか、$b は sort が(略

&shu = 0 # って何だよ? lvalue サブルーチンでも使ってるのか?
つか &shu をどこで使ってんだよ、本当は。
$ref_freq = 0; # って一個も使ってないぞ。
%ref_freq=0; # ハッシュの初期化になってねーよ。%ref_freq = ();

ってこんな風にかたっぱしからチェックしろと言うのか?
764デフォルトの名無しさん:2010/10/05(火) 23:33:06
>>756
ttp://codepad.org/FjFApjZZ
こんなのどうだ
ソースがあまりにもあんまりだから全面改定
765デフォルトの名無しさん:2010/10/05(火) 23:34:21
ダウンロードして perl -wc en.pl したところで気が済んだ。
766756: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でハッシュ(連想配列)の中身を取り出す際に必要な物かと
勝手に想像していました。




767デフォルトの名無しさん:2010/10/06(水) 00:00:52
>>763
は、
「こんなナメた質問をするんじゃねーよ。答える気にもならんよ。」
って暗に書いたつもりだ。言い訳のレスが欲しいわけじゃない。

俺にレスる時間があれば、>>764氏のソースをきっちり読み込めば?
(当方は未読だから本当に求めるものが出るか知らんが、)
768 ◆ZlTljNUiR2 :2010/10/06(水) 00:04:31
test
769756:2010/10/06(水) 00:06:33
>>764
模範解答ありがとうございます
エントロピーの計算は少々違う物でしたが
データ流れは私が求めている物でした
コレを見ながら勉強させていただきます
770 ◆ZlTljNUiR2 :2010/10/06(水) 00:12:20
>>764には一か所ミスがあるよ!
答えはトリップ!
正解者にはperl一年分をプレゼント!!
771デフォルトの名無しさん:2010/10/06(水) 00:15:45
ruby一年分なら考えたのに
772デフォルトの名無しさん:2010/10/06(水) 01:26:59
> calcEntropy ( $#dummy , %ipf ) ;
ちゃんと読んでないけどこれたぶん 0+@dummy とか書くべきとこだよね
あと$ips[0]が読み飛ばされてたりするけど、
そもそも最初からファイル全部読み込んでおいていいんだったらカウントして100行ごとに云々とかせんでも
my $start = 0;
while (my @ip100ko = grep { defined } @ips[$start..$start+99]) {
処理
$start += 100;
}
で終いだよね
773 ◆ZlTljNUiR2 :2010/10/06(水) 01:42:57
>>772
正解!!
#[$i-1]

例えばIPが352個あるときは100,100,100,52の組にすることを想定
774デフォルトの名無しさん:2010/10/06(水) 08:46:12
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 は合っています。 (改造前ではダウンロード出来ています)

なんでコールバック関数が呼ばれないんでしょか・・・
775デフォルトの名無しさん:2010/10/06(水) 08:52:19
$ua->get($url, ':content_cb' => \&ProgressDownload);


これだと呼ばれるのですが、個人的には request で処理したいのに・・・
776デフォルトの名無しさん:2010/10/06(水) 08:57:07
すんません。 解決しましたw


$ua->request($mov_req, ':content_cb' => \&ProgressDownload);

じゃなくて

$ua->request($mov_req, \&ProgressDownload);

っていうだけだった・・・
777デフォルトの名無しさん:2010/10/06(水) 11:31:04
perlのミスなんてほんのささいなことさ
778デフォルトの名無しさん:2010/10/06(水) 20:27:03
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){
処理;
}
780デフォルトの名無しさん:2010/10/06(水) 21:43:09
>>779
$argv1 = eval($ARGV[1]);
781デフォルトの名無しさん:2010/10/06(水) 23:05:19
$ARGV[1] =~ m#^[\d()*+/-]+$# or die "こえーのです。\n";

自分専用ならいきなり eval で済ませそうだけど。
782デフォルトの名無しさん:2010/10/07(木) 00:10:16
@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デフォルトの名無しさん:2010/10/07(木) 00:36:53
784デフォルトの名無しさん:2010/10/07(木) 00:59:39
>>783
こんなモノがあったんですね。知りませんでした。
どういう事が出来るのか色々と試してみたいと思います。
レスありがとうございました。
785デフォルトの名無しさん:2010/10/07(木) 01:24:37
HTML::AAとはなんだったのか
7861度目のマルチです:2010/10/07(木) 17:58:57
正規表現が利用可能なファイル名変更perlスクリプト下さい!
787デフォルトの名無しさん:2010/10/07(木) 19:38:32
>>786
perl -e '$re = shift; for (@ARGV) { $old = $_; eval $re; rename $old, $_ }' 's/foo/bar/' foo*
788786:2010/10/08(金) 00:11:13
>>787
ちゅっちゅ!
789デフォルトの名無しさん:2010/10/08(金) 07:57:18
>>778を誰かお願いします・・・。
790デフォルトの名無しさん:2010/10/08(金) 09:13:22
取得した HTML
クッキー

この2つを保存しておきゃえぇんとちゃうのん?
791デフォルトの名無しさん:2010/10/08(金) 09:57:34
>>789
クロージャに対応してないからうまくいかない。
対応してるData::Dump::Streamer等を使え
792デフォルトの名無しさん:2010/10/08(金) 12:05:39
質問です。
以下のコードで$tmpという一時変数を使わずに同じ処理を行うにはどうすればよいでしょうか?

my @lst = ({hoge=>1, foo=>2}, {hoge=>3, foo=>4});
my $tmp = shift @lst;
print $$tmp{hoge};
793デフォルトの名無しさん:2010/10/08(金) 12:13:34
パスワードを sha256 で ランダムの salt付きでハッシュ化して保存するにはどうしたらいいのでしょうか?
794デフォルトの名無しさん:2010/10/08(金) 12:27:07
print +(shift @lst)->{hoge};
795デフォルトの名無しさん:2010/10/08(金) 12:58:12
>>794
ありがとうございます。
あなたのおかげで理解が深まりました。
${shift @lst}{hoge}
としてもできるようですね。
796デフォルトの名無しさん:2010/10/08(金) 15:07:52
だいぶ前に図書館で読んだ本で"コメントが多すぎると実行速度がおちる"と書いてあったのですが、
それは本当なのでしょうか。
もしそれが本当ならばどれほど影響するものなのでしょうか。
797デフォルトの名無しさん:2010/10/08(金) 15:44:36
>>796
perl はスクリプトを中間形式にコンパイルしてから実行するので、コメントの量と処理速度は関係ない。
ただ同じ内容のスクリプトでも、ファイルサイズや、コード部とコメント部の入れ替わり回数に極端な
差があるなら、ディスクの読み込み速度やCPUパワーが体感差に現れるかも知れない。
それらがどのくらいの差になるかは当然実行環境依存。
798796:2010/10/08(金) 17:26:46
>>797
気にする程でもない、ってことでいいですか?
799デフォルトの名無しさん:2010/10/08(金) 17:47:31
本体が数行しかないのにコメントが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)
800デフォルトの名無しさん:2010/10/08(金) 18:05:58
下記の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";
801デフォルトの名無しさん:2010/10/08(金) 18:28:48
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";
802デフォルトの名無しさん:2010/10/08(金) 20:06:24
803デフォルトの名無しさん:2010/10/08(金) 20:53:26
>>796
インタプリタがコメントを読み飛ばすのに微量なCPUパワーを使うからじゃないの?

コンパイルして使う言語は、コンパイル時にコメント削ぎ落とすけど
インタプリタ型はソースを直接読むじゃない

これは滅茶苦茶スペースやタブとか改行とか入れる場合も該当するでしょう

痛くも痒くも無い程度には低下する筈

そんなナノセカンドのパフォーマンスの低下も許せないなら
実行ファイル作るべき
804デフォルトの名無しさん:2010/10/08(金) 21:00:54
interpret 開始前に注釈は除かれますお
805デフォルトの名無しさん:2010/10/08(金) 21:19:42
>>804
ではその除く作業に微量なCPUパワーを消費するのでしょう
806デフォルトの名無しさん:2010/10/08(金) 22:08:13
Perlはコンパイルしてから実行するんだが何言ってんのこの子
807デフォルトの名無しさん:2010/10/08(金) 22:27:50
釣りかどうか迷う書込みが
808デフォルトの名無しさん:2010/10/08(金) 23:18:29
>>806
コンパイラでもインタプリタでもなんでも、
コンパイルとかするときにはどうしてもコメント取らなきゃいけないじゃん
でもそのためのCPUの仕事なんて微々たるもんだとおもうよ
809デフォルトの名無しさん:2010/10/08(金) 23:40:07
コメントの末尾が5Cになってると次の行も無視されるけどな
810デフォルトの名無しさん:2010/10/09(土) 01:10:03
コメントが仮に1G付いてるなら、その1Gファイルを読破しなきゃ
どこを取り除けばいいのかコンパイラは分かりませんがな
811デフォルトの名無しさん:2010/10/09(土) 01:20:25
テキストフォームの一文字目に禁止文字を設定するにはどうしたらいいですか?
(金額入力場所で文頭に0をつけさせたくない)
812デフォルトの名無しさん:2010/10/09(土) 01:21:43
speedycgi使おうぜ
813デフォルトの名無しさん:2010/10/09(土) 01:23:56
>>811
unless($data =~ /^[1-9][0-9]*/){
# 例外処理
814デフォルトの名無しさん:2010/10/09(土) 08:11:04
ハッシュで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.*'}みたいなことを)
このときどういうアクセスの仕方があるでしょうか?
815デフォルトの名無しさん:2010/10/09(土) 08:45:24
>>814
1例として、

for my $key ( grep { 1 < $_ && $_ < 2 } keys %hoge ) {
print $hoge{$key}, "\n";
}
816デフォルトの名無しさん:2010/10/09(土) 09:18:44
配列に値が入っていて、それをコンマ区切りで出力したい
最後だけコンマを付けないスマートなやり方は?
817デフォルトの名無しさん:2010/10/09(土) 09:19:46
join ',', @array
818デフォルトの名無しさん:2010/10/09(土) 09:39:12
引数について

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の仕様を調べてみても分りませんでした。
819デフォルトの名無しさん:2010/10/09(土) 09:45:18
値の返し方では
820デフォルトの名無しさん:2010/10/09(土) 09:58:42
>>796
CGIブームの頃に低レベルな著者が書いたperl解説本が世にあふれた。
ラクダ、ラマ、などの一部を除いてperl解説本は読んではいけない。
821デフォルトの名無しさん:2010/10/09(土) 10:18:56
値の返し方は return( $rc1, $rc2, $rc3 ); で返してます。
822デフォルトの名無しさん:2010/10/09(土) 10:58:25
じゃあ何も間違ってない筈だけど、
書いたのと>>818が違ってるとしか
823デフォルトの名無しさん:2010/10/09(土) 11:09:47
有難う御座います。

とりあえず保留にして、配列渡しか何か別な方法で回避してみます。
824デフォルトの名無しさん:2010/10/09(土) 11:45:35
>>823
回避もなにも、>>818が一番素直な方法
これでできないなら、何かが決定的におかしい
回避方法を探るよりも、別にあるだろう原因を探った方がいい
825デフォルトの名無しさん:2010/10/09(土) 12:53:56
>>815
なるほど。確かにそのやり方はありますね。
grepとか使えない環境なので、perlのロジックのみでいければ助かります。
826デフォルトの名無しさん:2010/10/09(土) 13:08:22
grepってperlの組み込み関数なんですけど
827デフォルトの名無しさん:2010/10/09(土) 13:36:18
そういえば…
ローカルにインストールしたperlには無い=unix環境じゃないと使えない
と思い込んでしまっていました

大変失礼しました
828デフォルトの名無しさん:2010/10/09(土) 13:36:57
玄人っぽい言葉と用語を並べる>>814
何も知らないズブの素人だと露見した瞬間であった……
829デフォルトの名無しさん:2010/10/09(土) 14:07:54
まったくもって、恥ずかしい限りで
少し頭冷してきますよ
830デフォルトの名無しさん:2010/10/09(土) 14:14:23
>>818 には書いてないけど、どっかに shift があるんじゃね
831デフォルトの名無しさん:2010/10/09(土) 16:26:16
>>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";
}
832デフォルトの名無しさん:2010/10/09(土) 16:47:40
    _ □□    _      ___、、、
  //_   [][]//   ,,-―''':::::::::::::::ヽヾヽ':::::/、  誰  弄   こ
//  \\  //  /::::::::::::::::::::::::::::::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|
833Perl忍者 ◆M5ZWRnXOj6 :2010/10/09(土) 19:05:12
はじめまして

GD::GraphがJcode使っててむかつくので

なんかグラフ表示させるやつ教えてください
javascriptでもいいですか?教えてください
クソコテですが まじめに教えてください
834デフォルトの名無しさん:2010/10/09(土) 19:09:03
おまえは帰れ
835デフォルトの名無しさん:2010/10/09(土) 19:59:18
CGIだったら別だけど、
グラフを得るのが最終目的だったら、Rとか使った方が綺麗
836Perl忍者 ◆M5ZWRnXOj6 :2010/10/09(土) 20:02:09
javascriptでやるから
837デフォルトの名無しさん:2010/10/09(土) 20:12:31
がんばってください
838デフォルトの名無しさん:2010/10/09(土) 23:02:08
さようなら (・∀・)カエレ!!
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となるようにしたいです。
よろしくお願いします。
840デフォルトの名無しさん:2010/10/10(日) 20:35:39
試してないけど$d = "01"
841デフォルトの名無しさん:2010/10/10(日) 20:57:12
printfを使うのだ
842デフォルトの名無しさん:2010/10/10(日) 21:19:29
>>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
843デフォルトの名無しさん:2010/10/10(日) 22:07:38
フォーマット部分がシングルクオートだとなんか不思議な感じに見える
844デフォルトの名無しさん:2010/10/10(日) 22:23:22
おまえら馬鹿か

my ($y,$m,$d) = ('2010','10','01');
print "$y$m$d";
845デフォルトの名無しさん:2010/10/10(日) 22:47:43
>0が先頭つけると

日本語でおk
846デフォルトの名無しさん:2010/10/11(月) 01:33:13
>>845
0を数値の先頭につけると8進数として評価されるから気をつけろ
847デフォルトの名無しさん:2010/10/11(月) 01:35:33
8進数は誰が使うんだろう
848デフォルトの名無しさん:2010/10/11(月) 01:35:48
TMTOWTDIの問題なのに、なぜ>>844は罵倒せざるを得なかったのか。
849デフォルトの名無しさん:2010/10/11(月) 01:44:35
>>847
PDP-11なんかで8進数がよく使われていたらしくてその残滓じゃないか
850デフォルトの名無しさん:2010/10/11(月) 01:46:53
chmodの第1引数とか…
851デフォルトの名無しさん:2010/10/11(月) 11:49:24
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";

これでテキストだけだと表示されるんだけど、
画像とかリンクはさむとなんにもでないんですよ
852デフォルトの名無しさん:2010/10/11(月) 12:20:24
>>851
日記ならチラシの裏にでも書いてろks
853デフォルトの名無しさん:2010/10/11(月) 12:37:29
>>849
工作じゃねえよ
ネットに嘘の情報が蔓延らないように監視してんだろうが
854デフォルトの名無しさん:2010/10/11(月) 14:42:40
ヒント:エスケープ
855デフォルトの名無しさん:2010/10/11(月) 14:45:48
scriptタグもなしにdocument.writeが処理されてしまうのか
856デフォルトの名無しさん:2010/10/11(月) 17:47:29
現在のコンソールのロケール?エンコード?を取得する方法を教えてください。
Windows(cp932)でもLINUX(UTF-8)でも動作するようにしたいんです。
>>4 の方法だと Windowsでしか動かせませんよね。
> binmode STDOUT => ":encoding(cp932)";
の「cp932」の部分を書き換えないと。

イメージとしてはこんな風にしたいんです。
> $encoding = エンコードを取得する何らかの方法;
> binmode STDOUT => ":encoding($encoding)";
本番では中国や台湾やフランス、ロシアなどで動かす予定があります。
いちいち手作業で書き換えてられません。
857デフォルトの名無しさん:2010/10/11(月) 18:31:13
一覧用意して選ばせてその設定保存
固定メッセージとかは language とかのディレクトリに言語別に用意


なにか難しいことある?
858デフォルトの名無しさん:2010/10/11(月) 18:35:13
859デフォルトの名無しさん:2010/10/11(月) 21:40:16
長文を書いてしまったため論点がズレてしまったようですね。
もういっかい書きます。質問の趣旨は
現在のコンソールのロケール?エンコード?を取得する方法を教えてください。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
です。
無理ならあきらめます。
860デフォルトの名無しさん:2010/10/11(月) 21:48:46
861デフォルトの名無しさん:2010/10/11(月) 22:05:45
$ENV{LANG}
862デフォルトの名無しさん:2010/10/11(月) 22:52:10
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での引数の指定の仕方が分からず苦戦しております。
どなたかよろしくお願い致します
863862: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テキスト を実現したいです。

何方かお知恵を貸してください。お願い致します。
864デフォルトの名無しさん:2010/10/11(月) 23:42:52
初めての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になっちゃいます
ほとんど本に書いてあるコードそのままなんですが、間違ってますかね?
865864:2010/10/11(月) 23:46:45
書き忘れましたが274,275ページです
866nobody:2010/10/12(火) 00:15:10
>>859
`chcp` でどうなのよ。

Perl板で質問しているから論点がずれているん
だと思うけど。これは OS ごとに違うから残りは
別の板で聞くといいよ。
867デフォルトの名無しさん:2010/10/12(火) 00:57:39
>>864
continueはwhen/defaultの評価を続けるって意味で、
Cみたいなfall throughは出来ないよ。
868デフォルトの名無しさん:2010/10/12(火) 01:21:22
last で抜けられるんじゃない?
869デフォルトの名無しさん:2010/10/12(火) 07:31:37
引っかからない条件のところを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"; }
}
870デフォルトの名無しさん:2010/10/12(火) 08:27:14

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";
}
}
871デフォルトの名無しさん:2010/10/12(火) 08:55:27
>>870
取得したRSSにそこまでしか書かれてないからなので
XML::RSSの使い方としては問題ない。

それ以上掘り進むやり方はサイトごとに違うので
Perlの話題じゃないね。
872864:2010/10/12(火) 09:51:07
>867-869
ありがとうございます。
本にはbreakするかのように書いてあったのですが間違ってるみたいですね
>869 のようにするのが正解っぽいです
ありがとうございました
873デフォルトの名無しさん:2010/10/12(火) 09:57:59
HTML が過去ログへのリンクを勝手に張ってくれる規格じゃないのと同じ。
あくまでも提供される1つのファイルに過ぎない。

Google が過去のまで取得できてるのは、RSS を講読してからのデータを保持してるから出来てるわけです。
874デフォルトの名無しさん:2010/10/12(火) 10:50:04
本も読んでないし 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文だらけのスパゲッティプログラム
の書き方を覚えようとしてるようなもんだな。
875デフォルトの名無しさん:2010/10/12(火) 11:17:48
>>874
お前はもとのプログラムでやりたいことを全くわかってないな。
876デフォルトの名無しさん:2010/10/12(火) 11:20:44
はい、わかってませんよ
877デフォルトの名無しさん:2010/10/12(火) 11:26:01
>>874
よく読んだら爆笑した
878デフォルトの名無しさん:2010/10/12(火) 16:34:38
よく1ライセンス1万円とかでCGI(Perl言語)が販売されているけど、
あれ、一回買っちゃえば、もうひとつライセンスが欲しくてもコピペしちゃえば
ばれなくない?
インデックスもされないし…
879デフォルトの名無しさん:2010/10/12(火) 16:39:12
>>878
バレなければ何をしてもいいという発想はモラルを疑う
880デフォルトの名無しさん:2010/10/12(火) 18:36:48
中国人は国へお帰りください ( `ハ´)
881デフォルトの名無しさん:2010/10/12(火) 18:41:08
いいえ、生真面目にライセンスを結ぶ日本人が世界的に見て特殊なのです。
882デフォルトの名無しさん:2010/10/12(火) 21:31:18
やっぱりばれないですよね?
別にやるとは言ってないですけど…
883デフォルトの名無しさん:2010/10/12(火) 21:40:13
はいはいばれないんじゃないしらねーよくそしてねろかす
884デフォルトの名無しさん:2010/10/12(火) 21:42:20
ですよねw
885デフォルトの名無しさん:2010/10/12(火) 22:02:36
timelocalで、実存しない日付を指定すると、out of rangeで終了してしまうのだけど、
エラー判定だけもらって、終了させない方法を教えてください。
886デフォルトの名無しさん:2010/10/12(火) 22:16:21
use Time::Local;
my $time = eval { timelocal(0, 0, 0, 29, 1, 2010); };
unless ($time) { エラーのときの処理 }
print $time;

エラー文の内容まで必要だったら$@を参照するなりTry::Tinyなりで
887デフォルトの名無しさん:2010/10/12(火) 22:17:56
evalですね、ありがとう。
888デフォルトの名無しさん:2010/10/14(木) 05:02:53
標準出力に出力していたものを、代わりに変数に入れたいと考えています。

print "hoge"

このprint行には変更を加えず、前後行の変更のみで
変数に hoge を入れるにはどうすればよいでしょうか?
889デフォルトの名無しさん:2010/10/14(木) 05:08:05
hoge = hoge =hage
890デフォルトの名無しさん:2010/10/14(木) 05:45:43
my $hoge = eval( (<<'HOGE' =~ /^\s*print\b(.+)/m)[0] );
print "hoge";
HOGE
891s:2010/10/14(木) 07:43:13
tie使っていけるんじゃいっけ?
892s:2010/10/14(木) 07:54:19
この辺見たら色々できるんじゃないかね
ttp://d.hatena.ne.jp/sugyan/20090715/1247613596
893デフォルトの名無しさん:2010/10/14(木) 07:56:35
perlてこの先生き残れるの?
すでに人気でも開発頻度でもphpに抜かれてるじゃん
いまさらやるメリットは?
894デフォルトの名無しさん:2010/10/14(木) 09:00:39
>>893
全くその通りなのでPHPへドゾー
895デフォルトの名無しさん:2010/10/14(木) 11:41:17
open(my $fh, ">", \(my $str)) or die $!;
my $old = select($fh);
print "hoge";
close($fh);
select($old);
896デフォルトの名無しさん:2010/10/14(木) 12:49:58
>>895
へー、そんなことできるんだ
897デフォルトの名無しさん:2010/10/14(木) 18:54:51
phpなんてwebぐらいにしか使えんがPerlは汎用だし
898デフォルトの名無しさん:2010/10/14(木) 19:36:11
phpって宗教がかった新書版出す出版社じゃないの?
899デフォルトの名無しさん:2010/10/14(木) 20:03:54
RubyやPythonも触ってみたけどやっぱPerlが一番しっくりくるな。俺みたいな変態には。
900デフォルトの名無しさん:2010/10/14(木) 20:13:55
Python遅すぎワロエナイ
901888:2010/10/14(木) 20:47:17
>>891-892 >>895
レス有難う御座いました。
>>895 さんのコード スゴッ! バッチリ動作しました。
Perlの奥ゆかしさを知ると共に 大変有り難う御座いました。
902デフォルトの名無しさん:2010/10/14(木) 21:08:33
ここのページに cpan -t . ってあるんですがこれ make test みたいなものなんでしょうか?

http://gihyo.jp/dev/feature/01/perl_ark/0002

初めて見ましたけど cpan -t って一般的なのかな・・・
903デフォルトの名無しさん:2010/10/14(木) 21:39:31
904デフォルトの名無しさん:2010/10/14(木) 22:00:58
なぜlastの代わりにbreakと書いても誰も怒らない
905デフォルトの名無しさん:2010/10/14(木) 22:26:45
Rugyって早いの?
906デフォルトの名無しさん:2010/10/14(木) 22:31:34
Rubyだた・・
907デフォルトの名無しさん:2010/10/14(木) 22:45:10
>>905
rubyは1.8と1.9でも違うし、JRubyやIronRubyなど複数の実装があるから、
rubyスレで聞いたほうが早いと思うぞ。
908デフォルトの名無しさん:2010/10/14(木) 22:53:09
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文始めましたとか・・・冷やし中華かよ!
910デフォルトの名無しさん:2010/10/14(木) 23:09:24
日本語でおk
911デフォルトの名無しさん:2010/10/14(木) 23:13:31
英語でおk
912デフォルトの名無しさん:2010/10/14(木) 23:14:01
>>907
それはそうなんだけど、perl使いから見た体感速度を聞きたかったの。
913デフォルトの名無しさん:2010/10/14(木) 23:18:08
perl遅いよ
914デフォルトの名無しさん:2010/10/14(木) 23:20:50
お前は何を言っているんだ
915デフォルトの名無しさん:2010/10/14(木) 23:34:22
るびーのほうがはやいよ
916デフォルトの名無しさん:2010/10/15(金) 00:07:11
r、
ぃ ヽ、                   _ノ〃
 、\ `丶、           ,  ' ´//
  、ヽ `丶\         rvy'´      '
   \\ ヽ ゝ ‐ 7⌒く 厶ィ′   /
    ヽ、 y'′  `ァ ☆ 、_フ_彡'
.       /     L _人 _ハ
       ′        `  '.
     ′            ,
    ノ  y=-ミ、     >‐=く  ヽ、_
    `て_  "   、ニ,  "   >^
     ⌒^丶 、_/^Y^、_,  '⌒′
           {  ∧_ }
         _厂(::X::)^{
        (/      、
          {        }
        └-ー冖ー-┘
917デフォルトの名無しさん:2010/10/15(金) 02:05:45
ヒマだったので30行程度のどうでも良いようなアクセサを、Moose使って書き直してみました。
その後でClass::Accessor::Fastとベンチ比較すると、
CAF>>>>>>>>>>>>>>(60倍の壁)>>>>>>>>>.Mooseだったのですが、そんなモンでしょうか。

ちなみに比較内容は
use Class::Accessor::Fast qw(antlers); # or use Moose;
has 'hoge' => (is => 'rw', isa => 'Str');
の2行だけです。
918デフォルトの名無しさん:2010/10/15(金) 04:53:15
>>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%
919デフォルトの名無しさん:2010/10/15(金) 13:49:13
amazonのAWSにアクセスして商品情報とれるようなパッケージがperl以外にあるんなら
他のも使ってみる
920デフォルトの名無しさん:2010/10/15(金) 14:06:19
ある
とだけ言っておこう
921デフォルトの名無しさん:2010/10/15(金) 18:31:35
Rubyのことは知らないけど下らない使い捨てスクリプトまでOOで書くのは嫌だなあって感じ
OOで書く必要があるならJavaを使うし・・・
実行速度重視ならC/C++を使うだろうし
なんだかRubyって中途半端な感じがしてならない
922デフォルトの名無しさん:2010/10/15(金) 22:29:03
まあ、趣味でしょ
習得していちばん得しそうなのはpythonだろうし
923デフォルトの名無しさん:2010/10/15(金) 22:48:02
>>922
得するために値切ろうとして努力を惜しむと、結局得しないという説もある
わりと有名な話
924デフォルトの名無しさん:2010/10/15(金) 23:10:16
Pythonじゃ飯は食えないから使えねえ
925デフォルトの名無しさん:2010/10/15(金) 23:22:19
飯とか関係ないし
cost-benefitのことだよ
926デフォルトの名無しさん:2010/10/15(金) 23:25:34
関係あるだろ
しかもなんか言葉の使い方おかしいし
927デフォルトの名無しさん:2010/10/15(金) 23:36:10
ま、なんだかんだ言ってPerlが一番カッコいいからな。
928デフォルトの名無しさん:2010/10/15(金) 23:42:02
確かに
929!stock:2010/10/16(土) 00:11:33
!stock
930デフォルトの名無しさん:2010/10/16(土) 00:57:30
飯を食うというならVB最強となる不思議
931デフォルトの名無しさん:2010/10/16(土) 12:11:46
VB って意外と求人多いんだよねw
932デフォルトの名無しさん:2010/10/16(土) 12:47:09
技術というよりは、ごちゃごちゃの集団の中に何があるかを把握していることが求められる
CPANもそんなようなもんだが
933Perl忍者 ◆M5ZWRnXOj6 :2010/10/16(土) 14:08:27
Perlやってるやつって

情報発信能力が高い

なんで??????
934デフォルトの名無しさん:2010/10/16(土) 19:46:58
ま、どの言語やれば一番飯食えるかとか言ってるやつは能無しだわな
935デフォルトの名無しさん:2010/10/16(土) 20:07:22
ごはんはおかず
936デフォルトの名無しさん:2010/10/16(土) 20:14:42
御飯のおかずにはPythonがいちばんおいしそう
Pythonの干物とか
937デフォルトの名無しさん:2010/10/16(土) 20:22:14
Perlは汁物的扱い
938デフォルトの名無しさん:2010/10/16(土) 20:52:04
なでしこは観賞用
939デフォルトの名無しさん:2010/10/16(土) 20:54:37
初めて聞いてみます。
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";
*********************
940Perl忍者 ◆M5ZWRnXOj6 :2010/10/16(土) 23:52:02
今すげえむかついてるんですよね
941デフォルトの名無しさん:2010/10/17(日) 01:47:53
$a ||= 'a';
という書き方はどういう構文なのでしょう?
$a = $a || 'a';
と同じ?
942デフォルトの名無しさん:2010/10/17(日) 01:59:11
はい
943941:2010/10/17(日) 02:03:57
>>942
ありがとう。

perlのソースで分からない部分って、ググってヒットさせるの難しいよね…
記号の短い組み合わせなので、キーワードを無視されてるような。
944デフォルトの名無しさん:2010/10/17(日) 05:18:34
>>943
それはPerlに限ったことじゃねぇ
Perlならperldoc見るかラクダ本見るか汁
945デフォルトの名無しさん:2010/10/17(日) 06:24:51
その手のはPerl 代入演算子 でググればヒットする
946デフォルトの名無しさん:2010/10/17(日) 08:31:39
最近のPerlなら以下も使うよね。

$a //= 'a';
947デフォルトの名無しさん:2010/10/17(日) 08:38:16
pythonでワンライナーって出来る?
948デフォルトの名無しさん:2010/10/17(日) 08:42:51
>>939
エコーバックされてる。
949デフォルトの名無しさん:2010/10/17(日) 08:44:27
>>946
最近っていうか5.10以降ね
950デフォルトの名無しさん:2010/10/17(日) 09:23:12
>>947
可能か不可能かといえば可能だからぐぐってみ。やりたくなるのは相当の
変態さんだけだと思うがw



951デフォルトの名無しさん:2010/10/18(月) 02:18:23
ラクダ本(p.267) に書いてある通りやってみたのですが、うまくいきません。
何でなんでしょうか?

sub test(\$) {
my $x = shift;
print $x;
}

my $x = "foo";
test $x;

ラクダ本の通りならば "foo" になるはずなんですが、
実際には、変数 x のアドレスの様なものが表示されます。
Active Perl の 5.10.1 です。
952デフォルトの名無しさん:2010/10/18(月) 02:26:13
print $$x;
953デフォルトの名無しさん:2010/10/18(月) 02:32:46
>>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
でいけそうな気がする
957デフォルトの名無しさん:2010/10/18(月) 14:24:31
>>954
utf8フラグ付きで、5.8.1以降なら

use utf8;
{
no warnings 'utf8';
tr/\x{010000}-\x{1fffff}/\x{3013}/;
}
958デフォルトの名無しさん:2010/10/18(月) 14:43:48
no warnings 'utf8' は何のため?
959デフォルトの名無しさん:2010/10/18(月) 15:08:51
>>958
unicodeの範囲を超えているので、use warningsしていると
(5.11以降?で)警告が出ます。その抑制です。

↓コレ
Unicode non-character %s is illegal for interchange
960デフォルトの名無しさん:2010/10/18(月) 18:45:00
文字列$strの中に英数字と!、% 以外の文字が含まれているかどうか判定する為の効率のいい命令文教えてください。
961デフォルトの名無しさん:2010/10/18(月) 19:47:04
>>960
命令じゃなくて正規表現でいいと思う
$hoge=~[^\w!%:]みたいな?
962デフォルトの名無しさん:2010/10/18(月) 19:49:39
\wはアウアウ
963デフォルトの名無しさん:2010/10/18(月) 20:55:36
>>954
s/([\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF])/\xE3\x80\x93/g;

964デフォルトの名無しさん:2010/10/18(月) 21:24:15
>>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
966Perl忍者 ◆M5ZWRnXOj6 :2010/10/19(火) 00:27:52
いたら返事して
967デフォルトの名無しさん:2010/10/19(火) 19:58:42
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 になってしまうのは何故なんだろう?
968デフォルトの名無しさん:2010/10/19(火) 20:02:37
>>961
サンクス
969デフォルトの名無しさん:2010/10/19(火) 22:28:11
諸兄らの感想を聞きたい。

峰松浩樹 LT - 基幹システムがperlでどうしてこうなった
http://www.youtube.com/watch?v=2tAX9NC4wJU
970デフォルトの名無しさん:2010/10/19(火) 22:43:13
perlはライブラリ入れられない時があるから捨てた
971デフォルトの名無しさん:2010/10/19(火) 22:59:32
なら来るなよ
972デフォルトの名無しさん:2010/10/19(火) 23:27:56
>>969
COBOLとPerlのキメラみたいなソース…メンテナンスどうすんだろw
973デフォルトの名無しさん:2010/10/19(火) 23:49:28
>>969
まさにダクトテープ。
Perlらしい使い方だね。
974デフォルトの名無しさん:2010/10/19(火) 23:51:51
>>969
最初以外なぜオーディエンスが笑っているのかがわからん
975デフォルトの名無しさん:2010/10/20(水) 00:02:28
ヲタトーク
976Perl忍者 ◆M5ZWRnXOj6 :2010/10/20(水) 00:07:12
ルー大島はもうかえれ
977デフォルトの名無しさん:2010/10/20(水) 01:07:22
>>970
リポジトリを追加したか?
978デフォルトの名無しさん:2010/10/20(水) 08:51:43
>>969
うちの県のシステムかw
979デフォルトの名無しさん:2010/10/20(水) 12:11:33
猫いじり
980デフォルトの名無しさん:2010/10/20(水) 13:50:03
HTML::TreeBuilderでtree->parse_file("foo.html")するとき、ファイルサイズが大きいとものすごく時間掛るんですけど速くする方法ないですか?
981デフォルトの名無しさん:2010/10/21(木) 02:12:21
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.
982デフォルトの名無しさん:2010/10/21(木) 02:21:56
Can't locate Win32/IEAutomation.pm
983Perl忍者 ◆M5ZWRnXOj6 :2010/10/21(木) 17:03:16
PerlTK使って人いるかい!?

そうかい!いないかい!
984デフォルトの名無しさん:2010/10/21(木) 17:18:37
CGI::Sessionで、$session->header( -secure => 1 )みたいなカンジで
secure flagつける方法はないでしょうか?
985デフォルトの名無しさん:2010/10/21(木) 17:55:08
>>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に好きなパラメタ追加すればいい。
986Perl忍者 ◆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
987984:2010/10/21(木) 18:01:13
>>985
うーん、やはりそうですか。
ご丁寧にありがとうございました。
988Perl忍者 ◆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
989デフォルトの名無しさん:2010/10/22(金) 09:07:23
WEBサイトのヘッダーとボディーをくっつけて文字列として一挙に取得するにはどうすればいいのでしょうか?
990デフォルトの名無しさん:2010/10/22(金) 09:32:47
一瞬、関数型言語の Grassスレかと思った。
991デフォルトの名無しさん:2010/10/22(金) 09:50:56
>>989
use LWP::UserAgent;
print LWP::UserAgent->new->get('http://localhost/')->as_string;
992デフォルトの名無しさん:2010/10/22(金) 10:05:41
>>991
d
できました
993デフォルトの名無しさん:2010/10/22(金) 11:55:38
クリックしたらカウントが増えるようなボタンって作れますか?
1日1回クリックをするとURL先に飛んでなおかつカウントを取るような感じで・・・
994デフォルトの名無しさん:2010/10/22(金) 11:58:00
とりあえず見積りだせばいいですか?
995デフォルトの名無しさん:2010/10/22(金) 12:02:02
>>993
5万でひきうけてやんよ。それ以下なら受けない。
996デフォルトの名無しさん:2010/10/22(金) 12:27:46
Javaの方使ってできました
ありがとうございました
997デフォルトの名無しさん:2010/10/22(金) 12:48:24
>>990
Werlがもう浸透したのか。
http://www.youtube.com/watch?v=BFzMlHMbl80
998Perl忍者 ◆M5ZWRnXOj6 :2010/10/22(金) 16:46:00
こんな
999Perl忍者 ◆M5ZWRnXOj6 :2010/10/22(金) 16:48:40
クソスレ
1000Perl忍者 ◆M5ZWRnXOj6 :2010/10/22(金) 16:49:24
必要です
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。