全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50
Perlについての質問箱 45箱目

1デフォルトの名無しさん2010/10/22(金) 22:45:29
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についての質問箱 44箱目
http://hibari.2ch.net/test/read.cgi/tech/1280541200/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-7 あたり
2デフォルトの名無しさんsage2010/10/22(金) 22:45:44
[プログラミング自体の経験が無い奴はまずココを読め]
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デフォルトの名無しさんsage2010/10/22(金) 22:45:55
[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

[テクニック]
Perl メモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perl のページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perl の小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl 5.8 Unicodeメモ]
ttp://www.rwds.net/kuroita/program/Perl_unicode.html (修正)
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
4デフォルトの名無しさんsage2010/10/22(金) 22:46:10
# [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デフォルトの名無しさんsage2010/10/22(金) 22:46:28
[過去スレ1]
1 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/ (事故により消滅)
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/ (事故により消滅)
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 http://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 http://pc8.2ch.net/test/read.cgi/tech/1121804136/
19 http://pc8.2ch.net/test/read.cgi/tech/1126977805/
20 http://pc8.2ch.net/test/read.cgi/tech/1131286411/
6デフォルトの名無しさんsage2010/10/22(金) 22:46:40
[過去スレ2]
21 http://pc8.2ch.net/test/read.cgi/tech/1134327348/
22 http://pc8.2ch.net/test/read.cgi/tech/1138519327/
23 http://pc8.2ch.net/test/read.cgi/tech/1141742901/
24 http://pc8.2ch.net/test/read.cgi/tech/1146022352/
25 http://pc8.2ch.net/test/read.cgi/tech/1149259409/
26 http://pc8.2ch.net/test/read.cgi/tech/1153412251/
27 http://pc8.2ch.net/test/read.cgi/tech/1157874614/
28 http://pc8.2ch.net/test/read.cgi/tech/1162273941/
29 http://pc11.2ch.net/test/read.cgi/tech/1166708139/
30 http://pc11.2ch.net/test/read.cgi/tech/1173880452/
31 http://pc11.2ch.net/test/read.cgi/tech/1181500187/
32 http://pc11.2ch.net/test/read.cgi/tech/1186995713/
33 http://pc11.2ch.net/test/read.cgi/tech/1192463997/
34 http://pc11.2ch.net/test/read.cgi/tech/1199977642/
35 http://pc11.2ch.net/test/read.cgi/tech/1208674881/
36 http://pc11.2ch.net/test/read.cgi/tech/1215569470/
37 http://pc11.2ch.net/test/read.cgi/tech/1218449440/
38 http://pc11.2ch.net/test/read.cgi/tech/1221967332/
39 http://pc12.2ch.net/test/read.cgi/tech/1234181856/
40 http://pc12.2ch.net/test/read.cgi/tech/1243631674/
7デフォルトの名無しさんsage2010/10/22(金) 22:47:11
[過去スレ3]
41 http://pc12.2ch.net/test/read.cgi/tech/1249581780/
42 http://pc12.2ch.net/test/read.cgi/tech/1257139591/
43 http://pc12.2ch.net/test/read.cgi/tech/1266565626/
44 http://hibari.2ch.net/test/read.cgi/tech/1280541200/
8Perl忍者 ◆M5ZWRnXOj6 2010/10/22(金) 22:52:24
俺はこのゴミスレが消滅するまで
戦う
9デフォルトの名無しさんsage2010/10/22(金) 23:23:11
立てる時はテンプレのメンテぐらいしてよ。

>>1
- ● 2010/07/31 現在の最新版: 5.12.0
+ ● 2010/10/22 現在の最新版: 5.12.2

>>2
- Effective Perl: ttp://www.ascii.co.jp/books/books/detail/4-7561-3057-7.shtml (修正)
+ Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml

- 日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi (停止中)
- perldoc.jp: ttp://www.perldoc.jp/
- perldoc.com: ttp://www.perldoc.com/
+ perldoc.jp: ttp://www.perldoc.jp/
+ perldoc.perl.org: ttp://perldoc.perl.org/
10デフォルトの名無しさんsage2010/10/23(土) 00:47:21
>>1おつ。

前スレのCentOS+モデム男なんだが、↓のソースでやってみたが、やっぱり"AT"しか返って来ない。
"AT"[CR]"OK"[CR]と返ってきてほしいんだが、どうして???

************************************
#! /usr/bin/perl
use Fcntl;

sysopen (COM, "/dev/ttyS0", O_RDWR) || die; # ttyS0=COM1, S1=COM2, ...

syswrite (COM, "AT\n", 3) || die;

sleep(5);

$data = "";
sysread (COM, $data, 20) || die;

print $data, "\n";

************************************
11デフォルトの名無しさん2010/10/23(土) 11:28:07
3003,aaa
3004,bbb
3005,ccc


こんなレコードが何百万行っていうCSVがあって、
1カラム目の値をキーとして、2カラム目の値を取得したいんです。
このリクエストは1分当たりに何度も発生します。
当然、1カラム目の値はユニークです。

で、リクエストが発生するたびに、
単純に先頭から検索していったんじゃ、時間がかかるんで、
このCSVをハッシュに持っておいて、
レスポンスを返すようなデーモンを作れば、速くなるかな〜
と考えてるんですが、方向性は合ってますかね?
#DBは使えない環境です。。。

ここで聞くことか迷ったんですが、
組むならperlで組むんで、こちらで聞いてみました。

よろしくお願いします。
12デフォルトの名無しさんsage2010/10/23(土) 11:32:14
1分あたりに何度ぐらいならそこまでやらなくてもDBMでいいんじゃねーの?
13デフォルトの名無しさんsage2010/10/23(土) 12:41:02
>>11
貧者のDB構築術は言語に依存した話じゃないから、他で尋ねた方がいいんじゃないかな。

スレ立てるまでもない質問はここで 108匹目
http://hibari.2ch.net/test/read.cgi/tech/1287477677/
【超初心者】プログラミング質問スレ【基礎】pt.2
http://hibari.2ch.net/test/read.cgi/tech/1274998754/
質問にやさしく親切に答えてくれるスレ 4
http://hibari.2ch.net/test/read.cgi/tech/1222224721/
言語関係無しに「くだ質」
http://hibari.2ch.net/test/read.cgi/tech/1234270918/
14デフォルトの名無しさんsage2010/10/23(土) 15:15:09
speedycgiでおk
15デフォルトの名無しさんsage2010/10/23(土) 16:06:42
my $re_quote = '[a-z]+';
$str =~ /$re_quote|[0-9]+/;

と、

my $re_qr = qr/[a-z]+/;
$str =~ /$re_qr|[0-9]+/;

とでは、どういう違い(メリット?デメリット?)があるのでしょうか?
16デフォルトの名無しさんsage2010/10/23(土) 23:59:19
>>15
qr//は事前にコンパイルされるのが特徴なんだけど、
その二つだと、あまり違わない。
迷ったらqr//推奨。
17デフォルトの名無しさんsage2010/10/24(日) 06:52:59
>>16
そうなんですか。
d
18Perl忍者 ◆M5ZWRnXOj6 2010/10/24(日) 08:25:29
モダンな書き方はな?

いままでの常識とは逆の書き方マイナーなほうで書くのが正しいんだよ^^

あんまりかかないほう=真だから

19デフォルトの名無しさんsage2010/10/24(日) 09:56:29
qr に g は使えない
20デフォルトの名無しさんsage2010/10/24(日) 10:46:47
日本語は面倒臭いですね



日本語/は/面倒臭い/です/ね

のように、単語や文節で区切ってくれるモジュールとか無いのかしら?
21デフォルトの名無しさんsage2010/10/24(日) 11:12:16
sub new{
my $class=shift;
return $class;
}
my $o=person->new; #変更点
print $o;

だとpersonと表示されますが、$o=person::new;に変えると何も表示されません。
詳しい方教えてください。
22デフォルトの名無しさんsage2010/10/24(日) 11:21:30
すみません勘違いしてました
person::newだとただのサブルーチンの呼び出しですね
引数が必要でした。
23Perl忍者 ◆M5ZWRnXOj6 2010/10/24(日) 11:23:07
お前バカだろ?
24Perl忍者 ◆M5ZWRnXOj6 2010/10/24(日) 11:25:43
てめえのせいで2レス無駄になっただろうがー
25デフォルトの名無しさんsage2010/10/24(日) 11:57:24
>>20
茶筌
26デフォルトの名無しさんsage2010/10/24(日) 16:10:46
日本語の形態素解析のモジュールあったかな
27デフォルトの名無しさんsage2010/10/24(日) 17:38:02
>>20
和布蕪
28デフォルトの名無しさんsage2010/10/24(日) 18:42:35
>>21-22
http://perldoc.jp/docs/perl/5.10.0/perltoot.pod

一度、Perlのオブジェクト指向の本か入門記事を読むといいよ。
29Perl忍者 ◆M5ZWRnXOj6 2010/10/24(日) 19:23:56
超絶最強荒らし・Perl
っていう本出たら買う?
30黒龍炎華@ダークsage2010/10/24(日) 19:25:34
その本でたら絶対買うよ
31デフォルトの名無しさんsage2010/10/24(日) 19:26:56
おう、考えてやるよ
32爆裂田代砲sage2010/10/24(日) 19:27:03
欲しいなあwww
33Perl忍者 ◆M5ZWRnXOj6 2010/10/24(日) 19:28:18
リロードボタンカチカチ同期型チャット全盛期乙
34デフォルトの名無しさんsage2010/10/24(日) 20:12:30
>>28
perltoot は bless を忘れるレベルの子には勧め辛い
http://fleur.hio.jp/perldoc/mix/pod/perlboot.html
35デフォルトの名無しさんsage2010/10/25(月) 07:56:21
($n,$m) = @ARGV;

print "keiro: ",keirosuu($n,$m),"\n";

sub keirosuu{
my ($n,$m) = @_;
print "$n,$m\n";
if (($n==0)||($m==0)){return 1;}
return keirosuu($n,$m-1) + keirosuu($n-1,$m);
}

このプログラムが何回繰り返すことになるのかよく分からない。再帰法は頭がぐちゃちゃになるぜ。
誰か教えてくれ
36デフォルトの名無しさんsage2010/10/25(月) 12:08:13
W3CDTF を UNIX TIME に変換する
良さげなモジュールってありますか?
37デフォルトの名無しさんsage2010/10/25(月) 12:54:18
>>36
良さげの意味次第だが
http://search.cpan.org/dist/DateTime-Format-W3CDTF/
38デフォルトの名無しさんsage2010/10/25(月) 15:18:42
>>36
ついでにこれも
http://search.cpan.org/dist/DateTime-Format-Epoch/
39デフォルトの名無しさんsage2010/10/25(月) 17:42:17
Yada Yadaオペレータの語源はなんですか?
40デフォルトの名無しさんsage2010/10/25(月) 18:19:05
>>39
戦前のアメリカのコメディアンのギャグフレーズ
41デフォルトの名無しさん2010/10/25(月) 22:52:19
test
42デフォルトの名無しさん2010/10/25(月) 23:23:24
質問よろしくお願いします。

TCPサーバの生存監視ツールを作成しようとしています。

tcpクライアントより問い合わせを行い、一定時間応答が帰らない場合
タイムアウトエラーとしたいと考えています。

調べたところ、IO::Socket::INETにTimeOutオプションというのがあったのですが
使用方法がいまいちよくわかりません。

タイムアウトになったことをどのように検知するかご教授頂けないでしょうか。

my $socket = IO::Socket::INET->new(
PeerAddr => 'localhost',
PeerPort => 9999,
Proto => 'tcp',
TimeOut => 5
);
43デフォルトの名無しさんsage2010/10/25(月) 23:47:25
LWP::Useragentのis_errorではダメなのか
44422010/10/26(火) 00:15:54
>43
ご教授ありがとうございます。

さっそく調べたところLWP::Useragentはhttpを扱うようですね。
監視対象のサーバがTCPサーバですので、IO::Socket::INETが適当かと思いました。

やりたいこととしては、TCPサーバが3wayハンドシェイク終了後、クライアントからのputに応答を返さない事象がごく稀に発生するため
それを検知するツールを作成しようと考えています。

もちろんポートが開いておらず、3wayハンドシェイクに失敗する場合も検知したいと考えています。


4536sage2010/10/26(火) 00:47:33
>>37
>>38
ありがとうございます
おかげで助かりました
46デフォルトの名無しさんsage2010/10/26(火) 06:04:19
対象サーバーは HTTP を扱ってるサーバーなんでしょ?
だったら HEAD リクエストに掛かった時間でいいんじゃないの?
ミリ秒なら TimeReso だっけ?で得られるわけだし・・・
47デフォルトの名無しさんsage2010/10/26(火) 16:44:02
>>42
コネクト失敗するとundefが返ってきて、$!にエラーが入る。
... or die $!; を書いておくとわかるよ。
48デフォルトの名無しさんsage2010/10/27(水) 00:28:49
perlでスタンバイ・再起動することはできますか?
どうすればできるでしょうか?
49デフォルトの名無しさんsage2010/10/27(水) 03:50:39
面倒そうだし、バックダッシュでコマンドを書いてしまえ。
たとえばWindows XPのスタンバイなら
`C:\\WINDOWS\\system32\\rundll32.exe powrprof.dll,SetSuspendState`;
50デフォルトの名無しさんsage2010/10/28(木) 00:11:33
スクリプトの設定を別のファイルに書いておき、それを読み込む場合

FILE : test.pl
my $config = {
 'datadir' => 'pastdata',
};
sub getconfig{
 return \$config;
}

FILE : main.pl
require 'test.pl';
print $$config->{'datadir'};


このようになるわけですが、

print $config->{'datadir'};

このように記述したい場合、どこをどうすればいいでしょう?
51デフォルトの名無しさんsage2010/10/28(木) 00:38:58
my $config = ${getmemoconfig()};

ってやったら

$config->{'datadir'};

でもいけたけど・・・スマートじゃないよねぇww
52デフォルトの名無しさんsage2010/10/28(木) 00:43:11
>>50
FILE: test.pl
{ datadir => 'pastdata' }; # 最後にハッシュリファレンスを置く

FILE: main.pl
my $config = do './test.pl';
print $config->{'datadir'};
53デフォルトの名無しさんsage2010/10/28(木) 01:42:19
>>50
FILE: text.pl
my %config = (datadir => 'pastdir');
sub getconfig {
return \%config;
}
1;

FILE: main.pl
require('test.pl');
my $config = getconfig();
print $config->{datadir};

これでいいのか?
54デフォルトの名無しさんsage2010/10/28(木) 07:26:31
>>53
お〜出来た!!



ついでに質問なんですが ^-^;

1行目は
$cidlist->{$tmpCID} = { 'name' => $tmpNAME };
って追加してるけど2行目で追加する時は
%{$cidlist->{$tmpCID}}->{'count'} = $tmpCNT;
ってやるしかないの?

1行で書くなら
$cidlist->{$tmpCID} = { 'name' => $tmpNAME, 'count' => $tmpCNT };
って出来るのは分かるけど、後々追加したいと思ったときに知っておきたい。
55デフォルトの名無しさんsage2010/10/28(木) 07:31:26
%{$cidlist->{$tmpCID}}->{'count'} = $tmpCNT;

ってやるとワーニング出てた orz
56デフォルトの名無しさんsage2010/10/28(木) 07:57:03
\x0Aを出力すると\r\nで出力されるけど、これを意図的に\nのみするとか出来たりするもんなのかしら?
57デフォルトの名無しさんsage2010/10/28(木) 08:39:35
>>54
use strict;
use warnings;
use Data::Dumper;
my $href;
$href->{'hoge'} = { 'name' => 'foo' };
$href->{'hoge'}{'count'} = 5; # これのこと?
$href->{'fuga'} = { 'name' => 'bar', 'count' => 12 };
print Dumper(%{$href});
58デフォルトの名無しさんsage2010/10/28(木) 10:17:05
あ〜!!
そうゆう記述どっかで見たことある!ww
久々に書いてると閃きすら起きない事実に凹んできたw

ありがとう
59デフォルトの名無しさんsage2010/10/28(木) 11:04:35
>>50
Config::Simple - 簡単な設定ファイルクラス
ttp://perldoc.jp/docs/modules/Config-Simple-4.55/Simple.pod
60デフォルトの名無しさんsage2010/10/28(木) 11:26:20
うちの場合ローカルで使うツールだと
設定は YAML::Syck を使って YAMLファイルから読み込んでるなあ
61デフォルトの名無しさんsage2010/10/28(木) 13:01:49
>>49
ありがとうございます。
時間帯を指定してスタンバイから復帰するにはどうしたらいいでしょう?
62デフォルトの名無しさんsage2010/10/28(木) 17:07:29
$ninja={ [1,2,3,4,5],[2,3,3,3,3] };

これは日本語的に何て言えばいいですかね?

無名配列の無名ハッシュでいいんですかね?
それとも配列のハッシュですかね?
ながったらしく無名配列へのリファレンスの無名ハッシュへのリファレンスみたいに長ったらしくいうんでしょうかね?
63デフォルトの名無しさんsage2010/10/28(木) 17:08:23
生まれつき脳が弱くて日本語が不自由です 教えてください・・・
64デフォルトの名無しさんsage2010/10/28(木) 17:09:43
 無名ハッシュは違いましたね

$ninja={ 'unko'=>[1,2,2,2],'kasu'=>[7,7,7]};
教えてください・・・
65デフォルトの名無しさんsage2010/10/28(木) 17:12:14
もういいです・・・
66デフォルトの名無しさんsage2010/10/28(木) 17:19:45
配列のハッシュで良いんじゃない?
67デフォルトの名無しさんsage2010/10/28(木) 21:49:24
>>64
$ninjaを指して言うならハッシュリファレンス
$ninja->{unko}を指して言うなら配列のリファレンス
データ構造を指して言うなら配列で構成されるハッシュとでも言えばいいのか

なんにせよお前糞コテだろ
68Perl忍者 ◆M5ZWRnXOj6 2010/10/28(木) 21:52:12
糞とか言うのやめろ
69Perl忍者 ◆M5ZWRnXOj6 2010/10/28(木) 21:53:06
tokuhirom未満のゴミがわめいてんじゃねえよごみ
70Perl忍者 ◆M5ZWRnXOj6 2010/10/28(木) 21:54:01
>>67
ありがとう
71デフォルトの名無しさんsage2010/10/29(金) 04:26:46
>>61
WindowsAPIのアレはスケジューラで起動しないらい。
vbsで組んでみたよ。jt.exeは予めインストールして、定数を適当に設定しといて。
Shell > cscrpit.exe foo.vbs [n分後|年/月/日 時:分]
てな感じで動くんで、Perlからも呼び出せると思う。

Set wShell = WScript.CreateObject("WScript.Shell")
Set arrayArg = WScript.Arguments

Const strJt = "C:\path\to\jt.exe"
Const strApply = """C:\path\to\foo.bat"""
Const strParam = """"""
Const strWork = """C:\"""
Const strUser = """foo\bar"""
Const strPass = """brahbrah"""

Dim strDate
Select Case arrayArg.Count
case 0 strDate = DateAdd("n", 1, Now)
case 1 strDate = DateAdd("n", arrayArg(0), Now)
case else strDate = DateValue(arrayArg(0)) & " " & TimeValue(arrayArg(1))
End Select
72デフォルトの名無しさんsage2010/10/29(金) 04:27:45

Dim strCmd
strCmd = strJt & " /ctj StartDate=" & Month(strDate) & _
"/" & Day(strDate) & "/" & Year(strDate) & _
" StartTime=" & Hour(strDate) & ":" & Minute(strDate) & _
" Disabled=0 Type=Once" & _
" /sj ApplicationName=" & strApply & " Parameters=" & strParam & _
" WorkingDirectory=" & strWork & " DeleteWhenDone=1 SystemRequired=1" & _
" /sc " & strUser & " " & strPass & "/saj %windir%\Tasks\resume.job"

' WScript.Echo strCmd
wShell.Run strCmd, 0, TRUE

wShell.Run "C:\WINDOWS\system32\taskmgr.EXE"
wScript.Sleep 1000
wShell.SendKeys "%ub%fx"
73デフォルトの名無しさんsage2010/10/29(金) 04:34:19
x cscrpit.exe
o cscript.exe
だった。以上スレ違い。
74デフォルトの名無しさんsage2010/10/30(土) 00:23:07
perl 勉強中の者です。
タブ区切りのテキストデータを読み込んで、行と列の二次元配列を作ろうと思い
このようにしたらとりあえず動きました。

$count = 0;
open(IN, $ARGV[0]);
while($line = <IN>){
  @linedata = split(/\t/, $line);
  for($i = 0; $i < @linedata; $i++){
    $datas[$count][$i] = $linedata[$i];
  }
  $count++;
}
close(IN);

ただ、もっとスマートに書けないものかといろいろといじってみても
うまくいきません。
  @datas[$count++] = split(/\t/, $line);
みたいな感じで一発で配列を代入するにはどうしたらいいでしょうか?
75デフォルトの名無しさんsage2010/10/30(土) 00:30:03
my@linedata = split /\t/, $line;
push @datas, \@linedata;
76デフォルトの名無しさんsage2010/10/30(土) 00:45:16
>>71-73
丁寧に答えてくれてありがとうございました。
77デフォルトの名無しさんsage2010/10/30(土) 00:49:05
>>74
chomp, push @data, [ split /\t/ ] while <IN>;
7874sage2010/10/30(土) 01:07:11
>>75,77
素晴らしい回答を有難うございます。
折衷案で

open(IN, $ARGV[0]);
while($line = <IN>){
  push @datas, [ split /\t/, $line ];
}
close(IN);

でいきたいと思います。
79デフォルトの名無しさんsage2010/10/30(土) 08:14:34
全然関係ないけど、dataは複数形だね
80デフォルトの名無しさんsage2010/10/30(土) 09:24:41
じゃぁ単数形は?
81デフォルトの名無しさんsage2010/10/30(土) 09:38:47
辞書引け
82デフォルトの名無しさんsage2010/10/30(土) 09:40:53

datum
83Perl忍者 ◆M5ZWRnXOj6 2010/10/30(土) 10:36:18
http://mfpm.blogdb.jp/
84デフォルトの名無しさんsage2010/10/30(土) 19:12:51
今初めて使ってみたんだけど、Net::Trackback は何となくバグってるような…。
85デフォルトの名無しさん2010/11/01(月) 17:53:08
正規表現で数字だけじゃない語にマッチさせたいのですが書き方が分かりません。
マッチして貰いたいもの
_fff_RRR
check1
1check

マッチして貰いたくないもの
11111
444.55
-34
+56

現在はとりあえず(\w+)でマッチさせてその中から[a-zA-Z_]を全く含まないものを省いてます。
86デフォルトの名無しさんsage2010/11/01(月) 17:57:54
Scalar::Util::looks_like_number 使え
87デフォルトの名無しさん2010/11/01(月) 18:06:36
Scalar::Util::looks_like_numberすごいですね。
ありがとうございました。
88デフォルトの名無しさんsage2010/11/02(火) 00:25:02
threadsとuse utf8やuse encoding "utf8"は同時には扱えないのでしょうか?
例外処理でPerlそのものが落ちるようです。

#OS: WindowsXP SP3
#ActivePerl-5.12.2.1202-MSWin32-x86-293621

#!/usr/bin/perl -w
use encoding "utf8";
use threads;
my @threads;
for(1..5){
  #例外処理で落ちる
  my $thread = threads->new(\&my_thread, $_);
  push(@threads, $thread);
}
foreach(@threads){
  $_->join or die $!;
}
exit;

sub my_thread {
  threads->yield();
  sleep(1);
  return 1;
}
89デフォルトの名無しさんsage2010/11/02(火) 01:00:37
open(IN, '<:encodint(euc-jp)', test.txt);

これって test.txt がどんなエンコーディングで書かれてようが、
euc-jp に変換して読むって意味じゃなくて、euc-jp で書かれてる前提で読み込むんですよね?

ファイルが euc じゃなきゃ変換してやんなきゃいけないんですよね?
90デフォルトの名無しさんsage2010/11/02(火) 02:39:59
>>88
perldoc encoding
> Thread safety
>  use encoding ... is not thread-safe (i.e., do not use in threaded applications).
91デフォルトの名無しさん2010/11/02(火) 03:44:07
教えてください。
ひとつの文字列に対して、いくつかのパターンで置換をしたいと思っています。
パターンと置換文字列のペアを配列に入れておいて処理を繰り返せば楽…と思ったのですが
サブパターンを取得して置換するところがうまくいきません。どうすればいいのでしょうか。

置換するパターンを直接プログラムに書くと期待どおりに置換されます。

$a ='testbigtest';
$a =~ s|test(.*)test|<strong>$1</strong>|;
print $a;

結果→<strong>big</strong>

パターンを変数に入れて楽をしようとすると同じパターンで置換をしているつもりでも結果が違ってしまいます。

$a ='testbigtest';
$p1 ='test(.*)test';
$p2 ='<strong>$1</strong>';
$a =~ s|$p1|$p2|;
print $a;

結果→<strong>$1</strong>
92デフォルトの名無しさんsage2010/11/02(火) 03:50:31
もっとずっといい方法があるだろうなあ
$a ='testbigtest';
$p1 ='test(.*)test';
$p2 ='<strong>$1</strong>';
$tmp = "\$a =~ s|$p1|$p2|";
#print "$tmp\n";
eval $tmp;
print $a;
93デフォルトの名無しさんsage2010/11/02(火) 04:07:32
分かりやすいように書いたのだと思うが、
$tmp いらないんじゃないかな

後、いつもどおりですが $a は...
94デフォルトの名無しさんsage2010/11/02(火) 04:31:51
$str = 'testbigtest';
$p1 ='test(.*)test';
$p2 = '"<strong>$1</strong>"';
$str =~ s|$p1|$p2|ee;
print $str;

これぐらいしか思いつかなかった。
9591sage2010/11/02(火) 05:54:16
ありがとうございます。
一度式に直して評価するというアプローチ…急がば回れと。
96デフォルトの名無しさんsage2010/11/02(火) 15:08:38
置換処理ごと配列に入れる。

my $str ='testbigtest';
my $p = sub{ $_[0] =~ s|test(.*)test|<strong>$1</strong>| };
$p->($str);
print $str;
97デフォルトの名無しさん2010/11/02(火) 20:16:28
Switch.pm を見ると、$::_S_W_I_T_C_H とあるのですが、$:: ってどういう意味なんでしょうか? 自分のpackageということ?
98デフォルトの名無しさんsage2010/11/02(火) 20:24:19
$::foo == $main::foo
99デフォルトの名無しさん2010/11/02(火) 20:28:26
my $test = +{ key => 'value' };
my $test = { key => 'value' };

前者は+を付けてんだけど、どっちも同じことやってんの?
何か使い分けあるのかな?
100デフォルトの名無しさんsage2010/11/02(火) 20:42:13
単項演算子
101デフォルトの名無しさん2010/11/02(火) 21:20:29
>>98
そうなんだ。ありがとうございます。
102Perl忍者 ◆M5ZWRnXOj6 2010/11/02(火) 22:56:50
Perlハッカーなのっていいですか?
103デフォルトの名無しさん2010/11/03(水) 16:33:20
>>100
すまん、ここで単項演算子を使う意味がわからんのだ。
104デフォルトの名無しさんsage2010/11/03(水) 17:00:47
書いた本人に聞いた方がいいんじゃないの。
安全のため、ハッシュには必ず"+"を付けるぐらいのものかも知れないし。
105デフォルトの名無しさんsage2010/11/03(水) 17:15:15
初耳だ
106デフォルトの名無しさんsage2010/11/03(水) 17:35:58
>>105
何が?
107デフォルトの名無しさんsage2010/11/03(水) 17:51:51
そうなのか
108デフォルトの名無しさんsage2010/11/03(水) 19:25:31
>>106
安全のためにハッシュに+を付けるてのが
+で何してて何が安全なのかなぁ
109デフォルトの名無しさんsage2010/11/03(水) 20:19:39
例えばMoose::Utilにもこんなのあるんだよね。

sub get_all_attribute_values {
my ($class, $instance) = @_;
return +{
map { $_->name => $_->get_value($instance) }
grep { $_->has_value($instance) }
$class->get_all_attributes
};
}

なんで+?
110104sage2010/11/03(水) 21:04:56
>>108-109
http://perldoc.jp/docs/perl/5.10.0/perlref.pod
Making References reference, creation referencing
3. hash, anonymous { {} curly bracket bracket,
curly brace hashref hash reference reference, hash
> 先頭にある +{ や {; が、その式が実際にはハッシュのリファレンスなのか
> ブロックなのかの曖昧さを除去するためにあります。
原文だと
> The leading C<+{> and C<{;> always serve to disambiguate
> the expression to mean either the HASH reference, or the BLOCK.

他、>>52に書かれているtest.plのようなハッシュの先頭に"+"を置いたりしてるのは見たことある。
>>99の答えにはならないけど。
111デフォルトの名無しさんsage2010/11/03(水) 21:31:18
ハッシュかブロックかのカッコを見分けるためにあるのか
また一つ賢くなったような気がする
112Perl忍者 ◆M5ZWRnXOj6 2010/11/03(水) 22:32:02
そんなのもしらなかったのかよw
113Perl忍者 ◆M5ZWRnXOj6 2010/11/03(水) 23:18:34
自分が考えてるよりレベルって低いんだねw
114デフォルトの名無しさんsage2010/11/04(木) 03:33:54
ハッシュかブロックか曖昧なケースってどんなとこ?

evalとかmapとか?
少なくともreturnは曖昧でないよなぁ
115デフォルトの名無しさん2010/11/04(木) 07:17:46
nameカラムには「test test」と格納されています。

以下のクエリーを発行
select name from testdata

1.DBIで発行し、画面出力
→ 「test」が出力される

2.puttyからmysqlを立ち上げ、発行
→ 「test test」が出力される

実行結果が変わってくるのはなぜでしょうか?
色々なデータで試してみましたが、半角スペースが出現すると
それ以降は読み捨てられてしまうようです。

sele
116 ◆M21AkfQGck 2010/11/04(木) 09:29:20
ImageMagickで0からgif画像をドット絵的に作るにはどうしたらよいのでしょうか?
いろいろ調べたつもりですが見つけることができませんでした
117デフォルトの名無しさんsage2010/11/04(木) 10:07:07
>>115
これまた難儀な質問だ
普通そんなことはないからプログラムがおかしいんじゃないか?
該当箇所見なきゃ誰もどうとも言えんと思う
118104sage2010/11/04(木) 17:35:41
>>116
こんな感じでドットが打てる。

$image->Set("pixel[$x,$y]" => '#000000');
119デフォルトの名無しさん2010/11/05(金) 14:11:23
以下のようにMYSQLへSQL文を投げているのですが、実行されません

$sth = $db->prepare("update (select @i:=0) as dummy,Result set ResultID = @i:=@i+1");
$sth->execute;

同じプログラム内に書いた別のSQL文は実行されているのでMYSQLへの接続は出来ていると思います
また、同じSQL文を直接MYSQLへ与えた場合は問題なく実行されました
何が問題で実行されないんでしょうか
120デフォルトの名無しさんsage2010/11/05(金) 15:44:23
>>119
クエリ投げる前に Perl さんが配列 @i を展開しようとしてくれますから。
use strict してたらすぐ気づきそう。
121デフォルトの名無しさんsage2010/11/06(土) 12:24:02
perl から Adobe Acrobat を操作することは出来ますか?
やりたいことは、WordやPPTファイルを検索し、PDFに変換(図などもそのまま)することです。
Acrobat の方でバッチ処理は不可能なようなので、 Perl からファイルのリストをAcrobatの方に送りつけて、Win32モジュールとかでPDF変換処理をさせる、なんてことを考えました。
可能でしょうか?
特にPerlにこだわっているわけではないので、他にいい方法があれば誘導をお願いします。
122デフォルトの名無しさんsage2010/11/06(土) 13:55:09
http://haraita9283.blog98.fc2.com/blog-entry-118.html
123デフォルトの名無しさんsage2010/11/07(日) 02:41:57
質問させてください
08:00:09:61:aa:c9 LLC U P, func=TEST; DSAP NULL LSAP Individual, SSAP NetBIOS Command
172.16.114.207 TCP 80 > 6193 [FIN, ACK] Seq=663 Ack=314 Win=32736 Len=0
199.95.74.90 TCP 6193 > 80 [ACK] Seq=314 Ack=664 Win=31457 Len=0

このような文字列が入ったtxtを読み込み
最初のスペースから左側だけを抽出しようとしたのですが
どうしてもうまく行きません
プログラムは以下の通りです

$txtには上記の文字列が入ってます

my $match3 ='(.*)(\s)(.*)';
if( $txt =~ /$match3/){
print "前半$1\n";
print "指定文字$2\n";
print "後半$3\n";
}

124デフォルトの名無しさんsage2010/11/07(日) 02:43:05
まああれだ、最後の手段として、
Win32::GUITestがあれば何でもできる
125123sage2010/11/07(日) 02:45:40
望む結果はprint "前半$1\n"; に
08:00:09:61:aa:c9
172.16.114.207
199.95.74.90
と出て欲しいのですが

結果は
print "前半$1\n"; ⇒ 172.16.114.207 TCP 80 > 6193 [FIN, ACK] Seq=663 Ack=314 Win=32736
print "指定文字$2\n"; ⇒ スペース
print "後半$3\n"; ⇒ Len=0
となってしまいます
どうやら一番後ろから参照されているようです
一番頭から参照をするメタ文字の「^」を入れてみましたが
結果は同じでした

非常に低レベルな問題なのですが
どうかご教授御願いします
126デフォルトの名無しさんsage2010/11/07(日) 02:46:52
use strict;
use warnings;

foreach my $line (<DATA>) {
if (
$line =~ m{
\A
( .+? )
( \s )
( .+ )
\z
}xms
) {
print "前半$1\n";
print "指定文字$2\n";
print "後半$3\n";
}
}

__DATA__
08:00:09:61:aa:c9 LLC U P, func=TEST; DSAP NULL LSAP Individual, SSAP NetBIOS Command
172.16.114.207 TCP 80 > 6193 [FIN, ACK] Seq=663 Ack=314 Win=32736 Len=0
199.95.74.90 TCP 6193 > 80 [ACK] Seq=314 Ack=664 Win=31457 Len=0
127デフォルトの名無しさんsage2010/11/07(日) 02:50:54
PBP風味は脇に置いておくと、
量指定子(*とか+とか)が「強欲」(最長一致)
であることに着目するってことだな

だから上記のように.+?とするか、あるいは
[^\s]+とする必要がある
128123sage2010/11/07(日) 02:55:12
ありがとうございました
できました

*と+が原因だったとは
全然考えてませんでした

もう少し勉強していきます
129デフォルトの名無しさんsage2010/11/07(日) 06:07:15
IPアドレスにも気をつけて><
130デフォルトの名無しさんsage2010/11/07(日) 07:29:36
行単位で読み込んでるなら s オプションは要らないんじゃない?
131デフォルトの名無しさんsage2010/11/07(日) 10:37:16
数字を、
**100
*1000
みたいに、桁数固定でゼロサプレスするけど代わりに*を埋める、みたいなことを
printfでできますか
132デフォルトの名無しさんsage2010/11/07(日) 10:40:28
直感だけどw


%*5d


は?
133デフォルトの名無しさんsage2010/11/07(日) 10:54:32
駄目でした(やっぱり)
134デフォルトの名無しさん2010/11/07(日) 11:06:49
JSON::XS の pretty で出力する js が非常に見にくい(読みにくい)のですが、

なにか見やすく整形できるモジュールないでしょうか?
135デフォルトの名無しさんsage2010/11/07(日) 12:17:08
$str = '*****' . $num;
printf substr($str, length($str) - 5, 5);

はいはい邪道邪道
136デフォルトの名無しさんsage2010/11/07(日) 12:42:27
$temp = sprintf("%5d\n", $num);
$temp =~ s/ /*/g;
print $temp;

どうしても途中に一回変数を挟むな
137デフォルトの名無しさんsage2010/11/07(日) 13:05:58
こんなんはダメ?

print '*' x (5 - length $num) , $num;
138デフォルトの名無しさんsage2010/11/07(日) 13:27:39
>>135
自分もそれ思いついた
けど、>>137 が一番見やすいのかな?

あっ、質問主じゃないですが ^-^;
139デフォルトの名無しさんsage2010/11/07(日) 13:39:36
題意の通りにprintfを使うと

printf("%s%d", '*'x(5 - length $num), $num);

こんな感じか
140デフォルトの名無しさんsage2010/11/07(日) 14:38:44
日本語を暗号化するスレはここですか?
141デフォルトの名無しさんsage2010/11/07(日) 15:05:30
PGPでおk
142デフォルトの名無しさんsage2010/11/07(日) 15:47:09
書籍のことで聞きたいのですが
Perl/CGI逆引き大全 600の極意
http://www.amazon.co.jp/Perl-CGI%E9%80%86%E5%BC%95%E3%81%8D%E5%A4%A7%E5%85%A8-600%E3%81%AE%E6%A5%B5%E6%84%8F-Web%E6%96%B0%E6%92%B0%E7%B5%84/dp/4798010774

Perl逆引きクイックリファレンス―Perl5.8対応
http://www.amazon.co.jp/Perl%E9%80%86%E5%BC%95%E3%81%8D%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%E2%80%95Perl5-8%E5%AF%BE%E5%BF%9C-%E5%9D%82%E7%94%B0-%E5%81%A5%E4%BA%8C/dp/483992287X

買うならどっちがいいでしょうか?
自分は対してプログラムは打てるほうではありません
ラクダ本は難しすぎました・・・

他にオススメの書籍があれば教えていただきたいです
143デフォルトの名無しさんsage2010/11/07(日) 15:51:45
英和辞書買ってperldocをだな(ry
144デフォルトの名無しさんsage2010/11/07(日) 16:24:05
逆引きは自分がやりたいことが載ってるとは限らない
リファレンスはその言語の簡単な辞書 (簡単というほど薄くはないけどね)

なんとか大全とかは立ち読みして、自分がやりたい事か、似たことをやってる本を買うべき。

0円で済ませたいなら っ【ぐぅぐる】


>>143
perldoc をとは言うが、本は本で役に立つんだぜ?
145デフォルトの名無しさんsage2010/11/07(日) 16:28:43
>>142
どっちもラクダぐらい読んで理解できるレベルじゃないとだめだろ。
ラクダを難しいと言うようじゃリャマ(オライリーのはじめてのPerl)
あたりでまずは基本を勉強した方がいいと思うぞ。
146デフォルトの名無しさんsage2010/11/07(日) 17:01:17
ラクダは1つの事に対しての情報量が多すぎてめんどくさいw
147Perl忍者 ◆M5ZWRnXOj6 2010/11/07(日) 20:05:42
そもそもPerl難しいっていうやつはヴァカ
148デフォルトの名無しさん2010/11/07(日) 22:08:40
そんなあなたには、PHPのオンライン・ドキュメントがおぬぬめ
http://php.net/manual/ja/index.php

この関数は将来消える予定だから使うなカス。
この関数はPHP5だけで使えるんだから4厨は使うなカス。
この関数はPHP5.2以降でしか使えねーんだから4厨は使うなカス(え?
この関数はPHPのコンパイル・オプションを指定し直して、インストールし直して、Apache再起動しなきゃ使えるわけねーじゃん!プギャーーー
ウニコード?そんなの気にすんな。goto文さえあれば最強よ。
149デフォルトの名無しさん2010/11/08(月) 00:18:48
Perl難しい (>_<)
150デフォルトの名無しさんsage2010/11/08(月) 00:38:54
糞コテはヴァカの間違いだろ
151デフォルトの名無しさん2010/11/08(月) 02:40:38
Perl5が出たばかりの頃に買ったオライリー本を久しぶりに見たら浦島太郎状態なんですが。
流れが速すぎるよう(つд⊂)エーン
152デフォルトの名無しさんsage2010/11/08(月) 05:10:26
>>123
splitもご検討ください。

>>151
2版の青ラクダから、あんまり変わって無い気がするけどな。
Web系は別物かも。クライアント側含めて。
153デフォルトの名無しさん2010/11/08(月) 06:18:32
>>152
青ラクダの初版です。Web系はごりごり書いてるからなあ。(´・ω・`)ショボーン
154デフォルトの名無しさん2010/11/11(木) 03:37:54
use threads;
use threads::shared;
my @A :shared;
for(0..9){push @A,[$_,$_+1,$_+2]}

Invalid value for shared scalar at /home/abc/threadtest.pl line 4
こうなってしまうのはなぜですか?エラーを回避する方法はありますか?
155デフォルトの名無しさんsage2010/11/11(木) 04:27:34
>>154
for(0..9){ push @A, shared_clone([$_, $_+1, $_+2]) }
156デフォルトの名無しさんsage2010/11/11(木) 05:00:45
>>155
ありがとうございます!!
157デフォルトの名無しさんsage2010/11/12(金) 01:04:15
お前は何を言っているんだ
158デフォルトの名無しさん2010/11/12(金) 16:10:47
perlのモジュールについて勉強したいんですがおすすめの書籍教えていただけませんか
独習perlは読みました
CPANにあるモジュールを使いこなせるようになりたいです。
perldocだけだと関数の使い方が完全にはわからないのです
159デフォルトの名無しさんsage2010/11/12(金) 16:29:37
>>CPANにあるモジュールを使いこなせるようになりたいです
貪欲すぎてワロタ

使い方が分からないんじゃなくて、発想しようとしてないから考えがまとまらないんだろ?
テキスト読むだけじゃだめだ
心で感じろ!
160デフォルトの名無しさんsage2010/11/12(金) 16:58:30
CPANモジュールってむやみやたらと全部覚えるというよりは、
ある特定の問題があったときにこれをやるモジュールないかな
って探して使うもののような気がする。とにかく数が多いし
いらない人にはほんとに一生縁がないものが大半だよ。その
問題に関わる人にとっては有り難いわけだけど。
161デフォルトの名無しさんsage2010/11/12(金) 17:00:04
必要なモジュールを探し当てる検索テクニックと
ドキュメントを素早く把握する速読法が
有効のような気がした
162Perl忍者 ◆M5ZWRnXOj6 2010/11/12(金) 17:00:52
お前にチャクラの流れをよむことは無理

覚えるコツ

しらべるのではなく 作る物ー>どんな処理をするかー>このモジュールを使えばすませられる
みたいにかんがえられるから

なので、モジュールから探すのではなく 作る物を探し他方害意
163デフォルトの名無しさんsage2010/11/12(金) 17:04:41
多分モジュール(オブジェクト指向も含めて)がどういうものなのかを知りたいんじゃないのかな?
importとかnewとか。
164Perl忍者 ◆M5ZWRnXOj6 2010/11/12(金) 17:05:37
モジュール紹介してる書籍なんてねえよ
さがせかす自分でさがせごみ
消えろ
165デフォルトの名無しさんsage2010/11/12(金) 17:21:04
各モジュールのマニュアルと、中に入ってる sample/ か t/ 嫁ばだいたいわかるだろ。
166デフォルトの名無しさんsage2010/11/12(金) 20:11:40
とりあえず前世紀のゴミクズCGIを参考に自分で書く。
→ その後CGIモジュール使って書き直してみる。
→ モジュールウマーってなる。

ネットだけで十分な情報量だと思うよ。
あとは何よりも目的が大事。
探してみたら、日本の祝日・休日(振替休日付き)なんてモジュールもあるしな。
167デフォルトの名無しさんsage2010/11/12(金) 20:31:56
>>166
前世紀に書かれたようなヒドイ書き方の CGI を
今の書き方にポートするなんて
書く以前に読むのが苦行過ぎるよ。
my ってなにそれ? -T なんて知らないよ?
とか jcode.pl とかの世界だろうし…。
168デフォルトの名無しさんsage2010/11/12(金) 21:38:41
抽象化されたCGIのパッケージやらモジュールやら使うってことだろ……
169デフォルトの名無しさんsage2010/11/12(金) 21:41:58
>>166
でも祝日休日のモジュールは定期的に保守しなきゃだめだな
スパンは数年単位でいいだろうが
170デフォルトの名無しさん2010/11/13(土) 02:30:08
モ娘。のデータ出してくるモジュールまであったよ
今もやってるか知らんが
171デフォルトの名無しさんsage2010/11/14(日) 16:47:06
DB_Fileで100KB程度のデータを一つのキーに入れた所、
foreach(keys())でやってもそのキーが出てこなくなりました。どうすれば良いのでしょうか。
172デフォルトの名無しさんsage2010/11/14(日) 17:45:17
暗号ですか、素数ですか?
173デフォルトの名無しさんsage2010/11/14(日) 18:11:09
my $num_fork = 4;

while ( $num_fork ) {
 my $pid = fork;
  if ( !defined $pid ) {
   die 'プロセスの生成に失敗<br>\n';
  } elsif ( !($pid) ) {
    if ( $num_fork == 4 ) {
     $aaa = 'aaa';
    } elsif ( $num_fork == 3 ) {
     $bbb = 'bbb';
    } elsif ( $num_fork == 2 ) {
     $ccc = 'ccc';
    } elsif ( $num_fork == 1 ) {
     $ddd = 'ddd';
    }
   exit $num_fork;
  }
 $num_fork --;
}

print $aaa.$bbb.$ccc.$ddd;



aaabbbcccdddと表示されて欲しいのですが、exitしているために変数が参照できません。
exitを消すわけにもいかず、どうすればいいのか悩んでいます。
解決策があればどなたかご教授願えないでしょうか?
174デフォルトの名無しさんsage2010/11/14(日) 18:37:21
子プロセスで変更した内容は親プロセスにはコピーされません。
175デフォルトの名無しさんsage2010/11/14(日) 18:53:12
やっぱり外部ファイルに書き込んで読み込むしかないですかね。
ありがとうございました
176デフォルトの名無しさんsage2010/11/15(月) 02:21:58
>>173
OS環境にもよるけど、パイプやIPCの共有メモリなどでも実装できるよ。
177デフォルトの名無しさんsage2010/11/15(月) 15:02:33
PerlIOレイヤーに:encoding(UTF-8)とか
したときに、ヘンなデータがあったら、
map to Unicodeできないと警告されます。

その警告を黙らせる方法はありますか?
教えてください。

no warnings 'utf8'は試しましたが、
黙りませんでした。
178デフォルトの名無しさんsage2010/11/15(月) 19:08:46
UTF-8で保存
179デフォルトの名無しさんsage2010/11/15(月) 20:14:39
EUC とかを utf-8 に変換すると出るよね
有名なのが 〜 (全角チルダ) と 〜 (波ダッシュ) かな
180デフォルトの名無しさんsage2010/11/15(月) 23:59:34
ある点 A が多角形に含まれるかどうか判別するモジュールってあります?

181デフォルトの名無しさんsage2010/11/16(火) 00:06:17
計算は簡単
182デフォルトの名無しさんsage2010/11/16(火) 00:22:36
いまググって見てた。

計算して試して結果が OK なら OK。 ってのがなんか気持ち悪いから理解しようとしてるんだけど、
いや〜数学赤点ギリギリだった俺からすると難しいw


PostgreSQL とか MySQL に、点が多角形の中に含まれるかどうかチェック出来る演算子とか関数があって、
プログラムで学ぼうとしてる自分にかなり誘惑ww
183デフォルトの名無しさんsage2010/11/16(火) 00:36:42
点から頂点に向かう角度を足して、
0に戻れば外、一周すれば内
184デフォルトの名無しさんsage2010/11/16(火) 02:39:04
>>177
use Encode qw(:fallback_all);
use PerlIO::encoding;

#$PerlIO::encoding::fallback = STOP_AT_PARTIAL;
$PerlIO::encoding::fallback = PERLQQ | STOP_AT_PARTIAL;

>>180
cpanにポリゴンのモジュールあったよ。
こっちは、多角形の一点から、調べたい点まで線を引いて、
辺の交差回数で調べるオーソドックスな方法だった。
185デフォルトの名無しさんsage2010/11/16(火) 18:20:37
$data が $word ($wordの中身は毎回変化します)を含むかどうかを
正規表現で調べたいときはどうすればいいでしょうか?

if($data =~ /$word/)

としても動かなくて・・
186デフォルトの名無しさんsage2010/11/16(火) 20:20:53
/\Q$word/とか?
187デフォルトの名無しさんsage2010/11/16(火) 21:02:46
まず$wordの中身をprintで確認
文字化けの可能性とかある
188デフォルトの名無しさん2010/11/16(火) 22:58:13
すみません、授業でperlを扱っているのですが、
標準入力から受け取って、split演算子の使うやり方がどうもわかりません。

やってる問題は
「dataに半角改行で区切られた3つの数字を辺とする三角形は何個作れるか」
です。

自分が下のように書いたのですが、どうすればよいでしょう。


for ($x,$y,$z)=chomp(split/ /,(<>)){


$a=$x+$y;
$b=$y+$z;
$c=$z+$x;

if(($a>$z) and ($b>$x) and ($c>$y)){
print"$a,$b,$c,$x,$y,$z";
$count++;
}
}
print "$count \n";

お願いします
189Perl忍者 ◆M5ZWRnXOj6 2010/11/16(火) 23:15:55
perlの問題っていうより
頭の問題

宿題スレいけゲハ
190デフォルトの名無しさん2010/11/16(火) 23:57:30
> 半角改行

この時点で超難問だな。
NASAにでも相談してくれ。
191デフォルトの名無しさんsage2010/11/16(火) 23:59:25
chompの戻り値が入ってるんじゃね?
192デフォルトの名無しさんsage2010/11/17(水) 00:01:46
どうでもいいけど括弧1個足りなくね?
193デフォルトの名無しさんsage2010/11/17(水) 00:08:59
スレは合ってるんだけど、宿題だと判るとやりたくない
194デフォルトの名無しさんsage2010/11/17(水) 00:25:02
全角改行を探せという問題か・・・


\r や \n (Mac とか Linux) が単独で出てくる場合が半角改行で、
\r\n (Windows) のように出てくるのが全角改行。

ってとこかな。
俺、頭いい!!←
195デフォルトの名無しさん2010/11/17(水) 00:25:03
皆の者ちょいと落着きなされい

> すみません、授業でperlを扱っているのですが

この言質からすると、こやつは宿題厨ではなく、情弱日狂組でおじゃるぞ
196デフォルトの名無しさん2010/11/17(水) 00:53:50
188です

たくさんレスありがとうございます。

>191
そうかもしれないです。
printで表示されたものが全部一緒(dataファイルの最初の行)でした。

>195
日狂組ってなんですか??
197デフォルトの名無しさんsage2010/11/17(水) 01:39:52
>>188 は女子校の宿題です
198デフォルトの名無しさんsage2010/11/17(水) 01:52:32
女子交じゃ仕方ない。一肌脱いでやるか
$s = <>;
($x, $y, $z) = split(/ +/, $s);
print "x=$x y=$y z=$z\n";
199デフォルトの名無しさんsage2010/11/17(水) 01:55:21
あー改行なんだっけ
split(/\n/, $s);
$s=<>; じゃムリだと思うが
200デフォルトの名無しさんsage2010/11/17(水) 03:33:21
>>188
---- dataの例
4
5
6
----
こんなんだったら、これで。

chomp(my $x = <STDIN>);
chomp(my $y = <STDIN>);
chomp(my $z = <STDIN>);
201185sage2010/11/17(水) 14:39:12
>>186>>187
レスありがとうございます。
$wordの中身が文字化けしてました;;

原因は$wordの末尾の改行をchompで取り除いてた(つもりだった)のですが,
LFしか削ってくれてませんでした。

今はActivePerl5.10.1のx64版を使ってるのですが,
昔のActivePerlはchompでCR+LFを削ってくれてたような記憶が・・
仕様が変わったんですかね。
202デフォルトの名無しさんsage2010/11/18(木) 04:15:24
特に変わってないんじゃないの。
chomp
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod
> $/ (English モジュールでは、$INPUT_RECORD_SEPARATOR とも言う) の
> その時点の値に対応する行末文字を削除します。

my $str = "\x0d\x0a";
printf("\$/ => %0v2x\n", $/);
printf("str => %0v2x\n", $str);
chomp($str);
printf("chomped => %0v2x\n", $str);

結果。
$/ => 0a
str => 0d.0a
chomped => 0d
203デフォルトの名無しさん2010/11/19(金) 23:20:25
perlと直接関係はないんですが、

パスワードを設定して貰うのに、qwer とか安易なパスワードの時に、
ちょっとしたメッセージを出したいのですが、そういう安易パスワードリストみたいなのはないでしょうか?

もしくは英単語リストみたいな。

自分でも安易なパスワード集というのを考えてみたのですが、おそらく漏れが多いと思うので・・。
204デフォルトの名無しさんsage2010/11/19(金) 23:28:40
>>203
mechanizeで辞書サイトの検索結果を取ってくりゃいい
205デフォルトの名無しさんsage2010/11/19(金) 23:32:31
アルファベットと数字を混ぜることを強制する
206デフォルトの名無しさんsage2010/11/20(土) 03:31:18
>>204
ちょwwwパスワード外に投げんなよwww
207デフォルトの名無しさんsage2010/11/20(土) 08:45:03
「パスワード 辞書」でググると物はすぐ出るんだけど、
量多いし文字数やパターンで判定するのが一般的じゃないかな
208デフォルトの名無しさんsage2010/11/20(土) 08:59:49
>>203
辞書ならjohn用のでいいんじゃないか。
ftp://ftp.ox.ac.uk/pub/wordlists/
2092032010/11/20(土) 10:13:22
>>204-208

ありがとうございます。

これ利用してみたいと思います!
ftp://ftp.ox.ac.uk/pub/wordlists/

qwer載ってたし。

でも、これいいんじゃないのっていう qwbc とかあるから微妙な感じですね。
qwbc とか qwho とかってそんなに、駄目なパスワードじゃないっぽく思えるけど・・。
210デフォルトの名無しさんsage2010/11/20(土) 10:32:24
小文字4文字の全組み合わせ数は456976
一瞬で検索できる
211デフォルトの名無しさん2010/11/20(土) 17:26:24
こんなモジュールを使ってflickrに画像をアップロードして結果を受け取りたいです。
use Flickr::Upload;
use Flickr::API;
use Flickr::API::Response;
use Flickr::API::Photos;
use Flickr::API::Request;
http://search.cpan.org/~cpb/Flickr-Upload-1.32/Upload.pm
api key,secretを 取得して
http://www.flickr.com/services/apps/create/apply
アップロードするまではここ↓をそのまま真似してうまくいくのですが、
ttp://blog.riywo.com/2009/01/17/082207
画像の{id}以外の情報をどうやって出力すればいいのか分かりません。
flickrのURLは次のようになってるので、{farm-id}、{server-id}、{id}、{secret}が必須です。
(この{secret}は画像ごとに決まった値が出るようです)
サムネイル http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_[mstzb].jpg
画像ページ http://www.flickr.com/photos/{user-id}/{photo-id}
http://www.flickr.com/services/api/misc.urls.html より)

最終的にはアップロード->HTML出力みたいにしたいです。
html出力はこのようなかんじで。
<a href="http://www.flickr.com/photos/{user-id}/{photo-id}">
<img src="http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_m.jpg"></a><br /><br />
誰か助けてください。
212デフォルトの名無しさんsage2010/11/20(土) 19:06:01
非常に簡単な正規表現なんですが
どうしてもわからないので質問させてください

改行コードを含むテキストに書かれている文章を
改行コードも含めて抽出しようと思うのですが
テキストの内容は

Internet Protocol, Src・・・・
(ここが抜き出したい部分で、約10行ほど)
Transmission Control Protocol, ・・・・
     以下続く・・・・

Internet ProtocolからTransmission Control Protocolまでの中間の部分(改行コードあり)を
抽出したいのです

書いたプログラムは以下の通りです
while ( $message = <FILE>){
$match = '(Internet Protocol)(.*)(Transmission Control Protocol)';
if( $message =/$match/s){
print "$2";
}
}
  print "処理完了\n";

正規表現にsを加え$2と書けばInternet ProtocolからTransmission Control Protocolまでが
抽出されるか思いましたがダメでした。

レベルの低い問題ですが
どうかご教授御願いします
213デフォルトの名無しさんsage2010/11/20(土) 19:19:36
1行づつ読み込みループで
 抽出範囲開始文字列(IP)がある・・・フラグON、バッファクリア
 抽出範囲終了文字列(TCP)がある・・・フラグOFF、バッファを出力
 それ以外・・・フラグONなら行データをバッファに蓄積

でいいんじゃね?
214デフォルトの名無しさんsage2010/11/20(土) 19:47:30
read FILE, my$messages, -s FILE;
$messages =~ /Internet Protocol(.*)Transmission Control Protocol/s
215212sage2010/11/21(日) 06:38:33
>>213、214さん
回答ありがとうございます

>>214さんのを参考に書いてみたのですが
やはりうまく行きません
書いたコードは以下の通りです

1 open(FILE,"IPTCP.txt");
2 while ( $message = <FILE>){ #ファイル関連
3 read FILE, $message, -s FILE;
4  if( $message =~ m/(.*Internet Protocol)(.*)(?=.*Transmission Control Protocol)/s){
print "$2\n";
    }

   }
print "処理完了\n";

同じパターンで書かれた文字列から、4に該当する文字列を摘出するので
while文を使っているのですが、3を入れる位置に困ってます
ここに入れてしまうと、繰り返すたびに読み込まれてしまうので、良くないと思うのですが
1の下では機能しませんでした

read文についても調べたのですが 「-s FILE」の修飾詞-sの意味など
わかりませんでした(おそらく、文字列を単一行として扱う?)
3を1,2に組み込んでみようかと思いましたがダメでした

このコードの結果として一番最後の3に当てはまる所だけ出力されました
216212sage2010/11/21(日) 06:51:36
これが抽出を行うテキストの一部です
http://windyakin.if.land.to/src/up38_2358.txt

上記のコードだとこの様に一番最後の
該当する部分しか抽出されません
http://windyakin.if.land.to/src/up38_2359.txt

私自身が考えている完成形はこの様に
該当する範囲を全て抽出できるようにしたいのです
http://windyakin.if.land.to/src/up38_2360.txt

どうかアドバイスよろしく御願いします
217デフォルトの名無しさんsage2010/11/21(日) 07:00:04
複数かよ
open
read
while($mes =~/foo(.*?)bar/sg){
print $1;
}


ざっと
keyword: ファイルテスト演算子
218デフォルトの名無しさんsage2010/11/21(日) 08:48:50
>>216
文章じゃなくてなにかのログの出力なのか。
こういう形式ならyaml使った方が上手くいくんじゃね?
ttp://d.hatena.ne.jp/magicalhat/20060929/1159514801
219デフォルトの名無しさんsage2010/11/21(日) 09:18:17
>>212
my $begin = qr/^Internet Protocol,/;
my $end = qr/^Transmission Control Protocol,/;
my @line;
open(FILE, 'foo.log') or die;
while(<FILE>){
if (/$begin/ ... /$end/){
push(@line, /$end/ ? "\n" : $_);
}
}
close FILE;

print @line;
220デフォルトの名無しさんsage2010/11/21(日) 09:19:43
use strict;
use warnings;

my $text;
open(INFH, '<', 'test.txt');
read(INFH, $text, (-s INFH));
close(INFH);

while($text =~ s/(Internet Protocol.*?)Transmission Control Protocol//s){
  print $1;
  print "\n";
}

221デフォルトの名無しさんsage2010/11/21(日) 09:22:52
細かい所は自分で考えてもらうにしても
while( <> ){
 if ( /Internet Protocol/ .. /Transmission Control Protocol/ ) {
  print ;
 }
}
だけの事だろ。
# インデントは全角空白。注意
222デフォルトの名無しさんsage2010/11/21(日) 09:23:44
ああ、リロードしてから書けば良かった
223デフォルトの名無しさんsage2010/11/21(日) 14:07:38
なんでみんな難しく難しくコードを書こうとするの?
質問に対してワンライナーで無理やり書く必要も無いっしょw
224デフォルトの名無しさんsage2010/11/21(日) 14:17:49
ワンライナーが肌に染み付いているってことなんじゃないの
個人的使用が多いとそうなるんじゃ
225デフォルトの名無しさんsage2010/11/21(日) 14:19:21
コードゴルフのことをいいたいんだろうけど…

これが難しいなら、質問者諸共webprogの初心者スレへ行け。
226デフォルトの名無しさんsage2010/11/21(日) 14:37:19
質問スレの回答にわざわざ変化球投げなくてもいいんじゃないの?って話しかと・・・
227デフォルトの名無しさんsage2010/11/21(日) 14:43:56
Perl使いじゃないのでROMってたけど範囲演算子が素敵すぎる
228Perl忍者 ◆M5ZWRnXOj6 2010/11/21(日) 15:42:38
難しく書くとこに美徳+優越感をえているバカどもばっかりだからな

マイトガイの影響かしらないけど あとモダンとかわめいてるカスども
229デフォルトの名無しさんsage2010/11/21(日) 15:44:53
隔離スレに引っ込んでろよ。
230デフォルトの名無しさんsage2010/11/21(日) 15:49:34
ここまで文章から頭の悪さが感じられるような人って、ある意味凄いよね
231デフォルトの名無しさんsage2010/11/21(日) 15:52:22
>>228
優越感じゃなくて
単に肌に染み付いてるってことじゃないの?
232デフォルトの名無しさんsage2010/11/21(日) 15:56:14
>>228
>>228
233デフォルトの名無しさんsage2010/11/21(日) 16:08:35
難しく書こうとは思わないけど、
$temp を減らせる方法があるなら、そっちを選ぶことが多い
234Perl忍者 ◆M5ZWRnXOj6 2010/11/21(日) 16:52:05
マイトガイ信者必死・・・
235デフォルトの名無しさんsage2010/11/21(日) 16:59:50
マイトガイとかモダンとか一体何の話なの?
236デフォルトの名無しさんsage2010/11/21(日) 21:52:47
これですね、とミサカは貼り付けてみます。
http://blog.livedoor.jp/dankogai/archives/51173577.html
237デフォルトの名無しさんsage2010/11/21(日) 21:59:48
アニヲタ帰れ
238デフォルトの名無しさんsage2010/11/21(日) 22:01:20
dankogaiはいつになったら江川達也とフュージョンしてスーパーdankogaiになるん?
239212sage2010/11/22(月) 00:05:27
>>217〜221さん
アドバイスありがとうございました
完成しました
このコードの趣旨は>>216のテキスト(2G)を正規表現で
TCPヘッダー、IPヘッダー、UDPヘッダーで分けて
それからさらに各種ヘッダーの中身を一つ一つ
テキストに出力していくという内容でした

           /→Source port.txt
TCPヘッダー.txt→→ Destination port.txt
            \→Sequence number.txt

コレが完成したプログラムです
http://windyakin.if.land.to/src/up38_2361.zip

しかし、未熟者が作ったので正規表現の部分が
全てwhile文の効率の悪いプログラムです

この様なコードの場合
どのようにすれば最適化できるでしょうか?

240デフォルトの名無しさんsage2010/11/22(月) 00:23:43
出力なのに INx っていうファイルハンドル名がきもちわるいですw


個人的にはだけど、親で開いたファイルハンドルに子が書き込むのはヤダなぁ
241Perl忍者 ◆M5ZWRnXOj6 2010/11/22(月) 00:27:45
マイトガイって ハンマーもって建物のRepairとかしてそうですね

なんていうか敵に襲われたら

ハンマー振り回して フンガフンガ!!いって倒したら

そっこう建物にもどってRepairしてそうですね

ドワーフですね
242Perl忍者 ◆M5ZWRnXOj6 2010/11/22(月) 00:28:45
マイトガイとダンコガイは別人です^^
243Perl忍者 ◆M5ZWRnXOj6 2010/11/22(月) 00:33:16
>>235
>>238

なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
244デフォルトの名無しさんsage2010/11/22(月) 00:42:32
もうおまえコテハン捨てたほうがいいよ
目障りだし、カスだし、氏んだ方が世の中の為
245デフォルトの名無しさんsage2010/11/22(月) 00:44:13
こうゆうバカは罵詈雑言でも相手してくれる事に快感を覚えるから、
スルーするのが一番いいよ
246Perl忍者 ◆M5ZWRnXOj6 2010/11/22(月) 00:47:16
キムチ乙・・・
247デフォルトの名無しさんsage2010/11/22(月) 01:06:10
>>239
20個のopenと19個のcloseがなにか絶望的なふいんきを醸し出しているような……
248デフォルトの名無しさんsage2010/11/22(月) 09:37:47
>>239
似たような正規表現をまとめて引っ掛けて、分岐処理だろうね。

あと、openにエラートラップが無いと、
一部のログが取れてなくても気がつかないかもな。
249デフォルトの名無しさんsage2010/11/22(月) 15:24:48
>>239
書き直してみた。
ttp://windyakin.if.land.to/src/up38_2364.zip
無保証です。すまん。一応サンプルの断片で動作確認はしてみたけど。
出力ファイル名にスペースが入ってるのが嫌だったのでかわりに'-'でつないでます。
出力すべきファイルとファイルハンドルの対応が取りやすく(間違いにくく)なってるとは思うが。
よければ誰か添削して改良してちょ。
250デフォルトの名無しさん2010/11/22(月) 18:42:43
以下で、0と出る理由が分らないんですが何故なんでしょうか?

my @a = split(',', '');
print @a-0;

-----
javascriptのように、''な要素が一つ出来上がると単に思っていたのでなかなか理解できずにいます・・。

alert(''.split(',').length);
251デフォルトの名無しさんsage2010/11/22(月) 18:55:10
え、どうみても正常に動作してますけど
252デフォルトの名無しさんsage2010/11/22(月) 18:58:28
むしろ空文字列を','でsplitしたら要素が1コできちゃう
JavaScriptの仕様の方がよくわからない。
なんでそんな仕様なんだろう。
253デフォルトの名無しさんsage2010/11/22(月) 19:43:27
>>252
戻り値が配列
区切り文字が「何らかの文字が0個以上」

正常でしょ?
254デフォルトの名無しさんsage2010/11/22(月) 19:46:43
>>250
@a のみとやると配列の中身を見るだけ
@a - 0 とすると @a は $test=@a のように評価されることになって
配列の要素数から0を引けばその結果が返ってくるだけ
255デフォルトの名無しさんsage2010/11/22(月) 19:47:39
split の第一引数は 「区切りとなる文字」 ではなく 「区切りとなるパターン文字」 ですよん
256デフォルトの名無しさんsage2010/11/22(月) 20:12:23
>>250
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod
split
> 文字列 EXPR を文字列のリストに分割して、リストを返します。
> デフォルトでは、行頭の空白は保存され、末尾の空白は削除されます。
> (全てのフィールドが空の場合、これらは末尾であるとして扱われます。)
257デフォルトの名無しさんsage2010/11/22(月) 20:32:31
微妙にアレなんで
> Splits the string EXPR into a list of strings and returns that list.
> By default, empty leading fields are preserved, and empty trailing ones are deleted.
> (If all fields are empty, they are considered to be trailing.)

print scalar split(/,/, ',a,,a'), "\n";
print scalar split(/,/, 'a,,,'), "\n"; # 後続するフィールドが空なら削除
print scalar split(/,/, ',,,'), "\n"; # 全部空なら全部削除
258デフォルトの名無しさんsage2010/11/22(月) 20:36:54
関数が多すぎで @EXPORT に列挙するのがめんどくさいけど簡素化できないもんでしょか?
259デフォルトの名無しさん2010/11/22(月) 21:37:22
>>256,257

ありがとうございます。
なんか難しいですね・・
260デフォルトの名無しさんsage2010/11/23(火) 00:33:36
split は第3パラメータに負の値を指定すると、後続の空要素を省略しなくなる。
print scalar split(/,/, "a,"), "\n";
→1
print scalar split(/,/, "a,", -1), "\n";
→2
しかし、空文字列は第3パラメータに負を指定してsplitしても要素数はやはり0。
print scalar split(/,/, "", -1), "\n";
→0
つまりperlの考え方では、空の文字列は何でどうsplitしても空の配列にしかならんということだな。
でもそれがperl的にはいろいろ処理する上で都合がいいし、合理的な仕様だと思う。
261デフォルトの名無しさんsage2010/11/23(火) 03:54:41
for my $symbol (keys %MyPackage::) {
 if (*{$MyPackage::{$symbol}}{CODE}) {
  push @EXPORT, $symbol;
 }
}
>258の件でこういうの考えたけど、処理順が上手くいかなくて、Dumperとかも拾っちゃった
262デフォルトの名無しさんsage2010/11/23(火) 09:58:45
Perlでいくつかのパッケージを作成し、それらを協調して動作させようとしています。

現在、最上位に位置するパッケージから下位のパッケージにオプションのハッシュを
渡して動作の調整を行っているのですが、環境変数でやってもいいかな、と思うぐらいの
全体的な設定値は、どのようにして扱えばよいでしょうか。
ずっと引数で設定値を引き回していくのも、まどろっこしいような気がします。
例えば、JavaのDIのように実行時に注入するような、そんなやり方や、
Perlではこうやるのが慣習、というのがあるのならば、教えて欲しいです。
263デフォルトの名無しさんsage2010/11/23(火) 11:59:51
環境変数でやってもいいかな、と思うぐらいの全体的な設定値で
処理中に変更されないんだったら
もうグローバル変数でいいんじゃないんですかね。
264デフォルトの名無しさんsage2010/11/23(火) 12:03:39
262 じゃないんだけど、
my $TEST;
って宣言して、これを下のスコープで同名の宣言を禁止する事って出来たりするのでしょか?

my $test;
testfunc();

exit;

sub testfunc{
my $test; # <- エラーにしたい
}
265デフォルトの名無しさんsage2010/11/23(火) 13:06:25
そもそも禁止したい理由がわからん…
266デフォルトの名無しさんsage2010/11/23(火) 13:22:55
グローバルとして使うときはmy?our?
267デフォルトの名無しさんsage2010/11/23(火) 13:55:52
>>266
値が変化しない前提ならどっちでもいいんでは
268デフォルトの名無しさんsage2010/11/23(火) 20:44:51
>>264
外側の$testにアクセスできなくなることを問題にしてるのなら
内側でmy $testをしたことが悪いんじゃなくて、
それでアクセスできなくなる作りが問題なんだと思う。
例えば$testを得るための関数を用意するとか、パッケージ変数にするとか。
269デフォルトの名無しさんsage2010/11/23(火) 20:50:53
あ〜
モジュールにしちゃうのもいいな

グローバルでもローカルでも同じ名前を使うことが多くて、
たまに自分がボケて意図しない結果に頭を悩ますことがあるから
同じ名前はエラーにすれば楽チンかなぁって (^_^;)
270デフォルトの名無しさんsage2010/11/23(火) 21:23:55
お前がアホなだけじゃん
271デフォルトの名無しさんsage2010/11/23(火) 21:34:40
アホだから対策を考えてるんだけど・・・
272デフォルトの名無しさんsage2010/11/23(火) 21:40:09
対策wwww

真性かよ
273デフォルトの名無しさんsage2010/11/23(火) 21:57:18
ならいい方法あるぜw

つ紙とペン
274デフォルトの名無しさんsage2010/11/23(火) 22:41:08
モジュールにしちゃえ
275デフォルトの名無しさんsage2010/11/23(火) 23:35:18
紙はまとめ終わったあとの清書にはとても有効な手段だが、
まとめ終わってない現在進行形のものをまとめるには有効な手段とは言えない。

それぐらいも分からないバカなの?
小学校からやりなおすの?

あふぉと言われてる自分より下が居ることにびっくりした。
276デフォルトの名無しさんsage2010/11/23(火) 23:38:38
本当に自分より下なら、いちいちレスしたりしない
277デフォルトの名無しさんsage2010/11/24(水) 00:10:39
 発 者 同         . 。_   ____           争
 生 同 .じ     .    /´ |  (ゝ___)          い
 .し 士 .レ      .__/'r-┴<ゝi,,ノ   ro、      は、
 .な で .ベ      ∠ゝ (ゝ.//`   ./`|  }⌒j     
 .い し .ル        } ⌒ /`ヽ、_∠l,ノ ・ヽ´
 .! ! か の       /  ´..:.} >、、___,  .r、 ソ、`\
             /   ..:.:.}   /   |∨ ` ̄
            /   ..:.:./    |   丶
           / _、 ..:.:.:.{    .{.:.:.   \
          {   ..:Y  .ゝ、   {.:.:.:.:.    ヽ
          |、  ..:/ 丿 .:〉   >.- ⌒  .  ヽ
          / {. ..:./ ソ ..:./  .(    ..:.:.:`  ..:}
         ./..:.:}.:.:./ ヘ、 ..:./   .\ ..:.:r_,ノ、.:.:}
        ./..:.:/|.:/   {.:./     X.:.:}.}   X X
        /..:.:/ .}.:|    }:/       .Y丶ヽ  Y.:Y
  . __/.:/ { }  《.〈、     _,,__>.:》丶   Y.:\
  /.:.:.:.:.::/   !.:.:ゝ  ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ   \.: ̄>
278デフォルトの名無しさんsage2010/11/24(水) 01:17:35
>>276-277
同意だわー 俺も常々肝に銘じてる
ほんで初めて見たけどいいAAだな
279デフォルトの名無しさんsage2010/11/24(水) 05:35:10
本当にアホだわw
280デフォルトの名無しさんsage2010/11/24(水) 13:58:19
機械的にダブり宣言をチェックすると逆に同名の変数を使いづらくなって鬱陶しいと思う。
全ての変数名がダブらないってことは結果的にグローバル変数しか使えない言語と同じだし。
もっと、変数の命名ルールを工夫するとか、スコープ範囲を小さくまとめて
同じ名前の変数をブロック内で宣言したことを途中で忘れちゃわないようにするとか、
そういう方向で回避するよう心がけた方がいいんでは。
281デフォルトの名無しさんsage2010/11/24(水) 18:36:15
メインPCはDドライブがリカバリー用のドライブになっていて、そのためにCがシステムドライブ、Eがデータ用のドライブになっています。
それに合わせてサブのPCのドライブ構成を、Cがシステム、Eがデータ用にしていて、Dドライブは存在しません。

そのサブのPCにActivePerlをインストーラーでインストールしようとしたのですが、Invalid Drive: D:\ となってインストールできません。
どうしたら良いでしょうか。
282デフォルトの名無しさんsage2010/11/24(水) 18:40:54
バイナリをzipでダウンロードして、D:\Perlなりに解凍して、D:\Perl\binにpathを通す
283デフォルトの名無しさんsage2010/11/24(水) 19:34:00
>>282
ドライブ D: は存在しない、って書いてあるだろ。よく読め。
284デフォルトの名無しさんsage2010/11/24(水) 19:56:14
いや、普通に E: にインストールできるっしょ・・・
285デフォルトの名無しさんsage2010/11/24(水) 20:11:27
え、サブPCのドライブ C:に(普通に)インストールしようとしたら、
ActivePerlのインストーラに「D:\ が存在しないよ」とよくわからないエラーを出されちゃった、
という話ではないの?
286デフォルトの名無しさんsage2010/11/24(水) 20:18:18
インストール中に[browse]ってボタンが出てくるから、
押してドライブとディレクトリを設定してね。
287280sage2010/11/24(水) 20:23:05
ちょっと用事で抜けるので、結果はまた後で書きますが、
Cドライブにインストールしたいのですが、インストーラーを起動させると、
その直後に前記のエラーが出て何もさせてもらえず終了する感じです。

zipによるインストールを試してみます。
288Perl忍者 ◆M5ZWRnXOj6 2010/11/24(水) 21:07:43
下を見ればやる気出る
289デフォルトの名無しさんsage2010/11/24(水) 21:09:37
以前は D にインストールしてて、設定が残ってるだけなんじゃないかなと・・・
290280sage2010/11/24(水) 23:38:40
クリーンインストールなのでそれはない、と思ったんですが、
OSインストール時に色々ありまして、最初にCとDを作り、その後Cをまた再インストールしなおした後、DをEに変更するということをやったので、
もしかしてDの情報が残ってるのかな?と不安に思い、Eをフォーマットしました。
結果、インストーラーでインストール出来るようになりました。

でも、何でCドライブ内でのインストール作業でDドライブのチェックが最初に入ってるんだろう・・・
結果的には良かったですが。
291デフォルトの名無しさんsage2010/11/26(金) 21:42:42
アリなGUIモジュールはなにですかね?
292デフォルトの名無しさんsage2010/11/26(金) 22:56:32
>>291
日本語でおk
293デフォルトの名無しさんsage2010/11/26(金) 23:29:09
Perl/Tk
294デフォルトの名無しさんsage2010/11/28(日) 06:46:19
$hoge = (5 > 3) ? "true": "false";
print $hoge; #=>true

print (5 > 3) ? "true": "false";
なぜか1が出力されてしまいました。
上はこれと同義だからという理由でした。
(print (5 > 3)) ? "true": "false";

なるほど・・・
295デフォルトの名無しさんsage2010/11/28(日) 06:48:48
>>294
ちょっとまて、これは質問なのか?
296デフォルトの名無しさんsage2010/11/28(日) 07:02:19
3項演算子の優先順位に涙した!!
297デフォルトの名無しさんsage2010/11/28(日) 07:07:44
まてまて、それならなんで
$hoge = (5 > 3) ? "true": "false";は
($hoge = (5 > 3)) ? "true": "false";と同義にならないんだ?

前方が代入処理だった場合は〜、とパーサが例外処理してるんだろうか。
298デフォルトの名無しさんsage2010/11/28(日) 07:17:07
printがエラーになったらfalseが表示されるんじゃなイカ?
299デフォルトの名無しさんsage2010/11/28(日) 08:34:29
http://perldoc.jp/docs/perl/5.8.8/perlop.pod
300デフォルトの名無しさんsage2010/11/28(日) 17:08:24
>>297
単純な話。「=」の方が「?:」より優先順位が低いから。>>299 のとおり。
1 + 2 * 3 が9ではなく7になるのとまあ理屈はおなじだ。

ついでに300get。
301デフォルトの名無しさんsage2010/11/28(日) 17:26:29
print 5 > 3 ? 'true' : 'false'; # true
print (5 > 3 ? 'true' : 'false'); # true
print ((5 > 3) ? 'true' : 'false'); # true

結合の強さをちゃんと覚えてないから「あら?」と思ったときは perlop のお世話になってる。
302デフォルトの名無しさんsage2010/11/28(日) 17:33:18
printの方が例外的な動きをしてるので、>299で読むのはここ

>リスト演算子 (print() など) や単項演算子 (chdir() など) は、 すべて次のトークンとして開き括弧が続くと、
>その演算子と括弧内の引数は、 通常の関数呼び出しのようにもっとも高い優先順位として扱われます。
303デフォルトの名無しさんsage2010/11/28(日) 20:58:52
迷ったら括ればおk
304デフォルトの名無しさんsage2010/11/28(日) 21:41:11
あーでもないこーでもないと薀蓄合戦するくらいなら
括れ
305デフォルトの名無しさんsage2010/11/28(日) 22:13:09
>>303
だね〜w

括弧で括るのが癖になってきたら

if(($test eq '〜') || () || ()){
}

みたいに、括弧で括らなくていいとこまで括らない時がすまなくなった
306デフォルトの名無しさんsage2010/11/28(日) 22:13:15
別に「蘊蓄合戦」じゃないだろ
より正しい詳しい知識を持っていた方がいいってだけのことじゃないの
たとえば初心者向け入門書の説明によくある「おまじない」ってのを
そのままずっと「オマジナイ」としてしか認識しないままだったら
マトモな上達は到底望めない
307デフォルトの名無しさんsage2010/11/29(月) 07:45:30
Trick or Treat
308デフォルトの名無しさんsage2010/11/29(月) 09:42:08
Perlに限らないけど、他人のコード読むときに演算子の優先順位を知っておく必要があるよ。
309デフォルトの名無しさんsage2010/11/29(月) 19:57:51
=や==が複数回出てくる時はカッコをつける、が俺ルール
310デフォルトの名無しさんsage2010/11/29(月) 20:02:54
print()だけで考えてるから分からなくなる。
isString () とかの函数考えてみりゃわかる。

このときこうなる。
isString (x) ? "true" : "false" ;
関数の()のあとに?があって、これはもちろんisString()の判定結果を使うことを示している。

するとprint はただの命令のprint じゃなくて、括弧つきの関数のprintf()みたいな構文として解釈したほうが良い場合もある。
そうすればprint () と isString () の整合性を付けることができるし、
printに括弧をつけて?:を使った時の挙動の覚え方にも一貫性ができる。
311デフォルトの名無しさんsage2010/11/29(月) 21:57:31
>>310
良い場合も何も、Perl の print は元々項として扱える関数でしかないので、
PHP の echo のように言語構造に食い込んだ特別なものと捉える方がおかしい。
312デフォルトの名無しさんsage2010/11/30(火) 00:51:17
合言葉は、くくれカス
313デフォルトの名無しさんsage2010/11/30(火) 07:15:43
test("1回目",0);
test("2回目",0);
test("3回目",0);

sub test {
my $str =shift;
my $flag=shift;
my $last="";
print "初期化直後last:$last\n";
my $last = "hoge" if($flag);
print "ifで代入後last:$last\n\n";
$last = $str;
return 1;
}

このプログラム、どんな挙動をすると思いますか?
1時間ほどハマりました。バグでしょうか。
314デフォルトの名無しさんsage2010/11/30(火) 08:28:35
そんな時のための
use warnings;
315デフォルトの名無しさんsage2010/11/30(火) 08:49:19
「perlsyn - Perl の文法」より
ttp://argrath.ub32.org/perldocjp/5.10.0/perlsyn.html

> 注意: (my $x if ... のような) 条件構造やループ構造で修飾された my 文の振る舞いは
> *未定義*
> です。 my 変数の値は undef かも知れませんし、以前に代入された値かも知れませんし、
> その他の如何なる値の可能性もあります。 この値に依存してはいけません。
> perl の将来のバージョンでは現在のバージョンとは何か違うかも知れません。
> ここには厄介なものがいます。

おまけに同一スコープ内での二重定義だし。
まあバグはバグでもPerlのバグではなく >>313 が書いたコードのバグですね。
316デフォルトの名無しさんsage2010/11/30(火) 09:01:55
そもそもキミが何をやりたいのか、どんな結果を望んでるのかわからない以上、
my $last = "hoge" if($flag);
この行の my を除く以外は正常動作としかいえない。
317デフォルトの名無しさんsage2010/11/30(火) 09:02:51
と書いたものの、もしかして $last は、C でいうところの static な変数を希望してる感じ?
318デフォルトの名無しさんsage2010/11/30(火) 09:05:15
>>313
>思いますか?
じゃねーよ。
結論をきちんと書け。めんどくせえな。
319デフォルトの名無しさんsage2010/11/30(火) 09:13:03
my $last="";
これを外にだしておけ
320デフォルトの名無しさんsage2010/11/30(火) 13:33:52
my $last = "hoge" if($flag); はif($flag){my $last = "hoge";}と同じだ。
だから>>313の様に$flagが常に0の場合はこのブロックの中身が実行されることはない。
よって$lastには何の影響も与えないのでは?
321デフォルトの名無しさんsage2010/11/30(火) 13:40:26
>>313
お前は何を言っているんだ
322Perl拙者 ◆Rl9IVpmLvE sage2010/11/30(火) 13:45:10
>>313
コポォwww
323デフォルトの名無しさんsage2010/11/30(火) 14:09:29
>>320
use strict;
use warnings;

my $test = 1;
my $test = 5 if 0;
print $test;


実行すれば分かる。
324デフォルトの名無しさんsage2010/11/30(火) 15:04:40
>>320
変数スコープの解釈はコンパイル時に行われるから条件文には左右されない。
以下のように if 0 としてコンパイル時の最適化で文自体が消えるようにしても、
二度目の my 宣言の後では (Perl 5.12.2 では) state 宣言された変数のような挙動を示す。

use strict;
use warnings;
sub foo {
  my($bar, $baz, $flag) = @_; print "1: bar[$bar] baz[$baz]\n";
  my $bar if 0; $bar ||= 'BAR?'; print "2: bar[$bar] baz[$baz]\n";
  my $baz if $flag; $baz ||= 'BAZ?'; print "3: bar[$bar] baz[$baz]\n";
  tr/?/!/ for $bar, $baz;
}
foo(3,4); foo(5,6); # print "4: bar[$bar] baz[$baz]\n";
325デフォルトの名無しさんsage2010/11/30(火) 15:17:18
>>313,315
初期化直後last:
ifで代入後last:

初期化直後last:
ifで代入後last:

初期化直後last:
ifで代入後last:

普通にこういう出力じゃねーの、と思ったが違うのか。これは微妙。
後置ifが偽でもそのステートメントが影響を及ぼす事があるんだな。
いやいや、及ぼしちゃ駄目だろ。
326デフォルトの名無しさんsage2010/11/30(火) 16:45:47
みんな >>315 を読んでくれよ
327Perl戦士 ◆VFDr/hV3dI sage2010/11/30(火) 16:49:14
328デフォルトの名無しさん2010/11/30(火) 17:26:29
どなたかperlでTwitterAPI動かしていませんか?昨日から検索機能が急にうまくうごかなくなったのですが、そのような現象に心当たりありますか?
329デフォルトの名無しさんsage2010/11/30(火) 17:42:01
>>328
これとか?
ttp://twitter.com/#!/twedasuke/status/7245192558026753
330デフォルトの名無しさんsage2010/11/30(火) 17:59:40
>>313
もうちょっと奇怪にしてみたよ。
>>315の通り未定義なんだろうけど…。
use strict;
use warnings;

test("1回目");
test("2回目");
test("3回目");
exit;

sub test {
my $str = shift;
my $flag;
my $last if ($flag);
print "last:", ($last || ''), "\n";
$last = $str;
}
331デフォルトの名無しさんsage2010/11/30(火) 18:33:01
あいmyな動作だねぇ
332デフォルトの名無しさんsage2010/11/30(火) 18:35:39
結局何が言いたいorやりたいんだ?
333デフォルトの名無しさんsage2010/11/30(火) 18:38:12
me too
334デフォルトの名無しさんsage2010/11/30(火) 18:38:12
未定義な動作ってのに初めて出会ってはしゃいでるんだろ。
生暖かく見守ってやろうぜ。
335330sage2010/11/30(火) 19:00:05
ああ、私は>>313と別人ね。
これはエラーで検出していいレベルだけど、なんで放置されるんだろうね。
336デフォルトの名無しさんsage2010/11/30(火) 19:02:13
クス
337330sage2010/11/30(火) 19:10:51
一応perlcriticで検出可能。マンドクセ。
338デフォルトの名無しさんsage2010/11/30(火) 23:59:04
perl 5.12.2 使ってるだども、5.10 のリポジトリって使っていいのかしら?

モジュールをインストールするときは ppm は ppm で、とか CPAN は CPAN で片方に統一とかしなくていいんですよね?
339デフォルトの名無しさんsage2010/12/01(水) 01:34:46
>>313
> my $last = "hoge" if($flag);
偽判定だから、代入されるワケがない。
if (defined $flag)なら、0でも空文字でも真判定されるよ。
思わぬ動作ではあるだろうけど、そもそもコードが論外レベルに寝とぼけてる。
340デフォルトの名無しさんsage2010/12/01(水) 02:06:39
代入されるワケがないのに代入されるって話でしょ
341デフォルトの名無しさんsage2010/12/02(木) 13:11:41
javaのnative2asciiのような処理をしたいのですが
漢字を \uXXXX 形式には変換でしました。
s/([\x{0080}-\x{FFFF}])/sprintf '\\u%04x',ord($1)/eg;
結果 "▼" ⇒ "\u25bc"

この逆がどうもうまく逝きません。
期待する結果 "\u25bc" ⇒ "▼"
自分で書いてみたコード
s/\\[uU]([0-9A-fa-f]{4})/chr(0x$1)/eg;
s/\\[uU]([0-9A-fa-f]{4})/chr('0x'.$1)/eg;
s/\\[uU]([0-9A-fa-f]{4})/\x{$1}/eg;
ぜんぶダメです。玉砕です。助けてください。
342デフォルトの名無しさんsage2010/12/02(木) 14:53:19
s/\\[uU]([0-9A-Fa-f]{4})/chr(oct('0x'.$1))/eg;
343341sage2010/12/02(木) 16:06:53
>>342
神!
344デフォルトの名無しさんsage2010/12/02(木) 16:08:17
345デフォルトの名無しさんsage2010/12/02(木) 16:10:09
s/\\u([\da-f]{4})/chr(eval("0x$1"))/ieg;
346デフォルトの名無しさんsage2010/12/02(木) 16:23:01
補足、>>345 は他の方法も提示してみた、というか作ってみただけ。
evalは遅いらしいのでなるべくなら使わん方がええかも。
347デフォルトの名無しさんsage2010/12/02(木) 16:26:09
うん
348デフォルトの名無しさんsage2010/12/02(木) 16:36:38
Benchmark: timing 100000 iterations of 342, 345...
342: 0 wallclock secs ( 0.32 usr + 0.00 sys = 0.32 CPU) @ 312500.00/s (n=100000)
(warning: too few iterations for a reliable count)
345: 2 wallclock secs ( 1.47 usr + 0.00 sys = 1.47 CPU) @ 68027.21/s (n=100000)

うん
349デフォルトの名無しさんsage2010/12/02(木) 17:26:13
でもevalはコード自動生成という夢を与えてくれる!
350デフォルトの名無しさんsage2010/12/02(木) 19:03:27
まあ覚えといて損はないよね eval
最後の手段にとっておくべきだろうけど
351Perl忍者 ◆M5ZWRnXOj6 2010/12/02(木) 19:56:12
evalはどういうときに使うでしょう


答えられないやつは、ダメです
352デフォルトの名無しさんsage2010/12/02(木) 19:58:18
てぴてぴてっぴー
353Perl忍者 ◆M5ZWRnXOj6 2010/12/02(木) 19:59:35
答えられないのですか
354Perl忍者 ◆M5ZWRnXOj6 2010/12/02(木) 20:00:21
早く誰か答えてみてください

わからないんですか?・・・
355PHP忍者 ◆vx6KgJyjvE sage2010/12/02(木) 20:02:40
フッ…貴様とここで会うとは
356Perl忍者 ◆M5ZWRnXOj6 2010/12/02(木) 20:03:35
久しぶりだな

進捗状況はどうだ
357デフォルトの名無しさんsage2010/12/02(木) 20:05:13
何この流れ
358Perl忍者 ◆M5ZWRnXOj6 2010/12/02(木) 20:06:29
お前とはあの、夜の繁華街の裏路地以来だな

絡まれてた派遣社員を、助けてたなお前は

見てたぜあのとき

絡んでた3人のプログラマーに

「・・・やめないか、土方。」

と言って

「図解プログラミング PHP+MySQL裏拳!」 を噛ましてたあのすごさ
なかなかやるよな君も

最後は 
「持っててよかった、基礎からのMySQL。」

と捨て台詞はいてさっていったが
359デフォルトの名無しさんsage2010/12/02(木) 20:33:09
今週もぽっちで寂しかった。まで読んだ。
最近こいつの電波文を解読できるようになってきた自分が怖いw
360デフォルトの名無しさんsage2010/12/03(金) 06:52:10
tune a fishって
  魚に芸を仕込む
  魚を躾する
という日本語訳でいいのかね?
361デフォルトの名無しさんsage2010/12/03(金) 07:00:19
たしかエキスパートCプログラミングでは「魚を飼いならす」と訳してた
362デフォルトの名無しさんsage2010/12/03(金) 22:22:59
www:mechnizeを使っているのですが
下記のようなリンクをクリックするにはどうやったらいいのでしょうか?

<img src="http://xxx/xxx.gif" onclick="xxxxxxxx()">
363デフォルトの名無しさんsage2010/12/03(金) 23:43:10
CGIゲームを運営してるものです
処理の動作が多いとこだけ軽くさせるためにPHP化させたいんだけど
DBの受け渡しさえできればCGIとPHPと混合させても動きますか?
混合させてる人とかいますか?
364デフォルトの名無しさんsage2010/12/03(金) 23:53:55
PHP化しさえすれば軽くなると思ったら大間違い

カモヨ
365デフォルトの名無しさんsage2010/12/04(土) 00:37:38
まずはCore i7にしてみる。
366デフォルトの名無しさんsage2010/12/04(土) 00:41:30
mod_perlで高速化させればいいだろ
後スレ違い

>>1
367デフォルトの名無しさんsage2010/12/04(土) 06:08:05
今気付いた。
CGIはWebProgに行けとは書いてあるが、mod_perlについては書かれてないんだなw
368デフォルトの名無しさんsage2010/12/04(土) 08:22:02
wperlなのに黒い窓が一瞬出るのは何だろう
369デフォルトの名無しさんsage2010/12/04(土) 17:03:59
この後、空白行を削除したいのですがどうしたらいいですか?
@line =<>;
370デフォルトの名無しさんsage2010/12/04(土) 17:15:57
@line = grep(!/^\n/,@line);
371デフォルトの名無しさんsage2010/12/04(土) 17:16:22
てきとーに
@line = grep{!/^$/} @line;
といってみる
372デフォルトの名無しさんsage2010/12/04(土) 17:20:17
>>370,371
grep ってそうやって使うんですか。勉強になりました。
これでもOKですか?

@line = grep(!/^(\s| )*\n/,@line);
373デフォルトの名無しさんsage2010/12/04(土) 17:29:19
スペースだけの行も削除したいのならそっちだね…といいかけたが
全角空白?それエスケープしなくて通るのかな?
374デフォルトの名無しさんsage2010/12/04(土) 18:36:36
@line = grep(!/^[  ]*\n/,@line);
375デフォルトの名無しさんsage2010/12/04(土) 18:55:20
use utf8 してて \t 残すのかどうかは質問者さんしか知らない。
376デフォルトの名無しさんsage2010/12/05(日) 08:08:16
たしかにおかしいなw
377デフォルトの名無しさんsage2010/12/05(日) 08:09:38
誤爆…
378Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 11:35:36
Core-i7にすればすべて解決する
379デフォルトの名無しさんsage2010/12/05(日) 11:39:33
新しいPCに変えたのかな?
380PHP忍者 ◆vx6KgJyjvE sage2010/12/05(日) 11:40:15
>>378
Corei7買ったんだね!おめでとう!
381Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 12:04:00
Perlのために
HD2TB Coreーi7 NVIDA GTX460にしました

作業効率が5000%向上しました
382Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 12:04:58
僕が書いた50ステップぐらいのプログラムが早くなりました
383デフォルトの名無しさんsage2010/12/05(日) 12:08:38
50ステップw
384Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 19:19:33
IO::AllでUserAgent名をかえるほうほうおしえてください

http://search.cpan.org/~ingy/IO-All-0.41/lib/IO/All.pod

ここ見ても乗ってませんでした・・・
385Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 19:31:51
lwpの方確認してませんでしたできそうです^^w
386Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 19:32:49
IO::All::LWP

uaで解決しました

ありがとうございましたm(-_-)m
387デフォルトの名無しさんsage2010/12/05(日) 19:43:34
独り言がTwitterでどうぞ。
388デフォルトの名無しさんsage2010/12/05(日) 19:49:09
UserAgentってことはhttpとかなんだろうけどそれはIO::All::LWPにお任せ
なので、そっちのマニュアル調べればいいんじゃないか。
389Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 20:31:47
っでIO::Allでgetlineするときどうやってua設定すんの
教えて

IO::All::LWPで
uaってあるけどこれどう使んですか

my $ua=IO::All::LWP;
$ua->ua('Mozilla/4.0');

getlineでUserAgentを変えたいです
1行ずつの時です io->
このあとどうするかわからないです!!
http://search.cpan.org/~itub/IO-All-LWP-0.12/lib/IO/All/LWP.pm

#!/usr/bin/perl
use strict;
use IO::All;
use IO::All::LWP;
use LWP::UserAgent;
use HTTP::Request::Common;
my $io=io('http://ninja.com');
$io->ua('PerlNinja');
print $io->getline;

これはなんとなくダメとわかるんですが
"libwww-perl/5.834"
のままかわりませんでした



390Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 20:32:59
9時からオンラインゲームをやりたいので
早く教えてください
391PHP忍者 ◆vx6KgJyjvE sage2010/12/05(日) 20:38:34
あと三十分か…
誰も教えるなよ
392Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 20:44:44
頼む教えてくれ

既にIO::Allのgetlineでタイトル取得のスクリプトかいてあって
LWP::UserAgentのほうで書き直したくないんです

だから$io->getlineのほうでUserAgent変える方法教えてください

2chの題名が 「ようこそボボンハウスへ」になってしまうからかえたいです

早くしてクレー
393Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 21:00:24
後で教えてください
394Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 21:27:27
はぁ
395Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 21:36:58
#!/usr/bin/perl
use strict;
use IO::All;
use IO::All::LWP;
use HTTP::Request::Common;
my $ua=io('http://192.168.1.2/a');
$ua->ua('yahoo');
print $ua->getline;


libwww-perl/5.834のままです
教えてください
何が悪いんですか 

ua

Set or get the user agent object (LWP::UserAgent or a subclass).
If called with a list, the list is passed to LWP::UserAgent->new.
If called with an object, the object is used directly as the user agent. Note that there is a default user agent if no user agent is specified.
って書いてありますが
396Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 21:40:22
うおおおおおおおおおおおおO!
きたああああああああああああああああああ!

#!/usr/bin/perl
use strict;
use IO::All;
use IO::All::LWP;
use HTTP::Request::Common;
my $k=new LWP::UserAgent;
$k->agent('yahoo');
my $ua=io('http://192.168.1.2/a');
$ua->ua($k);
print $ua->getline;

でできました

uaにlwqに設定したagentを渡せば
設定されました
キターーー
397Perl忍者 ◆M5ZWRnXOj6 2010/12/05(日) 21:41:21
41分の遅延ですがネトゲはじめます
398デフォルトの名無しさんsage2010/12/06(月) 18:28:45
ファイル名が特定の文字列で始まるファイルを読み込みたいのですが
ファイル名指定に正規表現が使えない?様で上手くいきません

何か方法は無いでしょうか
399デフォルトの名無しさんsage2010/12/06(月) 18:37:33
普通globで用が足りるだろ。
400デフォルトの名無しさんsage2010/12/06(月) 18:38:21
@files = grep { /PATTERN/ } readdir $dir; # opendir とか略

こういうのじゃダメなの?open my $fh, '<', '^abc\d{8}.+$' とかするとそりゃコケる。
401デフォルトの名無しさんsage2010/12/06(月) 18:41:19
>>398
正規表現が使えないというのは文字コードが原因か?
というかそのコードを出さないと何もわからないよ?
402Perl忍者 ◆M5ZWRnXOj6 2010/12/06(月) 19:14:50
globじゃ正規表現つかえねえよこら

400みたいにやれこら
403デフォルトの名無しさんsage2010/12/06(月) 23:48:55
>>398
globに与えるのは正規表現とは違う。
glob("/path/to/特定の文字列*")でOK。
戻り値に対して>>400のようにgrep掛けてそう言ってるのならフルパスになってるとか。
404デフォルトの名無しさんsage2010/12/07(火) 01:08:09
globはファイル名やpathにスペースが入ってるとうまくいかないのでちうい
405デフォルトの名無しさん2010/12/07(火) 05:00:36
perldocってなんて読むのかな。
いつも「ぱーるどっく」って読んでるけど不安。
406デフォルトの名無しさんsage2010/12/07(火) 11:36:16
他にどんな読み方があるかなあ
407デフォルトの名無しさんsage2010/12/07(火) 12:03:43
脳内だと「ぱるどく」だったりする。
408デフォルトの名無しさんsage2010/12/07(火) 12:24:59
パール犬
409Perl忍者 ◆M5ZWRnXOj6 2010/12/07(火) 14:05:04
普通に
パールドック げは
410デフォルトの名無しさん2010/12/07(火) 20:50:33
X11::Protocolをfindだけしてみたのですが、Cのプログラムが見当たりません。
xlibは使っていない? ひょっとしてPerlが直接Xプロトコルを話している!?
ソース嫁とか、今は言わないでください。
でも、Perlが直接Xプロトコルを話しているなら、本気で読みます。
411410sage2010/12/07(火) 21:11:40
ほぼ自己解決しました。間違えていたら教えてください。
grep IO::Socket `find`したら、X11::Protocol::Connection::Socketがこれをuseしていることがわかりました。
よく考えればX11::Protocolという名前もそれっぽいし、xlibには依存していないみたいですね。

素敵です。生のXって、APIじゃなくてプロトコルなんですね。
The X-Windows Disasterなんてさんざんなことを言われていますが、
この基本設計は素晴らしいし、それをそのまま生かした(と思われる)X11::Protocolの作者も偉い。
412デフォルトの名無しさんsage2010/12/08(水) 19:03:36
$test{'1'} = 'a';
$test{'2'} = 'a';
$test{'10'} = 'a';
$test{'11'} = 'a';

sort(keys(%test));

こうしたときの結果が
1 10 11 2 ってなるんですが、これを 1 2 10 11 とソートするにはどうすれば。。。
sort { int() <=> int() }
みたいにするしか無いんでしょか?
413デフォルトの名無しさんsage2010/12/08(水) 19:22:23
sort { $a <=> $b } keys %test
414デフォルトの名無しさんsage2010/12/11(土) 05:41:26
ウェブページのスクリーンショットをとりたくて
ttp://maaash.jp/perl/wwwmechanizefirefox%E3%81%A7%E7%B0%A1%E5%8D%98%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/
と同じソースコードを試しました。しかし、
my $mech = WWW::Mechanize::Firefox->new();
とするだけで、

Failed to connect to , problem connecting to "localhost",
port 4242: Connection refused at /usr/lib/perl5/site_perl/5.10/MozRepl/Client.pm line 144

となります。もちろんWWW::Mechanize::Firefoxはインストール済みです。
WWW::Mechanize::Firefox is up to date (0.40).

どうやったらいいのでしょうか?
415デフォルトの名無しさんsage2010/12/11(土) 05:46:38
そのエラーメッセージ中学生レベルの英語だろ
416デフォルトの名無しさんsage2010/12/11(土) 12:44:48
mozreplが動いてないんじゃないの?4242
417デフォルトの名無しさんsage2010/12/11(土) 14:04:48
>>416
でもこれだけでエラーになるものですか?
my $mech = WWW::Mechanize::Firefox->new();
418デフォルトの名無しさんsage2010/12/11(土) 14:05:54
誰か416のコードを動かして報告ください。
419デフォルトの名無しさんsage2010/12/11(土) 14:24:41
mozreplは動いていますか?
420デフォルトの名無しさんsage2010/12/11(土) 15:09:26
>>419
firefoxの拡張なのですか?
capanにあったMozreplのことだと思っていました。
今インストールしました。
https://github.com/bard/mozrepl/wiki/
firefoxを起動し、ツール - Mozrepl - start しました。
次にコマンドプロンプトから
telnet localhost 4242
しました。しかし、一つキーを押すだけで挙動不審なコマンドプロンプトになってしまいました。
とても使えそうなものではありません。
cygwinからtelnet localhost 4242としても反応なし。
ここでもう一回実行してみたらエラーが変わりました。(test1207.plは>>414のコード)
$ perl test1207.pl "yahoo.co.jp" yahoo.png
command timed-out at /usr/lib/perl5/site_perl/5.10/MozRepl/Client.pm line 186
421デフォルトの名無しさんsage2010/12/11(土) 15:15:33
www.yahoo.co.jp な
422デフォルトの名無しさんsage2010/12/11(土) 15:31:47
>>421
両方ともダメでした。

$ perl test1207.pl "www.yahoo.co.jp" yahoo.png
command timed-out at /usr/lib/perl5/site_perl/5.10/MozRepl/Client.pm line 186

$ perl test1207.pl "http://www.yahoo.co.jp" yahoo.png
command timed-out at /usr/lib/perl5/site_perl/5.10/MozRepl/Client.pm line 186
423デフォルトの名無しさんsage2010/12/11(土) 17:11:53
perl が外に行くのをファイヤーウォールで遮断されてるとかは?
424デフォルトの名無しさんsage2010/12/11(土) 19:35:56
>>423
ダメでした。
425デフォルトの名無しさんsage2010/12/11(土) 20:20:03
ダメでしたってwwwwwww
どこをどうやってみたけどダメだったぐらい書けよw
お前が良しと思ってるやり方がダメかもしんないでしょ?
426デフォルトの名無しさんsage2010/12/11(土) 20:27:41
これでいいですか。
http://www.dotup.org/uploda/www.dotup.org1294646.jpg
427デフォルトの名無しさんsage2010/12/11(土) 21:06:21
一言 「ファイヤーウォールは無効にしても駄目でした」 で済むだろ?どんだけゆとりなの?バカなの?
428デフォルトの名無しさん2010/12/11(土) 21:08:07
何でそんなに喧嘩腰なのお前ら
429デフォルトの名無しさんsage2010/12/11(土) 21:15:22
ファイヤーフォールの遮断なんてコンセント付けてあるかどうか確認する次元だろ。
どうだめとかあるのか?
430デフォルトの名無しさんsage2010/12/11(土) 22:28:52
iptablesの設定はちゃんとやったのか?と聞くとちゃんとやったと言うが、
結局つながらん原因はそれ、とかあまりにありふれた事態。
431デフォルトの名無しさんsage2010/12/11(土) 23:07:23
ダメでした
432Perl忍者 ◆M5ZWRnXOj6 2010/12/11(土) 23:14:22
なんでこんな低脳なの?
433デフォルトの名無しさんsage2010/12/11(土) 23:14:33
もう無視しろよw
434デフォルトの名無しさんsage2010/12/11(土) 23:16:34
mozreplはlocalhostにつなぐ>>414んだからファイアーウォール云々はあまりにも的を得ていない
435デフォルトの名無しさんsage2010/12/11(土) 23:16:45
perl忍者の方がマシなレベル
436デフォルトの名無しさんsage2010/12/12(日) 08:35:35
やってみた。どうやらCygwin上からだと失敗するみたいだ。
原因は MozRepl::Client.pm 0.03。
/usr/lib/perl5/site_perl/5.10/MozRepl/Client.pm の 183〜184行目に
> ### adhoc
> $command = join(" ", split(/\n/, $command)) if ($^O eq "cygwin");
というのがあるが、この184行目を無効にすると、サンプルコードもうまく動くようになった。
なんで作者がこんな「adhoc」なコードを入れたのかはよくわかりません。なんでだろうね…。
437デフォルトの名無しさんsage2010/12/12(日) 08:58:41
いやいや、「english」を文章に「insert」すると超「cool」だねえ!
438デフォルトの名無しさんsage2010/12/12(日) 09:01:09
× english
○ English
439デフォルトの名無しさんsage2010/12/12(日) 09:03:33
○Ingurisshu
440デフォルトの名無しさんsage2010/12/12(日) 09:20:15
cygwin とか初めて出す情報だね キュフフ
441デフォルトの名無しさんsage2010/12/12(日) 09:32:18
>>440
> cygwin とか初めて出す情報だね キュフフ
>>420に出とるがな。
442Perl忍者 ◆M5ZWRnXOj6 2010/12/12(日) 10:11:33
数ヶ月前の発言みると

自分こんな究極に痛い発言してたの?すげえ痛い!って思うことあるよな
443デフォルトの名無しさんsage2010/12/12(日) 10:15:41
特にお前。
444デフォルトの名無しさんsage2010/12/12(日) 11:16:22
>>442
わかってるじゃねえか
445デフォルトの名無しさんsage2010/12/12(日) 15:21:02
>>442-444が自演だったらすげえ痛いな
446443=PHP忍者 ◆vx6KgJyjvE sage2010/12/12(日) 15:26:30
>>444は自演かもな
447デフォルトの名無しさんsage2010/12/12(日) 22:15:11
「忍者」名乗ってる奴ら、忍者の意味わかってんのか。
忍者なら忍者らしく、なるべく目立たないようじっと忍んでろ。
448デフォルトの名無しさんsage2010/12/13(月) 10:05:10
忍者たるものギンギラギンにさりげなく、だな
4491772010/12/13(月) 12:09:39
>>184
どうもありがとうございます。
utf8で解釈できないヘンなデータにも
文句を言わなくなりました。

readじゃなくてopenのときに設定する
必要があることがわからなくて、ちょっと
ひっかかりましたが、それ以外はうまく
いきました。

ちなみに、STOP_AT_PARTIALって
どんなフラグですか?
ぐぐってもEncode.pmを読んでも、
ヒントさえ見つかりません。orz

450Perl忍者 ◆M5ZWRnXOj6 2010/12/13(月) 16:53:30
あの質問なんですが
444のレスが なんで自演ってわかったか教えてください
451デフォルトの名無しさんsage2010/12/13(月) 17:37:12
あるかどうか分からない@arrayと要素数の多い@array2があります。
@arrayがあれば@arrayをforeach、なければ@array2をforeachさせたくこういうコードを書きました。
foreach (@array || @array2) {処理;}
その結果、@arrayがない場合はうまく@array2がforeachされたのですが、ある場合には@arrayの要素数が返ってしまいました。
なぜ@arrayがない場合はうまく動くのにある場合はこうなってしまうのでしょうか?
||の仕様で、前方の配列が真だった場合はスカラーとして返し、後方の配列が真だった場合は配列として返す、となっているのでしょうか。
その仮定が正しいのかどうか、こういう風に書いて試してみました。
foreach ((@array && (0 || @array)) || @array2) {処理;}
しかし結果は変わりませんでした。

また、どのように書くのがスマートでしょうか?
今はこのようにしているのですが、参照を取って復元というのはやや微妙です(@array2は実際の所keys %hashです)
my $ref = (@array && \@array) || [keys %hash];
foreach (@$ref) {処理;}


452 :デフォルトの名無しさん [sage] :2010/12/13(月) 17:37:13
>>451
http://perldoc.jp/docs/perl/5.6.1/perlop.pod
|代入のために二つの集合を選択するためには使うべきではない
|@a = @b || @c; # this is wrong
|@a = scalar(@b) || @c; # really meant this
|@a = @b ? @b : @c; # this works fine, though


453 :デフォルトの名無しさん [sage] :2010/12/13(月) 17:37:14
>>452
配列の選択に||を使えう事は出来ず、?を使えば良いのですね。
@arrayと2回書くのは多少あれですが
foreach (@array? @array: keys %hash) {処理;}
とすることにしました。レスありがとうございました。
452デフォルトの名無しさんsage2010/12/13(月) 17:40:27
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
453デフォルトの名無しさん2010/12/13(月) 18:17:19
BashのBrace Expansionが便利でしかも速いのでよく使ってるんだけど
これをPerlで簡単に真似ることは出来ますか?
454デフォルトの名無しさん2010/12/13(月) 18:19:37
CGI::Application なんてものがあるんですね。
-------
プログラミングPerl vol1,2
Perlベストプラクティス
オブジェクト指向Perlマスターコース
-------
を読破したのに知らなかったよー(泣)

なんて思いをさっきしたんですが、他にも「これ知っとくといいよ」ってありますか?
455デフォルトの名無しさんsage2010/12/13(月) 19:08:41
>>453
組み込み関数のglobでどう?
456Perl忍者 ◆M5ZWRnXOj6 2010/12/13(月) 19:26:05
読破してるのにしらないとは
相当ごみだろ

おれよりごみじゃん

おれよりごみなやつはほんとに終わってるとおもう

ごみより終わってるってことは ほんとにそうおもうよ
457デフォルトの名無しさんsage2010/12/13(月) 19:32:47
>>454
CPANの人気モジュールランキングみたいなページがどこかにあったから探してみるといいかも。
正確にはレポートされたテスト数でのランキングみたいな感じだったと思う。
URLが見つからない…
458Perl忍者 ◆M5ZWRnXOj6 2010/12/13(月) 19:36:47
これだからWEBの立ち回りがへたくそなやつは
459デフォルトの名無しさん2010/12/13(月) 19:59:44
ごみですね。いくらperlについて勉強したって、結局のところ
あまり意味がない。
460Perl忍者 ◆M5ZWRnXOj6 2010/12/13(月) 20:20:28
くそなやつほど マジにならずヘラヘラしたり 意味がないとかいいますよね
461デフォルトの名無しさんsage2010/12/14(火) 07:33:52
>>455
globで出来るんですね初めて知りました
ただ速度がBashに比べて少し遅かったです
$ time perl -e '@A=<110001001110001101{0,1}{0,1}{0,1}{0010000101{0,1},101000010{0,1}{0,1}}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}0000{0,1}{100,0{0,1}{0,1}}>;'
real 0m31.527s
user 0m3.853s
sys 0m25.817s

$ time echo 110001001110001101{0,1}{0,1}{0,1}{0010000101{0,1},101000010{0,1}{0,1}}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}0000{0,1}{100,0{0,1}{0,1}} > /dev/null
real 0m4.876s
user 0m4.492s
sys 0m0.047s

cygwin CelM 1.86GHz 2GB
速いパソコンだとこれが一瞬で終わるのかな?
462デフォルトの名無しさんsage2010/12/14(火) 09:27:10
>>461
sysで時間食ってるのでシステムコールトレースしてみたけどperlは
展開して得られた名前でいちいちファイルの存在確認をしてるんだな。
bashはそんなことはしないみたい。有無で結果が変わるってわけでも
ないので無駄な処理のような気がするけどなんでだろう。

CPANのString::Glob::Permuteは文字列操作だけなのでいいかも?
463デフォルトの名無しさんsage2010/12/14(火) 10:04:43
>>462
String::Glob::Permuteいいですね。ありがとうございました。Bashにかなり近いところまで速くなりました。
ひとつ残念なのはブレースのネストが上手く展開されない点ですが、ここはPerlでプログラムして補うべきでしょうか

$ BRACEEXP='{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}'

$ time eval $BRACEEXP 2>/dev/null
real 0m20.161s
user 0m18.455s
sys 0m0.296s

$ time perl -e 'use String::Glob::Permute qw(string_glob_permute);@_=string_glob_permute($ARGV[0])' $BRACEEXP
real 0m30.391s
user 0m27.846s
sys 0m0.280s
464デフォルトの名無しさんsage2010/12/14(火) 12:41:43
>>449
バイト列をutf8で解釈しようとしたとき、おかしな場合に中断するものだと思ってたけど、
試してるうちに、わからなくなってきた。

Encode::utf8::decode_xsやEncode::utf8::decode_xsが呼び出してる
process_utf8が使ってる(ソースファイルはEncode.xs)。
465Perl忍者 ◆M5ZWRnXOj6 2010/12/14(火) 13:17:07
だれかテーブル設計してくれ
466デフォルトの名無しさんsage2010/12/14(火) 16:02:52
          /|\
           |
           |
           |

  ──‐  ./ ̄| ̄ヽ   │
        |  │  |   人
  (____  ヽ_丿 ノ  /  \
467Perl忍者 ◆M5ZWRnXOj6 2010/12/14(火) 17:35:33
なんてかいてあんだ

こxx↑
468デフォルトの名無しさんsage2010/12/14(火) 21:39:19
こすぎ
469デフォルトの名無しさん2010/12/14(火) 23:20:36
Perlで日本語文字列の先頭2文字を取得したいです。
この書き方でEUCの場合は、うまくいくのですが、UTF-8の場合はうまく処理できずに
2文字目が文字化けを起こします。

my @list = split(//,$text);
$text = $list[0] . $list[1]. $list[2] . $list[3];

漢字コードがUTF-8の場合にはどうかけばいいのでしょうか?
470デフォルトの名無しさんsage2010/12/14(火) 23:22:39
use utf8してsubstrで最初から二文字指定すればいいだろ
471デフォルトの名無しさん2010/12/14(火) 23:22:40
すみません、

$text = $list[0] . $list[1]. $list[2] . $list[3] . $list[4]. $list[5];

でうまくいきました。
472デフォルトの名無しさんsage2010/12/15(水) 01:14:35
それたまたまうまくいっただけ。utf8で必ずしも1文字が3バイトに
エンコードされるとは限らないのでそれではうまくいかない場合も
ある。ふつうdecodeしてからsubstrだろ。
473デフォルトの名無しさん2010/12/15(水) 18:52:27
>>471の処理はまずいのでsubstrを使うようにします。

あと、今まで文字列はEUCで、全角半角変換を下のようにjcode.plを使ってやっていたのですが、

&jcode::tr(\$my_name, '0-9A-Za-z−' , '0-9A-Za-z-');

UTF-8だと、下のように直接書いてもかまわない。つまり、Jcodeは必要ないということでいいんでしょうか?

$my_name =~ tr/0-9A-Za-z−/0-9A-Za-z-/;
$my_name = encode('utf-8', $my_name);

474デフォルトの名無しさんsage2010/12/15(水) 19:37:23
配列の要素をキーとして要素は存在しないハッシュを作るにはどうすればよいですか?
475デフォルトの名無しさんsage2010/12/15(水) 19:39:24
>>474
@hash{@array} = ();
476デフォルトの名無しさんsage2010/12/15(水) 19:54:32
>>475
ありがとうございます
477デフォルトの名無しさんsage2010/12/15(水) 20:12:24
>>475
エスパーあらわる!

つか、それが期待通りなのか?
478デフォルトの名無しさんsage2010/12/15(水) 20:14:10
>>477
そんなにエスパーか?
keyだけあってvalueがないハッシュのことだろ?
479デフォルトの名無しさんsage2010/12/15(水) 22:12:39
% じゃなくて @ だが・・・
480デフォルトの名無しさんsage2010/12/15(水) 22:23:07
サカナくんのニュースを見ながらなんとなく書いてみたら動いたので貼り付けw

use strict;
use warnings;

my @array = qw(a b c d e);
my %hash = ( @array => [] );


print defined($hash{'e'}) ? ref($hash{'e'}) . "\n" : "not defined\n";
print defined($hash{'f'}) ? ref($hash{'f'}) . "\n" : "not defined\n";

481デフォルトの名無しさんsage2010/12/15(水) 23:15:40
>>479(array) = (array)
>>480 print keys %hash
482デフォルトの名無しさんsage2010/12/15(水) 23:49:28
>>473
そうそう。そういうこと。

ちなみにJcode使ってるならjsubstrとかjfoldでも先頭2文字の切り出しはできてたはず。
483デフォルトの名無しさんsage2010/12/16(木) 00:00:15
>>479
「ハッシュのスライス」でググってみ
484デフォルトの名無しさんsage2010/12/16(木) 01:46:08
コピペで

my @hash{@array} = ();

ってやってもエラー出んじゃん。


と思ったら @array が未定義でした。
ごめんなさいw
485デフォルトの名無しさんsage2010/12/16(木) 05:06:11
perlfaq4
http://perldoc.jp/docs/perl/5.10.0/perlfaq4.pod
How can I remove duplicate elements from a list or array?
> my %hash = map { $_, 1 } @array;
> # or a hash slice: @hash{ @array } = ();
> # or a foreach: $hash{$_} = 1 foreach ( @array );
uniqの作り方のfaqに回答が載ってるってのは、おもしろいね。
私はmap派。

>>484
ハッシュスライスでググるといいよ。
486デフォルトの名無しさん2010/12/16(木) 20:44:43
perlは使ってる参考書によってコードの出来が違ってきそう(笑)

487デフォルトの名無しさんsage2010/12/16(木) 20:54:07
perlは使ってる脳みそによってコードの出来が違ってきそう()
488デフォルトの名無しさんsage2010/12/16(木) 20:56:44
それらはどの言語の本でも一緒だな
489デフォルトの名無しさんsage2010/12/16(木) 21:32:51
そこでpythonですよ
490デフォルトの名無しさんsage2010/12/16(木) 21:35:27
Ruby!
491デフォルトの名無しさんsage2010/12/16(木) 22:56:15
やり方はひとつじゃない
492デフォルトの名無しさんsage2010/12/16(木) 23:08:48
ワード用の文字もしくは終端
を正規表現で表すにはどうすればいいですか?
[\w$]だと終端がマッチしてくれなくて。
493デフォルトの名無しさんsage2010/12/16(木) 23:12:53
ワード用の文字って何だ?
マイクロソフトワードか?
494デフォルトの名無しさんsage2010/12/16(木) 23:16:18
いや単語用の文字ということでw
\wで表される文字全部という意味で使ってます。
495デフォルトの名無しさんsage2010/12/16(木) 23:21:52
何言いたいのかさっぱりわからんけど.$じゃだめなのか
496デフォルトの名無しさんsage2010/12/16(木) 23:32:24
\w\n$
にしたらマッチした……とかいうオチじゃないだろうな
497デフォルトの名無しさんsage2010/12/16(木) 23:33:19
具体例をあげると
abc[\w$]
としたときに
"abc(終端)" や "abcd" などはマッチして欲しいけど
"abc[" や "abc#" など\wで表せない文字が後ろにつくパターンは弾きたいということです。

しかし実際には[\w$]と書いたのでは
"abcd"にはマッチしてくれるけど"abc(終端)"のパターンがマッチしてくれないので
どう書けばいいのだろう?という質問でした。
498デフォルトの名無しさんsage2010/12/16(木) 23:37:03
貴方の言う終端とは何ですか?
499デフォルトの名無しさんsage2010/12/16(木) 23:43:26
もう、ゴールしてもいいよね

abc\w?$
500デフォルトの名無しさんsage2010/12/16(木) 23:43:46
>>498
改行もなにもない文字列の終端を意味しています。
501デフォルトの名無しさんsage2010/12/16(木) 23:47:41
>>499
それです!
ありがとうございました><
502デフォルトの名無しさんsage2010/12/17(金) 00:01:25
$は文字じゃないから[ ]の中に入れても無視されるという理解でいいんでしょうか。
503デフォルトの名無しさんsage2010/12/17(金) 00:36:14
というより [ ] の内と外では解釈の仕方がまったく異なるということ
/abc$/ なら $ は行末だけど
/abc[$]/ なら $ は $ そのもの
504デフォルトの名無しさんsage2010/12/17(金) 01:27:23
[] で括っても、クセでエスケープしちゃう
505デフォルトの名無しさんsage2010/12/17(金) 03:44:02
>>500
なら $ ではダメだな。

http://perldoc.jp/docs/perl/5.10.0/perlretut.pod
> "" =~ /^$/; # マッチ
> "\n" =~ /^$/; # マッチ。"\n" は無視される
>
> "" =~ /./; # マッチしない。キャラクタが必要
> "" =~ /^.$/; # マッチしない。キャラクタが必要
> "\n" =~ /^.$/; # マッチしない。"\n" 以外のキャラクタが必要
> "a" =~ /^.$/; # マッチする
> "a\n" =~ /^.$/; # マッチする。"\n" は無視される

http://perldoc.jp/docs/perl/5.10.0/perlreref.pod

それと \w や \d は UTF-8 フラグ付きの文字列だと全角英数字にもマッチする。
506デフォルトの名無しさんsage2010/12/17(金) 09:08:18
\b を避けてるのか?
507デフォルトの名無しさん2010/12/17(金) 10:26:40
JavaScript だと \b が日本語と英字で解釈が違う場合があって怖いんだけど、
perlでは問題ない?
508デフォルトの名無しさんsage2010/12/17(金) 11:02:07
utf8フラグ付きで、行末改行含まず、v5.10.1以降なら
/abc\p{PerlWord}?\z/

>>507
kwsk
509デフォルトの名無しさん2010/12/17(金) 14:42:01
こんな間違いをしたことがある(js)。

alert([
 '---',
 'jpan jp en'.match(/jp\b/),
 '日本 日 英'.match(/日\b/),
 '---'
]);
510デフォルトの名無しさんsage2010/12/17(金) 18:41:12
>>509
\bは、\wと\Wの間にマッチする。
'p'は\wにマッチするが、'日'は\wにマッチしない(\Wにマッチする)。
スペースは\Wにマッチする。
以上の理由だね。

perlは、use utf-8;すると、漢字は\wにマッチするので大丈夫。
511デフォルトの名無しさん2010/12/17(金) 22:49:36
Perlの処理で質問です.
以下のようなdatファイルを読み込み,
右側の数値が同じ場合,左側の数値をすべて足して(グループ化して)
出力する,といった処理がしたいのですが,
どのようにすればいいのでしょうか?

--1st_out.dat--
7 12
10 12
12 12
10 12
9 12
9 12
6 12
6 12
11 13
9 13
12 13
11 13
10 14
10 14
15 14
12 14
7 14

希望する出力結果

69 12
43 13
54 14
512デフォルトの名無しさんsage2010/12/17(金) 22:58:41
まずsplitを使います
513デフォルトの名無しさんsage2010/12/17(金) 22:59:28
次にハッシュでまとめます
<終わり>
514デフォルトの名無しさんsage2010/12/17(金) 23:30:29
twitterのハッシュタグはどこらへんがハッシュなんだ?
515デフォルトの名無しさん2010/12/17(金) 23:38:15
>>512-513
どういったコードを書けばよいのでしょうか?
516デフォルトの名無しさん2010/12/17(金) 23:38:24
>>510
おぉ。そうだったんだ・・。
517デフォルトの名無しさん2010/12/17(金) 23:50:03
my %h = ();
foreach(split(/\r?\n/, $data)){
 my($k,$v) = split(/ +/, $_);
 $h{$v} += $k-0;
}

foreach(sort {$a-$b} keys %h){
 print "$h{$_} $_\n";
}
518デフォルトの名無しさんsage2010/12/17(金) 23:52:12
open (FH , "dat.txt" ) ;

while (<FH>)
{
chomp ;
@a = split / /;
$h{$a[1]} += $a[0] ;
}
close (FH) ;

print %h ;
519デフォルトの名無しさん2010/12/17(金) 23:54:44
my %h = ();
while($data =~ /(\d+) (\d+)/g){
 $h{$2} += $1-0;
}
for(sort {$a-$b} keys %h){
 print "$h{$_} $_\n";
}
520512sage2010/12/17(金) 23:54:52
>>515
こういったコードを書きゃいいんだ!!
1st_out.datは適当にdat.txtとかなってる!
chompとかsplitとかの引数の省略がわかりゃ初心者脱出だ!
print %hは良く見てみればお望みの出力になってる!
出力ぐらいは自分でやれ!
521512sage2010/12/17(金) 23:56:59
間違った!
こういうコードってのは>>518みたいなまるでクズのようなコードだ!
ハッシュをまとめるってのは
$h{$a[1]} += $a[0] ;
だ!
そんくらいは理解してくれ!
何の統計か知らんか卒論落とすな!
522デフォルトの名無しさん2010/12/17(金) 23:57:29
あ、-0 要らないんだった。
523デフォルトの名無しさんsage2010/12/18(土) 00:02:07
どれが正しいのか分からんぞw
524デフォルトの名無しさんsage2010/12/18(土) 00:05:41
>>520
ありがとうございます.
でもこんな出力結果がでました.

211332610117914810142712253188346942352134316874410025422796508528424072411051269478614541589207349934511524844310619103
525512sage2010/12/18(土) 00:06:58
一番ただしいのはオレだ!
ファイル名も直したぞ!
コピペでいけるぞ!
print のとこは自分で工夫しろ!


open (FH , "1st_out.dat" ) ;

while (<FH>)
{
  chomp ;
  @a = split / /;
  $h{$a[1]} += $a[0] ;
}
close (FH) ;

print %h ;
526512sage2010/12/18(土) 00:09:32
>>524
それは
print %h;
の部分が悪いんだ!
そこ改良すればちゃんと意味が通るはずだ!

他の人のforeachでの出力を参考にしてくれ! >>517 >>519
改行やらが無いのが俺の手抜きだ!
もう寝る!!!!
527デフォルトの名無しさん2010/12/18(土) 00:13:15
>>526
しょぼーん(´・ω・`)
528デフォルトの名無しさん2010/12/18(土) 00:16:26
もっと奇抜なコードを書いてくれ
529デフォルトの名無しさんsage2010/12/18(土) 00:22:23
ワンライナーまだー
530デフォルトの名無しさんsage2010/12/18(土) 00:24:13
>>527
open (FH , "1st_out.dat" ) ;

while (<FH>)
{
chomp ;
@a = split / /;
$h{$a[1]} += $a[0] ;
}
close (FH) ;

foreach $k (sort {$a-$b}keys(%h)){
print "$k $h{$k}\n";
}
531デフォルトの名無しさん2010/12/18(土) 00:48:38
みなさま,ありがとうございます.
>>511の望み通りの出力結果を得ることができました.

ちなみに,以下のファイルの場合も同じことはできるのでしょうか?

--2nd_out.dat--
7 12 ワンピース
10 12 ワンピース
12 12 ワンピース
10 12 ワンピース
9 12 ワンピース
9 12 ワンピース
6 12 ワンピース
6 12 ワンピース
11 13 ナルト
9 13 ナルト
12 13 ナルト
11 13 ナルト
10 14 ブリーチ
10 14 ブリーチ
15 14 ブリーチ
12 14 ブリーチ
7 14 ブリーチ

希望する出力結果

69 12 ワンピース
43 13 ナルト
54 14 ブリーチ
532デフォルトの名無しさんsage2010/12/18(土) 00:55:30
mt %h;
open (my $fh ,">","1st_out.dat" ) ;

while (<$fh>)
{
  chomp ;
  @foo = split / /;
  $h{"$foo[1] $foo[2]"} += $foo[0] ;
}
close ($fh) ;

print %h ;
533デフォルトの名無しさんsage2010/12/18(土) 00:56:01
最初typoした
myね
534デフォルトの名無しさんsage2010/12/18(土) 01:08:29
>>529


$ perl -lane '$h{$F[1]}+=$F[0];END{print "$h{$_} $_"foreach(sort{$a-$b}keys%h)}' 1st_out.dat
69 12
43 13
54 14
535デフォルトの名無しさんsage2010/12/18(土) 01:09:31
>>533
2行めもデータ消しにかかってる。
536デフォルトの名無しさん2010/12/18(土) 01:15:11
>>532
ありがとうございます.
これでバイト先の漫画管理がかなり楽になります!
537デフォルトの名無しさんsage2010/12/18(土) 01:17:01
>>535
あー、マジだ
横になりながらコード書いちゃいかんね
538デフォルトの名無しさんsage2010/12/18(土) 01:17:52
データによっては期待通りにならないと思うが、お手軽に

$ perl -lane '$h{"$F[1] $F[2]"}+=$F[0];END{print "$h{$_} $_"foreach(sort{$a cmp $b}keys%h)}' 2nd_out.dat
69 12 ワンピース
43 13 ナルト
54 14 ブリーチ

2カラム目でちゃんとソートするならこんな感じ?

$ perl -lane '$h{$F[1]}+=$F[0];$n{$F[1]}=$F[2];END{print "$h{$_} $_ $n{$_}"foreach(sort{$a-$b}keys%h)}' 2nd_out.dat
69 12 ワンピース
43 13 ナルト
54 14 ブリーチ
539デフォルトの名無しさん2010/12/18(土) 01:24:17
>>521 がちょっと気になったんだけど、今でも大学で perl 教えるところあるの?
540529sage2010/12/18(土) 01:31:59
>>534
一行兄貴サンクス
変数宣言と数値への型変換が不要なPerlはやっぱりワンライナーに強いね
541デフォルトの名無しさんsage2010/12/18(土) 01:47:12
perlスレで言うのもなんだが、こういうのはawkの仕事じゃないのか。
awk '{cnt[$2]+=$1}END{for (x in cnt){print x,cnt[x]}}'
542デフォルトの名無しさん2010/12/18(土) 01:54:26
そうかな?
543デフォルトの名無しさんsage2010/12/18(土) 05:36:23
どっちでも構わんだろべつに
544デフォルトの名無しさんsage2010/12/18(土) 06:30:20
>>539
俺の大学ではさわりだけやった
大学の講義で使う言語=教授が使ってる言語みたいなもんだから学校によってまちまちだろう
545デフォルトの名無しさん2010/12/18(土) 13:50:33
$source に何行記述されているのかを調べようと

my $len = scalar(split("\n", $source));
(scalarは一応明示的に書いただけなので無くても)

このようにやったのですが、以下のように怒られてしまいました。
Use of implicit split to @_ is deprecated at ./a

何か良い方法はないでしょうか?
546デフォルトの名無しさんsage2010/12/18(土) 14:04:22
#!/usr/bin/perl

my $source = "aaa
bbb
ccc
";

my $i = $source =~ s/\n/\n/g;

print $i . "\n";
547デフォルトの名無しさんsage2010/12/18(土) 14:15:25
my $len = $source =~tr/\n//;
548デフォルトの名無しさんsage2010/12/18(土) 14:25:41
ありがとうございます。
でも、改行が最後にあるとは限らないのです。

ちょっと考えて、以下の2つを思いついたんですが、
-----------------

my $len = eval{ my @a=split(/\r?\n/, $source) };

my $len = sub{ my @a=split(/\r?\n/, $source) }->();

-----------------
ちょっとダメダメな感じですね・・。

なにかいい案ないでしょうか?
549デフォルトの名無しさんsage2010/12/18(土) 14:41:51
#!/usr/bin/perl

#my $source = "aaa
#bbb \n
#ccc
#";

my $source = "aaa
bbb \n
ccc";

my $i = $source =~ s/\n/\n/g;

$i += $source =! /\Z/ eq "\n" ? 1 : 0;

print $i . "\n";
550デフォルトの名無しさんsage2010/12/18(土) 14:43:33
あっ。できました。たぶんこれで

my $len = grep(/./, split(/\r?\n/, $source));

my $len = map { 1 } split(/\r?\n/, $source);
551デフォルトの名無しさんsage2010/12/18(土) 14:45:13
my $len = scalar(my @h=(split("\n", $source)));
強引だけど
552デフォルトの名無しさんsage2010/12/18(土) 14:48:16
間違えたじゃなイカ?

#!/usr/bin/perl

#my $source = "aaa
#bbb \n
#ccc
#";

my $source = "aaa
bbb \n
ccc";

my $i = $source =~ s/\n/\n/g;
#my $i = $source =~ tr/\n/\n/;

$i += $source =! /\Z/ eq "\n" ? 0 : 1;

print $i . "\n";
553デフォルトの名無しさんsage2010/12/18(土) 14:51:38
index関数が-1返すまで回った回数をカウントするとか
554デフォルトの名無しさんsage2010/12/18(土) 15:01:06
フツーに

my $len = split /\n/, $source;

で行数が取れると思うんだが…?
試してみたけど

> Use of implicit split to @_ is deprecated at ./a

なんて出なかったよ?
555デフォルトの名無しさんsage2010/12/18(土) 15:10:31
こういう時に限って忍者も出てこないな。
556デフォルトの名無しさんsage2010/12/18(土) 15:48:19
野郎は有益なことは何も書けないんだから出てくる必要なし
557デフォルトの名無しさんsage2010/12/18(土) 17:09:08
> In scalar context, returns the number of fields found and splits
> into the @_ array. Use of split in scalar context is deprecated,
> however, because it clobbers your subroutine arguments.

my $len = @_ = split /\n/, $source; # @_ への代入を explicit にしただけ

>>554
use warnings で出る。
558デフォルトの名無しさんsage2010/12/18(土) 17:36:31
バージョンの違い。

v5.10
http://perldoc.perl.org/5.10.0/functions/split.html
> In scalar context, returns the number of fields found and
> splits into the @_ array. Use of split in scalar context is
> deprecated, however, because it clobbers your subroutine arguments.

v5.12
http://perldoc.perl.org/5.12.0/functions/split.html
> In scalar context, returns the number of fields found.
559デフォルトの名無しさんsage2010/12/18(土) 18:05:23
s/\n/\n/って無駄じゃない? 一番遅いよ

use strict;
use Benchmark;
$/=undef;
open H,'foo'; my $S=<H>; close H;
my $CNT=100;
bench( sub{ my $C = $S =~ tr/\n//;
$C++ if substr($S,length$S,1) ne "\n"; $C });
bench( sub {my $C = $S =~ s/\n/\n/g;
$C++ if substr($S,length$S,1) ne "\n"; $C});
bench( sub { my($i,$C);
while($i = index $S, "\n", $i+1) { $C++ }
$C++ if (substr($S,length$S,1) ne "\n"); $C});
sub bench {
my ($func, $C) = shift;
my $t0 = new Benchmark;
for(0..$CNT) { $C = $func->() }
my $t1 = new Benchmark;
my $td = timediff($t1, $t0);
print "$C ";
print "the code took:",timestr($td),"\n";
}
560デフォルトの名無しさんsage2010/12/18(土) 18:47:03
× $C++ if (substr($S,length$S,1) ne "\n"); $C});
○ $C++ if substr($S,-1,1) ne "\n"; $C});
間違えた
561デフォルトの名無しさんsage2010/12/18(土) 18:47:41
>>557
> use warnings で出る。

なるほど。じゃこれでどうだ。

my $len = &{sub {split /\n/, $source}};
562デフォルトの名無しさんsage2010/12/18(土) 18:52:04
× while($i = index $S, "\n", $i+1) { $C++ }
○ while(($i = index $S, "\n", $i+1) != -1) { $C++ }

動かしたら間違いだらけでした〜orz
563デフォルトの名無しさんsage2010/12/18(土) 18:56:33
>>559
ミスはともかくどれが一番早かったの
564デフォルトの名無しさんsage2010/12/18(土) 18:59:38
use strict; use Benchmark; my $source = join("\n", 'a'..'zz');
print join(',', b_tr(), b_ss(), b_in(), b_gr(), b_ma(), b_su(), b_ev()), "\n";
#-----------
Benchmark::cmpthese(-1, {
b_tr=>\&b_tr, b_ss=>\&b_ss, b_in=>\&b_in,
b_gr=>\&b_gr, b_ma=>\&b_ma, b_su=>\&b_su,
b_ev=>\&b_ev,
});
#-----------
sub b_tr{
my $cnt = $source =~ tr/\n//;
if(substr($source, -1) ne "\n"){ $cnt++; }
return $cnt;
}
#-----------
sub b_ss{
my $cnt = $source =~ s/\n/\n/g;
if(substr($source, -1) ne "\n"){ $cnt++; }
return $cnt;
}
#-----------
sub b_in{
my($i,$cnt)=(0,0);
while(($i=index($source, "\n", $i+1)) >= 0){ $cnt++; }
if(substr($source, -1) ne "\n"){ $cnt++; }
return $cnt;
}
#----------- 改行の制限がキツイ
sub b_gr{ return scalar grep(/./, split("\n", $source)); }
sub b_ma{ return scalar map { 1 } split("\n", $source); }
sub b_su{ return scalar sub{ my @a=split("\n", $source); }->(); }
sub b_ev{ return scalar eval{ my @a=split("\n", $source); }; }
565デフォルトの名無しさんsage2010/12/18(土) 19:01:13
use strict; use Benchmark; my $source = join("\n", 'a'..'zz');
print join(',', b_tr(), b_ss(), b_in(), b_gr(), b_ma(), b_su(), b_ev()), "\n";
#-----------
Benchmark::cmpthese(-1, {
 b_tr=>\&b_tr, b_ss=>\&b_ss, b_in=>\&b_in,
 b_gr=>\&b_gr, b_ma=>\&b_ma, b_su=>\&b_su,
 b_ev=>\&b_ev,
});
#-----------
sub b_tr{
 my $cnt = $source =~ tr/\n//;
 if(substr($source, -1) ne "\n"){ $cnt++; }
 return $cnt;
}
#-----------
sub b_ss{
 my $cnt = $source =~ s/\n/\n/g;
 if(substr($source, -1) ne "\n"){ $cnt++; }
 return $cnt;
}
#-----------
sub b_in{
 my($i,$cnt)=(0,0);
 while(($i=index($source, "\n", $i+1)) >= 0){ $cnt++; }
 if(substr($source, -1) ne "\n"){ $cnt++; }
 return $cnt;
}
#----------- 改行の制限がキツイ。全角スペース忘れてた。
sub b_gr{ return scalar grep(/./, split("\n", $source)); }
sub b_ma{ return scalar map { 1 } split("\n", $source); }
sub b_su{ return scalar sub{ my @a=split("\n", $source); }->(); }
sub b_ev{ return scalar eval{ my @a=split("\n", $source); }; }
566デフォルトの名無しさんsage2010/12/18(土) 19:03:58
>>563
そりゃtr///に決まってる
567デフォルトの名無しさんsage2010/12/18(土) 19:27:28
微妙に違うから注意ね。
http://codepad.org/igP5yvHl

foreach my $source ("", "a", "a\nb", "\n\n", "a\nb\n"){
print "source:\n'$source'\n";
my $line;
$line = scalar (my @dummy = split /^/, $source);
print "split /^/: ", $line, "\n";

$line = scalar (my @dmmy = split /\n/, $source);
print "split /\\n/: ", $line, "\n";

$line = $source =~ tr/\n//;
print "tr/\\n//: ", $line, "\n";

$line = 0;
$line++ while($source =~ /\n/g);
print "while(/\\n/g): ", $line, "\n";

$line = 0;
$line++ while($source =~ /^/mg);
print "while(/^/mg): ", $line, "\n";
}
568デフォルトの名無しさんsage2010/12/18(土) 19:37:23
http://codepad.org/6ps6FBRc
569デフォルトの名無しさんsage2010/12/18(土) 19:46:36
すごい、これ。面白い!

俺も書いた。
http://codepad.org/TGKcai6e
570Perl忍者 ◆M5ZWRnXOj6 2010/12/18(土) 21:10:58
奇異なことをやる自己満&美徳

きも
571デフォルトの名無しさんsage2010/12/18(土) 21:54:46
来た^^
けなせるだけの知識はあるかな?
572デフォルトの名無しさんsage2010/12/18(土) 22:08:21
>>570 ゴクローさんです
573PHP忍者 ◆vx6KgJyjvE sage2010/12/18(土) 22:35:50
>>570
寂しいからって適当なスレに独り言を投下する自己満&美徳

きも
574デフォルトの名無しさんsage2010/12/19(日) 00:05:07
ActivePerlに特化した質問は
ここにしてもいいのですかね…?

5.10 と 5.12 を共存させたい・環境変数 Path を変更することで使い分けたいと思ってるんですが
ActivePerl って異なるバージョンを共存できるんでしょうか?

ppmを実行したとき、どちらか片方にモジュールをインストールしてしまう、
ということになったりしませんかね…?
たしか、何かしらレジストリに書き込みをしていた記憶があるのです>ActivePerl
そこを見て処理する何かが混ざってたら、
共存は難しいか、
もしくは、インストールする順番に注意しないといけないのでは、
という気がしているのですが…
575デフォルトの名無しさんsage2010/12/19(日) 01:16:44
リストの要素をランダムな順番に変えたいのですがどうやったらいいのでしょう。

@list = qw(0 1 2 3 4 5 6 7 8 9)
〜リストをランダムにする処理〜
print @list

結果例
2 5 4 0 9 8 6 7 1 3

のようにしたいです。
576デフォルトの名無しさんsage2010/12/19(日) 01:24:09
List::Util
577デフォルトの名無しさんsage2010/12/19(日) 01:39:19
気合でどうにかなるさ
578デフォルトの名無しさんsage2010/12/19(日) 04:53:03
#!/usr/bin/perl
use Data::Dumper;
my @list1 = qw(0 1 2 3 4 5 6 7 8 9);
my @list2 = map(splice(@list1, rand @list1, 1), @list1);

print Dumper(@list2);
579デフォルトの名無しさんsage2010/12/19(日) 05:01:51
この程度なら忍者様の手を煩わせる必要もないな。
580デフォルトの名無しさんsage2010/12/19(日) 10:00:06
>>578
横やりで申し訳ないけど、ランダム性を証明するにはどのようにしたらいい?
581デフォルトの名無しさんsage2010/12/19(日) 10:17:05
所詮は疑似乱数だ
本気でランダムにするには、熱雑音モジュールとかを用意しないと
582デフォルトの名無しさんsage2010/12/19(日) 10:17:41
>>575
http://perldoc.perl.org/perlfaq4.html#How-do-I-shuffle-an-array-randomly%3F
http://perldoc.jp/docs/perl/5.10.1/perlfaq4.pod
http://cpansearch.perl.org/src/GBARR/Scalar-List-Utils-1.23/lib/List/Util/PP.pm
583Perl忍者 ◆M5ZWRnXOj6 2010/12/19(日) 10:42:06
シャッフルもわからねえばかしね

ほんとくず

この俺よりかもクズは終わってる
584デフォルトの名無しさんsage2010/12/19(日) 11:06:29
「この俺よりかも〜」 っていうフレーズを良くみるけど、

よほど傷ついたんだな・・・。
585デフォルトの名無しさんsage2010/12/19(日) 11:12:11
>>581
たくさんループまわして
$list[0]〜$list[9]のそれぞれに
0〜9が各どのくらいの割合で入ったか平均取ってみたら
586デフォルトの名無しさんsage2010/12/19(日) 11:27:09
平均とっても、もし出力が偏って全部順繰りに出てる可能性を考えると、
平均を取る方法ではランダムかどうかはわからないんじゃないかと思うけど、
どうなんだろう?
587デフォルトの名無しさんsage2010/12/19(日) 11:48:07
>>585
平均とって綺麗に揃ったら、それはそれで一様乱数じゃないんだけどな
588デフォルトの名無しさんsage2010/12/19(日) 12:18:23
乱数にメルセンヌツイスタつかう
589デフォルトの名無しさん2010/12/19(日) 12:27:44
>>575
@list=0..9;print splice@list,rand 10-$_,1 for 0..9
590デフォルトの名無しさんsage2010/12/19(日) 12:30:02
ふぇぇ…
591デフォルトの名無しさんsage2010/12/19(日) 12:47:30
まずは「ランダム性の証明」の定義が必要だな
592デフォルトの名無しさんsage2010/12/19(日) 12:49:32
は?
593デフォルトの名無しさんsage2010/12/19(日) 12:59:11
ランダム
(形動)(英random)任意にすること。手あたり次第にすること。また、そのさま。特に、確率論や統計学で、意志や感情を交えないこと。
594Perl忍者 ◆M5ZWRnXOj6 2010/12/19(日) 16:06:37
短く書いたコードをブログなどに乗せて自己満してるグズ

クソなのに新しい書き方をわめいてるゴミ
一生文法のお勉強(笑)
595PHP忍者 ◆vx6KgJyjvE sage2010/12/19(日) 16:27:44
短く書いた独り言を2chに書きこんで自己満してるクズ>>Perl忍者

クソなのに独り言をわめいてるゴミ
一生ぼっち(笑)
596デフォルトの名無しさんsage2010/12/19(日) 16:33:01
>>594

世の中、無意味な事の積み重ねで成り立ってるのは アタリマエ。

正しい事が正しいなんて思ってるとはピュアでいいとは思うけどさ^^
597デフォルトの名無しさんsage2010/12/19(日) 16:37:03
『Perl忍者』 くじけるなよ。ガンバレ。まじで。
598デフォルトの名無しさんsage2010/12/19(日) 16:44:17
忍者が増えてる...
599デフォルトの名無しさんsage2010/12/19(日) 21:26:55
ハッシュのスライスで、
-------------------------
my @k = qw(a b c);
my @v = qw(A B C);
my %h;
-------------------------
@h{@k} = @v; を宣言の my %h; と一緒にできないでしょうか?

イメージ的には↓のように。これはエラーになりますが。
my @h{@k} = @v;
600デフォルトの名無しさんsage2010/12/19(日) 21:34:41
>>574
> ppmを実行したとき、どちらか片方にモジュールをインストールしてしまう、
> ということになったりしませんかね…?

共存させるにはむしろそうする必要がある。
perl510.bat, perl512.bat がお奨め。
601デフォルトの名無しさんsage2010/12/19(日) 22:03:22
以下の形式のメソッド呼び出しを見掛けるのですが、解釈方法が分かりません。
=> の左に来る文字列(-name)に、ダッシュ(-) が先頭に付いていてもクォートは不要なんでしょうか。


$obj->method(-name => "value");
602601sage2010/12/19(日) 22:56:23
自己解決しました。
603デフォルトの名無しさんsage2010/12/20(月) 00:54:22
>>599
my %h = qw(a A b B c C);

これを作ればいいわけだから、

use List::MoreUtils qw(zip);

my @k = qw(a b c);
my @v = qw(A B C);
my %h = zip(@k, @v);
604デフォルトの名無しさんsage2010/12/20(月) 01:01:43
>>603
ありがとうございます。まさにコレ。

まぁ、でもやっぱり素ではできないんですね。
605デフォルトの名無しさんsage2010/12/20(月) 01:04:28
文法的に無理だろ
606デフォルトの名無しさんsage2010/12/20(月) 05:20:18
>>600:
ありがとうございます
perl5*.batの存在は知りませんでした
これですかね…?
http://search.cpan.org/~ina/Sjis/Sjis/JA.pm

こういうバッチファイルがあるということは
共存は可能ということですね…助かります
607デフォルトの名無しさん2010/12/20(月) 12:01:55
ハッシュをsetした順番を保った状態で JSON::XS (or JSON) で js 出したいのですが、どのようにしたらよいのでしょうか?

JavaScript でもハッシュの取り出し順は保証されているものではないというのと、
配列使えばいいというのは、まあ確かにそう思うのですがハッシュでできないかなー と。
608デフォルトの名無しさんsage2010/12/20(月) 12:16:00
perlの普通のハッシュは格納順番に関する情報は一切保持してないから
死んでも無理。
609デフォルトの名無しさんsage2010/12/20(月) 12:17:37
>>607
http://perldoc.perl.org/perlfaq4.html#How-can-I-make-my-hash-remember-the-order-I-put-elements-into-it%3F
610607sage2010/12/20(月) 12:48:37
>>609
出来た!
しかも JSON::XS でもちゃんと出ました。

XS全く詳しくないけど、なんとなく tie のを渡したら壊れるのかと思ってたら全く問題なかった。
ありがとうございます。
611デフォルトの名無しさんsage2010/12/20(月) 18:54:21
自分はいつも

my $test;
$test->{1} = { 'name' => 'aaa', 'value' => 'tet4' };
$test->{2} = { 'name' => 'bbb', 'value' => 'etae4t' };

print $test->{2}->{'value'};

それか


my $test;

push(@{$test->{'sort'}}, 'test');
$test->{'test'} = 'ああ';

push(@{$test->{'sort'}}, 'abc');
$test->{'abc'} = 'かきくえ';


foreach my $hashname (@{$test->{'sort'}}){
print $test->{$hashname} . "\n";
}

ってやってる
612デフォルトの名無しさんsage2010/12/20(月) 21:07:52
>>604
こんなのはどう?

my @k = qw(a b c);
my @v = qw(A B C);
my %h = map {($k[$_], $v[$_])} (0..$#k);
613デフォルトの名無しさんsage2010/12/21(火) 00:12:55
my %h;
@h{@k} = @v;

一行にまとめられないのがちょっとくやしい...
614Perl忍者 ◆M5ZWRnXOj6 2010/12/21(火) 09:37:11
@WIKI アット ウィキの管理人はいじめの犯罪者だった(アットフリークス)


ソース http://www.mudaijp.com/wp/1957.html


竹田隼也
いじめられていた被害者が2ちゃんねるのコテ環境様という人で、竹田隼也は2ちゃんねるの一部の板を運営してたみたいです(ボランティアだと思いますが)

逮捕された竹田隼也は、アットフリークスの取締役です。
現在の取り締まり役は、大野真和になってますね。
竹田隼也は、アットフリークを立ち上げたメンバーであることは確定しています。(まだ運営にも関わっています)
その当時の記事→アーカイブ


アット ウィキの運営情報(whoisより)
有限会社アットフリークス
640-8227
和歌山県和歌山市西汀丁26番地県経済センター6F


当時はアットフリークスが運営するBBSにもこのいじめのことが書かれてたみたいですが、現在はすっかり削除されています(隠蔽)。

公の場で問題になってから事実を公表する運営も信用できませんよね。
絶対に知ってるはずなのに、このようなコメントを残しています。
615デフォルトの名無しさんsage2010/12/22(水) 07:14:42
use utf8;
my $test = 'あいうえお';
print "$testかきくけこ";

とすると 「$testかきくけこ」 という変数名になるようで、今は
print "$tset\かきくけこ";
の様に対応しています。

一応は動いてますが、これで合っているのでしょうか?
それとも
print $test . "かきくけこ";
の様に "" の外に出してドットやカンマで繋げるべきなんでしょうか?
616デフォルトの名無しさんsage2010/12/22(水) 09:05:44
>>615
{} で区切るのが普通かと
"${test}かきくけこ" とか "${test}abc" とか

個人的には不便としか感じないから止めたいけど方法を知らない...
617デフォルトの名無しさんsage2010/12/22(水) 10:56:44
>>615

自分も、"${test}かきくけこ" とかは本とかで見たりはするけど使わない。

sprintf も、%sが多くなるとなにがどれだか面倒くさくなるので、 "$test\かきくけこ" をよく使う、

けど、こういう場合たいてい半角スペースを前後に空けた方が見やすくなる場合が多いので実際にはよく使わない。
618デフォルトの名無しさんsage2010/12/22(水) 11:07:50
\ で区切るのがなんかスカっとしないんで、${} でいこうと思う。
ありがとうです m(_ _)m
619デフォルトの名無しさんsage2010/12/22(水) 14:44:16
>>618
うむ、そうするがよい
620Perl忍者(竹田隼也) ◆M5ZWRnXOj6 2010/12/22(水) 21:11:04
^^;
621デフォルトの名無しさん2010/12/24(金) 21:35:22
サブルーチンで文字列を全角英文字部分を半角に変換する単純なプログラムなんですが、
このサブルーチン部分を外部ファイルにして、requireで呼び出すと、全角半角変換の部分
が効かなくなってしまいます。なぜなんでしょうか?


use utf8;
use Encode;
use DB_File;

my $name = &get_name(4563);
print $name,"\n";

sub get_name {
my $key = $_[0];
my $name = (split(/\t/, $index{$key}))[3];
$name = decode('utf-8', $name);
$name =~ tr/A-Za-z0-9!”#$%&’()/.\x{3000}/A-Za-z0-9!\"\#$%&'\(\)\/\.\x{0020}/;
$name = substr($name, 0, 11);
$name = encode('utf-8', $name);
return $name;
}
622デフォルトの名無しさんsage2010/12/24(金) 23:14:07
>>621
コピペの文字コードミスじゃねーの?
623デフォルトの名無しさんsage2010/12/25(土) 00:47:32
書かれていない部分に問題があるな。
624デフォルトの名無しさんsage2010/12/25(土) 07:52:03
%index
625デフォルトの名無しさん2010/12/25(土) 09:45:47
なんか、本番用プログラムに組み込むと効かなくなるみたい。

my $enc = guess_encoding($company_name);
print "1******$company_name($enc)<br>";
$company_name = decode('utf-8', $company_name);
$company_name =~ tr/A-Za-z0-9!”#$%&’()/.\x{3000}/A-Za-z0-9!\"\#$%&'\(\)\/\.\x{0020}/;
$company_name = encode('utf-8', $company_name);
my $enc = guess_encoding($company_name);
print "2******$company_name($enc)<br>";


1******日経300株価指数連動(Encode::utf8=HASH(0x156141c0))
2******日経300株価指数連動(Encode::utf8=HASH(0x156141c0))
626デフォルトの名無しさんsage2010/12/25(土) 10:05:33
company nameの設定とか必要なuseを補って実行する限り何の問題も
なかったので書かれていない部分がだめなんだろうな。ちゃんと再現する
例を示せないならエスパーさん以外には回答は無理な気がする。
627デフォルトの名無しさん2010/12/25(土) 11:14:34
単純化して再現環境を作ってみた。

#!/usr/local/bin/perl
use Encode;
use utf8;
my $text = "ABCD";
print &change($text),"\n";

sub change {
my $text = $_[0];
# $text = decode('utf-8', $text);
$text =~ tr/A-Za-z0-9!”#$%&’()/.\x{3000}/A-Za-z0-9!\"\#$%&'\(\)\/\.\x{0020}/;
$text = encode('utf-8', $text);
return $text;
}

$ ./test.pl
ABCD
628デフォルトの名無しさん2010/12/25(土) 11:16:42
#!/usr/local/bin/perl

require './test2.pl';
use Encode;
use utf8;

my $text = "ABCD";
print &change($text),"\n";
--------------------------------
$ cat test2.pl

sub change {
my $text = $_[0];
$text =~ tr/A-Za-z0-9!”#$%&’()/.\x{3000}/A-Za-z0-9!\"\#$%&'\(\)\/\.\x{0020}/;
$text = encode('utf-8', $text);
return $text;
}
1;
--------------------------------
./test.pl
ABCD

なぜ?


629デフォルトの名無しさんsage2010/12/25(土) 11:53:22
Undefined subroutine &main::encode called at test2.pl line 4.
630デフォルトの名無しさんsage2010/12/25(土) 11:56:08
ああ、Encodeはtest1.plに含まれるのか。
test2.plにuse utf8;を追加だな。
631デフォルトの名無しさんsage2010/12/25(土) 12:04:57
>>628
test2.plの方にもuse utf8必要。
632デフォルトの名無しさん2010/12/25(土) 12:42:03
サブルーチンの内側にuse utf8;を宣言したら、動きました。
こういう書き方は初めてなんですが、どうしてサブルーチンを別ファイル化すると、メインプログラムのuseの宣言が効かなくなるのでしょうか?
効いていないのはuse utf8だけのように思えますが
633デフォルトの名無しさんsage2010/12/25(土) 13:42:02
http://perldoc.jp/docs/perl/5.8.1/utf8.pod
> use utf8プラグマは、Perl パーサーに、現在のレキシカルスコープ内の
> プログラムのテキストに、UTF-8(EBCDICベースのプラットフォームなら、
> UTF-EBCDIC) を許すように伝えます。

プラグマで、宣言したレキシカルスコープから外れる度に再宣言する必要があるから。
use strict;と同じ。
634デフォルトの名無しさん2010/12/25(土) 13:48:25
マルチスレッドでカウンタ変数を共有するのにこういう書き方してもいいんでしょうか?
インクリメントは値を返した後に行われるのでしょうか?
my $num = do{ lock($cnum); $cnum++ }
635デフォルトの名無しさんsage2010/12/25(土) 15:54:22
doのブロックも一応ブロック扱いっぽいけど、どうなんだろ。
独立したブロックで書いた方が安全だろうけど。

結果は、インクリメント前の値が返る。
636デフォルトの名無しさんsage2010/12/28(火) 23:41:41
質問です。
ユーザ定義の関数で左辺値コンテクストを使うことはできないでしょうか?
substr( $var, 2, 3 ) = 'ABC';
の様なことをユーザ定義関数でやりたいのです。
637デフォルトの名無しさんsage2010/12/28(火) 23:44:27
>>636
http://perldoc.perl.org/perlsub.html#Lvalue-subroutines
http://perldoc.jp/docs/perl/5.10.0/perlsub.pod
638デフォルトの名無しさんsage2010/12/29(水) 00:09:19
>>637
ありがとうございます!
読んでみます。
639デフォルトの名無しさん2011/01/05(水) 22:47:32
Wikipediaの元データから企業データベースを作っているのですが、

$text="株式会社ナナオは、ディスプレイ (コンピュータ)|ディスプレイ装置専業メーカー。"

これを

"株式会社ナナオは、ディスプレイ装置専業メーカー。"

にする置換スクリプトはどう書くのでしょうか?
このタグの書き方はちょっと特殊で困っています。
640デフォルトの名無しさんsage2011/01/05(水) 22:54:16
縦棒の意味が分からん
641デフォルトの名無しさん2011/01/05(水) 23:05:01
|はWikiipediaが使っているCMSソフトのMediawikiのタグで

Nanao coporation is a manufacturer of high-end displays (computer)|display.

のようなソースを

Nanao coporation is a manufacturer of high-end <a href="display (computer)">display</a>

のように展開するのだと思います。

普通のWIkiなら、

Nanao coporation is a manufacturer of high-end [display].

と書くところですが、これだとdisplayの検索結果が複数生じるため、computer->displayみたいな
オブジェクト指向の書き方ができるようにタグが拡張したのではないかと思うわけです。


642デフォルトの名無しさんsage2011/01/05(水) 23:45:58
なんで[[]]を抜かすの
643デフォルトの名無しさんsage2011/01/05(水) 23:53:44
それで混乱せずに解釈できるんだな
644デフォルトの名無しさんsage2011/01/06(木) 01:32:30
マークアップ解析だけでなく、自然言語処理が絡む話に見える
645デフォルトの名無しさんsage2011/01/06(木) 02:43:48
printについて質問があります。

これだとfooにprintされるが
perl -e 'open (my $fh , ">" . "foo") or die "open error $!\n" ;while(1){print $fh "bar\n"}'

これだとfooにprint されないのはなんでなのでしょうか?
perl -e 'open (my $fh , ">" . "foo") or die "open error $!\n" ;while(1){print $fh "bar\n";sleep 1}'

646645sage2011/01/06(木) 02:52:59
すみません、シグナルハンドリングしたら解決しました。
首釣ってきます。
647デフォルトの名無しさんsage2011/01/06(木) 03:01:54
どーでもいいけど、openは3引数にすれば
648645sage2011/01/06(木) 03:16:43
ですね。ご指摘どうもありがとうございます。
649デフォルトの名無しさんsage2011/01/06(木) 08:54:26
%test = ( 'aaa' => '000', 'bbb' => '111' );
%test = ( 'ccc' => '222', 'ddd' => '333' );

こんな風にした場合、%test の {'aaa'} と {'bbb'} が上書きされるのですが、それを回避する時

$test{'ccc'} = '222';
$test{'ddd'} = '333';

とせずに一括で変数に格納できないものでしょうか?
650デフォルトの名無しさんsage2011/01/06(木) 09:13:40
%test = ( %test, 'ccc' => '222', 'ddd' => '333' );
651デフォルトの名無しさんsage2011/01/06(木) 09:56:17
あ〜、なるほど。
652デフォルトの名無しさんsage2011/01/06(木) 12:42:25
@test{ 'ccc', 'ddd' } = ( '222', '333' );
653デフォルトの名無しさん2011/01/06(木) 13:41:22
>>644
これはやっぱり、$line =~ 系の書き方だと処理できないでよね。
そもそも英語だとワードの分割単位が判るので、ワードごとに戻る置換処理はできますが、日本語だと、ワードの区切りが判らない
でもMediawikiが、日本語の形態素解析をやってるとは思えないし、普通の多言語対応処理のなかでどうやって[]のタグなしで
タグの範囲となる日本語の区切りを判別させてるか謎です。
654デフォルトの名無しさんsage2011/01/06(木) 16:46:43
メカブ使えば早いんじゃね?
655Perl忍者 ◆M5ZWRnXOj6 sage2011/01/06(木) 16:54:52
>>654
お前なにいってんの?
それは食べ物だろ?
656デフォルトの名無しさんsage2011/01/06(木) 16:55:40
元データってどこから取ってるの?
編集画面だと
'''株式会社ナナオ'''({{Lang-en-short|''EIZO NANAO Corporation''}} )は、[[ディスプレイ (コンピュータ)|ディスプレイ]]装置専業メーカー。
ってなってるけど
657Perl忍者 ◆M5ZWRnXOj6 sage2011/01/06(木) 17:05:29
バカ発言してお前ら安心したか?

メカブくらいしってますよ(ゴホン
658デフォルトの名無しさんsage2011/01/06(木) 17:46:47
( ´∀`)σ)∀`)
659Perl忍者 ◆M5ZWRnXOj6 sage2011/01/06(木) 17:53:34
顔文字オタクですか?
660デフォルトの名無しさん2011/01/07(金) 20:30:26
>>656
XML形式のWikipediaのダンプデータ
http://download.wikimedia.org/jawiki/20101102/
にあるpages-articles.xml.bz2というファイル。

ところで、

ウィキページのデータはSQL(DB言語)のテーブルではなく、XML(マークアップ言語)で提供されます。

という文字列から()部分だけを削除するにはどうしたらいいのでしょうか?

$text =~ s/\(.*\)//g;

とやると最初の(から最後の)まで全部削除されてしまいます。
661デフォルトの名無しさんsage2011/01/07(金) 20:35:10
.*? で非欲張りにしとく
662Perl忍者 ◆M5ZWRnXOj6 2011/01/07(金) 20:45:14
正規表現できねえごみくずか?
663Perl忍者 ◆M5ZWRnXOj6 2011/01/07(金) 21:10:33
660みたいな低脳見ると安心する
664デフォルトの名無しさんsage2011/01/07(金) 21:17:56
禿同
665Perl忍者 ◆M5ZWRnXOj6 2011/01/07(金) 21:20:48
久しぶりに嬉しいレスがきましたwwwwwwwwwwwwwwwwwwwwwwwwwww
666デフォルトの名無しさん2011/01/07(金) 22:00:45
できました!
みなさんのおかげです
667デフォルトの名無しさんsage2011/01/08(土) 06:47:46
どういたしまして
668仕様書無しさん2011/01/08(土) 18:59:17
あの、暇人やチャット好きのPerl使いっていますか?

その人たちはどこいますか?perl-casual以外で教えてください
669デフォルトの名無しさんsage2011/01/08(土) 19:02:50
はい、お気楽チャットです
670デフォルトの名無しさんsage2011/01/08(土) 19:03:40
>>668

http://chat.studio.cx/o-cha/jsp/superbeginner/

ここです
671デフォルトの名無しさんsage2011/01/11(火) 16:12:02
if ($bool) {
$array->[$i] = $elem;
$str = "ほげ";
$new_array = $array;
} else {
$str = "ふが";
$new_array = $array;
}

上のコードを3項演算子で書こうと思ったのですが、値を返す前に1つ処理をさせる事は可能でしょうか?
my ($str, $new_array) = ($bool)? {$array->[$i]=$elem; ("ほげ", $array)}: ("ふが", $array);
#=> syntax error at _, near "; ("

my ($str, $new_array) = ($bool)? ("ほげ", $array, $array->[$i]=$elem;): ("ふが", $array);
# 今回はこれでたまたまうまく出来たのですが
672デフォルトの名無しさんsage2011/01/11(火) 16:39:09
>>671
つ do

読みにくくなりがちだからほどほどにな。
673デフォルトの名無しさんsage2011/01/11(火) 16:41:32
>>671
my ($str, $new_array) = ($bool)? $array->[$i]=$elem && ("ほげ", $array): ("ふが", $array);
674デフォルトの名無しさんsage2011/01/11(火) 17:00:45
>>673
$elem=0;
my ($str, $new_array) = ($bool)? $array->[$i]=$elem && ("ほげ", $array): ("ふが", $array);
675デフォルトの名無しさんsage2011/01/11(火) 17:08:14
>>674
$elem=0;
my ($str, $new_array) = ($bool)? $array->[$i]=$elem || 1 and ("ほげ", $array): ("ふが", $array);
676Perl忍者 ◆M5ZWRnXOj6 2011/01/11(火) 19:22:55
join "特別入社",grep /Perl忍者/,@sinsotu;
677Perl忍者 ◆M5ZWRnXOj6 2011/01/11(火) 19:27:14
・・・?
678デフォルトの名無しさん2011/01/11(火) 19:28:39
どこに入社するんですか?
$black_kigyouですか?
679デフォルトの名無しさん2011/01/11(火) 21:14:25
>>677
462 : ◆cZfSunOs.U :2011/01/11(火) 06:15:21 発信元:206.223.151.75 0
こちらの bbs.cgi 書き換えミスだったようです,すみませんでした......
468 :名無しさん@お腹いっぱい。:2011/01/11(火) 06:21:53 発信元:211.13.107.120 0
>>462
面白かったから構
483 :名無しさん@お腹いっぱい。:2011/01/11(火) 06:49:25 発信元:202.140.195.191 0
>>462
くそわろたwwwww
485 :名無しさん@お腹いっぱい。:2011/01/11(火) 06:56:05 発信元:126.110.93.157 0
笑うとこじゃねえよ
死ね能無し
486 :名無しさん@お腹いっぱい。:2011/01/11(火) 07:00:50 発信元:210.135.100.132 (762198) P
νカスから出てくるんじゃねーよカス共
488 :名無しさん@お腹いっぱい。:2011/01/11(火) 07:17:49 発信元:210.135.100.132 (706341) P
>>485
ちょっと書けなくなっただけのミスを笑って許せない貴方は2ちゃんねるに向いてないよ
嫌なことでもあったのかな?だからピリピリしてるの
490 :名無しさん@お腹いっぱい。:2011/01/11(火) 07:29:13 発信元:126.110.93.157 0
向き不向きの話をするならたかが死ねってレスを軽やかにスル―出来ないほうがよっぽど向いてないと思うんだがw
492 :名無しさん@お腹いっぱい。:2011/01/11(火) 07:36:48 発信元:114.175.48.194 0
周りのスルー前提で書き込むとか甘ちゃんですねーw
680デフォルトの名無しさん2011/01/12(水) 03:33:43
おいIDの算出法わかったか?
681デフォルトの名無しさんsage2011/01/12(水) 04:00:15
0chと同じじゃねーの?
682デフォルトの名無しさんsage2011/01/14(金) 17:12:32
>>672
doを使うと複数行実行&最後に評価された値を返してくれるのですね。
レスありがとうございました。

>>673-675
これは・・・ありがとうございます。
andはこういう場合に使える(?)んですね。

どのみち$new_arrayの中身は$arrayになるので
my $str = ($bool)? do {$array->[$i]=$elem; "ほげ"}: "ふが";
こうしました。
683デフォルトの名無しさんsage2011/01/14(金) 22:08:48
・perl
・gtk2
・windows7

という組み合わせでプログラミングできる環境を作ろうとしていますがうまくいきません
参考になるウェブページがあったら教えてください
684デフォルトの名無しさんsage2011/01/14(金) 22:32:07
http://perl.nabeta.tk/gtk2-perl_memo.html
685デフォルトの名無しさんsage2011/01/14(金) 23:04:23
そうそう
tk使うといろいろ楽しそうなのに、どうもハードルが高い
unixとwindowsはどこまで水と油なんだ
686デフォルトの名無しさんsage2011/01/14(金) 23:30:06
WinでGUIやりたいなら.NET使えば
687デフォルトの名無しさんsage2011/01/14(金) 23:56:31
.NETの最大の欠点は
ぐぐれない
688デフォルトの名無しさん2011/01/15(土) 13:32:12
いくつかモジュール使っていて、この関数がどのモジュールからやって来たものなのかを
調べるにはどのようにしたらよいのでしょうか?
689デフォルトの名無しさんsage2011/01/15(土) 14:03:16
use してるモジュールを一つづつコメントアウトしていく。
perldocでモジュールを調べる。
モジュールのソースを読む。
690デフォルトの名無しさんsage2011/01/15(土) 14:33:57
use Class::Inspector;
691デフォルトの名無しさんsage2011/01/15(土) 18:02:32
whileでずっと動かしてるサブルーチンがあるとして、これが「時速600回」みたいにどれぐらいのペースで動いてるかってのを出したいんですけど何か簡単な方法ないですか?
692デフォルトの名無しさんsage2011/01/15(土) 18:39:31
Benchmarkモジュールのこと?
693デフォルトの名無しさんsage2011/01/15(土) 18:40:33
質問お願いします。
クイズ出題ツールを作っています。
年度ごとにフォルダを作り、それぞれに個人の得点を記録する下のようなP_List.txtを置いています。
%PLAYER_LIST=(
"Taro"=>"問1,問2,…",
"Hanako"=>"問1,問2,…",
);
「各年度の全ての問の得点が0のとき」"全部0です"と表示させるために、下のように組んだのですが、もっと効率の良い方法はないでしょうか?

@kakdt=('2007','2008','2009');
foreach my $nen (@kakdt){
require "./$nen/P_List.txt";
@PL_p=split(/\,/,$PLAYER_LIST{"$name"});
foreach my $point (@PL_p){
$check=1 if $point;
}
}
print "全部0です"if !$check;
694デフォルトの名無しさんsage2011/01/15(土) 19:38:08
>>691
Time::HiRes::time()
>>693
if ($point) { $check = 1; last; }
695Perl忍者 ◆M5ZWRnXOj6 sage2011/01/16(日) 01:03:54
package Package;

use strict;
use Image::Magick;

sub new {
my ($pkg, $param) = @_;
my $hash = {
img => $param->{'img'},
plot => (defined $param->{'plot'} and $param->{'plot'} > 0) ? $param->{'plot'} : 3,
};
return bless $hash, $pkg;
}





ここに来る
$param->{'img'}
っていうやつはなんだとおもう?
教えてよ!
696Perl忍者 ◆M5ZWRnXOj6 sage2011/01/16(日) 01:06:06
newで$paramに渡すとき

$param->{'img'}
としている

newにわたす$paramはなに?
なんのオブジェクト?
何を渡すんだ・・・教えてください
697Perl忍者 ◆M5ZWRnXOj6 sage2011/01/16(日) 01:07:05
明日の朝ここみて回答内容がゴミだったり 回答自体なかったら
まじここのスレぶっつぶすからな
698693sage2011/01/16(日) 01:08:59
>>694
あ、確かにlast使った方が効率よくなりますね!
ありがとうございます!
699デフォルトの名無しさんsage2011/01/16(日) 01:26:08
2重ループだたか

 LABEL: foreach my $nen (@kakdt){
で、
 if ($point) { $check = 1; last LABEL; }
かな>>698
700693sage2011/01/16(日) 01:29:23
立て続けにすみません。
先ほどのを導入して試したら別の問題に突き当たりました。

不正解時の処理で、$PL_p[$q_no]--として点数を引き、&DBM_SAVE;で別途用意したサブルーチン(下記)で減点後の点数を保存してから先ほどのものを書いています。
sub DBM_SAVE{
open(PUSHLOG,">./$DBF/$nend/$DB_P");
print PUSHLOG "\%PLAYER_LIST=(\n";
foreach $key (sort {$a<=>$b} keys %PLAYER_LIST){
if($key ne $ENV{'REMOTE_USER'}){
print PUSHLOG "\"$key\"=>\"$PLAYER_LIST{$key}\",\n";
}
}
print PUSHLOG "\"$ENV{'$name'}\"=>\"@PL_p\",\n";
print PUSHLOG ");\n";
close(PUSHLOG);
}
ところが、得点状況自体は保存されているものの、@VL_pに入るのは減点前の点数になってしまいます。
どこがいけないのでしょうか?

$PL_p[$q_no]--;
&DBM_SAVE;
CHECK: foreach my $nen (@kakdt){
require "./$DBF/$nen/$DB_P";
@VL_p=split(/\,/,$PLAYER_LIST{"$ENV{'$name'}"});
foreach my $point (@VL_p){
if ($point){$check=1; last CHECK;}
}
}
701693sage2011/01/16(日) 01:33:10
すみません
$ENV{'$name'}は訂正ミスで$nameです。

× print PUSHLOG "\"$ENV{'$name'}\"=>\"@PL_p\",\n";
○ print PUSHLOG "\"$name\"=>\"@PL_p\",\n";

× @VL_p=split(/\,/,$PLAYER_LIST{"$ENV{'$name'}"});
○ @VL_p=split(/\,/,$PLAYER_LIST{"$name"});
702デフォルトの名無しさんsage2011/01/16(日) 02:11:21
こういうアホがcgi作るからデスマになるのか。
なるほど、勉強になったよ。
703デフォルトの名無しさんsage2011/01/16(日) 02:31:12
local$,=","

すごいすくりぷとだなー()
704デフォルトの名無しさんsage2011/01/16(日) 02:32:52
あーちがったけどまーいーや
705Perl忍者 ◆M5ZWRnXOj6 sage2011/01/16(日) 09:42:59
・・・
706Perl忍者 ◆M5ZWRnXOj6 sage2011/01/16(日) 09:48:17
http://d.hatena.ne.jp/ryoff/20090802/1249229766

sub new {
my ($pkg, $param) = @_;
my $hash = {
img => $param->{'img'},
plot => (defined $param->{'plot'} and $param->{'plot'} > 0) ? $param->{'plot'} : 3,
};
return bless $hash, $pkg;
}



ここの
newの第2引数$paramに何を渡せばいいんですか?教えてください
my ($pkg, $param) = @_;
$param->{'img'},となっているのでハッシュリファレンスだとおもうんですが
Package->new()に渡す引数は何で生産したものですか?教えてくだう
707デフォルトの名無しさんsage2011/01/16(日) 09:58:40
>>706
ファイル名とかその他いろいろ。
つーか、こんなもん自分で実装しろよ。根本的に勘違いしている。
708Perl忍者 ◆M5ZWRnXOj6 sage2011/01/16(日) 10:08:44
^−^;
709デフォルトの名無しさん2011/01/16(日) 10:52:49
「モダンPerl入門」のP154に、
---------
ただし、親プロセスがただfork()してexit()しただけでは子プロセスも終了させられてしまいますので・・・
---------
ってあるんですが、試したところ親プロセスが fork -> exitしても子プロセスは落ちず、pstree で見ても init の直下にちゃんと(?)なってるんですが、上記の文章の意味はどういうところにあるのでしょうか?

どなたか詳しい方お願いします・・・

CentOS5.5 64bit
perl v5.8.8
710デフォルトの名無しさん2011/01/16(日) 11:03:34
>>709
「素人がでたらめな入門書を書きました」という意味です。
711デフォルトの名無しさん2011/01/16(日) 11:06:49
この本の著者を素人呼ばわりできるってことは
お前相当すごいやつなんだな
712デフォルトの名無しさんsage2011/01/16(日) 12:13:24
この人でしょ。
http://jibun.atmarkit.co.jp/ljibun01/rensai/leader/22/01.html
全然業績ないじゃん。
713デフォルトの名無しさん2011/01/16(日) 12:27:22
JPA会長を悪く言うな死ね
714デフォルトの名無しさん2011/01/16(日) 12:30:39
ボクハ JPA ニセンノウサセラレテイタ
715709sage2011/01/16(日) 12:37:35
できれば >>709 の内容について教えて頂けると助かるんですが・・・
716デフォルトの名無しさん2011/01/16(日) 12:39:17
>>715遠回りしに会長を馬鹿にしてるのか???
717デフォルトの名無しさんsage2011/01/16(日) 12:47:55
>>716
718Perl忍者 ◆M5ZWRnXOj6 2011/01/16(日) 12:50:14
my $obj=Package->new({'img'=>'banana.jpg','plot'=>5});

やっぱりハッシュリファレンス渡すだけであってたようでえすね^^;

久しぶりにPerlやったので頭が回りませんでした^^;
719デフォルトの名無しさんsage2011/01/16(日) 12:53:33
>>715
>>710で説明したとおりでたらめな記述です。その本は速攻でごみ箱に捨てることをお勧めします。
720デフォルトの名無しさんsage2011/01/16(日) 13:01:21
いいかげんにしろよ、まつもとひろゆき
721709sage2011/01/16(日) 13:03:24
>>719
「でたらめ」 である事の証明を書いて頂けないと判断が付かないんですが。
少なくとも私は今コレを読んで勉強しているので。
722デフォルトの名無しさんsage2011/01/16(日) 13:39:36
モダンPerl入門は分からないけど、親が死ぬとinitの子プロセスになるのは、
詳解UNIXプログラミングのP189に書いてあるよ。
723デフォルトの名無しさんsage2011/01/16(日) 13:51:09
>>721
これででたらめと判断できるかい? クソ本はすぐにゴミ箱に捨てましょう。

http://en.wikipedia.org/wiki/Orphan_process
An orphan process is a computer process whose parent process has
finished or terminated, though itself remains running.

In a Unix-like operating system any orphaned process will be immediately
adopted by the special init system process. This operation is called
re-parenting and occurs automatically.
Even though technically the process has the "init" process as its parent,
it is still called an orphan process since the proces
724700sage2011/01/16(日) 14:09:21
どなたか>>700お願いします。
725709sage2011/01/16(日) 14:14:44
>>722,723
ありがとうございます。ちょっと高くて買えません。立ち読みに行こうかな・・。

「プログラミングPerl vol2」 の P1074 にも setsid の説明のところで 「モダンPerl入門」 と同じような説明がありますが、私なりに↓のようなことなのかな、と思いました。

たぶん、
-------
同じプロセスグループに属している最中に、親を ctrl+c などで
落としたら子も落ちるので、その影響を受けないように POSIX::setsid
して別のプロセスグループに移した方が良いよ。
-------
って意図ですよね。おそらく。
これなら確かに実際に動かして親が落ちて子も落ちることが確認できました。
726デフォルトの名無しさん2011/01/16(日) 14:44:24
>>725
> 同じプロセスグループに属している最中に、親を ctrl+c などで
> 落としたら子も落ちるので、
違うよ。

> ただし、親プロセスがただfork()してexit()しただけでは子プロセスも終了させられてしまいますので・・・
これは忘れろ。「モダンPerl入門」とやらはでたらめ書いてるクソ本。
親プロセスが死んでも子プロセスは死なない。
727709sage2011/01/16(日) 15:03:58
>>726

>> 同じプロセスグループに属している最中に、親を ctrl+c などで
>> 落としたら子も落ちるので、
>違うよ。

んーー。こちらの環境では、ちゃんと親も子も $SIG{INT} が動くんだけど・・・。
728デフォルトの名無しさんsage2011/01/16(日) 15:31:53
洗脳解除してる気分になってきた。w

>>727
制御端末からのsignalはそのセッションに属するプロセス全部に送られる。
親プロセスが死んだから子プロセスが死ぬのではなく、(子プロセスに)SIGINTが
送られたから終了する。

理解できたらクソ本は捨てましょう。
729709sage2011/01/16(日) 15:44:45
>>728
そうなんですね。ありがとうございます。
なにか良書はないでしょうか? 日本語ので。
730デフォルトの名無しさんsage2011/01/16(日) 15:54:41
薦められたり罵られたり大変だなw <もだんPerl
731デフォルトの名無しさんsage2011/01/16(日) 17:29:55
誰か薦めてるのか?
732デフォルトの名無しさんsage2011/01/16(日) 19:04:58
クソらしいのでJPA退会しました
733デフォルトの名無しさんsage2011/01/16(日) 19:22:59
僕もJPAギルド脱退しました
734デフォルトの名無しさんsage2011/01/16(日) 19:24:34
私はJPAクランを抜けました
735デフォルトの名無しさんsage2011/01/16(日) 19:29:48
私は綺羅星十字団に入りました。
736デフォルトの名無しさんsage2011/01/16(日) 19:39:04
####### ギルド名 #########
★JPA(Japan Perl Association) ★

ギルドマスター(代表者) 牧大輔@最強パラディン(レベル75)

資本金 1000万アデナ

##### 主な活動 ######
Ruby,PHP,Pythonプレイヤーへの嫌がらせ
JPA勧誘


#######入隊条件#########
毎年5000円を納められる方
Perlレベル50以上の方
やる気のある方

ギルドHPはここです
http://japan.perlassociation.org/

です
737デフォルトの名無しさん2011/01/16(日) 19:40:45
Perlレベル2ですけど

やる気あります だめですか?
738牧大輔@最強パラディンsage2011/01/16(日) 19:46:12
はじめまして、私がJPAギルド代表です

>>737

はい、レベル2ですと瞬殺されてしまうので
レベル50以上になってからお越しください
739デフォルトの名無しさんsage2011/01/16(日) 19:54:33
>>736
これ以上新たな刺客を送り込むのは本当にやめてくださいお願いします
740709sage2011/01/16(日) 20:07:03
>>729 で良書は無いですか?って聞いただけなんですけど・・。
あんま無いんですね。
741デフォルトの名無しさんsage2011/01/16(日) 20:11:03
はい
742牧大輔@最強パラディンsage2011/01/16(日) 20:17:27
しつけえぞおまえこら

どつくぞ
743デフォルトの名無しさん2011/01/16(日) 20:31:47
perlのonelinerとデバッガの使い方を詳しく書いた本って無い?
特にonelinerのオプション一覧と便利な実例が豊富なの。
744700sage2011/01/16(日) 21:16:09
>>700お願いします……。
745709sage2011/01/16(日) 21:22:22
>>744
コードは5行くらいまで短くしてくれないと読む気にならないかな。
746デフォルトの名無しさんsage2011/01/16(日) 23:04:53
>>693に大まかな構造を書いています。

下記のように$PL_p[$q_no]を減点し、サブルーチンを呼び出してP_List.txtを更新してから
各年度の全ての問の得点が0になっているかどうか、をチェックしているのですが、
処理後のP_List.txtを見ると、ちゃんと減点が反映されているのですが、
ループでのチェック時にはそれが反映される前のデータを参照してしまいます。
上から順に処理されているはずはのに、どうしてそうなってしまうのか分かりません。

$PL_p[$q_no]--;
&DBM_SAVE;
CHECK: foreach my $nen (@kakdt){
require "./$DBF/$nen/$DB_P";
@VL_p=split(/\,/,$PLAYER_LIST{"$ENV{'$name'}"});
foreach my $point (@VL_p){
if ($point){$check=1; last CHECK;}
}
}
747709sage2011/01/16(日) 23:23:54
反映した後のデータは require で読みこんで更新していると?
748デフォルトの名無しさんsage2011/01/17(月) 00:47:36
require "./$DBF/$nen/$DB_P";
で読み込みし直しているので@VL_pには更新後のデータが入ると思うのですが…。
749709sage2011/01/17(月) 01:03:54
"./$DBF/$nen/$DB_P"
のファイルに、print "---load---\n"; って追記して、
さらにメインのスクリプトに下のように何個か書いてから、

require "./$DBF/$nen/$DB_P";
require "./$DBF/$nen/$DB_P";
require "./$DBF/$nen/$DB_P";

動かすとどうなる?


%INC
750デフォルトの名無しさん2011/01/17(月) 01:05:19
減点処理どこでしてんだボケ
751デフォルトの名無しさんsage2011/01/17(月) 01:24:15
れーきーしーかーるー
752デフォルトの名無しさんsage2011/01/17(月) 05:53:10
このクイズ出題ツールはな このスレにも出題する様に作られとんねん
753デフォルトの名無しさん2011/01/17(月) 15:24:12
質問です。
外部テキストファイルを読み込んで、1行目から10行目を飛ばし、
11行目から処理を行うというプログラムを書きたいのですが
1行目から10行目を飛ばすにはどのようなコードを書けば良いでしょうか?
754デフォルトの名無しさんsage2011/01/17(月) 15:50:35
行数数えながら読むだけ読んで無視すればよい。
755デフォルトの名無しさんsage2011/01/17(月) 17:56:56
10回空読みすりゃいい
756デフォルトの名無しさん2011/01/18(火) 02:03:58
>>754-755
レスありがとうございます。
どのようなコードを書けば良いのでしょうか?
757デフォルトの名無しさんsage2011/01/18(火) 02:07:19
eval "<FH>;"x10
758デフォルトの名無しさんsage2011/01/18(火) 02:27:48
eval は余り使いたくないので
my $line;
for(1..10){ $line = <FH> }
$line = <FH>; # 11行目

このまま素直に書くと10行以下はエラーになるんで、
eof() 使ってくだちぃ
759デフォルトの名無しさん2011/01/18(火) 02:53:29
>>757-758
ありがとうございます。
書いて走らせてみたのですが上手くいきません。
>>758さんのコードを使って、ファイルを読み込んでいるのですが
何も出力されないです。
760デフォルトの名無しさんsage2011/01/18(火) 03:03:05
ファイルは11行以上ありますか
ファイルをopenしてますか
読み込んだ内容をprintしていますか

お好きなのをどうぞどうぞ
761デフォルトの名無しさんsage2011/01/18(火) 03:07:27
出力先は正しいですか
間違ったリダイレクトをされていませんか
バッファはフラッシュされていますか
762デフォルトの名無しさん2011/01/18(火) 03:08:12
普通に+9すりゃいいじゃん
763デフォルトの名無しさんsage2011/01/18(火) 08:19:29
以下のようにして、確認すればいいよ。
--------------------------------
#!/usr/bin/perl -w
use strict;

open(my $fh, '/var/log/messages');
my $i=1;
while(<$fh>){
 print "$i: $_";
 $i++;
}
764746sage2011/01/18(火) 10:40:01
>>747
---load---が最初に読み込んだ1回分しか表示されず、ループ処理での読み込みが飛ばされていました。
どうも、同じファイルは1度しか読み込めないようです。
これはサーバーの仕様なのでしょうか?perlがそういうものなのでしょうか?

>>750
分かりづらくてすみません。
$PL_p[$q_no]が得点になっていて、$PL_p[$q_no]--;で減点処理をしています。
765デフォルトの名無しさんsage2011/01/18(火) 23:13:50
>>764
require "./$DBF/$nen/$DB_P"; → do "./$DBF/$nen/$DB_P";
これでやってみそ
766746sage2011/01/19(水) 01:24:47
>>765
おお、出来ました!
doとrequireの違いで調べたら、doは複数回呼び出すと呼び出された分だけ実行して
require、useは複数回呼び出しても一度しか実行されないとのことでした。

勉強になりました。
回答してくださったみなさん、ありがとうございました。
767デフォルトの名無しさんsage2011/01/20(木) 21:12:47
Perlを始めて間もない学生です。
http://nlp.nagaokaut.ac.jp/Apple_Pie_Parser
上記リンクのApple Pie Parserを用いたプログラムを作っています。厳密に言うとCGIですが、Perlのコーディングに関する問題だと思うのでこちらで質問します。
フォームに入力した英文を上記のツールにかけて出力結果を出そうとしています。
Windowsで開発しているので、英文入力→cygwin起動→そこであらかじめ指定したコマンドを入力するようコーディング→結果を受け取る
という感じにしたいのですが、cygwinを起動させることができません。
どうすればいいでしょうか。
768デフォルトの名無しさんsage2011/01/20(木) 21:16:56
窓を窓から投げ捨てる
769デフォルトの名無しさんsage2011/01/20(木) 21:21:02
>>767
cygwin使ったことないけど、実行ファイルはcygwin上じゃなくても動かせるんじゃないの?
770デフォルトの名無しさんsage2011/01/20(木) 21:25:28
cygwin上 の Perl はいろいろ動かないケースが出て使うのやめてしまったなあ
今なら Strawberry Perl とかどうなんだろうね?
771デフォルトの名無しさんsage2011/01/20(木) 21:43:32
>>769
実行ファイルと同ディレクトリにcygwin1.dllを設置すればcygwinなしでも起動できるのですが、
そうすると今度はディクショナリファイルが開けない、とのエラーが出てきます。
そのファイルもインストールフォルダからコピーし、同ディレクトリに設置しましたがこちらはエラーが解決しません。
何らかの設定ファイルのパスをいじるべきでしょうか?
772デフォルトの名無しさんsage2011/01/20(木) 22:04:27
knoppixでもDLすれば万事解決
perl入門にはcygwinじゃなくlinuxを使うべき
773デフォルトの名無しさんsage2011/01/20(木) 23:08:50
cygwin使うくらいなら素直にlinux起動する
774デフォルトの名無しさんsage2011/01/20(木) 23:24:03
WindowsだったらActivePerlでいんじゃね?
775デフォルトの名無しさんsage2011/01/20(木) 23:24:55
ActivePerlでいいだろ。
776デフォルトの名無しさんsage2011/01/20(木) 23:57:37
実行部分はactiveperlがいいけど、
フロントエンド部分でcygwin必須なことがよくある
777デフォルトの名無しさんsage2011/01/21(金) 00:14:16
仮想マシンぶっこもうぜ
778デフォルトの名無しさん2011/01/21(金) 00:57:09
X68000エミュにPerl5ぶち込んで使うのが何故か至福。
X68k版Perl5を持ってるのは、恐らく今や世界中で俺だけ。
実機もいまだに健全稼動してる俺勝ち組?
779デフォルトの名無しさんsage2011/01/21(金) 01:08:22
マルチスレッドに関して

for文で1000個(同じ内容)のスレッドを発行したいが
同時に並列させるのは4つまでにしたい。

4並列はセマフォで管理するとして
ひとつのスレッドが終わったらjoinで回収して
すぐに次のスレッドを発行したいのだがいい方法ありますか?
780デフォルトの名無しさんsage2011/01/21(金) 07:19:50
perl で?
781779sage2011/01/21(金) 17:59:15
自己解決。
forじゃなくてqueueとsemaphoreの合わせ業でいけた。
is_joinable()でスレッド監視して、Join待ちのロックが起きないようにできました。

リニア実行に比べて4並列で約3倍早くなった!
782Perl忍者 ◆M5ZWRnXOj6 2011/01/21(金) 19:21:45
ネットワークだったら
LWP
画像だったら
PerlMagick

っで

音楽、画像、ネット、動画で他に楽しめそうなモジュールやつあったらおしえて
783Perl忍者 ◆M5ZWRnXOj6 2011/01/21(金) 19:23:29
早く教えろ
784デフォルトの名無しさんsage2011/01/21(金) 20:01:47
うっせーよ糞コテ
785デフォルトの名無しさんsage2011/01/21(金) 20:23:58
>>697
786デフォルトの名無しさんsage2011/01/22(土) 05:17:14
LWP::Simple の get で undef がたまに返ってくるんだが
再現性が無い・・・

同じ問題に遭遇した人いる?
787デフォルトの名無しさんsage2011/01/22(土) 06:22:32
http://search.cpan.org/~gaas/libwww-perl-5.837/lib/LWP/Simple.pm

getに失敗するとundefになると書いてある。
単にサーバーが503とかを出してるんじゃないか。
788デフォルトの名無しさんsage2011/01/22(土) 08:03:13
getに失敗した時の処理は難しいな
789nobodyさんsage2011/01/22(土) 09:46:52
だいたいundefで失敗したんだなってわかんだろばかが
790デフォルトの名無しさんsage2011/01/22(土) 10:23:08
その時に、即座に再取得していいもんかどうかが難しい
791デフォルトの名無しさん2011/01/22(土) 10:56:01
SIerが三菱じゃない事を確認しておかないと、岡崎の事件みたいに逮捕される。
792デフォルトの名無しさんsage2011/01/22(土) 12:25:48
どれだけ時間置くとか、何回までリトライするとか、断念した時の処理とか、
それだけの手間を全てのgetにかけるのかとか、うんざりしてくる
793デフォルトの名無しさんsage2011/01/22(土) 13:35:11
じゃあLWP::UserAgent使ってろよかす
794デフォルトの名無しさんsage2011/01/22(土) 13:37:09
かすっていうやつがかす
795デフォルトの名無しさんsage2011/01/22(土) 14:51:28
ルーターの NAT テーブルがいっぱいいっぱいで、接続が中断されたとき、LWP は is_success で確認すると成功を返す。
is_error も同じで、ルーターがいっぱいいっぱいで接続中断されてもエラー無しと返す。

なので、HTML に限っては ->content に </html> があるかどうかで判断してる。
画像は HEAD で得たファイルサイズと一致してるかどうか。
796デフォルトの名無しさんsage2011/01/22(土) 15:35:56
なるほど〜。でもルーターがいっぱいいっぱいだとheadも得られないんじゃ?
797786sage2011/01/22(土) 17:22:22
undefを受け取って最初に疑ったのは連続アクセスによるサーバーエラーなんだが
パケットキャプチャしてみるとそもそもHTTP GETリクエストを送出していない・・・
なのでLWP::UserAgentを調べてる ← いまここ

ちなみにundef受け取ったら1秒待機して再getをすると上手くいく
798デフォルトの名無しさんsage2011/01/22(土) 19:58:42
あるルータがそういう挙動をするという事を一般的な現象と思い込んでしまう、
底辺perl脳。

そもそもNATテーブルに空きがなければ、普通コネクションは成立しないよね。
どんな、ルータ使ってるんだか知らないけど。w
799デフォルトの名無しさんsage2011/01/23(日) 02:58:29
>>796
head で得られるデータってすごく短いから、それぐらいなら正常に終わるけど、
ちょっと長いのになるとルーターが取りこぼす。

ちなみに BA8000Pro
他のルーターでもテーブルがいっぱいいっぱいだときっつい
許容量を超えると DNS 解決すら出来なくなる
IP さえ分かればなんとかデータは取ってこれるけど、ものすごい不安定。
800デフォルトの名無しさんsage2011/01/23(日) 13:46:57
NATの仕組みを理解していれば、そんな結論には至らないわけだが。
恐怖のperl脳

NATテーブルがあふれたから不安定になるんじゃなくて、不安定だから
再接続を繰り返してNATがあふれたんだろ。

NATテーブルを線形探索しているヘッポコルータなら、テーブルが埋まっ
てくると不安定になるというのはありうるが、そんなルータ生き残って
ないだろ。
801デフォルトの名無しさんsage2011/01/23(日) 16:04:17
いやテーブルが溢れなければ LWP で挙動が変になることはない
ルーターの NAT テーブル保持数が 2000 を越えたあたりから
DNS の変換が出来なくなったり、接続出来ても処理が不安定に
なってるから切断されたり。
802デフォルトの名無しさんsage2011/01/23(日) 16:06:09
はいはいわろすわろす
803デフォルトの名無しさんsage2011/01/23(日) 16:28:29
なっ、perl脳って怖いだろ。これで本人はいたって本気なんだから。
804デフォルトの名無しさんsage2011/01/23(日) 17:48:09
某中規模向けルータでも、デフォだとNATテーブル埋まりやすくて不安定になるが・・・
テーブル溢れさせたことないから、
そのときのLWPの挙動なんて知らんけど。
805デフォルトの名無しさんsage2011/01/23(日) 19:57:09
まぁ普通に使ってりゃテーブルが埋まること無いし、
体験した事じゃなきゃ信じない人種にとっては信じられない事かな?
806デフォルトの名無しさんsage2011/01/23(日) 20:03:47
>>805
規模によっては普通に使ってて、4096テーブル埋まるんですけど。
まぁ個人ユーザなら、普通は体験する事ないよね。
807デフォルトの名無しさんsage2011/01/23(日) 20:04:32
ないなう
808デフォルトの名無しさんsage2011/01/23(日) 21:09:51
油断してると前科者になるぞ
809デフォルトの名無しさんsage2011/01/23(日) 23:04:12
「サイバーテロの練習をしているかもしれない」
810デフォルトの名無しさんsage2011/01/23(日) 23:21:10
>>806
使ってる BA8000Pro はテーブル数が 2600 なんで、ちょっと Linux ISO がバージョンアップしたときなんて結構辛い
なので数日待ってから放流してる
まぁ Perl とは無関係の話しだし程ほどにw
811デフォルトの名無しさんsage2011/01/24(月) 09:30:56
以下のようなボタンが二つあったとして
最初のボタンを押したいんですがどうやったらできるのでしょうか?
use WWW::Mechanize でどうにかできるようにしたいです。

<form action="xxxx" method="post">
<input type="submit" name="yyyyyyy" value="yes">
<input type="submit" name="nnnnnnn" value="no">
</form>
812デフォルトの名無しさんsage2011/01/24(月) 09:43:25
>>811
WWW::Mechanizeのドキュメントをあと10回くらい読み返す
813デフォルトの名無しさんsage2011/01/24(月) 09:56:57
>>812
そんなこと言わずに、助けてくださいよ。
このHTMLはyesボタンとnoボタンがありますよね?

<form action="xxxx" method="post">
<input type="submit" name="yyyyyyy" value="yes">
<input type="submit" name="nnnnnnn" value="no">
</form>

押したいボタンを押せるようにしたいのですが、ここ読んでもそれらしいことは書いてありませんでした。
http://search.cpan.org/~petdance/WWW-Mechanize-1.66/lib/WWW/Mechanize.pm
フォームの中にsubmitが2つあるのは初めてみたのでどう処理していいか分からないです。
814デフォルトの名無しさんsage2011/01/24(月) 11:31:36
>>813
ちゃんと、書いてあるじゃん。
815デフォルトの名無しさんsage2011/01/24(月) 12:19:51
和訳
http://perldoc.jp/docs/modules/WWW-Mechanize-1.02/Mechanize.pod
816デフォルトの名無しさんsage2011/01/24(月) 16:24:17
>>815
それバージョン古いので新しいの用意して下さい
817デフォルトの名無しさんsage2011/01/24(月) 16:53:39
http://www.microsofttranslator.com/bv.aspx?from=en&to=ja&a=http://search.cpan.org/~petdance/WWW-Mechanize-1.66/lib/WWW/Mechanize.pm
818デフォルトの名無しさんsage2011/01/24(月) 16:58:44
813(≠814-817)です。

$mech->click_button( name => 'yyyyyyy');

とするとエラーが出ました。

No clickable input with name yyyyyyy at /usr/lib/perl5/site_perl/5.10/WWW/Mechanize.pm line 1765

ヒントをおねがいします。
819デフォルトの名無しさんsage2011/01/24(月) 20:56:06
yyyyyyy がtypo
820デフォルトの名無しさんsage2011/01/25(火) 13:35:03


open my $fh,"<","file.txt";

$fhは型グロブのリファレンスのようなんですが
そのリファレント(型グロブはどうなってるんでしょうか?何が入ってるんでしょうか?
教えてください

内部的なものまで意識する必要はないでしょうか?教えてください
821デフォルトの名無しさんsage2011/01/25(火) 14:44:29
print $fh
822デフォルトの名無しさんsage2011/01/25(火) 16:03:23
>>820
普通に無名のグロブだと思う。

ググったら、IO::Handleのメソッドが使える謎を追ってるページが出てきた。
初めて知ったけど、面白いね。
ttp://d.hatena.ne.jp/dayflower/20080605/1212652674
823Perl忍者 ◆M5ZWRnXOj6 sage2011/01/25(火) 16:31:46
^0^
824デフォルトの名無しさんsage2011/01/30(日) 15:00:27
正規表現で文字列の検索開始位置を指定するにはどうすればいいでしょうか?

$string = "aaaaa";
while ( $string =~ /a/ ) {
  print "aを見つけました\r\n";
}

たとえば上のスクリプトを動かすと無限ループに陥りますが,
aを見つけたら次はその位置の次の文字から検索するようにすれば
aの文字数分だけでループを終了できるはずです。
このような検索開始位置の指定は可能でしょうか?
825デフォルトの名無しさんsage2011/01/30(日) 15:02:36
$string = "aaaaa";
while ( $string =~ /a/g ) {
  print "aを見つけました\r\n";
}
826デフォルトの名無しさんsage2011/01/30(日) 15:18:23
pos($str) =
//gc
827デフォルトの名無しさんsage2011/01/30(日) 15:42:08
即レスありがとうございました;;
828デフォルトの名無しさんsage2011/02/03(木) 03:17:19
perlのバージョンを5.10から5.12に上げたら、jcodeのエラーが出るようになった。

>defined(%hash) is deprecated at jcode.pl line 684, <DATA> line 855.
> (Maybe you should just omit the defined()?)
>defined(%hash) is deprecated at jcode.pl line 693, <DATA> line 855.
> (Maybe you should just omit the defined()?)


ttp://oshiete.goo.ne.jp/qa/6177617.htmlの人が似たようなエラーで、
その部分を抜き出していた。
683: local(*s, $n) = @_;
684: &init_z2h_euc unless defined %z2h_euc;
685: $s =~ s/($re_euc_c|$re_euc_kana)/

692: local(*s, $n) = @_;
693: &init_z2h_sjis unless defined %z2h_sjis;
694: $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo;

5.12だと、perlのコードはそのまま使えないのでしょうか?
829デフォルトの名無しさんsage2011/02/03(木) 03:36:22
deprecated
830デフォルトの名無しさんsage2011/02/03(木) 03:36:56
普通に defined 〜 じゃなくて defined() って書いてね

って話だと思う
831デフォルトの名無しさんsage2011/02/03(木) 03:50:22
perl56delta
defined(@array) is deprecated
(D) defined() is not usually useful on arrays because it checks for an undefined scalar value. If you want to see if the array is empty, just use if (@array) { # not empty } for example.
defined(%hash) is deprecated
(D) defined() is not usually useful on hashes because it checks for an undefined scalar value. If you want to see if the hash is empty, just use if (%hash) { # not empty } for example.
832デフォルトの名無しさんsage2011/02/03(木) 04:05:12
>>828
>>831の示しているように、配列やハッシュに対する defined の使用は
5.6.0 の時点で非推奨なんだけどな。
http://perldoc.perl.org/perl56delta.html#defined%28@array%29-is-deprecated

警告がイヤなら、メッセージ通り defined を抜くなり、jacode.pl に差し替えるなり、
no warnings 'deprecated'; すればいい。
http://perldoc.perl.org/perllexwarn.html
833デフォルトの名無しさんsage2011/02/03(木) 07:04:05
exists 使えって事か。
834デフォルトの名無しさんsage2011/02/03(木) 14:06:21
existsってundef代入しただけでもtrueが返るのか
definedはfalseが返るけど
835デフォルトの名無しさんsage2011/02/03(木) 23:24:57
Windows7 64bit で、ActivePerl 64bit 使っているのですが、
(This is perl 5, version 12, subversion 2 (v5.12.2) built for MSWin32-x64-multi-thread)

pipe を使った open に "%" という文字列が入っていると open に失敗してしまうようなのですが、
どなたか対策知りませんでしょうか?
"%" が入っていなかったり、"%" が入っていても cygwin の perl(32bit 5.10.1) を使っていると問題が出ないのですが。

use FileHandle;

my $arg = "%";
my $prog = new FileHandle;
if (!$prog->open("something.exe \"$arg\"|")) {
die "failed to exec";
}
836デフォルトの名無しさんsage2011/02/03(木) 23:47:13
Windows は % を使わないほうがいいよ。
たしか BAT での変数名とかだったような・・・
837デフォルトの名無しさんsage2011/02/04(金) 07:46:39
@array = 1 .. 100;
@new;
for( @array ){
my $r = rand @new+1;
push(@new, $new[$r]);
$new[$r] = $_;
}
一番下がなにをしてるのか教えてください
838デフォルトの名無しさんsage2011/02/04(金) 07:58:43
下の二行でシャッフルでゲソ
839デフォルトの名無しさんsage2011/02/04(金) 08:15:33
>>838 だけど
pushの行と$new[$r]の行の下に print join " ", @new; を入れて @new の内容を見てみるとわかりやすいですよ
840デフォルトの名無しさんsage2011/02/04(金) 16:05:27
my @array = qw/a..z/;
for(my $i = 0; $i <= $#array; $i++){

}

841デフォルトの名無しさんsage2011/02/05(土) 01:08:00
perlは先頭行に #user/bin/perl なコメントのソースファイル
を当たり前のように見るけど、意味不明だ。
842デフォルトの名無しさんsage2011/02/05(土) 01:13:31
それは誰でもイミフだろうと思うがshebangでぐぐるといいよ
843デフォルトの名無しさんsage2011/02/05(土) 06:31:28
userは見たことないな、今のところ
844デフォルトの名無しさんsage2011/02/05(土) 06:42:36
文字列が数値に変換されるとき、前方の 0 は無視されると解釈してよろしいのでしょうか?

my $x = "012";
print $x + 0; # => 12
845デフォルトの名無しさんsage2011/02/05(土) 06:45:22
その認識でok
文字列をちゃんと数値として解釈してほしいのであれば、oct関数を使うといいよ。
846デフォルトの名無しさんsage2011/02/05(土) 07:45:05
>>845
d
oct関数っていうのもあるんですね。

でも、oct関数を使うと、なぜか10になっちゃいます><

my $x = "012";
print oct($x); # => 10
847デフォルトの名無しさんsage2011/02/05(土) 07:57:24
>>843
間違えたuserではなくusrで、#の次に!が抜けてた
848デフォルトの名無しさんsage2011/02/05(土) 08:06:59
つ8進法
849デフォルトの名無しさんsage2011/02/05(土) 08:29:09
要するに、windowsでは不要なんだな。
シバンというヘッダーを全く付けずに作ってたが、unixではないから
やはり正解だったんだな。
個人宅や職場でunixやlinuxなんか見ることないのに、コンピュータ技術
の分野ではwindowsを上回ってるかも知れないくらいに、コンピュータの
プロの人は仕事で利用してるんだな。
850デフォルトの名無しさんsage2011/02/05(土) 08:57:28
active perlで起動させたたコマンドウインドウを、タスクトレイにしまう方法ってありますか?
ずっと動かし続けるのに邪魔なので。
851デフォルトの名無しさんsage2011/02/05(土) 09:29:44
wperlというのがそれな筈なんだけど、うまくいかない
852デフォルトの名無しさんsage2011/02/05(土) 09:54:23
wperlは確認用のウインドウすら出なそうなので
別のソフトで探したところTaskTrayPlusを使って出来ました

TaskTrayPlus
「ホットキーの設定に失敗しました!」って出るけどうまくいった
ttp://bnassoft.s35.xrea.com/

DM2
使い勝手いいけどPerlだけ無反応
ttp://dm2.sourceforge.net/
853デフォルトの名無しさんsage2011/02/05(土) 11:07:10
#の次に!だけでなく、usrの前に/も抜けてた
854デフォルトの名無しさんsage2011/02/05(土) 11:41:47
いいよお前以外分かってるから
855デフォルトの名無しさんsage2011/02/05(土) 16:36:19
http://ideone.com/D9Nqc
CGI.pmで複数のcssファイル(index.cssとbase.css)を適用させようとして上記URLにあるコードを
書いたのですが、うまく二つとも適用されません。
どのようにすれば二つのCSSファイルを適用させることが出来ますか?
856デフォルトの名無しさんsage2011/02/05(土) 16:40:26
ttp://perl.wonder-boys.net/?p=210
857855sage2011/02/05(土) 16:46:45
>>856
そこを見て下記のようなコードを書くなどして上手くいかなかった為、今回質問しました。
http://ideone.com/FJr73
http://ideone.com/7YfA4
858デフォルトの名無しさんsage2011/02/05(土) 16:59:03
use CGI;

use CGI qw/:standard/;
859855sage2011/02/05(土) 17:26:28
できました!なるほどー
ありがとうございます!
860Perl評論家sage2011/02/05(土) 21:15:18
WindowsでPerlやってる人いますか?
MacやLinuxと違って注意するところはなんですか?

CPANとか文字コードですか?教えて下さい
861デフォルトの名無しさんsage2011/02/06(日) 00:09:45
Macにもperlがあったか
862Perl評論家sage2011/02/06(日) 00:41:53
Macにもあんだけどさあ
なあ、前に
->矢印演算子がちょっとわからなかったからさあ


(矢印演算子)

C や C++ と同じように "->" は中置の被参照演算子です。
右側が [...], {...}, (...) のいずれかの形の添字であれば、左側は配列、ハッシュ、 サブルーチンへのハードリファレンスかシンボリックリファレンス
(あるいは 技術的には、配列またはハードリファレンスが代入可能であれば ハードリファレンスを保持できる場所) でなければなりません。perlreftut と
perlref を参照してください。

そうでなければ、右側はメソッド名かサブルーチンのリファレンスを持った 単純スカラ変数で、左側はオブジェクト
(bless されたリファレンス) か クラス名でなければなりません。 perlobj を参照してください。


って言われたから
perldoc.jp読む癖つけたわ
まじperldocってさいこうなんだけど

>右側はサブルーチンのリファレンスを持った 単純スカラ変数

これってさあ $sub=sub{'bakasinekiero'};

$obj->$subってことだろお?
もうまじリファレンスもマスターしちゃったからさあ

おれはPerlマスターなんじゃないかなあ
863Perl評論家sage2011/02/06(日) 01:03:42
初めてのPerlだけでだいたいわかるよ
あとはperldoc

これだけオブジェクトPerlなんてかわなくていい
864デフォルトの名無しさんsage2011/02/06(日) 01:07:30
でも、Effective Perlは買おう
865デフォルトの名無しさんsage2011/02/06(日) 08:11:49
Effective Perlは第2版が出そうだから今は我慢してる
866デフォルトの名無しさんsage2011/02/06(日) 11:16:24
エキスパートCプログラミングのperl版みたいな本はないのかな
867デフォルトの名無しさんsage2011/02/06(日) 11:45:51
perlってサーバー上じゃないと動かないよね?C++やjavaに比べたら重いし遅いし不便だよね。
868デフォルトの名無しさんsage2011/02/06(日) 12:03:24
>>867
なんという釣り針
869デフォルトの名無しさんsage2011/02/06(日) 12:11:14
perl の歴史を無視とかw
870デフォルトの名無しさんsage2011/02/06(日) 12:14:48
>>867
お前PerlをPHPみたいなWEBでしか動かない言語と思ってないか?
871デフォルトの名無しさんsage2011/02/06(日) 12:29:13
.NETってきくだけでうさんくさい
872デフォルトの名無しさんsage2011/02/06(日) 13:56:08
perl.net
873Perl忍者 ◆M5ZWRnXOj6 2011/02/06(日) 18:43:15

869 :デフォルトの名無しさん:2011/02/06(日) 12:11:14
perl の歴史を無視とかw



爆笑
874デフォルトの名無しさんsage2011/02/06(日) 19:06:09
技術の最先端を追うには英語読めないとやってられないの?
875デフォルトの名無しさん2011/02/06(日) 21:12:32
DBIで$sth(ステイトメントハンドラ)からfinish()とすると
Useless use of private variable in void context at test1.pl line 10.
といわれるんですけど、これってやる必要ないのでしょうか?

use strict;
use warnings;
use DBI;
my $dbh = DBI->connect('dbi:odbc:test_dsn', 'test', 'test1');
my $sth = $dbh->prepare("SELECT * FROM TEST1");
$sth->execute();
while (my ($a,$b)=$sth->fetchrow_array) {
print "a=$a, b=$b\n";
}
$sth=>finish();
$dbh->disconnect();

こんな感じのコードです。perl -vはv5.10.1です。
876デフォルトの名無しさんsage2011/02/06(日) 21:15:35
877デフォルトの名無しさんsage2011/02/06(日) 22:59:02
× $sth=>finish();
○ $sth->finish();

=> であるか -> でないか
878デフォルトの名無しさん2011/02/06(日) 23:28:00
そういう意味だったですね。。。
すいませんでした。
879Perl忍者 ◆M5ZWRnXOj6 2011/02/07(月) 00:47:05
究極オブゴットオブバカス
880Perl忍者 ◆M5ZWRnXOj6 2011/02/07(月) 01:01:42
俺ってこんなクソコテだけどPerl(2ch)スレでは高レベル
881 ̄ ̄ ̄ ̄)ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄2011/02/07(月) 04:28:00
     ∧_∧
    ( ´・ω・`)     ∧_∧
    /     \   (     ) そうきたかwww
.__| |    .| |_ /      ヽ
||\  ̄ ̄ ̄ ̄   / ..|   | |
||\..∧_∧    (⌒\|__./ ./
||.  (    .)     ~\_____ノ|   ∧_∧
  /   ヽ.ワロス       \|   (    ) お前が言うと説得力あるなあww
  |     ヽ           \/     ヽ.
  |    |ヽ、二⌒)        / .|   | |
  .|    ヽ \∧_∧    (⌒\|_ .../ /
882デフォルトの名無しさんsage2011/02/07(月) 21:18:43
utf8で
@file=('ファイル名 #テクスト(abc).d2v', 'ファイル名 #テクスト(abc).ts', 'ファイル名 #テクスト(abc) PID 110 DELAY -3ms.aac');
$filename=ファイル名 #テクスト(abc);
が入力されていて
ファイル名 #テクスト(abc) PID 110 DELAY -3ms.aac
を取得するために
foreach $j(@files){
print NEW "rem ".$j."\n";
if($j=~/$aacfilename.+aac$/){
}
}
としたのですが、取得できませんでした。

$filename=ファイル名 #テクストabc;
@file=('ファイル名 #テクストabc.d2v', 'ファイル名 #テクストabc.ts', 'ファイル名 #テクストabc PID 110 DELAY -3ms.aac');
であれば、
ファイル名 #テクストabc PID 110 DELAY -3ms.aac
をマッチさせることができました。
文字列に()が含まれている時でもマッチさせるにはどうすればよいでしょうか?
883デフォルトの名無しさんsage2011/02/07(月) 22:08:33
初めてperlが仕事で役に立ったよ
884デフォルトの名無しさんsage2011/02/08(火) 02:19:16
>>882
/\.aac$/
885デフォルトの名無しさんsage2011/02/08(火) 09:57:24
>>882
$j =~ s/([()])/\\$1/g;
886デフォルトの名無しさんsage2011/02/08(火) 15:49:32
perlってなんで、こう謎な圧力うけること多いの?
http://www.yabbforum.com/community/YaBB.pl?num=1286567562
今日もlispスレでperl糞とか言われてしまったわ
887Perl評論家sage2011/02/08(火) 17:21:51
http://www.yabbforum.com/community/YaBB.pl?num=1286567562

ここで
shitっていれてもでてきませんでした

糞ってどこに書いて案ですか?
888Perl評論家sage2011/02/08(火) 17:41:01
lispスレでしたすみません
889デフォルトの名無しさんsage2011/02/08(火) 21:04:08
>>884,885
回答ありがとうございます。
そして、言葉足らずですみません。
$filenameに格納された文字列でマッチをさせたいのですが
どのようにすればよいでしょうか?
890882,889sage2011/02/08(火) 21:08:15
>>884,885
度々すみません。
$filenameに格納された文字列を含んで、aacも含む
条件でマッチさせたいです。
その時はどのようにすればよいでしょうか?
891デフォルトの名無しさんsage2011/02/08(火) 21:12:49
&&
892デフォルトの名無しさんsage2011/02/08(火) 21:13:05
$filename = "\Qfilename";
893882,889sage2011/02/08(火) 21:23:58
>>891,892
回答ありがとうございます。
if($j=~/\Q$aacfilename\E.+aac$/){
で期待通りの結果になりました。
これでファイル処理が楽になります
ありがとうございました。
894Perl忍者 ◆M5ZWRnXOj6 sage2011/02/08(火) 23:48:32
うぜえ

正規表現ぐらいで質問してるやつ
895デフォルトの名無しさんsage2011/02/08(火) 23:52:08
今度OSをXPからwindows7に変えそうなのですが、win7でもactiveperlをインストさえしてしまえば、これまで書いた大抵のコードはXPのときと変わらず使えるでしょうか?
ファイルの読み書き、コマンドプロンプトに文字を表示、文字列の操作や数値の計算などの簡単なものです
あとはCPANでのモジュールのインストールなどです
やり方を一新しないとモジュールのインストができない、とかはないですよね?
以前やってた時はコマンドプロンプトで
perl -MCPAN -e shell
install (モジュール名)
のようにやってました
896デフォルトの名無しさんsage2011/02/08(火) 23:57:04
nmakeっていうやついれたほうがいいらしいぜ

おれさあ

Windows買ってからさあ

CPANとかで導入するときエラー出てやる気うせるんだよね^^;

だからWindowsでPerlやるのめんどくさいんだよね

ichatのBOTつくろうとしたら
モジュール入れるとき Linuxみたいに入らなくてやる気うせたんだよね^^;

windows764bitだとnmake意味不明だったから^^;
897デフォルトの名無しさんsage2011/02/09(水) 00:50:26
>>896
ありがとうです。
CPANのやり方は64bitだとかなりめんどそうですね、調べてもあまり載ってないし・・・
前にXPでやったときは下のサイトをそのままやっちゃったんですよね
だからあんまり身についてなくて(´д`;)
ttp://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2F%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB(CPAN)

nmakeってのはVisual Studio Express Editionsに入ってるみたいだから、win7でもtarとgzip入手して、Visual Studio Express Editionsインストしたら出来るのかな・・・
898デフォルトの名無しさんsage2011/02/09(水) 07:53:16
Strawberry Perlはどうなの?
899デフォルトの名無しさんsage2011/02/09(水) 17:19:24
達人の方知恵をください。

引数の内容や数でサブルーチンの処理を動的に変えたいです。
例えば引数の和を返す場合に処理の部分をスマートに書く方法はありますか?

add($a);
add($a, $b);
add(@c);
add(\@d, \@e);

sub add
{
処理;
return $ans;
}
900デフォルトの名無しさんsage2011/02/09(水) 17:44:47
3つ目の配列にぶち込んだ方が楽っちゃ楽よね

リファレンスはめんどくさいので考慮しないとしてw、


sub add{

my @data = @_;
my $total = 0;
foreach my $datum (@data){
$total += $datum;
}

return $total;

}




なんも考えずにざっと組むと、こんな感じ。
901デフォルトの名無しさんsage2011/02/09(水) 17:52:38
sub add {
my$sum = 0;
$sum += ref $_ eq "ARRAY" ? add(@$_) : $_ foreach @_;
return $sum;
}
902899sage2011/02/09(水) 17:58:03
例として和を出したのですが、目的は足す処理ではなく
「引数の内容で処理を変えたい」です。

サブルーチンのプロトタイプ宣言が複数できれば簡単なのですが、perlでは無理みたいです。
sub add(\$)
sub add(\$\$)
sub add(\@)

やはり引数に応じてサブルーチンを複数作るのがベストプラクティスなのでしょうか?
903899sage2011/02/09(水) 18:10:54
>>901
型をチェックして処理を分けるイメージですね

引数のパターンをいかにチェックするかがキーなのか・・・
ありがとうございます、方向性が見えてきました。
904デフォルトの名無しさんsage2011/02/09(水) 19:20:12
>>899
use List::Util qw(reduce);

sub my_flatten { return map{ ref $_ eq 'ARRAY' ? my_flatten(@{$_}) : $_ } @_ }

sub add {
no warnings 'once';
return reduce{ $a+$b } my_flatten(@_);
}
 219KB (224787Byte)
dummy_for_searchRef

DAT2HTML 0.32g Converted.