Perlについての質問箱 45箱目
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2010/10/22(金) 22:45:29CGI と 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 あたり
0002デフォルトの名無しさん
2010/10/22(金) 22:45:44Perl プログラミング講座: 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/
0003デフォルトの名無しさん
2010/10/22(金) 22:45:55CPAN.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
0004デフォルトの名無しさん
2010/10/22(金) 22:46:10# このレスは、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 でエンコードする必要があります。
0005デフォルトの名無しさん
2010/10/22(金) 22:46:281 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/
0006デフォルトの名無しさん
2010/10/22(金) 22:46:4021 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/
0007デフォルトの名無しさん
2010/10/22(金) 22:47:1141 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/
0008Perl忍者 ◆M5ZWRnXOj6
2010/10/22(金) 22:52:24戦う
0009デフォルトの名無しさん
2010/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/
0010デフォルトの名無しさん
2010/10/23(土) 00:47:21前スレの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";
************************************
0011デフォルトの名無しさん
2010/10/23(土) 11:28:073004,bbb
3005,ccc
・
・
こんなレコードが何百万行っていうCSVがあって、
1カラム目の値をキーとして、2カラム目の値を取得したいんです。
このリクエストは1分当たりに何度も発生します。
当然、1カラム目の値はユニークです。
で、リクエストが発生するたびに、
単純に先頭から検索していったんじゃ、時間がかかるんで、
このCSVをハッシュに持っておいて、
レスポンスを返すようなデーモンを作れば、速くなるかな〜
と考えてるんですが、方向性は合ってますかね?
#DBは使えない環境です。。。
ここで聞くことか迷ったんですが、
組むならperlで組むんで、こちらで聞いてみました。
よろしくお願いします。
0012デフォルトの名無しさん
2010/10/23(土) 11:32:140013デフォルトの名無しさん
2010/10/23(土) 12:41:02貧者の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/
0014デフォルトの名無しさん
2010/10/23(土) 15:15:090015デフォルトの名無しさん
2010/10/23(土) 16:06:42$str =~ /$re_quote|[0-9]+/;
と、
my $re_qr = qr/[a-z]+/;
$str =~ /$re_qr|[0-9]+/;
とでは、どういう違い(メリット?デメリット?)があるのでしょうか?
0016デフォルトの名無しさん
2010/10/23(土) 23:59:19qr//は事前にコンパイルされるのが特徴なんだけど、
その二つだと、あまり違わない。
迷ったらqr//推奨。
0017デフォルトの名無しさん
2010/10/24(日) 06:52:59そうなんですか。
�d
0018Perl忍者 ◆M5ZWRnXOj6
2010/10/24(日) 08:25:29いままでの常識とは逆の書き方マイナーなほうで書くのが正しいんだよ^^
あんまりかかないほう=真だから
0019デフォルトの名無しさん
2010/10/24(日) 09:56:290020デフォルトの名無しさん
2010/10/24(日) 10:46:47を
日本語/は/面倒臭い/です/ね
のように、単語や文節で区切ってくれるモジュールとか無いのかしら?
0021デフォルトの名無しさん
2010/10/24(日) 11:12:16my $class=shift;
return $class;
}
my $o=person->new; #変更点
print $o;
だとpersonと表示されますが、$o=person::new;に変えると何も表示されません。
詳しい方教えてください。
0022デフォルトの名無しさん
2010/10/24(日) 11:21:30person::newだとただのサブルーチンの呼び出しですね
引数が必要でした。
0023Perl忍者 ◆M5ZWRnXOj6
2010/10/24(日) 11:23:070024Perl忍者 ◆M5ZWRnXOj6
2010/10/24(日) 11:25:430025デフォルトの名無しさん
2010/10/24(日) 11:57:24茶筌
0026デフォルトの名無しさん
2010/10/24(日) 16:10:460027デフォルトの名無しさん
2010/10/24(日) 17:38:02和布蕪
0028デフォルトの名無しさん
2010/10/24(日) 18:42:35http://perldoc.jp/docs/perl/5.10.0/perltoot.pod
一度、Perlのオブジェクト指向の本か入門記事を読むといいよ。
0029Perl忍者 ◆M5ZWRnXOj6
2010/10/24(日) 19:23:56っていう本出たら買う?
0030黒龍炎華@ダーク
2010/10/24(日) 19:25:340031デフォルトの名無しさん
2010/10/24(日) 19:26:560032爆裂田代砲
2010/10/24(日) 19:27:030033Perl忍者 ◆M5ZWRnXOj6
2010/10/24(日) 19:28:180034デフォルトの名無しさん
2010/10/24(日) 20:12:30perltoot は bless を忘れるレベルの子には勧め辛い
http://fleur.hio.jp/perldoc/mix/pod/perlboot.html
0035デフォルトの名無しさん
2010/10/25(月) 07:56:21print "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);
}
このプログラムが何回繰り返すことになるのかよく分からない。再帰法は頭がぐちゃちゃになるぜ。
誰か教えてくれ
0036デフォルトの名無しさん
2010/10/25(月) 12:08:13良さげなモジュールってありますか?
0037デフォルトの名無しさん
2010/10/25(月) 12:54:18良さげの意味次第だが
http://search.cpan.org/dist/DateTime-Format-W3CDTF/
0038デフォルトの名無しさん
2010/10/25(月) 15:18:42ついでにこれも
http://search.cpan.org/dist/DateTime-Format-Epoch/
0039デフォルトの名無しさん
2010/10/25(月) 17:42:170040デフォルトの名無しさん
2010/10/25(月) 18:19:05戦前のアメリカのコメディアンのギャグフレーズ
0041デフォルトの名無しさん
2010/10/25(月) 22:52:190042デフォルトの名無しさん
2010/10/25(月) 23:23:24TCPサーバの生存監視ツールを作成しようとしています。
tcpクライアントより問い合わせを行い、一定時間応答が帰らない場合
タイムアウトエラーとしたいと考えています。
調べたところ、IO::Socket::INETにTimeOutオプションというのがあったのですが
使用方法がいまいちよくわかりません。
タイムアウトになったことをどのように検知するかご教授頂けないでしょうか。
my $socket = IO::Socket::INET->new(
PeerAddr => 'localhost',
PeerPort => 9999,
Proto => 'tcp',
TimeOut => 5
);
0043デフォルトの名無しさん
2010/10/25(月) 23:47:25004442
2010/10/26(火) 00:15:54ご教授ありがとうございます。
さっそく調べたところLWP::Useragentはhttpを扱うようですね。
監視対象のサーバがTCPサーバですので、IO::Socket::INETが適当かと思いました。
やりたいこととしては、TCPサーバが3wayハンドシェイク終了後、クライアントからのputに応答を返さない事象がごく稀に発生するため
それを検知するツールを作成しようと考えています。
もちろんポートが開いておらず、3wayハンドシェイクに失敗する場合も検知したいと考えています。
0046デフォルトの名無しさん
2010/10/26(火) 06:04:19だったら HEAD リクエストに掛かった時間でいいんじゃないの?
ミリ秒なら TimeReso だっけ?で得られるわけだし・・・
0047デフォルトの名無しさん
2010/10/26(火) 16:44:02コネクト失敗するとundefが返ってきて、$!にエラーが入る。
... or die $!; を書いておくとわかるよ。
0048デフォルトの名無しさん
2010/10/27(水) 00:28:49どうすればできるでしょうか?
0049デフォルトの名無しさん
2010/10/27(水) 03:50:39たとえばWindows XPのスタンバイなら
`C:\\WINDOWS\\system32\\rundll32.exe powrprof.dll,SetSuspendState`;
0050デフォルトの名無しさん
2010/10/28(木) 00:11:33FILE : test.pl
my $config = {
'datadir' => 'pastdata',
};
sub getconfig{
return \$config;
}
FILE : main.pl
require 'test.pl';
print $$config->{'datadir'};
このようになるわけですが、
print $config->{'datadir'};
このように記述したい場合、どこをどうすればいいでしょう?
0051デフォルトの名無しさん
2010/10/28(木) 00:38:58ってやったら
$config->{'datadir'};
でもいけたけど・・・スマートじゃないよねぇww
0052デフォルトの名無しさん
2010/10/28(木) 00:43:11FILE: test.pl
{ datadir => 'pastdata' }; # 最後にハッシュリファレンスを置く
FILE: main.pl
my $config = do './test.pl';
print $config->{'datadir'};
0053デフォルトの名無しさん
2010/10/28(木) 01:42:19FILE: text.pl
my %config = (datadir => 'pastdir');
sub getconfig {
return \%config;
}
1;
FILE: main.pl
require('test.pl');
my $config = getconfig();
print $config->{datadir};
これでいいのか?
0054デフォルトの名無しさん
2010/10/28(木) 07:26:31お〜出来た!!
ついでに質問なんですが ^-^;
1行目は
$cidlist->{$tmpCID} = { 'name' => $tmpNAME };
って追加してるけど2行目で追加する時は
%{$cidlist->{$tmpCID}}->{'count'} = $tmpCNT;
ってやるしかないの?
1行で書くなら
$cidlist->{$tmpCID} = { 'name' => $tmpNAME, 'count' => $tmpCNT };
って出来るのは分かるけど、後々追加したいと思ったときに知っておきたい。
0055デフォルトの名無しさん
2010/10/28(木) 07:31:26ってやるとワーニング出てた orz
0056デフォルトの名無しさん
2010/10/28(木) 07:57:030057デフォルトの名無しさん
2010/10/28(木) 08:39:35use 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});
0058デフォルトの名無しさん
2010/10/28(木) 10:17:05そうゆう記述どっかで見たことある!ww
久々に書いてると閃きすら起きない事実に凹んできたw
ありがとう
0059デフォルトの名無しさん
2010/10/28(木) 11:04:35Config::Simple - 簡単な設定ファイルクラス
ttp://perldoc.jp/docs/modules/Config-Simple-4.55/Simple.pod
0060デフォルトの名無しさん
2010/10/28(木) 11:26:20設定は YAML::Syck を使って YAMLファイルから読み込んでるなあ
0061デフォルトの名無しさん
2010/10/28(木) 13:01:49ありがとうございます。
時間帯を指定してスタンバイから復帰するにはどうしたらいいでしょう?
0062デフォルトの名無しさん
2010/10/28(木) 17:07:29これは日本語的に何て言えばいいですかね?
無名配列の無名ハッシュでいいんですかね?
それとも配列のハッシュですかね?
ながったらしく無名配列へのリファレンスの無名ハッシュへのリファレンスみたいに長ったらしくいうんでしょうかね?
0063デフォルトの名無しさん
2010/10/28(木) 17:08:230064デフォルトの名無しさん
2010/10/28(木) 17:09:43$ninja={ 'unko'=>[1,2,2,2],'kasu'=>[7,7,7]};
教えてください・・・
0065デフォルトの名無しさん
2010/10/28(木) 17:12:140066デフォルトの名無しさん
2010/10/28(木) 17:19:450067デフォルトの名無しさん
2010/10/28(木) 21:49:24$ninjaを指して言うならハッシュリファレンス
$ninja->{unko}を指して言うなら配列のリファレンス
データ構造を指して言うなら配列で構成されるハッシュとでも言えばいいのか
なんにせよお前糞コテだろ
0068Perl忍者 ◆M5ZWRnXOj6
2010/10/28(木) 21:52:120069Perl忍者 ◆M5ZWRnXOj6
2010/10/28(木) 21:53:060070Perl忍者 ◆M5ZWRnXOj6
2010/10/28(木) 21:54:01ありがとう
0071デフォルトの名無しさん
2010/10/29(金) 04:26:46WindowsAPIのアレはスケジューラで起動しないらい。
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
0072デフォルトの名無しさん
2010/10/29(金) 04:27:45Dim 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"
0073デフォルトの名無しさん
2010/10/29(金) 04:34:19o cscript.exe
だった。以上スレ違い。
0074デフォルトの名無しさん
2010/10/30(土) 00:23:07タブ区切りのテキストデータを読み込んで、行と列の二次元配列を作ろうと思い
このようにしたらとりあえず動きました。
$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);
みたいな感じで一発で配列を代入するにはどうしたらいいでしょうか?
0075デフォルトの名無しさん
2010/10/30(土) 00:30:03push @datas, \@linedata;
0076デフォルトの名無しさん
2010/10/30(土) 00:45:16丁寧に答えてくれてありがとうございました。
0077デフォルトの名無しさん
2010/10/30(土) 00:49:05chomp, push @data, [ split /\t/ ] while <IN>;
007874
2010/10/30(土) 01:07:11素晴らしい回答を有難うございます。
折衷案で
open(IN, $ARGV[0]);
while($line = <IN>){
push @datas, [ split /\t/, $line ];
}
close(IN);
でいきたいと思います。
0079デフォルトの名無しさん
2010/10/30(土) 08:14:340080デフォルトの名無しさん
2010/10/30(土) 09:24:410081デフォルトの名無しさん
2010/10/30(土) 09:38:470082デフォルトの名無しさん
2010/10/30(土) 09:40:53datum
0083Perl忍者 ◆M5ZWRnXOj6
2010/10/30(土) 10:36:180084デフォルトの名無しさん
2010/10/30(土) 19:12:510085デフォルトの名無しさん
2010/11/01(月) 17:53:08マッチして貰いたいもの
_fff_RRR
check1
1check
マッチして貰いたくないもの
11111
444.55
-34
+56
現在はとりあえず(\w+)でマッチさせてその中から[a-zA-Z_]を全く含まないものを省いてます。
0086デフォルトの名無しさん
2010/11/01(月) 17:57:540087デフォルトの名無しさん
2010/11/01(月) 18:06:36ありがとうございました。
0088デフォルトの名無しさん
2010/11/02(火) 00:25:02例外処理で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;
}
0089デフォルトの名無しさん
2010/11/02(火) 01:00:37これって test.txt がどんなエンコーディングで書かれてようが、
euc-jp に変換して読むって意味じゃなくて、euc-jp で書かれてる前提で読み込むんですよね?
ファイルが euc じゃなきゃ変換してやんなきゃいけないんですよね?
0090デフォルトの名無しさん
2010/11/02(火) 02:39:59perldoc encoding
> Thread safety
> use encoding ... is not thread-safe (i.e., do not use in threaded applications).
0091デフォルトの名無しさん
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>
0092デフォルトの名無しさん
2010/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;
0093デフォルトの名無しさん
2010/11/02(火) 04:07:32$tmp いらないんじゃないかな
後、いつもどおりですが $a は...
0094デフォルトの名無しさん
2010/11/02(火) 04:31:51$p1 ='test(.*)test';
$p2 = '"<strong>$1</strong>"';
$str =~ s|$p1|$p2|ee;
print $str;
これぐらいしか思いつかなかった。
009591
2010/11/02(火) 05:54:16一度式に直して評価するというアプローチ…急がば回れと。
0096デフォルトの名無しさん
2010/11/02(火) 15:08:38my $str ='testbigtest';
my $p = sub{ $_[0] =~ s|test(.*)test|<strong>$1</strong>| };
$p->($str);
print $str;
0097デフォルトの名無しさん
2010/11/02(火) 20:16:280098デフォルトの名無しさん
2010/11/02(火) 20:24:190099デフォルトの名無しさん
2010/11/02(火) 20:28:26my $test = { key => 'value' };
前者は+を付けてんだけど、どっちも同じことやってんの?
何か使い分けあるのかな?
0100デフォルトの名無しさん
2010/11/02(火) 20:42:130101デフォルトの名無しさん
2010/11/02(火) 21:20:29そうなんだ。ありがとうございます。
0102Perl忍者 ◆M5ZWRnXOj6
2010/11/02(火) 22:56:500103デフォルトの名無しさん
2010/11/03(水) 16:33:20すまん、ここで単項演算子を使う意味がわからんのだ。
0104デフォルトの名無しさん
2010/11/03(水) 17:00:47安全のため、ハッシュには必ず"+"を付けるぐらいのものかも知れないし。
0105デフォルトの名無しさん
2010/11/03(水) 17:15:150106デフォルトの名無しさん
2010/11/03(水) 17:35:58何が?
0107デフォルトの名無しさん
2010/11/03(水) 17:51:510108デフォルトの名無しさん
2010/11/03(水) 19:25:31安全のためにハッシュに+を付けるてのが
+で何してて何が安全なのかなぁ
0109デフォルトの名無しさん
2010/11/03(水) 20:19:39sub get_all_attribute_values {
my ($class, $instance) = @_;
return +{
map { $_->name => $_->get_value($instance) }
grep { $_->has_value($instance) }
$class->get_all_attributes
};
}
なんで+?
0110104
2010/11/03(水) 21:04:56http://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の答えにはならないけど。
0111デフォルトの名無しさん
2010/11/03(水) 21:31:18また一つ賢くなったような気がする
0112Perl忍者 ◆M5ZWRnXOj6
2010/11/03(水) 22:32:020113Perl忍者 ◆M5ZWRnXOj6
2010/11/03(水) 23:18:340114デフォルトの名無しさん
2010/11/04(木) 03:33:54evalとかmapとか?
少なくともreturnは曖昧でないよなぁ
0115デフォルトの名無しさん
2010/11/04(木) 07:17:46以下のクエリーを発行
select name from testdata
1.DBIで発行し、画面出力
→ 「test」が出力される
2.puttyからmysqlを立ち上げ、発行
→ 「test test」が出力される
実行結果が変わってくるのはなぜでしょうか?
色々なデータで試してみましたが、半角スペースが出現すると
それ以降は読み捨てられてしまうようです。
sele
0116 ◆M21AkfQGck
2010/11/04(木) 09:29:20いろいろ調べたつもりですが見つけることができませんでした
0117デフォルトの名無しさん
2010/11/04(木) 10:07:07これまた難儀な質問だ
普通そんなことはないからプログラムがおかしいんじゃないか?
該当箇所見なきゃ誰もどうとも言えんと思う
0119デフォルトの名無しさん
2010/11/05(金) 14:11:23$sth = $db->prepare("update (select @i:=0) as dummy,Result set ResultID = @i:=@i+1");
$sth->execute;
同じプログラム内に書いた別のSQL文は実行されているのでMYSQLへの接続は出来ていると思います
また、同じSQL文を直接MYSQLへ与えた場合は問題なく実行されました
何が問題で実行されないんでしょうか
0120デフォルトの名無しさん
2010/11/05(金) 15:44:23クエリ投げる前に Perl さんが配列 @i を展開しようとしてくれますから。
use strict してたらすぐ気づきそう。
0121デフォルトの名無しさん
2010/11/06(土) 12:24:02やりたいことは、WordやPPTファイルを検索し、PDFに変換(図などもそのまま)することです。
Acrobat の方でバッチ処理は不可能なようなので、 Perl からファイルのリストをAcrobatの方に送りつけて、Win32モジュールとかでPDF変換処理をさせる、なんてことを考えました。
可能でしょうか?
特にPerlにこだわっているわけではないので、他にいい方法があれば誘導をお願いします。
0122デフォルトの名無しさん
2010/11/06(土) 13:55:090123デフォルトの名無しさん
2010/11/07(日) 02:41:5708: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";
}
0124デフォルトの名無しさん
2010/11/07(日) 02:43:05Win32::GUITestがあれば何でもできる
0125123
2010/11/07(日) 02:45:4008: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
となってしまいます
どうやら一番後ろから参照されているようです
一番頭から参照をするメタ文字の「^」を入れてみましたが
結果は同じでした
非常に低レベルな問題なのですが
どうかご教授御願いします
0126デフォルトの名無しさん
2010/11/07(日) 02:46:52use 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
0127デフォルトの名無しさん
2010/11/07(日) 02:50:54量指定子(*とか+とか)が「強欲」(最長一致)
であることに着目するってことだな
だから上記のように.+?とするか、あるいは
[^\s]+とする必要がある
0128123
2010/11/07(日) 02:55:12できました
*と+が原因だったとは
全然考えてませんでした
もう少し勉強していきます
0129デフォルトの名無しさん
2010/11/07(日) 06:07:150130デフォルトの名無しさん
2010/11/07(日) 07:29:360131デフォルトの名無しさん
2010/11/07(日) 10:37:16**100
*1000
みたいに、桁数固定でゼロサプレスするけど代わりに*を埋める、みたいなことを
printfでできますか
0132デフォルトの名無しさん
2010/11/07(日) 10:40:28%*5d
は?
0133デフォルトの名無しさん
2010/11/07(日) 10:54:320134デフォルトの名無しさん
2010/11/07(日) 11:06:49なにか見やすく整形できるモジュールないでしょうか?
0135デフォルトの名無しさん
2010/11/07(日) 12:17:08printf substr($str, length($str) - 5, 5);
はいはい邪道邪道
0136デフォルトの名無しさん
2010/11/07(日) 12:42:27$temp =~ s/ /*/g;
print $temp;
どうしても途中に一回変数を挟むな
0137デフォルトの名無しさん
2010/11/07(日) 13:05:58print '*' x (5 - length $num) , $num;
0138デフォルトの名無しさん
2010/11/07(日) 13:27:39自分もそれ思いついた
けど、>>137 が一番見やすいのかな?
あっ、質問主じゃないですが ^-^;
0139デフォルトの名無しさん
2010/11/07(日) 13:39:36printf("%s%d", '*'x(5 - length $num), $num);
こんな感じか
0140デフォルトの名無しさん
2010/11/07(日) 14:38:440141デフォルトの名無しさん
2010/11/07(日) 15:05:300142デフォルトの名無しさん
2010/11/07(日) 15:47:09Perl/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
買うならどっちがいいでしょうか?
自分は対してプログラムは打てるほうではありません
ラクダ本は難しすぎました・・・
他にオススメの書籍があれば教えていただきたいです
0143デフォルトの名無しさん
2010/11/07(日) 15:51:450144デフォルトの名無しさん
2010/11/07(日) 16:24:05リファレンスはその言語の簡単な辞書 (簡単というほど薄くはないけどね)
なんとか大全とかは立ち読みして、自分がやりたい事か、似たことをやってる本を買うべき。
0円で済ませたいなら っ【ぐぅぐる】
>>143
perldoc をとは言うが、本は本で役に立つんだぜ?
0145デフォルトの名無しさん
2010/11/07(日) 16:28:43どっちもラクダぐらい読んで理解できるレベルじゃないとだめだろ。
ラクダを難しいと言うようじゃリャマ(オライリーのはじめてのPerl)
あたりでまずは基本を勉強した方がいいと思うぞ。
0146デフォルトの名無しさん
2010/11/07(日) 17:01:170147Perl忍者 ◆M5ZWRnXOj6
2010/11/07(日) 20:05:420148デフォルトの名無しさん
2010/11/07(日) 22:08:40http://php.net/manual/ja/index.php
この関数は将来消える予定だから使うなカス。
この関数はPHP5だけで使えるんだから4厨は使うなカス。
この関数はPHP5.2以降でしか使えねーんだから4厨は使うなカス(え?
この関数はPHPのコンパイル・オプションを指定し直して、インストールし直して、Apache再起動しなきゃ使えるわけねーじゃん!プギャーーー
ウニコード?そんなの気にすんな。goto文さえあれば最強よ。
0149デフォルトの名無しさん
2010/11/08(月) 00:18:480150デフォルトの名無しさん
2010/11/08(月) 00:38:540151デフォルトの名無しさん
2010/11/08(月) 02:40:38流れが速すぎるよう(つд⊂)エーン
0152デフォルトの名無しさん
2010/11/08(月) 05:10:26splitもご検討ください。
>>151
2版の青ラクダから、あんまり変わって無い気がするけどな。
Web系は別物かも。クライアント側含めて。
0153デフォルトの名無しさん
2010/11/08(月) 06:18:32青ラクダの初版です。Web系はごりごり書いてるからなあ。(´・ω・`)ショボーン
0154デフォルトの名無しさん
2010/11/11(木) 03:37:54use threads::shared;
my @A :shared;
for(0..9){push @A,[$_,$_+1,$_+2]}
Invalid value for shared scalar at /home/abc/threadtest.pl line 4
こうなってしまうのはなぜですか?エラーを回避する方法はありますか?
0155デフォルトの名無しさん
2010/11/11(木) 04:27:34for(0..9){ push @A, shared_clone([$_, $_+1, $_+2]) }
0156デフォルトの名無しさん
2010/11/11(木) 05:00:45ありがとうございます!!
0157デフォルトの名無しさん
2010/11/12(金) 01:04:150158デフォルトの名無しさん
2010/11/12(金) 16:10:47独習perlは読みました
CPANにあるモジュールを使いこなせるようになりたいです。
perldocだけだと関数の使い方が完全にはわからないのです
0159デフォルトの名無しさん
2010/11/12(金) 16:29:37貪欲すぎてワロタ
使い方が分からないんじゃなくて、発想しようとしてないから考えがまとまらないんだろ?
テキスト読むだけじゃだめだ
心で感じろ!
0160デフォルトの名無しさん
2010/11/12(金) 16:58:30ある特定の問題があったときにこれをやるモジュールないかな
って探して使うもののような気がする。とにかく数が多いし
いらない人にはほんとに一生縁がないものが大半だよ。その
問題に関わる人にとっては有り難いわけだけど。
0161デフォルトの名無しさん
2010/11/12(金) 17:00:04ドキュメントを素早く把握する速読法が
有効のような気がした
0162Perl忍者 ◆M5ZWRnXOj6
2010/11/12(金) 17:00:52覚えるコツ
しらべるのではなく 作る物ー>どんな処理をするかー>このモジュールを使えばすませられる
みたいにかんがえられるから
なので、モジュールから探すのではなく 作る物を探し他方害意
0163デフォルトの名無しさん
2010/11/12(金) 17:04:41importとかnewとか。
0164Perl忍者 ◆M5ZWRnXOj6
2010/11/12(金) 17:05:37さがせかす自分でさがせごみ
消えろ
0165デフォルトの名無しさん
2010/11/12(金) 17:21:040166デフォルトの名無しさん
2010/11/12(金) 20:11:40→ その後CGIモジュール使って書き直してみる。
→ モジュールウマーってなる。
ネットだけで十分な情報量だと思うよ。
あとは何よりも目的が大事。
探してみたら、日本の祝日・休日(振替休日付き)なんてモジュールもあるしな。
0167デフォルトの名無しさん
2010/11/12(金) 20:31:56前世紀に書かれたようなヒドイ書き方の CGI を
今の書き方にポートするなんて
書く以前に読むのが苦行過ぎるよ。
my ってなにそれ? -T なんて知らないよ?
とか jcode.pl とかの世界だろうし…。
0168デフォルトの名無しさん
2010/11/12(金) 21:38:410169デフォルトの名無しさん
2010/11/12(金) 21:41:58でも祝日休日のモジュールは定期的に保守しなきゃだめだな
スパンは数年単位でいいだろうが
0170デフォルトの名無しさん
2010/11/13(土) 02:30:08今もやってるか知らんが
0171デフォルトの名無しさん
2010/11/14(日) 16:47:06foreach(keys())でやってもそのキーが出てこなくなりました。どうすれば良いのでしょうか。
0172デフォルトの名無しさん
2010/11/14(日) 17:45:170173デフォルトの名無しさん
2010/11/14(日) 18:11:09while ( $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を消すわけにもいかず、どうすればいいのか悩んでいます。
解決策があればどなたかご教授願えないでしょうか?
0174デフォルトの名無しさん
2010/11/14(日) 18:37:210175デフォルトの名無しさん
2010/11/14(日) 18:53:12ありがとうございました
0176デフォルトの名無しさん
2010/11/15(月) 02:21:58OS環境にもよるけど、パイプやIPCの共有メモリなどでも実装できるよ。
0177デフォルトの名無しさん
2010/11/15(月) 15:02:33したときに、ヘンなデータがあったら、
map to Unicodeできないと警告されます。
その警告を黙らせる方法はありますか?
教えてください。
no warnings 'utf8'は試しましたが、
黙りませんでした。
0178デフォルトの名無しさん
2010/11/15(月) 19:08:460179デフォルトの名無しさん
2010/11/15(月) 20:14:39有名なのが 〜 (全角チルダ) と 〜 (波ダッシュ) かな
0180デフォルトの名無しさん
2010/11/15(月) 23:59:340181デフォルトの名無しさん
2010/11/16(火) 00:06:170182デフォルトの名無しさん
2010/11/16(火) 00:22:36計算して試して結果が OK なら OK。 ってのがなんか気持ち悪いから理解しようとしてるんだけど、
いや〜数学赤点ギリギリだった俺からすると難しいw
PostgreSQL とか MySQL に、点が多角形の中に含まれるかどうかチェック出来る演算子とか関数があって、
プログラムで学ぼうとしてる自分にかなり誘惑ww
0183デフォルトの名無しさん
2010/11/16(火) 00:36:420に戻れば外、一周すれば内
0184デフォルトの名無しさん
2010/11/16(火) 02:39:04use Encode qw(:fallback_all);
use PerlIO::encoding;
#$PerlIO::encoding::fallback = STOP_AT_PARTIAL;
$PerlIO::encoding::fallback = PERLQQ | STOP_AT_PARTIAL;
>>180
cpanにポリゴンのモジュールあったよ。
こっちは、多角形の一点から、調べたい点まで線を引いて、
辺の交差回数で調べるオーソドックスな方法だった。
0185デフォルトの名無しさん
2010/11/16(火) 18:20:37正規表現で調べたいときはどうすればいいでしょうか?
if($data =~ /$word/)
としても動かなくて・・
0186デフォルトの名無しさん
2010/11/16(火) 20:20:530187デフォルトの名無しさん
2010/11/16(火) 21:02:46文字化けの可能性とかある
0188デフォルトの名無しさん
2010/11/16(火) 22:58:13標準入力から受け取って、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";
お願いします
0189Perl忍者 ◆M5ZWRnXOj6
2010/11/16(火) 23:15:55頭の問題
宿題スレいけゲハ
0190デフォルトの名無しさん
2010/11/16(火) 23:57:30この時点で超難問だな。
NASAにでも相談してくれ。
0191デフォルトの名無しさん
2010/11/16(火) 23:59:250192デフォルトの名無しさん
2010/11/17(水) 00:01:460193デフォルトの名無しさん
2010/11/17(水) 00:08:590194デフォルトの名無しさん
2010/11/17(水) 00:25:02\r や \n (Mac とか Linux) が単独で出てくる場合が半角改行で、
\r\n (Windows) のように出てくるのが全角改行。
ってとこかな。
俺、頭いい!!←
0195デフォルトの名無しさん
2010/11/17(水) 00:25:03> すみません、授業でperlを扱っているのですが
この言質からすると、こやつは宿題厨ではなく、情弱日狂組でおじゃるぞ
0196デフォルトの名無しさん
2010/11/17(水) 00:53:50たくさんレスありがとうございます。
>191
そうかもしれないです。
printで表示されたものが全部一緒(dataファイルの最初の行)でした。
>195
日狂組ってなんですか??
0197デフォルトの名無しさん
2010/11/17(水) 01:39:520198デフォルトの名無しさん
2010/11/17(水) 01:52:32$s = <>;
($x, $y, $z) = split(/ +/, $s);
print "x=$x y=$y z=$z\n";
0199デフォルトの名無しさん
2010/11/17(水) 01:55:21split(/\n/, $s);
$s=<>; じゃムリだと思うが
0200デフォルトの名無しさん
2010/11/17(水) 03:33:21---- dataの例
4
5
6
----
こんなんだったら、これで。
chomp(my $x = <STDIN>);
chomp(my $y = <STDIN>);
chomp(my $z = <STDIN>);
0201185
2010/11/17(水) 14:39:12レスありがとうございます。
$wordの中身が文字化けしてました;;
原因は$wordの末尾の改行をchompで取り除いてた(つもりだった)のですが,
LFしか削ってくれてませんでした。
今はActivePerl5.10.1のx64版を使ってるのですが,
昔のActivePerlはchompでCR+LFを削ってくれてたような記憶が・・
仕様が変わったんですかね。
0202デフォルトの名無しさん
2010/11/18(木) 04:15:24chomp
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
0203デフォルトの名無しさん
2010/11/19(金) 23:20:25パスワードを設定して貰うのに、qwer とか安易なパスワードの時に、
ちょっとしたメッセージを出したいのですが、そういう安易パスワードリストみたいなのはないでしょうか?
もしくは英単語リストみたいな。
自分でも安易なパスワード集というのを考えてみたのですが、おそらく漏れが多いと思うので・・。
0204デフォルトの名無しさん
2010/11/19(金) 23:28:40mechanizeで辞書サイトの検索結果を取ってくりゃいい
0205デフォルトの名無しさん
2010/11/19(金) 23:32:310206デフォルトの名無しさん
2010/11/20(土) 03:31:18ちょwwwパスワード外に投げんなよwww
0207デフォルトの名無しさん
2010/11/20(土) 08:45:03量多いし文字数やパターンで判定するのが一般的じゃないかな
0208デフォルトの名無しさん
2010/11/20(土) 08:59:49辞書ならjohn用のでいいんじゃないか。
ftp://ftp.ox.ac.uk/pub/wordlists/
0209203
2010/11/20(土) 10:13:22ありがとうございます。
これ利用してみたいと思います!
ftp://ftp.ox.ac.uk/pub/wordlists/
qwer載ってたし。
でも、これいいんじゃないのっていう qwbc とかあるから微妙な感じですね。
qwbc とか qwho とかってそんなに、駄目なパスワードじゃないっぽく思えるけど・・。
0210デフォルトの名無しさん
2010/11/20(土) 10:32:24一瞬で検索できる
0211デフォルトの名無しさん
2010/11/20(土) 17:26:24use 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 />
誰か助けてください。
0212デフォルトの名無しさん
2010/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までが
抽出されるか思いましたがダメでした。
レベルの低い問題ですが
どうかご教授御願いします
0213デフォルトの名無しさん
2010/11/20(土) 19:19:36抽出範囲開始文字列(IP)がある・・・フラグON、バッファクリア
抽出範囲終了文字列(TCP)がある・・・フラグOFF、バッファを出力
それ以外・・・フラグONなら行データをバッファに蓄積
でいいんじゃね?
0214デフォルトの名無しさん
2010/11/20(土) 19:47:30$messages =~ /Internet Protocol(.*)Transmission Control Protocol/s
0215212
2010/11/21(日) 06:38:33回答ありがとうございます
>>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に当てはまる所だけ出力されました
0216212
2010/11/21(日) 06:51:36http://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
どうかアドバイスよろしく御願いします
0217デフォルトの名無しさん
2010/11/21(日) 07:00:04open
read
while($mes =~/foo(.*?)bar/sg){
print $1;
}
ざっと
keyword: ファイルテスト演算子
0218デフォルトの名無しさん
2010/11/21(日) 08:48:50文章じゃなくてなにかのログの出力なのか。
こういう形式ならyaml使った方が上手くいくんじゃね?
ttp://d.hatena.ne.jp/magicalhat/20060929/1159514801
0219デフォルトの名無しさん
2010/11/21(日) 09:18:17my $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;
0220デフォルトの名無しさん
2010/11/21(日) 09:19:43use 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";
}
0221デフォルトの名無しさん
2010/11/21(日) 09:22:52while( <> ){
if ( /Internet Protocol/ .. /Transmission Control Protocol/ ) {
print ;
}
}
だけの事だろ。
# インデントは全角空白。注意
0222デフォルトの名無しさん
2010/11/21(日) 09:23:440223デフォルトの名無しさん
2010/11/21(日) 14:07:38質問に対してワンライナーで無理やり書く必要も無いっしょw
0224デフォルトの名無しさん
2010/11/21(日) 14:17:49個人的使用が多いとそうなるんじゃ
0225デフォルトの名無しさん
2010/11/21(日) 14:19:21これが難しいなら、質問者諸共webprogの初心者スレへ行け。
0226デフォルトの名無しさん
2010/11/21(日) 14:37:190227デフォルトの名無しさん
2010/11/21(日) 14:43:560228Perl忍者 ◆M5ZWRnXOj6
2010/11/21(日) 15:42:38マイトガイの影響かしらないけど あとモダンとかわめいてるカスども
0229デフォルトの名無しさん
2010/11/21(日) 15:44:530230デフォルトの名無しさん
2010/11/21(日) 15:49:340231デフォルトの名無しさん
2010/11/21(日) 15:52:22優越感じゃなくて
単に肌に染み付いてるってことじゃないの?
0232デフォルトの名無しさん
2010/11/21(日) 15:56:14>>228
0233デフォルトの名無しさん
2010/11/21(日) 16:08:35$temp を減らせる方法があるなら、そっちを選ぶことが多い
0234Perl忍者 ◆M5ZWRnXOj6
2010/11/21(日) 16:52:050235デフォルトの名無しさん
2010/11/21(日) 16:59:500236デフォルトの名無しさん
2010/11/21(日) 21:52:47http://blog.livedoor.jp/dankogai/archives/51173577.html
0237デフォルトの名無しさん
2010/11/21(日) 21:59:480238デフォルトの名無しさん
2010/11/21(日) 22:01:200239212
2010/11/22(月) 00:05:27アドバイスありがとうございました
完成しました
このコードの趣旨は>>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文の効率の悪いプログラムです
この様なコードの場合
どのようにすれば最適化できるでしょうか?
0240デフォルトの名無しさん
2010/11/22(月) 00:23:43個人的にはだけど、親で開いたファイルハンドルに子が書き込むのはヤダなぁ
0241Perl忍者 ◆M5ZWRnXOj6
2010/11/22(月) 00:27:45なんていうか敵に襲われたら
ハンマー振り回して フンガフンガ!!いって倒したら
そっこう建物にもどってRepairしてそうですね
ドワーフですね
0242Perl忍者 ◆M5ZWRnXOj6
2010/11/22(月) 00:28:450243Perl忍者 ◆M5ZWRnXOj6
2010/11/22(月) 00:33:16>>238
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?なるん?なるん?なるん?なるん?
なるん?なるん?なるん?
なるん?なるん?なるん?なるん?
0244デフォルトの名無しさん
2010/11/22(月) 00:42:32目障りだし、カスだし、氏んだ方が世の中の為
0245デフォルトの名無しさん
2010/11/22(月) 00:44:13スルーするのが一番いいよ
0246Perl忍者 ◆M5ZWRnXOj6
2010/11/22(月) 00:47:160247デフォルトの名無しさん
2010/11/22(月) 01:06:1020個のopenと19個のcloseがなにか絶望的なふいんきを醸し出しているような……
0248デフォルトの名無しさん
2010/11/22(月) 09:37:47似たような正規表現をまとめて引っ掛けて、分岐処理だろうね。
あと、openにエラートラップが無いと、
一部のログが取れてなくても気がつかないかもな。
0249デフォルトの名無しさん
2010/11/22(月) 15:24:48書き直してみた。
ttp://windyakin.if.land.to/src/up38_2364.zip
無保証です。すまん。一応サンプルの断片で動作確認はしてみたけど。
出力ファイル名にスペースが入ってるのが嫌だったのでかわりに'-'でつないでます。
出力すべきファイルとファイルハンドルの対応が取りやすく(間違いにくく)なってるとは思うが。
よければ誰か添削して改良してちょ。
0250デフォルトの名無しさん
2010/11/22(月) 18:42:43my @a = split(',', '');
print @a-0;
-----
javascriptのように、''な要素が一つ出来上がると単に思っていたのでなかなか理解できずにいます・・。
alert(''.split(',').length);
0251デフォルトの名無しさん
2010/11/22(月) 18:55:100252デフォルトの名無しさん
2010/11/22(月) 18:58:28JavaScriptの仕様の方がよくわからない。
なんでそんな仕様なんだろう。
0253デフォルトの名無しさん
2010/11/22(月) 19:43:27戻り値が配列
区切り文字が「何らかの文字が0個以上」
正常でしょ?
0254デフォルトの名無しさん
2010/11/22(月) 19:46:43@a のみとやると配列の中身を見るだけ
@a - 0 とすると @a は $test=@a のように評価されることになって
配列の要素数から0を引けばその結果が返ってくるだけ
0255デフォルトの名無しさん
2010/11/22(月) 19:47:390256デフォルトの名無しさん
2010/11/22(月) 20:12:23http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod
split
> 文字列 EXPR を文字列のリストに分割して、リストを返します。
> デフォルトでは、行頭の空白は保存され、末尾の空白は削除されます。
> (全てのフィールドが空の場合、これらは末尾であるとして扱われます。)
0257デフォルトの名無しさん
2010/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"; # 全部空なら全部削除
0258デフォルトの名無しさん
2010/11/22(月) 20:36:540259デフォルトの名無しさん
2010/11/22(月) 21:37:22ありがとうございます。
なんか難しいですね・・
0260デフォルトの名無しさん
2010/11/23(火) 00:33:36print scalar split(/,/, "a,"), "\n";
→1
print scalar split(/,/, "a,", -1), "\n";
→2
しかし、空文字列は第3パラメータに負を指定してsplitしても要素数はやはり0。
print scalar split(/,/, "", -1), "\n";
→0
つまりperlの考え方では、空の文字列は何でどうsplitしても空の配列にしかならんということだな。
でもそれがperl的にはいろいろ処理する上で都合がいいし、合理的な仕様だと思う。
0261デフォルトの名無しさん
2010/11/23(火) 03:54:41if (*{$MyPackage::{$symbol}}{CODE}) {
push @EXPORT, $symbol;
}
}
>258の件でこういうの考えたけど、処理順が上手くいかなくて、Dumperとかも拾っちゃった
0262デフォルトの名無しさん
2010/11/23(火) 09:58:45現在、最上位に位置するパッケージから下位のパッケージにオプションのハッシュを
渡して動作の調整を行っているのですが、環境変数でやってもいいかな、と思うぐらいの
全体的な設定値は、どのようにして扱えばよいでしょうか。
ずっと引数で設定値を引き回していくのも、まどろっこしいような気がします。
例えば、JavaのDIのように実行時に注入するような、そんなやり方や、
Perlではこうやるのが慣習、というのがあるのならば、教えて欲しいです。
0263デフォルトの名無しさん
2010/11/23(火) 11:59:51処理中に変更されないんだったら
もうグローバル変数でいいんじゃないんですかね。
0264デフォルトの名無しさん
2010/11/23(火) 12:03:39my $TEST;
って宣言して、これを下のスコープで同名の宣言を禁止する事って出来たりするのでしょか?
my $test;
testfunc();
exit;
sub testfunc{
my $test; # <- エラーにしたい
}
0265デフォルトの名無しさん
2010/11/23(火) 13:06:250266デフォルトの名無しさん
2010/11/23(火) 13:22:550267デフォルトの名無しさん
2010/11/23(火) 13:55:52値が変化しない前提ならどっちでもいいんでは
0268デフォルトの名無しさん
2010/11/23(火) 20:44:51外側の$testにアクセスできなくなることを問題にしてるのなら
内側でmy $testをしたことが悪いんじゃなくて、
それでアクセスできなくなる作りが問題なんだと思う。
例えば$testを得るための関数を用意するとか、パッケージ変数にするとか。
0269デフォルトの名無しさん
2010/11/23(火) 20:50:53モジュールにしちゃうのもいいな
グローバルでもローカルでも同じ名前を使うことが多くて、
たまに自分がボケて意図しない結果に頭を悩ますことがあるから
同じ名前はエラーにすれば楽チンかなぁって (^_^;)
0270デフォルトの名無しさん
2010/11/23(火) 21:23:550271デフォルトの名無しさん
2010/11/23(火) 21:34:400272デフォルトの名無しさん
2010/11/23(火) 21:40:09真性かよ
0273デフォルトの名無しさん
2010/11/23(火) 21:57:18つ紙とペン
0274デフォルトの名無しさん
2010/11/23(火) 22:41:080275デフォルトの名無しさん
2010/11/23(火) 23:35:18まとめ終わってない現在進行形のものをまとめるには有効な手段とは言えない。
それぐらいも分からないバカなの?
小学校からやりなおすの?
あふぉと言われてる自分より下が居ることにびっくりした。
0276デフォルトの名無しさん
2010/11/23(火) 23:38:380277デフォルトの名無しさん
2010/11/24(水) 00:10:39生 同 .じ . /´ | (ゝ___) い
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / |∨ ` ̄
/ ..:.:./ | 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
|、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/|.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
0278デフォルトの名無しさん
2010/11/24(水) 01:17:35同意だわー 俺も常々肝に銘じてる
ほんで初めて見たけどいいAAだな
0279デフォルトの名無しさん
2010/11/24(水) 05:35:100280デフォルトの名無しさん
2010/11/24(水) 13:58:19全ての変数名がダブらないってことは結果的にグローバル変数しか使えない言語と同じだし。
もっと、変数の命名ルールを工夫するとか、スコープ範囲を小さくまとめて
同じ名前の変数をブロック内で宣言したことを途中で忘れちゃわないようにするとか、
そういう方向で回避するよう心がけた方がいいんでは。
0281デフォルトの名無しさん
2010/11/24(水) 18:36:15それに合わせてサブのPCのドライブ構成を、Cがシステム、Eがデータ用にしていて、Dドライブは存在しません。
そのサブのPCにActivePerlをインストーラーでインストールしようとしたのですが、Invalid Drive: D:\ となってインストールできません。
どうしたら良いでしょうか。
0282デフォルトの名無しさん
2010/11/24(水) 18:40:540283デフォルトの名無しさん
2010/11/24(水) 19:34:00ドライブ D: は存在しない、って書いてあるだろ。よく読め。
0284デフォルトの名無しさん
2010/11/24(水) 19:56:140285デフォルトの名無しさん
2010/11/24(水) 20:11:27ActivePerlのインストーラに「D:\ が存在しないよ」とよくわからないエラーを出されちゃった、
という話ではないの?
0286デフォルトの名無しさん
2010/11/24(水) 20:18:18押してドライブとディレクトリを設定してね。
0287280
2010/11/24(水) 20:23:05Cドライブにインストールしたいのですが、インストーラーを起動させると、
その直後に前記のエラーが出て何もさせてもらえず終了する感じです。
zipによるインストールを試してみます。
0288Perl忍者 ◆M5ZWRnXOj6
2010/11/24(水) 21:07:430289デフォルトの名無しさん
2010/11/24(水) 21:09:370290280
2010/11/24(水) 23:38:40OSインストール時に色々ありまして、最初にCとDを作り、その後Cをまた再インストールしなおした後、DをEに変更するということをやったので、
もしかしてDの情報が残ってるのかな?と不安に思い、Eをフォーマットしました。
結果、インストーラーでインストール出来るようになりました。
でも、何でCドライブ内でのインストール作業でDドライブのチェックが最初に入ってるんだろう・・・
結果的には良かったですが。
0291デフォルトの名無しさん
2010/11/26(金) 21:42:420292デフォルトの名無しさん
2010/11/26(金) 22:56:32日本語でおk
0293デフォルトの名無しさん
2010/11/26(金) 23:29:090294デフォルトの名無しさん
2010/11/28(日) 06:46:19print $hoge; #=>true
print (5 > 3) ? "true": "false";
なぜか1が出力されてしまいました。
上はこれと同義だからという理由でした。
(print (5 > 3)) ? "true": "false";
なるほど・・・
0295デフォルトの名無しさん
2010/11/28(日) 06:48:48ちょっとまて、これは質問なのか?
0296デフォルトの名無しさん
2010/11/28(日) 07:02:190297デフォルトの名無しさん
2010/11/28(日) 07:07:44$hoge = (5 > 3) ? "true": "false";は
($hoge = (5 > 3)) ? "true": "false";と同義にならないんだ?
前方が代入処理だった場合は〜、とパーサが例外処理してるんだろうか。
0298デフォルトの名無しさん
2010/11/28(日) 07:17:070299デフォルトの名無しさん
2010/11/28(日) 08:34:290300デフォルトの名無しさん
2010/11/28(日) 17:08:24単純な話。「=」の方が「?:」より優先順位が低いから。>>299 のとおり。
1 + 2 * 3 が9ではなく7になるのとまあ理屈はおなじだ。
ついでに300get。
0301デフォルトの名無しさん
2010/11/28(日) 17:26:29print (5 > 3 ? 'true' : 'false'); # true
print ((5 > 3) ? 'true' : 'false'); # true
結合の強さをちゃんと覚えてないから「あら?」と思ったときは perlop のお世話になってる。
0302デフォルトの名無しさん
2010/11/28(日) 17:33:18>リスト演算子 (print() など) や単項演算子 (chdir() など) は、 すべて次のトークンとして開き括弧が続くと、
>その演算子と括弧内の引数は、 通常の関数呼び出しのようにもっとも高い優先順位として扱われます。
0303デフォルトの名無しさん
2010/11/28(日) 20:58:520304デフォルトの名無しさん
2010/11/28(日) 21:41:11括れ
0305デフォルトの名無しさん
2010/11/28(日) 22:13:09だね〜w
括弧で括るのが癖になってきたら
if(($test eq '〜') || () || ()){
}
みたいに、括弧で括らなくていいとこまで括らない時がすまなくなった
0306デフォルトの名無しさん
2010/11/28(日) 22:13:15より正しい詳しい知識を持っていた方がいいってだけのことじゃないの
たとえば初心者向け入門書の説明によくある「おまじない」ってのを
そのままずっと「オマジナイ」としてしか認識しないままだったら
マトモな上達は到底望めない
0307デフォルトの名無しさん
2010/11/29(月) 07:45:300308デフォルトの名無しさん
2010/11/29(月) 09:42:080309デフォルトの名無しさん
2010/11/29(月) 19:57:510310デフォルトの名無しさん
2010/11/29(月) 20:02:54isString () とかの函数考えてみりゃわかる。
このときこうなる。
isString (x) ? "true" : "false" ;
関数の()のあとに?があって、これはもちろんisString()の判定結果を使うことを示している。
するとprint はただの命令のprint じゃなくて、括弧つきの関数のprintf()みたいな構文として解釈したほうが良い場合もある。
そうすればprint () と isString () の整合性を付けることができるし、
printに括弧をつけて?:を使った時の挙動の覚え方にも一貫性ができる。
0311デフォルトの名無しさん
2010/11/29(月) 21:57:31良い場合も何も、Perl の print は元々項として扱える関数でしかないので、
PHP の echo のように言語構造に食い込んだ特別なものと捉える方がおかしい。
0312デフォルトの名無しさん
2010/11/30(火) 00:51:170313デフォルトの名無しさん
2010/11/30(火) 07:15:43test("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時間ほどハマりました。バグでしょうか。
0314デフォルトの名無しさん
2010/11/30(火) 08:28:35use warnings;
0315デフォルトの名無しさん
2010/11/30(火) 08:49:19ttp://argrath.ub32.org/perldocjp/5.10.0/perlsyn.html
> 注意: (my $x if ... のような) 条件構造やループ構造で修飾された my 文の振る舞いは
> *未定義*
> です。 my 変数の値は undef かも知れませんし、以前に代入された値かも知れませんし、
> その他の如何なる値の可能性もあります。 この値に依存してはいけません。
> perl の将来のバージョンでは現在のバージョンとは何か違うかも知れません。
> ここには厄介なものがいます。
おまけに同一スコープ内での二重定義だし。
まあバグはバグでもPerlのバグではなく >>313 が書いたコードのバグですね。
0316デフォルトの名無しさん
2010/11/30(火) 09:01:55my $last = "hoge" if($flag);
この行の my を除く以外は正常動作としかいえない。
0317デフォルトの名無しさん
2010/11/30(火) 09:02:510318デフォルトの名無しさん
2010/11/30(火) 09:05:15>思いますか?
じゃねーよ。
結論をきちんと書け。めんどくせえな。
0319デフォルトの名無しさん
2010/11/30(火) 09:13:03これを外にだしておけ
0320デフォルトの名無しさん
2010/11/30(火) 13:33:52だから>>313の様に$flagが常に0の場合はこのブロックの中身が実行されることはない。
よって$lastには何の影響も与えないのでは?
0321デフォルトの名無しさん
2010/11/30(火) 13:40:26お前は何を言っているんだ
0323デフォルトの名無しさん
2010/11/30(火) 14:09:29use strict;
use warnings;
my $test = 1;
my $test = 5 if 0;
print $test;
実行すれば分かる。
0324デフォルトの名無しさん
2010/11/30(火) 15:04:40変数スコープの解釈はコンパイル時に行われるから条件文には左右されない。
以下のように 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";
0325デフォルトの名無しさん
2010/11/30(火) 15:17:18初期化直後last:
ifで代入後last:
初期化直後last:
ifで代入後last:
初期化直後last:
ifで代入後last:
普通にこういう出力じゃねーの、と思ったが違うのか。これは微妙。
後置ifが偽でもそのステートメントが影響を及ぼす事があるんだな。
いやいや、及ぼしちゃ駄目だろ。
0326デフォルトの名無しさん
2010/11/30(火) 16:45:470327Perl戦士 ◆VFDr/hV3dI
2010/11/30(火) 16:49:140328デフォルトの名無しさん
2010/11/30(火) 17:26:290329デフォルトの名無しさん
2010/11/30(火) 17:42:01これとか?
ttp://twitter.com/#!/twedasuke/status/7245192558026753
0330デフォルトの名無しさん
2010/11/30(火) 17:59:40もうちょっと奇怪にしてみたよ。
>>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;
}
0331デフォルトの名無しさん
2010/11/30(火) 18:33:010332デフォルトの名無しさん
2010/11/30(火) 18:35:390333デフォルトの名無しさん
2010/11/30(火) 18:38:120334デフォルトの名無しさん
2010/11/30(火) 18:38:12生暖かく見守ってやろうぜ。
0336デフォルトの名無しさん
2010/11/30(火) 19:02:130337330
2010/11/30(火) 19:10:510338デフォルトの名無しさん
2010/11/30(火) 23:59:04モジュールをインストールするときは ppm は ppm で、とか CPAN は CPAN で片方に統一とかしなくていいんですよね?
0339デフォルトの名無しさん
2010/12/01(水) 01:34:46> my $last = "hoge" if($flag);
偽判定だから、代入されるワケがない。
if (defined $flag)なら、0でも空文字でも真判定されるよ。
思わぬ動作ではあるだろうけど、そもそもコードが論外レベルに寝とぼけてる。
0340デフォルトの名無しさん
2010/12/01(水) 02:06:390341デフォルトの名無しさん
2010/12/02(木) 13:11:41漢字を \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;
ぜんぶダメです。玉砕です。助けてください。
0342デフォルトの名無しさん
2010/12/02(木) 14:53:190344デフォルトの名無しさん
2010/12/02(木) 16:08:170345デフォルトの名無しさん
2010/12/02(木) 16:10:090346デフォルトの名無しさん
2010/12/02(木) 16:23:01evalは遅いらしいのでなるべくなら使わん方がええかも。
0347デフォルトの名無しさん
2010/12/02(木) 16:26:090348デフォルトの名無しさん
2010/12/02(木) 16:36:38342: 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)
うん
0349デフォルトの名無しさん
2010/12/02(木) 17:26:130350デフォルトの名無しさん
2010/12/02(木) 19:03:27最後の手段にとっておくべきだろうけど
0351Perl忍者 ◆M5ZWRnXOj6
2010/12/02(木) 19:56:12答えられないやつは、ダメです
0352デフォルトの名無しさん
2010/12/02(木) 19:58:180353Perl忍者 ◆M5ZWRnXOj6
2010/12/02(木) 19:59:350354Perl忍者 ◆M5ZWRnXOj6
2010/12/02(木) 20:00:21わからないんですか?・・・
0355PHP忍者 ◆vx6KgJyjvE
2010/12/02(木) 20:02:400356Perl忍者 ◆M5ZWRnXOj6
2010/12/02(木) 20:03:35進捗状況はどうだ
0357デフォルトの名無しさん
2010/12/02(木) 20:05:130358Perl忍者 ◆M5ZWRnXOj6
2010/12/02(木) 20:06:29絡まれてた派遣社員を、助けてたなお前は
見てたぜあのとき
絡んでた3人のプログラマーに
「・・・やめないか、土方。」
と言って
「図解プログラミング PHP+MySQL裏拳!」 を噛ましてたあのすごさ
なかなかやるよな君も
最後は
「持っててよかった、基礎からのMySQL。」
と捨て台詞はいてさっていったが
0359デフォルトの名無しさん
2010/12/02(木) 20:33:09最近こいつの電波文を解読できるようになってきた自分が怖いw
0360デフォルトの名無しさん
2010/12/03(金) 06:52:10魚に芸を仕込む
魚を躾する
という日本語訳でいいのかね?
0361デフォルトの名無しさん
2010/12/03(金) 07:00:190362デフォルトの名無しさん
2010/12/03(金) 22:22:59下記のようなリンクをクリックするにはどうやったらいいのでしょうか?
<img src="http://xxx/xxx.gif" onclick="xxxxxxxx()">
0363デフォルトの名無しさん
2010/12/03(金) 23:43:10処理の動作が多いとこだけ軽くさせるためにPHP化させたいんだけど
DBの受け渡しさえできればCGIとPHPと混合させても動きますか?
混合させてる人とかいますか?
0364デフォルトの名無しさん
2010/12/03(金) 23:53:55カモヨ
0365デフォルトの名無しさん
2010/12/04(土) 00:37:380366デフォルトの名無しさん
2010/12/04(土) 00:41:30後スレ違い
>>1嫁
0367デフォルトの名無しさん
2010/12/04(土) 06:08:05CGIはWebProgに行けとは書いてあるが、mod_perlについては書かれてないんだなw
0368デフォルトの名無しさん
2010/12/04(土) 08:22:020369デフォルトの名無しさん
2010/12/04(土) 17:03:59@line =<>;
0370デフォルトの名無しさん
2010/12/04(土) 17:15:570371デフォルトの名無しさん
2010/12/04(土) 17:16:22@line = grep{!/^$/} @line;
といってみる
0372デフォルトの名無しさん
2010/12/04(土) 17:20:17grep ってそうやって使うんですか。勉強になりました。
これでもOKですか?
@line = grep(!/^(\s| )*\n/,@line);
0373デフォルトの名無しさん
2010/12/04(土) 17:29:19全角空白?それエスケープしなくて通るのかな?
0374デフォルトの名無しさん
2010/12/04(土) 18:36:360375デフォルトの名無しさん
2010/12/04(土) 18:55:200376デフォルトの名無しさん
2010/12/05(日) 08:08:160377デフォルトの名無しさん
2010/12/05(日) 08:09:380378Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 11:35:360379デフォルトの名無しさん
2010/12/05(日) 11:39:330381Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 12:04:00HD2TB Coreーi7 NVIDA GTX460にしました
作業効率が5000%向上しました
0382Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 12:04:580383デフォルトの名無しさん
2010/12/05(日) 12:08:380384Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 19:19:33http://search.cpan.org/~ingy/IO-All-0.41/lib/IO/All.pod
ここ見ても乗ってませんでした・・・
0385Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 19:31:510386Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 19:32:49uaで解決しました
ありがとうございましたm(-_-)m
0387デフォルトの名無しさん
2010/12/05(日) 19:43:340388デフォルトの名無しさん
2010/12/05(日) 19:49:09なので、そっちのマニュアル調べればいいんじゃないか。
0389Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 20:31:47教えて
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"
のままかわりませんでした
0390Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 20:32:59早く教えてください
0391PHP忍者 ◆vx6KgJyjvE
2010/12/05(日) 20:38:34誰も教えるなよ
0392Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 20:44:44既にIO::Allのgetlineでタイトル取得のスクリプトかいてあって
LWP::UserAgentのほうで書き直したくないんです
だから$io->getlineのほうでUserAgent変える方法教えてください
2chの題名が 「ようこそボボンハウスへ」になってしまうからかえたいです
早くしてクレー
0393Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 21:00:240394Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 21:27:270395Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 21:36:58use 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.
って書いてありますが
0396Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 21:40:22きたああああああああああああああああああ!
#!/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を渡せば
設定されました
キターーー
0397Perl忍者 ◆M5ZWRnXOj6
2010/12/05(日) 21:41:210398デフォルトの名無しさん
2010/12/06(月) 18:28:45ファイル名指定に正規表現が使えない?様で上手くいきません
何か方法は無いでしょうか
0399デフォルトの名無しさん
2010/12/06(月) 18:37:330400デフォルトの名無しさん
2010/12/06(月) 18:38:21こういうのじゃダメなの?open my $fh, '<', '^abc\d{8}.+$' とかするとそりゃコケる。
0401デフォルトの名無しさん
2010/12/06(月) 18:41:19正規表現が使えないというのは文字コードが原因か?
というかそのコードを出さないと何もわからないよ?
0402Perl忍者 ◆M5ZWRnXOj6
2010/12/06(月) 19:14:50400みたいにやれこら
0403デフォルトの名無しさん
2010/12/06(月) 23:48:55globに与えるのは正規表現とは違う。
glob("/path/to/特定の文字列*")でOK。
戻り値に対して>>400のようにgrep掛けてそう言ってるのならフルパスになってるとか。
0404デフォルトの名無しさん
2010/12/07(火) 01:08:090405デフォルトの名無しさん
2010/12/07(火) 05:00:36いつも「ぱーるどっく」って読んでるけど不安。
0406デフォルトの名無しさん
2010/12/07(火) 11:36:160407デフォルトの名無しさん
2010/12/07(火) 12:03:430408デフォルトの名無しさん
2010/12/07(火) 12:24:590409Perl忍者 ◆M5ZWRnXOj6
2010/12/07(火) 14:05:04パールドック げは
0410デフォルトの名無しさん
2010/12/07(火) 20:50:33xlibは使っていない? ひょっとしてPerlが直接Xプロトコルを話している!?
ソース嫁とか、今は言わないでください。
でも、Perlが直接Xプロトコルを話しているなら、本気で読みます。
0411410
2010/12/07(火) 21:11:40grep IO::Socket `find`したら、X11::Protocol::Connection::Socketがこれをuseしていることがわかりました。
よく考えればX11::Protocolという名前もそれっぽいし、xlibには依存していないみたいですね。
素敵です。生のXって、APIじゃなくてプロトコルなんですね。
The X-Windows Disasterなんてさんざんなことを言われていますが、
この基本設計は素晴らしいし、それをそのまま生かした(と思われる)X11::Protocolの作者も偉い。
0412デフォルトの名無しさん
2010/12/08(水) 19:03:36$test{'2'} = 'a';
$test{'10'} = 'a';
$test{'11'} = 'a';
sort(keys(%test));
こうしたときの結果が
1 10 11 2 ってなるんですが、これを 1 2 10 11 とソートするにはどうすれば。。。
sort { int() <=> int() }
みたいにするしか無いんでしょか?
0413デフォルトの名無しさん
2010/12/08(水) 19:22:230414デフォルトの名無しさん
2010/12/11(土) 05:41:26ttp://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).
どうやったらいいのでしょうか?
0415デフォルトの名無しさん
2010/12/11(土) 05:46:380416デフォルトの名無しさん
2010/12/11(土) 12:44:480417デフォルトの名無しさん
2010/12/11(土) 14:04:48でもこれだけでエラーになるものですか?
my $mech = WWW::Mechanize::Firefox->new();
0418デフォルトの名無しさん
2010/12/11(土) 14:05:540419デフォルトの名無しさん
2010/12/11(土) 14:24:410420デフォルトの名無しさん
2010/12/11(土) 15:09:26firefoxの拡張なのですか?
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
0421デフォルトの名無しさん
2010/12/11(土) 15:15:330422デフォルトの名無しさん
2010/12/11(土) 15:31:47両方ともダメでした。
$ 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
0423デフォルトの名無しさん
2010/12/11(土) 17:11:530424デフォルトの名無しさん
2010/12/11(土) 19:35:56ダメでした。
0425デフォルトの名無しさん
2010/12/11(土) 20:20:03どこをどうやってみたけどダメだったぐらい書けよw
お前が良しと思ってるやり方がダメかもしんないでしょ?
0426デフォルトの名無しさん
2010/12/11(土) 20:27:41http://www.dotup.org/uploda/www.dotup.org1294646.jpg
0427デフォルトの名無しさん
2010/12/11(土) 21:06:210428デフォルトの名無しさん
2010/12/11(土) 21:08:070429デフォルトの名無しさん
2010/12/11(土) 21:15:22どうだめとかあるのか?
0430デフォルトの名無しさん
2010/12/11(土) 22:28:52結局つながらん原因はそれ、とかあまりにありふれた事態。
0431デフォルトの名無しさん
2010/12/11(土) 23:07:230432Perl忍者 ◆M5ZWRnXOj6
2010/12/11(土) 23:14:220433デフォルトの名無しさん
2010/12/11(土) 23:14:330434デフォルトの名無しさん
2010/12/11(土) 23:16:340435デフォルトの名無しさん
2010/12/11(土) 23:16:450436デフォルトの名無しさん
2010/12/12(日) 08:35:35原因は 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」なコードを入れたのかはよくわかりません。なんでだろうね…。
0437デフォルトの名無しさん
2010/12/12(日) 08:58:410438デフォルトの名無しさん
2010/12/12(日) 09:01:09○ English
0439デフォルトの名無しさん
2010/12/12(日) 09:03:330440デフォルトの名無しさん
2010/12/12(日) 09:20:150441デフォルトの名無しさん
2010/12/12(日) 09:32:18> cygwin とか初めて出す情報だね キュフフ
>>420に出とるがな。
0442Perl忍者 ◆M5ZWRnXOj6
2010/12/12(日) 10:11:33自分こんな究極に痛い発言してたの?すげえ痛い!って思うことあるよな
0443デフォルトの名無しさん
2010/12/12(日) 10:15:410444デフォルトの名無しさん
2010/12/12(日) 11:16:22わかってるじゃねえか
0445デフォルトの名無しさん
2010/12/12(日) 15:21:020447デフォルトの名無しさん
2010/12/12(日) 22:15:11忍者なら忍者らしく、なるべく目立たないようじっと忍んでろ。
0448デフォルトの名無しさん
2010/12/13(月) 10:05:100449177
2010/12/13(月) 12:09:39どうもありがとうございます。
utf8で解釈できないヘンなデータにも
文句を言わなくなりました。
readじゃなくてopenのときに設定する
必要があることがわからなくて、ちょっと
ひっかかりましたが、それ以外はうまく
いきました。
ちなみに、STOP_AT_PARTIALって
どんなフラグですか?
ぐぐってもEncode.pmを読んでも、
ヒントさえ見つかりません。orz
0450Perl忍者 ◆M5ZWRnXOj6
2010/12/13(月) 16:53:30444のレスが なんで自演ってわかったか教えてください
0451デフォルトの名無しさん
2010/12/13(月) 17:37:12@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) {処理;}
とすることにしました。レスありがとうございました。
0452デフォルトの名無しさん
2010/12/13(月) 17:40:27| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
0453デフォルトの名無しさん
2010/12/13(月) 18:17:19これをPerlで簡単に真似ることは出来ますか?
0454デフォルトの名無しさん
2010/12/13(月) 18:19:37-------
プログラミングPerl vol1,2
Perlベストプラクティス
オブジェクト指向Perlマスターコース
-------
を読破したのに知らなかったよー(泣)
なんて思いをさっきしたんですが、他にも「これ知っとくといいよ」ってありますか?
0455デフォルトの名無しさん
2010/12/13(月) 19:08:41組み込み関数のglobでどう?
0456Perl忍者 ◆M5ZWRnXOj6
2010/12/13(月) 19:26:05相当ごみだろ
おれよりごみじゃん
おれよりごみなやつはほんとに終わってるとおもう
ごみより終わってるってことは ほんとにそうおもうよ
0457デフォルトの名無しさん
2010/12/13(月) 19:32:47CPANの人気モジュールランキングみたいなページがどこかにあったから探してみるといいかも。
正確にはレポートされたテスト数でのランキングみたいな感じだったと思う。
URLが見つからない…
0458Perl忍者 ◆M5ZWRnXOj6
2010/12/13(月) 19:36:470459デフォルトの名無しさん
2010/12/13(月) 19:59:44あまり意味がない。
0460Perl忍者 ◆M5ZWRnXOj6
2010/12/13(月) 20:20:280461デフォルトの名無しさん
2010/12/14(火) 07:33:52globで出来るんですね初めて知りました
ただ速度が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
速いパソコンだとこれが一瞬で終わるのかな?
0462デフォルトの名無しさん
2010/12/14(火) 09:27:10sysで時間食ってるのでシステムコールトレースしてみたけどperlは
展開して得られた名前でいちいちファイルの存在確認をしてるんだな。
bashはそんなことはしないみたい。有無で結果が変わるってわけでも
ないので無駄な処理のような気がするけどなんでだろう。
CPANのString::Glob::Permuteは文字列操作だけなのでいいかも?
0463デフォルトの名無しさん
2010/12/14(火) 10:04:43String::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
0464デフォルトの名無しさん
2010/12/14(火) 12:41:43バイト列をutf8で解釈しようとしたとき、おかしな場合に中断するものだと思ってたけど、
試してるうちに、わからなくなってきた。
Encode::utf8::decode_xsやEncode::utf8::decode_xsが呼び出してる
process_utf8が使ってる(ソースファイルはEncode.xs)。
0465Perl忍者 ◆M5ZWRnXOj6
2010/12/14(火) 13:17:070466デフォルトの名無しさん
2010/12/14(火) 16:02:52|
|
|
──‐ ./ ̄| ̄ヽ │
| │ | 人
(____ ヽ_丿 ノ / \
0467Perl忍者 ◆M5ZWRnXOj6
2010/12/14(火) 17:35:33こxx↑
0468デフォルトの名無しさん
2010/12/14(火) 21:39:190469デフォルトの名無しさん
2010/12/14(火) 23:20:36この書き方でEUCの場合は、うまくいくのですが、UTF-8の場合はうまく処理できずに
2文字目が文字化けを起こします。
my @list = split(//,$text);
$text = $list[0] . $list[1]. $list[2] . $list[3];
漢字コードがUTF-8の場合にはどうかけばいいのでしょうか?
0470デフォルトの名無しさん
2010/12/14(火) 23:22:390471デフォルトの名無しさん
2010/12/14(火) 23:22:40$text = $list[0] . $list[1]. $list[2] . $list[3] . $list[4]. $list[5];
でうまくいきました。
0472デフォルトの名無しさん
2010/12/15(水) 01:14:35エンコードされるとは限らないのでそれではうまくいかない場合も
ある。ふつうdecodeしてからsubstrだろ。
0473デフォルトの名無しさん
2010/12/15(水) 18:52:27あと、今まで文字列は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);
0474デフォルトの名無しさん
2010/12/15(水) 19:37:230475デフォルトの名無しさん
2010/12/15(水) 19:39:24@hash{@array} = ();
0476デフォルトの名無しさん
2010/12/15(水) 19:54:32ありがとうございます
0477デフォルトの名無しさん
2010/12/15(水) 20:12:24エスパーあらわる!
つか、それが期待通りなのか?
0478デフォルトの名無しさん
2010/12/15(水) 20:14:10そんなにエスパーか?
keyだけあってvalueがないハッシュのことだろ?
0479デフォルトの名無しさん
2010/12/15(水) 22:12:390480デフォルトの名無しさん
2010/12/15(水) 22:23:07use 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";
0481デフォルトの名無しさん
2010/12/15(水) 23:15:40>>480 print keys %hash
0482デフォルトの名無しさん
2010/12/15(水) 23:49:28そうそう。そういうこと。
ちなみにJcode使ってるならjsubstrとかjfoldでも先頭2文字の切り出しはできてたはず。
0483デフォルトの名無しさん
2010/12/16(木) 00:00:15「ハッシュのスライス」でググってみ
0484デフォルトの名無しさん
2010/12/16(木) 01:46:08my @hash{@array} = ();
ってやってもエラー出んじゃん。
と思ったら @array が未定義でした。
ごめんなさいw
0485デフォルトの名無しさん
2010/12/16(木) 05:06:11http://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
ハッシュスライスでググるといいよ。
0486デフォルトの名無しさん
2010/12/16(木) 20:44:430487デフォルトの名無しさん
2010/12/16(木) 20:54:070488デフォルトの名無しさん
2010/12/16(木) 20:56:440489デフォルトの名無しさん
2010/12/16(木) 21:32:510490デフォルトの名無しさん
2010/12/16(木) 21:35:270491デフォルトの名無しさん
2010/12/16(木) 22:56:150492デフォルトの名無しさん
2010/12/16(木) 23:08:48を正規表現で表すにはどうすればいいですか?
[\w$]だと終端がマッチしてくれなくて。
0493デフォルトの名無しさん
2010/12/16(木) 23:12:53マイクロソフトワードか?
0494デフォルトの名無しさん
2010/12/16(木) 23:16:18\wで表される文字全部という意味で使ってます。
0495デフォルトの名無しさん
2010/12/16(木) 23:21:520496デフォルトの名無しさん
2010/12/16(木) 23:32:24にしたらマッチした……とかいうオチじゃないだろうな
0497デフォルトの名無しさん
2010/12/16(木) 23:33:19abc[\w$]
としたときに
"abc(終端)" や "abcd" などはマッチして欲しいけど
"abc[" や "abc#" など\wで表せない文字が後ろにつくパターンは弾きたいということです。
しかし実際には[\w$]と書いたのでは
"abcd"にはマッチしてくれるけど"abc(終端)"のパターンがマッチしてくれないので
どう書けばいいのだろう?という質問でした。
0498デフォルトの名無しさん
2010/12/16(木) 23:37:030499デフォルトの名無しさん
2010/12/16(木) 23:43:26abc\w?$
0500デフォルトの名無しさん
2010/12/16(木) 23:43:46改行もなにもない文字列の終端を意味しています。
0501デフォルトの名無しさん
2010/12/16(木) 23:47:41それです!
ありがとうございました><
0502デフォルトの名無しさん
2010/12/17(金) 00:01:250503デフォルトの名無しさん
2010/12/17(金) 00:36:14/abc$/ なら $ は行末だけど
/abc[$]/ なら $ は $ そのもの
0504デフォルトの名無しさん
2010/12/17(金) 01:27:230505デフォルトの名無しさん
2010/12/17(金) 03:44:02なら $ ではダメだな。
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 フラグ付きの文字列だと全角英数字にもマッチする。
0506デフォルトの名無しさん
2010/12/17(金) 09:08:180507デフォルトの名無しさん
2010/12/17(金) 10:26:40perlでは問題ない?
0508デフォルトの名無しさん
2010/12/17(金) 11:02:07/abc\p{PerlWord}?\z/
>>507
kwsk
0509デフォルトの名無しさん
2010/12/17(金) 14:42:01alert([
'---',
'jpan jp en'.match(/jp\b/),
'日本 日 英'.match(/日\b/),
'---'
]);
0510デフォルトの名無しさん
2010/12/17(金) 18:41:12\bは、\wと\Wの間にマッチする。
'p'は\wにマッチするが、'日'は\wにマッチしない(\Wにマッチする)。
スペースは\Wにマッチする。
以上の理由だね。
perlは、use utf-8;すると、漢字は\wにマッチするので大丈夫。
0511デフォルトの名無しさん
2010/12/17(金) 22:49:36以下のような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
0512デフォルトの名無しさん
2010/12/17(金) 22:58:41↓
0513デフォルトの名無しさん
2010/12/17(金) 22:59:28<終わり>
0514デフォルトの名無しさん
2010/12/17(金) 23:30:290515デフォルトの名無しさん
2010/12/17(金) 23:38:15どういったコードを書けばよいのでしょうか?
0516デフォルトの名無しさん
2010/12/17(金) 23:38:24おぉ。そうだったんだ・・。
0517デフォルトの名無しさん
2010/12/17(金) 23:50:03foreach(split(/\r?\n/, $data)){
my($k,$v) = split(/ +/, $_);
$h{$v} += $k-0;
}
foreach(sort {$a-$b} keys %h){
print "$h{$_} $_\n";
}
0518デフォルトの名無しさん
2010/12/17(金) 23:52:12while (<FH>)
{
chomp ;
@a = split / /;
$h{$a[1]} += $a[0] ;
}
close (FH) ;
print %h ;
0519デフォルトの名無しさん
2010/12/17(金) 23:54:44while($data =~ /(\d+) (\d+)/g){
$h{$2} += $1-0;
}
for(sort {$a-$b} keys %h){
print "$h{$_} $_\n";
}
0520512
2010/12/17(金) 23:54:52こういったコードを書きゃいいんだ!!
1st_out.datは適当にdat.txtとかなってる!
chompとかsplitとかの引数の省略がわかりゃ初心者脱出だ!
print %hは良く見てみればお望みの出力になってる!
出力ぐらいは自分でやれ!
0521512
2010/12/17(金) 23:56:59こういうコードってのは>>518みたいなまるでクズのようなコードだ!
ハッシュをまとめるってのは
$h{$a[1]} += $a[0] ;
だ!
そんくらいは理解してくれ!
何の統計か知らんか卒論落とすな!
0522デフォルトの名無しさん
2010/12/17(金) 23:57:290523デフォルトの名無しさん
2010/12/18(土) 00:02:070524デフォルトの名無しさん
2010/12/18(土) 00:05:41ありがとうございます.
でもこんな出力結果がでました.
211332610117914810142712253188346942352134316874410025422796508528424072411051269478614541589207349934511524844310619103
0525512
2010/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 ;
0526512
2010/12/18(土) 00:09:32それは
print %h;
の部分が悪いんだ!
そこ改良すればちゃんと意味が通るはずだ!
他の人のforeachでの出力を参考にしてくれ! >>517 >>519
改行やらが無いのが俺の手抜きだ!
もう寝る!!!!
0527デフォルトの名無しさん
2010/12/18(土) 00:13:15しょぼーん(´・ω・`)
0528デフォルトの名無しさん
2010/12/18(土) 00:16:260529デフォルトの名無しさん
2010/12/18(土) 00:22:230530デフォルトの名無しさん
2010/12/18(土) 00:24:13open (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";
}
0531デフォルトの名無しさん
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 ブリーチ
0532デフォルトの名無しさん
2010/12/18(土) 00:55:30open (my $fh ,">","1st_out.dat" ) ;
while (<$fh>)
{
chomp ;
@foo = split / /;
$h{"$foo[1] $foo[2]"} += $foo[0] ;
}
close ($fh) ;
print %h ;
0533デフォルトの名無しさん
2010/12/18(土) 00:56:01myね
0534デフォルトの名無しさん
2010/12/18(土) 01:08:29$ 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
0535デフォルトの名無しさん
2010/12/18(土) 01:09:312行めもデータ消しにかかってる。
0536デフォルトの名無しさん
2010/12/18(土) 01:15:11ありがとうございます.
これでバイト先の漫画管理がかなり楽になります!
0537デフォルトの名無しさん
2010/12/18(土) 01:17:01あー、マジだ
横になりながらコード書いちゃいかんね
0538デフォルトの名無しさん
2010/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 ブリーチ
0539デフォルトの名無しさん
2010/12/18(土) 01:24:170541デフォルトの名無しさん
2010/12/18(土) 01:47:12awk '{cnt[$2]+=$1}END{for (x in cnt){print x,cnt[x]}}'
0542デフォルトの名無しさん
2010/12/18(土) 01:54:260543デフォルトの名無しさん
2010/12/18(土) 05:36:230544デフォルトの名無しさん
2010/12/18(土) 06:30:20俺の大学ではさわりだけやった
大学の講義で使う言語=教授が使ってる言語みたいなもんだから学校によってまちまちだろう
0545デフォルトの名無しさん
2010/12/18(土) 13:50:33my $len = scalar(split("\n", $source));
(scalarは一応明示的に書いただけなので無くても)
このようにやったのですが、以下のように怒られてしまいました。
Use of implicit split to @_ is deprecated at ./a
何か良い方法はないでしょうか?
0546デフォルトの名無しさん
2010/12/18(土) 14:04:22my $source = "aaa
bbb
ccc
";
my $i = $source =~ s/\n/\n/g;
print $i . "\n";
0547デフォルトの名無しさん
2010/12/18(土) 14:15:250548デフォルトの名無しさん
2010/12/18(土) 14:25:41でも、改行が最後にあるとは限らないのです。
ちょっと考えて、以下の2つを思いついたんですが、
-----------------
my $len = eval{ my @a=split(/\r?\n/, $source) };
my $len = sub{ my @a=split(/\r?\n/, $source) }->();
-----------------
ちょっとダメダメな感じですね・・。
なにかいい案ないでしょうか?
0549デフォルトの名無しさん
2010/12/18(土) 14:41:51#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";
0550デフォルトの名無しさん
2010/12/18(土) 14:43:33my $len = grep(/./, split(/\r?\n/, $source));
my $len = map { 1 } split(/\r?\n/, $source);
0551デフォルトの名無しさん
2010/12/18(土) 14:45:13強引だけど
0552デフォルトの名無しさん
2010/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";
0553デフォルトの名無しさん
2010/12/18(土) 14:51:380554デフォルトの名無しさん
2010/12/18(土) 15:01:06my $len = split /\n/, $source;
で行数が取れると思うんだが…?
試してみたけど
> Use of implicit split to @_ is deprecated at ./a
なんて出なかったよ?
0555デフォルトの名無しさん
2010/12/18(土) 15:10:310556デフォルトの名無しさん
2010/12/18(土) 15:48:190557デフォルトの名無しさん
2010/12/18(土) 17:09:08> 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 で出る。
0558デフォルトの名無しさん
2010/12/18(土) 17:36:31v5.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.
0559デフォルトの名無しさん
2010/12/18(土) 18:05:23use 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";
}
0560デフォルトの名無しさん
2010/12/18(土) 18:47:03○ $C++ if substr($S,-1,1) ne "\n"; $C});
間違えた
0561デフォルトの名無しさん
2010/12/18(土) 18:47:41> use warnings で出る。
なるほど。じゃこれでどうだ。
my $len = &{sub {split /\n/, $source}};
0562デフォルトの名無しさん
2010/12/18(土) 18:52:04○ while(($i = index $S, "\n", $i+1) != -1) { $C++ }
動かしたら間違いだらけでした〜orz
0563デフォルトの名無しさん
2010/12/18(土) 18:56:33ミスはともかくどれが一番早かったの
0564デフォルトの名無しさん
2010/12/18(土) 18:59:38print 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); }; }
0565デフォルトの名無しさん
2010/12/18(土) 19:01:13print 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); }; }
0566デフォルトの名無しさん
2010/12/18(土) 19:03:58そりゃtr///に決まってる
0567デフォルトの名無しさん
2010/12/18(土) 19:27:28http://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";
}
0568デフォルトの名無しさん
2010/12/18(土) 19:37:230569デフォルトの名無しさん
2010/12/18(土) 19:46:36俺も書いた。
http://codepad.org/TGKcai6e
0570Perl忍者 ◆M5ZWRnXOj6
2010/12/18(土) 21:10:58きも
0571デフォルトの名無しさん
2010/12/18(土) 21:54:46けなせるだけの知識はあるかな?
0572デフォルトの名無しさん
2010/12/18(土) 22:08:210574デフォルトの名無しさん
2010/12/19(日) 00:05:07ここにしてもいいのですかね…?
5.10 と 5.12 を共存させたい・環境変数 Path を変更することで使い分けたいと思ってるんですが
ActivePerl って異なるバージョンを共存できるんでしょうか?
ppmを実行したとき、どちらか片方にモジュールをインストールしてしまう、
ということになったりしませんかね…?
たしか、何かしらレジストリに書き込みをしていた記憶があるのです>ActivePerl
そこを見て処理する何かが混ざってたら、
共存は難しいか、
もしくは、インストールする順番に注意しないといけないのでは、
という気がしているのですが…
0575デフォルトの名無しさん
2010/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
のようにしたいです。
0576デフォルトの名無しさん
2010/12/19(日) 01:24:090577デフォルトの名無しさん
2010/12/19(日) 01:39:190578デフォルトの名無しさん
2010/12/19(日) 04:53:03use 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);
0579デフォルトの名無しさん
2010/12/19(日) 05:01:510580デフォルトの名無しさん
2010/12/19(日) 10:00:06横やりで申し訳ないけど、ランダム性を証明するにはどのようにしたらいい?
0581デフォルトの名無しさん
2010/12/19(日) 10:17:05本気でランダムにするには、熱雑音モジュールとかを用意しないと
0582デフォルトの名無しさん
2010/12/19(日) 10:17:41http://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
0583Perl忍者 ◆M5ZWRnXOj6
2010/12/19(日) 10:42:06ほんとくず
この俺よりかもクズは終わってる
0584デフォルトの名無しさん
2010/12/19(日) 11:06:29よほど傷ついたんだな・・・。
0585デフォルトの名無しさん
2010/12/19(日) 11:12:11たくさんループまわして
$list[0]〜$list[9]のそれぞれに
0〜9が各どのくらいの割合で入ったか平均取ってみたら
0586デフォルトの名無しさん
2010/12/19(日) 11:27:09平均を取る方法ではランダムかどうかはわからないんじゃないかと思うけど、
どうなんだろう?
0587デフォルトの名無しさん
2010/12/19(日) 11:48:07平均とって綺麗に揃ったら、それはそれで一様乱数じゃないんだけどな
0588デフォルトの名無しさん
2010/12/19(日) 12:18:230589デフォルトの名無しさん
2010/12/19(日) 12:27:44@list=0..9;print splice@list,rand 10-$_,1 for 0..9
0590デフォルトの名無しさん
2010/12/19(日) 12:30:020591デフォルトの名無しさん
2010/12/19(日) 12:47:300592デフォルトの名無しさん
2010/12/19(日) 12:49:320593デフォルトの名無しさん
2010/12/19(日) 12:59:11(形動)(英random)任意にすること。手あたり次第にすること。また、そのさま。特に、確率論や統計学で、意志や感情を交えないこと。
0594Perl忍者 ◆M5ZWRnXOj6
2010/12/19(日) 16:06:37クソなのに新しい書き方をわめいてるゴミ
一生文法のお勉強(笑)
0595PHP忍者 ◆vx6KgJyjvE
2010/12/19(日) 16:27:44クソなのに独り言をわめいてるゴミ
一生ぼっち(笑)
0596デフォルトの名無しさん
2010/12/19(日) 16:33:01世の中、無意味な事の積み重ねで成り立ってるのは アタリマエ。
正しい事が正しいなんて思ってるとはピュアでいいとは思うけどさ^^
0597デフォルトの名無しさん
2010/12/19(日) 16:37:030598デフォルトの名無しさん
2010/12/19(日) 16:44:170599デフォルトの名無しさん
2010/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;
0600デフォルトの名無しさん
2010/12/19(日) 21:34:41> ppmを実行したとき、どちらか片方にモジュールをインストールしてしまう、
> ということになったりしませんかね…?
共存させるにはむしろそうする必要がある。
perl510.bat, perl512.bat がお奨め。
0601デフォルトの名無しさん
2010/12/19(日) 22:03:22=> の左に来る文字列(-name)に、ダッシュ(-) が先頭に付いていてもクォートは不要なんでしょうか。
$obj->method(-name => "value");
0602601
2010/12/19(日) 22:56:230603デフォルトの名無しさん
2010/12/20(月) 00:54:22my %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);
0604デフォルトの名無しさん
2010/12/20(月) 01:01:43ありがとうございます。まさにコレ。
まぁ、でもやっぱり素ではできないんですね。
0605デフォルトの名無しさん
2010/12/20(月) 01:04:280606デフォルトの名無しさん
2010/12/20(月) 05:20:18ありがとうございます
perl5*.batの存在は知りませんでした
これですかね…?
http://search.cpan.org/~ina/Sjis/Sjis/JA.pm
こういうバッチファイルがあるということは
共存は可能ということですね…助かります
0607デフォルトの名無しさん
2010/12/20(月) 12:01:55JavaScript でもハッシュの取り出し順は保証されているものではないというのと、
配列使えばいいというのは、まあ確かにそう思うのですがハッシュでできないかなー と。
0608デフォルトの名無しさん
2010/12/20(月) 12:16:00死んでも無理。
0609デフォルトの名無しさん
2010/12/20(月) 12:17:37http://perldoc.perl.org/perlfaq4.html#How-can-I-make-my-hash-remember-the-order-I-put-elements-into-it%3F
0610607
2010/12/20(月) 12:48:37出来た!
しかも JSON::XS でもちゃんと出ました。
XS全く詳しくないけど、なんとなく tie のを渡したら壊れるのかと思ってたら全く問題なかった。
ありがとうございます。
0611デフォルトの名無しさん
2010/12/20(月) 18:54:21my $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";
}
ってやってる
0612デフォルトの名無しさん
2010/12/20(月) 21:07:52こんなのはどう?
my @k = qw(a b c);
my @v = qw(A B C);
my %h = map {($k[$_], $v[$_])} (0..$#k);
0613デフォルトの名無しさん
2010/12/21(火) 00:12:55@h{@k} = @v;
一行にまとめられないのがちょっとくやしい...
0614Perl忍者 ◆M5ZWRnXOj6
2010/12/21(火) 09:37:11ソース http://www.mudaijp.com/wp/1957.html
竹田隼也
いじめられていた被害者が2ちゃんねるのコテ環境様という人で、竹田隼也は2ちゃんねるの一部の板を運営してたみたいです(ボランティアだと思いますが)
逮捕された竹田隼也は、アットフリークスの取締役です。
現在の取り締まり役は、大野真和になってますね。
竹田隼也は、アットフリークを立ち上げたメンバーであることは確定しています。(まだ運営にも関わっています)
その当時の記事→アーカイブ
アット ウィキの運営情報(whoisより)
有限会社アットフリークス
640-8227
和歌山県和歌山市西汀丁26番地県経済センター6F
当時はアットフリークスが運営するBBSにもこのいじめのことが書かれてたみたいですが、現在はすっかり削除されています(隠蔽)。
公の場で問題になってから事実を公表する運営も信用できませんよね。
絶対に知ってるはずなのに、このようなコメントを残しています。
0615デフォルトの名無しさん
2010/12/22(水) 07:14:42my $test = 'あいうえお';
print "$testかきくけこ";
とすると 「$testかきくけこ」 という変数名になるようで、今は
print "$tset\かきくけこ";
の様に対応しています。
一応は動いてますが、これで合っているのでしょうか?
それとも
print $test . "かきくけこ";
の様に "" の外に出してドットやカンマで繋げるべきなんでしょうか?
0616デフォルトの名無しさん
2010/12/22(水) 09:05:44{} で区切るのが普通かと
"${test}かきくけこ" とか "${test}abc" とか
個人的には不便としか感じないから止めたいけど方法を知らない...
0617デフォルトの名無しさん
2010/12/22(水) 10:56:44自分も、"${test}かきくけこ" とかは本とかで見たりはするけど使わない。
sprintf も、%sが多くなるとなにがどれだか面倒くさくなるので、 "$test\かきくけこ" をよく使う、
けど、こういう場合たいてい半角スペースを前後に空けた方が見やすくなる場合が多いので実際にはよく使わない。
0618デフォルトの名無しさん
2010/12/22(水) 11:07:50ありがとうです m(_ _)m
0619デフォルトの名無しさん
2010/12/22(水) 14:44:16うむ、そうするがよい
0620Perl忍者(竹田隼也) ◆M5ZWRnXOj6
2010/12/22(水) 21:11:040621デフォルトの名無しさん
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;
}
0622デフォルトの名無しさん
2010/12/24(金) 23:14:07コピペの文字コードミスじゃねーの?
0623デフォルトの名無しさん
2010/12/25(土) 00:47:320624デフォルトの名無しさん
2010/12/25(土) 07:52:030625デフォルトの名無しさん
2010/12/25(土) 09:45:47my $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))
0626デフォルトの名無しさん
2010/12/25(土) 10:05:33なかったので書かれていない部分がだめなんだろうな。ちゃんと再現する
例を示せないならエスパーさん以外には回答は無理な気がする。
0627デフォルトの名無しさん
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
0628デフォルトの名無しさん
2010/12/25(土) 11:16:42require './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
なぜ?
0629デフォルトの名無しさん
2010/12/25(土) 11:53:220630デフォルトの名無しさん
2010/12/25(土) 11:56:08test2.plにuse utf8;を追加だな。
0631デフォルトの名無しさん
2010/12/25(土) 12:04:57test2.plの方にもuse utf8必要。
0632デフォルトの名無しさん
2010/12/25(土) 12:42:03こういう書き方は初めてなんですが、どうしてサブルーチンを別ファイル化すると、メインプログラムのuseの宣言が効かなくなるのでしょうか?
効いていないのはuse utf8だけのように思えますが
0633デフォルトの名無しさん
2010/12/25(土) 13:42:02> use utf8プラグマは、Perl パーサーに、現在のレキシカルスコープ内の
> プログラムのテキストに、UTF-8(EBCDICベースのプラットフォームなら、
> UTF-EBCDIC) を許すように伝えます。
プラグマで、宣言したレキシカルスコープから外れる度に再宣言する必要があるから。
use strict;と同じ。
0634デフォルトの名無しさん
2010/12/25(土) 13:48:25インクリメントは値を返した後に行われるのでしょうか?
my $num = do{ lock($cnum); $cnum++ }
0635デフォルトの名無しさん
2010/12/25(土) 15:54:22独立したブロックで書いた方が安全だろうけど。
結果は、インクリメント前の値が返る。
0636デフォルトの名無しさん
2010/12/28(火) 23:41:41ユーザ定義の関数で左辺値コンテクストを使うことはできないでしょうか?
substr( $var, 2, 3 ) = 'ABC';
の様なことをユーザ定義関数でやりたいのです。
0637デフォルトの名無しさん
2010/12/28(火) 23:44:27http://perldoc.perl.org/perlsub.html#Lvalue-subroutines
http://perldoc.jp/docs/perl/5.10.0/perlsub.pod
0638デフォルトの名無しさん
2010/12/29(水) 00:09:19ありがとうございます!
読んでみます。
0639デフォルトの名無しさん
2011/01/05(水) 22:47:32$text="株式会社ナナオは、ディスプレイ (コンピュータ)|ディスプレイ装置専業メーカー。"
これを
"株式会社ナナオは、ディスプレイ装置専業メーカー。"
にする置換スクリプトはどう書くのでしょうか?
このタグの書き方はちょっと特殊で困っています。
0640デフォルトの名無しさん
2011/01/05(水) 22:54:160641デフォルトの名無しさん
2011/01/05(水) 23:05:01Nanao 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みたいな
オブジェクト指向の書き方ができるようにタグが拡張したのではないかと思うわけです。
0642デフォルトの名無しさん
2011/01/05(水) 23:45:580643デフォルトの名無しさん
2011/01/05(水) 23:53:440644デフォルトの名無しさん
2011/01/06(木) 01:32:300645デフォルトの名無しさん
2011/01/06(木) 02:43:48これだと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}'
0646645
2011/01/06(木) 02:52:59首釣ってきます。
0647デフォルトの名無しさん
2011/01/06(木) 03:01:540648645
2011/01/06(木) 03:16:430649デフォルトの名無しさん
2011/01/06(木) 08:54:26%test = ( 'ccc' => '222', 'ddd' => '333' );
こんな風にした場合、%test の {'aaa'} と {'bbb'} が上書きされるのですが、それを回避する時
$test{'ccc'} = '222';
$test{'ddd'} = '333';
とせずに一括で変数に格納できないものでしょうか?
0650デフォルトの名無しさん
2011/01/06(木) 09:13:400651デフォルトの名無しさん
2011/01/06(木) 09:56:170652デフォルトの名無しさん
2011/01/06(木) 12:42:250653デフォルトの名無しさん
2011/01/06(木) 13:41:22これはやっぱり、$line =~ 系の書き方だと処理できないでよね。
そもそも英語だとワードの分割単位が判るので、ワードごとに戻る置換処理はできますが、日本語だと、ワードの区切りが判らない
でもMediawikiが、日本語の形態素解析をやってるとは思えないし、普通の多言語対応処理のなかでどうやって[]のタグなしで
タグの範囲となる日本語の区切りを判別させてるか謎です。
0654デフォルトの名無しさん
2011/01/06(木) 16:46:430656デフォルトの名無しさん
2011/01/06(木) 16:55:40編集画面だと
'''株式会社ナナオ'''({{Lang-en-short|''EIZO NANAO Corporation''}} )は、[[ディスプレイ (コンピュータ)|ディスプレイ]]装置専業メーカー。
ってなってるけど
0657Perl忍者 ◆M5ZWRnXOj6
2011/01/06(木) 17:05:29メカブくらいしってますよ(ゴホン
0658デフォルトの名無しさん
2011/01/06(木) 17:46:470659Perl忍者 ◆M5ZWRnXOj6
2011/01/06(木) 17:53:340660デフォルトの名無しさん
2011/01/07(金) 20:30:26XML形式のWikipediaのダンプデータ
http://download.wikimedia.org/jawiki/20101102/
にあるpages-articles.xml.bz2というファイル。
ところで、
ウィキページのデータはSQL(DB言語)のテーブルではなく、XML(マークアップ言語)で提供されます。
という文字列から()部分だけを削除するにはどうしたらいいのでしょうか?
$text =~ s/\(.*\)//g;
とやると最初の(から最後の)まで全部削除されてしまいます。
0661デフォルトの名無しさん
2011/01/07(金) 20:35:100662Perl忍者 ◆M5ZWRnXOj6
2011/01/07(金) 20:45:140663Perl忍者 ◆M5ZWRnXOj6
2011/01/07(金) 21:10:330664デフォルトの名無しさん
2011/01/07(金) 21:17:560665Perl忍者 ◆M5ZWRnXOj6
2011/01/07(金) 21:20:480666デフォルトの名無しさん
2011/01/07(金) 22:00:45みなさんのおかげです
0667デフォルトの名無しさん
2011/01/08(土) 06:47:460668仕様書無しさん
2011/01/08(土) 18:59:17その人たちはどこいますか?perl-casual以外で教えてください
0669デフォルトの名無しさん
2011/01/08(土) 19:02:500670デフォルトの名無しさん
2011/01/08(土) 19:03:40http://chat.studio.cx/o-cha/jsp/superbeginner/
ここです
0671デフォルトの名無しさん
2011/01/11(火) 16:12:02$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);
# 今回はこれでたまたまうまく出来たのですが
0672デフォルトの名無しさん
2011/01/11(火) 16:39:09つ do
読みにくくなりがちだからほどほどにな。
0673デフォルトの名無しさん
2011/01/11(火) 16:41:32my ($str, $new_array) = ($bool)? $array->[$i]=$elem && ("ほげ", $array): ("ふが", $array);
0674デフォルトの名無しさん
2011/01/11(火) 17:00:45$elem=0;
my ($str, $new_array) = ($bool)? $array->[$i]=$elem && ("ほげ", $array): ("ふが", $array);
0675デフォルトの名無しさん
2011/01/11(火) 17:08:14$elem=0;
my ($str, $new_array) = ($bool)? $array->[$i]=$elem || 1 and ("ほげ", $array): ("ふが", $array);
0676Perl忍者 ◆M5ZWRnXOj6
2011/01/11(火) 19:22:550677Perl忍者 ◆M5ZWRnXOj6
2011/01/11(火) 19:27:140678デフォルトの名無しさん
2011/01/11(火) 19:28:39$black_kigyouですか?
0679デフォルトの名無しさん
2011/01/11(火) 21:14:25462 : ◆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
0680デフォルトの名無しさん
2011/01/12(水) 03:33:430681デフォルトの名無しさん
2011/01/12(水) 04:00:150682デフォルトの名無しさん
2011/01/14(金) 17:12:32doを使うと複数行実行&最後に評価された値を返してくれるのですね。
レスありがとうございました。
>>673-675
これは・・・ありがとうございます。
andはこういう場合に使える(?)んですね。
どのみち$new_arrayの中身は$arrayになるので
my $str = ($bool)? do {$array->[$i]=$elem; "ほげ"}: "ふが";
こうしました。
0683デフォルトの名無しさん
2011/01/14(金) 22:08:48・gtk2
・windows7
という組み合わせでプログラミングできる環境を作ろうとしていますがうまくいきません
参考になるウェブページがあったら教えてください
0684デフォルトの名無しさん
2011/01/14(金) 22:32:070685デフォルトの名無しさん
2011/01/14(金) 23:04:23tk使うといろいろ楽しそうなのに、どうもハードルが高い
unixとwindowsはどこまで水と油なんだ
0686デフォルトの名無しさん
2011/01/14(金) 23:30:060687デフォルトの名無しさん
2011/01/14(金) 23:56:31ぐぐれない
0688デフォルトの名無しさん
2011/01/15(土) 13:32:12調べるにはどのようにしたらよいのでしょうか?
0689デフォルトの名無しさん
2011/01/15(土) 14:03:16perldocでモジュールを調べる。
モジュールのソースを読む。
0690デフォルトの名無しさん
2011/01/15(土) 14:33:570691デフォルトの名無しさん
2011/01/15(土) 18:02:320692デフォルトの名無しさん
2011/01/15(土) 18:39:310693デフォルトの名無しさん
2011/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;
0694デフォルトの名無しさん
2011/01/15(土) 19:38:08Time::HiRes::time()
>>693
if ($point) { $check = 1; last; }
0695Perl忍者 ◆M5ZWRnXOj6
2011/01/16(日) 01:03:54use 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'}
っていうやつはなんだとおもう?
教えてよ!
0696Perl忍者 ◆M5ZWRnXOj6
2011/01/16(日) 01:06:06$param->{'img'}
としている
newにわたす$paramはなに?
なんのオブジェクト?
何を渡すんだ・・・教えてください
0697Perl忍者 ◆M5ZWRnXOj6
2011/01/16(日) 01:07:05まじここのスレぶっつぶすからな
0699デフォルトの名無しさん
2011/01/16(日) 01:26:08LABEL: foreach my $nen (@kakdt){
で、
if ($point) { $check = 1; last LABEL; }
かな>>698
0700693
2011/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;}
}
}
0701693
2011/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"});
0702デフォルトの名無しさん
2011/01/16(日) 02:11:21なるほど、勉強になったよ。
0703デフォルトの名無しさん
2011/01/16(日) 02:31:12すごいすくりぷとだなー()
0704デフォルトの名無しさん
2011/01/16(日) 02:32:520705Perl忍者 ◆M5ZWRnXOj6
2011/01/16(日) 09:42:590706Perl忍者 ◆M5ZWRnXOj6
2011/01/16(日) 09:48:17sub 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()に渡す引数は何で生産したものですか?教えてくだう
0707デフォルトの名無しさん
2011/01/16(日) 09:58:40ファイル名とかその他いろいろ。
つーか、こんなもん自分で実装しろよ。根本的に勘違いしている。
0708Perl忍者 ◆M5ZWRnXOj6
2011/01/16(日) 10:08:440709デフォルトの名無しさん
2011/01/16(日) 10:52:49---------
ただし、親プロセスがただfork()してexit()しただけでは子プロセスも終了させられてしまいますので・・・
---------
ってあるんですが、試したところ親プロセスが fork -> exitしても子プロセスは落ちず、pstree で見ても init の直下にちゃんと(?)なってるんですが、上記の文章の意味はどういうところにあるのでしょうか?
どなたか詳しい方お願いします・・・
CentOS5.5 64bit
perl v5.8.8
0710デフォルトの名無しさん
2011/01/16(日) 11:03:34「素人がでたらめな入門書を書きました」という意味です。
0711デフォルトの名無しさん
2011/01/16(日) 11:06:49お前相当すごいやつなんだな
0712デフォルトの名無しさん
2011/01/16(日) 12:13:24http://jibun.atmarkit.co.jp/ljibun01/rensai/leader/22/01.html
全然業績ないじゃん。
0713デフォルトの名無しさん
2011/01/16(日) 12:27:220714デフォルトの名無しさん
2011/01/16(日) 12:30:390716デフォルトの名無しさん
2011/01/16(日) 12:39:170717デフォルトの名無しさん
2011/01/16(日) 12:47:550718Perl忍者 ◆M5ZWRnXOj6
2011/01/16(日) 12:50:14やっぱりハッシュリファレンス渡すだけであってたようでえすね^^;
久しぶりにPerlやったので頭が回りませんでした^^;
0719デフォルトの名無しさん
2011/01/16(日) 12:53:33>>710で説明したとおりでたらめな記述です。その本は速攻でごみ箱に捨てることをお勧めします。
0720デフォルトの名無しさん
2011/01/16(日) 13:01:210722デフォルトの名無しさん
2011/01/16(日) 13:39:36詳解UNIXプログラミングのP189に書いてあるよ。
0723デフォルトの名無しさん
2011/01/16(日) 13:51:09これででたらめと判断できるかい? クソ本はすぐにゴミ箱に捨てましょう。
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
0725709
2011/01/16(日) 14:14:44ありがとうございます。ちょっと高くて買えません。立ち読みに行こうかな・・。
「プログラミングPerl vol2」 の P1074 にも setsid の説明のところで 「モダンPerl入門」 と同じような説明がありますが、私なりに↓のようなことなのかな、と思いました。
たぶん、
-------
同じプロセスグループに属している最中に、親を ctrl+c などで
落としたら子も落ちるので、その影響を受けないように POSIX::setsid
して別のプロセスグループに移した方が良いよ。
-------
って意図ですよね。おそらく。
これなら確かに実際に動かして親が落ちて子も落ちることが確認できました。
0726デフォルトの名無しさん
2011/01/16(日) 14:44:24> 同じプロセスグループに属している最中に、親を ctrl+c などで
> 落としたら子も落ちるので、
違うよ。
> ただし、親プロセスがただfork()してexit()しただけでは子プロセスも終了させられてしまいますので・・・
これは忘れろ。「モダンPerl入門」とやらはでたらめ書いてるクソ本。
親プロセスが死んでも子プロセスは死なない。
0727709
2011/01/16(日) 15:03:58>> 同じプロセスグループに属している最中に、親を ctrl+c などで
>> 落としたら子も落ちるので、
>違うよ。
んーー。こちらの環境では、ちゃんと親も子も $SIG{INT} が動くんだけど・・・。
0728デフォルトの名無しさん
2011/01/16(日) 15:31:53>>727
制御端末からのsignalはそのセッションに属するプロセス全部に送られる。
親プロセスが死んだから子プロセスが死ぬのではなく、(子プロセスに)SIGINTが
送られたから終了する。
理解できたらクソ本は捨てましょう。
0730デフォルトの名無しさん
2011/01/16(日) 15:54:410731デフォルトの名無しさん
2011/01/16(日) 17:29:550732デフォルトの名無しさん
2011/01/16(日) 19:04:580733デフォルトの名無しさん
2011/01/16(日) 19:22:590734デフォルトの名無しさん
2011/01/16(日) 19:24:340735デフォルトの名無しさん
2011/01/16(日) 19:29:480736デフォルトの名無しさん
2011/01/16(日) 19:39:04★JPA(Japan Perl Association) ★
ギルドマスター(代表者) 牧大輔@最強パラディン(レベル75)
資本金 1000万アデナ
##### 主な活動 ######
Ruby,PHP,Pythonプレイヤーへの嫌がらせ
JPA勧誘
#######入隊条件#########
毎年5000円を納められる方
Perlレベル50以上の方
やる気のある方
ギルドHPはここです
http://japan.perlassociation.org/
です
0737デフォルトの名無しさん
2011/01/16(日) 19:40:45やる気あります だめですか?
0738牧大輔@最強パラディン
2011/01/16(日) 19:46:12>>737
はい、レベル2ですと瞬殺されてしまうので
レベル50以上になってからお越しください
0739デフォルトの名無しさん
2011/01/16(日) 19:54:33これ以上新たな刺客を送り込むのは本当にやめてくださいお願いします
0741デフォルトの名無しさん
2011/01/16(日) 20:11:030742牧大輔@最強パラディン
2011/01/16(日) 20:17:27どつくぞ
0743デフォルトの名無しさん
2011/01/16(日) 20:31:47特にonelinerのオプション一覧と便利な実例が豊富なの。
0746デフォルトの名無しさん
2011/01/16(日) 23:04:53下記のように$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;}
}
}
0747709
2011/01/16(日) 23:23:540748デフォルトの名無しさん
2011/01/17(月) 00:47:36で読み込みし直しているので@VL_pには更新後のデータが入ると思うのですが…。
0749709
2011/01/17(月) 01:03:54のファイルに、print "---load---\n"; って追記して、
さらにメインのスクリプトに下のように何個か書いてから、
require "./$DBF/$nen/$DB_P";
require "./$DBF/$nen/$DB_P";
require "./$DBF/$nen/$DB_P";
動かすとどうなる?
%INC
0750デフォルトの名無しさん
2011/01/17(月) 01:05:190751デフォルトの名無しさん
2011/01/17(月) 01:24:150752デフォルトの名無しさん
2011/01/17(月) 05:53:100753デフォルトの名無しさん
2011/01/17(月) 15:24:12外部テキストファイルを読み込んで、1行目から10行目を飛ばし、
11行目から処理を行うというプログラムを書きたいのですが
1行目から10行目を飛ばすにはどのようなコードを書けば良いでしょうか?
0754デフォルトの名無しさん
2011/01/17(月) 15:50:350755デフォルトの名無しさん
2011/01/17(月) 17:56:560756デフォルトの名無しさん
2011/01/18(火) 02:03:58レスありがとうございます。
どのようなコードを書けば良いのでしょうか?
0757デフォルトの名無しさん
2011/01/18(火) 02:07:190758デフォルトの名無しさん
2011/01/18(火) 02:27:48my $line;
for(1..10){ $line = <FH> }
$line = <FH>; # 11行目
このまま素直に書くと10行以下はエラーになるんで、
eof() 使ってくだちぃ
0759デフォルトの名無しさん
2011/01/18(火) 02:53:29ありがとうございます。
書いて走らせてみたのですが上手くいきません。
>>758さんのコードを使って、ファイルを読み込んでいるのですが
何も出力されないです。
0760デフォルトの名無しさん
2011/01/18(火) 03:03:05ファイルをopenしてますか
読み込んだ内容をprintしていますか
お好きなのをどうぞどうぞ
0761デフォルトの名無しさん
2011/01/18(火) 03:07:27間違ったリダイレクトをされていませんか
バッファはフラッシュされていますか
0762デフォルトの名無しさん
2011/01/18(火) 03:08:120763デフォルトの名無しさん
2011/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++;
}
0764746
2011/01/18(火) 10:40:01---load---が最初に読み込んだ1回分しか表示されず、ループ処理での読み込みが飛ばされていました。
どうも、同じファイルは1度しか読み込めないようです。
これはサーバーの仕様なのでしょうか?perlがそういうものなのでしょうか?
>>750
分かりづらくてすみません。
$PL_p[$q_no]が得点になっていて、$PL_p[$q_no]--;で減点処理をしています。
0765デフォルトの名無しさん
2011/01/18(火) 23:13:50require "./$DBF/$nen/$DB_P"; → do "./$DBF/$nen/$DB_P";
これでやってみそ
0766746
2011/01/19(水) 01:24:47おお、出来ました!
doとrequireの違いで調べたら、doは複数回呼び出すと呼び出された分だけ実行して
require、useは複数回呼び出しても一度しか実行されないとのことでした。
勉強になりました。
回答してくださったみなさん、ありがとうございました。
0767デフォルトの名無しさん
2011/01/20(木) 21:12:47http://nlp.nagaokaut.ac.jp/Apple_Pie_Parser
上記リンクのApple Pie Parserを用いたプログラムを作っています。厳密に言うとCGIですが、Perlのコーディングに関する問題だと思うのでこちらで質問します。
フォームに入力した英文を上記のツールにかけて出力結果を出そうとしています。
Windowsで開発しているので、英文入力→cygwin起動→そこであらかじめ指定したコマンドを入力するようコーディング→結果を受け取る
という感じにしたいのですが、cygwinを起動させることができません。
どうすればいいでしょうか。
0768デフォルトの名無しさん
2011/01/20(木) 21:16:560769デフォルトの名無しさん
2011/01/20(木) 21:21:02cygwin使ったことないけど、実行ファイルはcygwin上じゃなくても動かせるんじゃないの?
0770デフォルトの名無しさん
2011/01/20(木) 21:25:28今なら Strawberry Perl とかどうなんだろうね?
0771デフォルトの名無しさん
2011/01/20(木) 21:43:32実行ファイルと同ディレクトリにcygwin1.dllを設置すればcygwinなしでも起動できるのですが、
そうすると今度はディクショナリファイルが開けない、とのエラーが出てきます。
そのファイルもインストールフォルダからコピーし、同ディレクトリに設置しましたがこちらはエラーが解決しません。
何らかの設定ファイルのパスをいじるべきでしょうか?
0772デフォルトの名無しさん
2011/01/20(木) 22:04:27perl入門にはcygwinじゃなくlinuxを使うべき
0773デフォルトの名無しさん
2011/01/20(木) 23:08:500774デフォルトの名無しさん
2011/01/20(木) 23:24:030775デフォルトの名無しさん
2011/01/20(木) 23:24:550776デフォルトの名無しさん
2011/01/20(木) 23:57:37フロントエンド部分でcygwin必須なことがよくある
0777デフォルトの名無しさん
2011/01/21(金) 00:14:160778デフォルトの名無しさん
2011/01/21(金) 00:57:09X68k版Perl5を持ってるのは、恐らく今や世界中で俺だけ。
実機もいまだに健全稼動してる俺勝ち組?
0779デフォルトの名無しさん
2011/01/21(金) 01:08:22for文で1000個(同じ内容)のスレッドを発行したいが
同時に並列させるのは4つまでにしたい。
4並列はセマフォで管理するとして
ひとつのスレッドが終わったらjoinで回収して
すぐに次のスレッドを発行したいのだがいい方法ありますか?
0780デフォルトの名無しさん
2011/01/21(金) 07:19:500781779
2011/01/21(金) 17:59:15forじゃなくてqueueとsemaphoreの合わせ業でいけた。
is_joinable()でスレッド監視して、Join待ちのロックが起きないようにできました。
リニア実行に比べて4並列で約3倍早くなった!
0782Perl忍者 ◆M5ZWRnXOj6
2011/01/21(金) 19:21:45LWP
画像だったら
PerlMagick
っで
音楽、画像、ネット、動画で他に楽しめそうなモジュールやつあったらおしえて
0783Perl忍者 ◆M5ZWRnXOj6
2011/01/21(金) 19:23:290784デフォルトの名無しさん
2011/01/21(金) 20:01:470785デフォルトの名無しさん
2011/01/21(金) 20:23:580786デフォルトの名無しさん
2011/01/22(土) 05:17:14再現性が無い・・・
同じ問題に遭遇した人いる?
0787デフォルトの名無しさん
2011/01/22(土) 06:22:32getに失敗するとundefになると書いてある。
単にサーバーが503とかを出してるんじゃないか。
0788デフォルトの名無しさん
2011/01/22(土) 08:03:130789nobodyさん
2011/01/22(土) 09:46:520790デフォルトの名無しさん
2011/01/22(土) 10:23:080791デフォルトの名無しさん
2011/01/22(土) 10:56:010792デフォルトの名無しさん
2011/01/22(土) 12:25:48それだけの手間を全てのgetにかけるのかとか、うんざりしてくる
0793デフォルトの名無しさん
2011/01/22(土) 13:35:110794デフォルトの名無しさん
2011/01/22(土) 13:37:090795デフォルトの名無しさん
2011/01/22(土) 14:51:28is_error も同じで、ルーターがいっぱいいっぱいで接続中断されてもエラー無しと返す。
なので、HTML に限っては ->content に </html> があるかどうかで判断してる。
画像は HEAD で得たファイルサイズと一致してるかどうか。
0796デフォルトの名無しさん
2011/01/22(土) 15:35:560797786
2011/01/22(土) 17:22:22パケットキャプチャしてみるとそもそもHTTP GETリクエストを送出していない・・・
なのでLWP::UserAgentを調べてる ← いまここ
ちなみにundef受け取ったら1秒待機して再getをすると上手くいく
0798デフォルトの名無しさん
2011/01/22(土) 19:58:42底辺perl脳。
そもそもNATテーブルに空きがなければ、普通コネクションは成立しないよね。
どんな、ルータ使ってるんだか知らないけど。w
0799デフォルトの名無しさん
2011/01/23(日) 02:58:29head で得られるデータってすごく短いから、それぐらいなら正常に終わるけど、
ちょっと長いのになるとルーターが取りこぼす。
ちなみに BA8000Pro
他のルーターでもテーブルがいっぱいいっぱいだときっつい
許容量を超えると DNS 解決すら出来なくなる
IP さえ分かればなんとかデータは取ってこれるけど、ものすごい不安定。
0800デフォルトの名無しさん
2011/01/23(日) 13:46:57恐怖のperl脳
NATテーブルがあふれたから不安定になるんじゃなくて、不安定だから
再接続を繰り返してNATがあふれたんだろ。
NATテーブルを線形探索しているヘッポコルータなら、テーブルが埋まっ
てくると不安定になるというのはありうるが、そんなルータ生き残って
ないだろ。
0801デフォルトの名無しさん
2011/01/23(日) 16:04:17ルーターの NAT テーブル保持数が 2000 を越えたあたりから
DNS の変換が出来なくなったり、接続出来ても処理が不安定に
なってるから切断されたり。
0802デフォルトの名無しさん
2011/01/23(日) 16:06:090803デフォルトの名無しさん
2011/01/23(日) 16:28:290804デフォルトの名無しさん
2011/01/23(日) 17:48:09テーブル溢れさせたことないから、
そのときのLWPの挙動なんて知らんけど。
0805デフォルトの名無しさん
2011/01/23(日) 19:57:09体験した事じゃなきゃ信じない人種にとっては信じられない事かな?
0806デフォルトの名無しさん
2011/01/23(日) 20:03:47規模によっては普通に使ってて、4096テーブル埋まるんですけど。
まぁ個人ユーザなら、普通は体験する事ないよね。
0807デフォルトの名無しさん
2011/01/23(日) 20:04:320808デフォルトの名無しさん
2011/01/23(日) 21:09:510809デフォルトの名無しさん
2011/01/23(日) 23:04:120810デフォルトの名無しさん
2011/01/23(日) 23:21:10使ってる BA8000Pro はテーブル数が 2600 なんで、ちょっと Linux ISO がバージョンアップしたときなんて結構辛い
なので数日待ってから放流してる
まぁ Perl とは無関係の話しだし程ほどにw
0811デフォルトの名無しさん
2011/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>
0812デフォルトの名無しさん
2011/01/24(月) 09:43:25WWW::Mechanizeのドキュメントをあと10回くらい読み返す
0813デフォルトの名無しさん
2011/01/24(月) 09:56:57そんなこと言わずに、助けてくださいよ。
この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つあるのは初めてみたのでどう処理していいか分からないです。
0814デフォルトの名無しさん
2011/01/24(月) 11:31:36ちゃんと、書いてあるじゃん。
0815デフォルトの名無しさん
2011/01/24(月) 12:19:51http://perldoc.jp/docs/modules/WWW-Mechanize-1.02/Mechanize.pod
0816デフォルトの名無しさん
2011/01/24(月) 16:24:17それバージョン古いので新しいの用意して下さい
0817デフォルトの名無しさん
2011/01/24(月) 16:53:390818デフォルトの名無しさん
2011/01/24(月) 16:58:44$mech->click_button( name => 'yyyyyyy');
とするとエラーが出ました。
No clickable input with name yyyyyyy at /usr/lib/perl5/site_perl/5.10/WWW/Mechanize.pm line 1765
ヒントをおねがいします。
0819デフォルトの名無しさん
2011/01/24(月) 20:56:060820デフォルトの名無しさん
2011/01/25(火) 13:35:03open my $fh,"<","file.txt";
$fhは型グロブのリファレンスのようなんですが
そのリファレント(型グロブはどうなってるんでしょうか?何が入ってるんでしょうか?
教えてください
内部的なものまで意識する必要はないでしょうか?教えてください
0821デフォルトの名無しさん
2011/01/25(火) 14:44:290822デフォルトの名無しさん
2011/01/25(火) 16:03:23普通に無名のグロブだと思う。
ググったら、IO::Handleのメソッドが使える謎を追ってるページが出てきた。
初めて知ったけど、面白いね。
ttp://d.hatena.ne.jp/dayflower/20080605/1212652674
0823Perl忍者 ◆M5ZWRnXOj6
2011/01/25(火) 16:31:460824デフォルトの名無しさん
2011/01/30(日) 15:00:27$string = "aaaaa";
while ( $string =~ /a/ ) {
print "aを見つけました\r\n";
}
たとえば上のスクリプトを動かすと無限ループに陥りますが,
aを見つけたら次はその位置の次の文字から検索するようにすれば
aの文字数分だけでループを終了できるはずです。
このような検索開始位置の指定は可能でしょうか?
0825デフォルトの名無しさん
2011/01/30(日) 15:02:36while ( $string =~ /a/g ) {
print "aを見つけました\r\n";
}
0826デフォルトの名無しさん
2011/01/30(日) 15:18:23//gc
0827デフォルトの名無しさん
2011/01/30(日) 15:42:080828デフォルトの名無しさん
2011/02/03(木) 03:17:19>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のコードはそのまま使えないのでしょうか?
0829デフォルトの名無しさん
2011/02/03(木) 03:36:220830デフォルトの名無しさん
2011/02/03(木) 03:36:56って話だと思う
0831デフォルトの名無しさん
2011/02/03(木) 03:50:22defined(@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.
0832デフォルトの名無しさん
2011/02/03(木) 04:05:12>>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
0833デフォルトの名無しさん
2011/02/03(木) 07:04:050834デフォルトの名無しさん
2011/02/03(木) 14:06:21definedはfalseが返るけど
0835デフォルトの名無しさん
2011/02/03(木) 23:24:57(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";
}
0836デフォルトの名無しさん
2011/02/03(木) 23:47:13たしか BAT での変数名とかだったような・・・
0837デフォルトの名無しさん
2011/02/04(金) 07:46:39@new;
for( @array ){
my $r = rand @new+1;
push(@new, $new[$r]);
$new[$r] = $_;
}
一番下がなにをしてるのか教えてください
0838デフォルトの名無しさん
2011/02/04(金) 07:58:430839デフォルトの名無しさん
2011/02/04(金) 08:15:33pushの行と$new[$r]の行の下に print join " ", @new; を入れて @new の内容を見てみるとわかりやすいですよ
0840デフォルトの名無しさん
2011/02/04(金) 16:05:27for(my $i = 0; $i <= $#array; $i++){
}
0841デフォルトの名無しさん
2011/02/05(土) 01:08:00を当たり前のように見るけど、意味不明だ。
0842デフォルトの名無しさん
2011/02/05(土) 01:13:310843デフォルトの名無しさん
2011/02/05(土) 06:31:280844デフォルトの名無しさん
2011/02/05(土) 06:42:36my $x = "012";
print $x + 0; # => 12
0845デフォルトの名無しさん
2011/02/05(土) 06:45:22文字列をちゃんと数値として解釈してほしいのであれば、oct関数を使うといいよ。
0846デフォルトの名無しさん
2011/02/05(土) 07:45:05�d
oct関数っていうのもあるんですね。
でも、oct関数を使うと、なぜか10になっちゃいます><
my $x = "012";
print oct($x); # => 10
0847デフォルトの名無しさん
2011/02/05(土) 07:57:24間違えたuserではなくusrで、#の次に!が抜けてた
0848デフォルトの名無しさん
2011/02/05(土) 08:06:590849デフォルトの名無しさん
2011/02/05(土) 08:29:09シバンというヘッダーを全く付けずに作ってたが、unixではないから
やはり正解だったんだな。
個人宅や職場でunixやlinuxなんか見ることないのに、コンピュータ技術
の分野ではwindowsを上回ってるかも知れないくらいに、コンピュータの
プロの人は仕事で利用してるんだな。
0850デフォルトの名無しさん
2011/02/05(土) 08:57:28ずっと動かし続けるのに邪魔なので。
0851デフォルトの名無しさん
2011/02/05(土) 09:29:440852デフォルトの名無しさん
2011/02/05(土) 09:54:23別のソフトで探したところTaskTrayPlusを使って出来ました
TaskTrayPlus
「ホットキーの設定に失敗しました!」って出るけどうまくいった
ttp://bnassoft.s35.xrea.com/
DM2
使い勝手いいけどPerlだけ無反応
ttp://dm2.sourceforge.net/
0853デフォルトの名無しさん
2011/02/05(土) 11:07:100854デフォルトの名無しさん
2011/02/05(土) 11:41:470855デフォルトの名無しさん
2011/02/05(土) 16:36:19CGI.pmで複数のcssファイル(index.cssとbase.css)を適用させようとして上記URLにあるコードを
書いたのですが、うまく二つとも適用されません。
どのようにすれば二つのCSSファイルを適用させることが出来ますか?
0856デフォルトの名無しさん
2011/02/05(土) 16:40:260857855
2011/02/05(土) 16:46:45そこを見て下記のようなコードを書くなどして上手くいかなかった為、今回質問しました。
http://ideone.com/FJr73
http://ideone.com/7YfA4
0858デフォルトの名無しさん
2011/02/05(土) 16:59:03↓
use CGI qw/:standard/;
0859855
2011/02/05(土) 17:26:28ありがとうございます!
0860Perl評論家
2011/02/05(土) 21:15:18MacやLinuxと違って注意するところはなんですか?
CPANとか文字コードですか?教えて下さい
0861デフォルトの名無しさん
2011/02/06(日) 00:09:450862Perl評論家
2011/02/06(日) 00:41:53なあ、前に
->矢印演算子がちょっとわからなかったからさあ
(矢印演算子)
C や C++ と同じように "->" は中置の被参照演算子です。
右側が [...], {...}, (...) のいずれかの形の添字であれば、左側は配列、ハッシュ、 サブルーチンへのハードリファレンスかシンボリックリファレンス
(あるいは 技術的には、配列またはハードリファレンスが代入可能であれば ハードリファレンスを保持できる場所) でなければなりません。perlreftut と
perlref を参照してください。
そうでなければ、右側はメソッド名かサブルーチンのリファレンスを持った 単純スカラ変数で、左側はオブジェクト
(bless されたリファレンス) か クラス名でなければなりません。 perlobj を参照してください。
って言われたから
perldoc.jp読む癖つけたわ
まじperldocってさいこうなんだけど
>右側はサブルーチンのリファレンスを持った 単純スカラ変数
これってさあ $sub=sub{'bakasinekiero'};
$obj->$subってことだろお?
もうまじリファレンスもマスターしちゃったからさあ
おれはPerlマスターなんじゃないかなあ
0863Perl評論家
2011/02/06(日) 01:03:42あとはperldoc
これだけオブジェクトPerlなんてかわなくていい
0864デフォルトの名無しさん
2011/02/06(日) 01:07:300865デフォルトの名無しさん
2011/02/06(日) 08:11:490866デフォルトの名無しさん
2011/02/06(日) 11:16:240867デフォルトの名無しさん
2011/02/06(日) 11:45:510868デフォルトの名無しさん
2011/02/06(日) 12:03:24なんという釣り針
0869デフォルトの名無しさん
2011/02/06(日) 12:11:140870デフォルトの名無しさん
2011/02/06(日) 12:14:48お前PerlをPHPみたいなWEBでしか動かない言語と思ってないか?
0871デフォルトの名無しさん
2011/02/06(日) 12:29:130872デフォルトの名無しさん
2011/02/06(日) 13:56:080873Perl忍者 ◆M5ZWRnXOj6
2011/02/06(日) 18:43:15869 :デフォルトの名無しさん:2011/02/06(日) 12:11:14
perl の歴史を無視とかw
↑
爆笑
0874デフォルトの名無しさん
2011/02/06(日) 19:06:090875デフォルトの名無しさん
2011/02/06(日) 21:12:32Useless 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です。
0876デフォルトの名無しさん
2011/02/06(日) 21:15:350877デフォルトの名無しさん
2011/02/06(日) 22:59:02○ $sth->finish();
=> であるか -> でないか
0878デフォルトの名無しさん
2011/02/06(日) 23:28:00すいませんでした。
0879Perl忍者 ◆M5ZWRnXOj6
2011/02/07(月) 00:47:050880Perl忍者 ◆M5ZWRnXOj6
2011/02/07(月) 01:01:420881 ̄ ̄ ̄ ̄)ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
2011/02/07(月) 04:28:00( ´・ω・`) ∧_∧
/ \ ( ) そうきたかwww
.__| | .| |_ / ヽ
||\  ̄ ̄ ̄ ̄ / ..| | |
||\..∧_∧ (⌒\|__./ ./
||. ( .) ~\_____ノ| ∧_∧
/ ヽ.ワロス \| ( ) お前が言うと説得力あるなあww
| ヽ \/ ヽ.
| |ヽ、二⌒) / .| | |
.| ヽ \∧_∧ (⌒\|_ .../ /
0882デフォルトの名無しさん
2011/02/07(月) 21:18:43@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
をマッチさせることができました。
文字列に()が含まれている時でもマッチさせるにはどうすればよいでしょうか?
0883デフォルトの名無しさん
2011/02/07(月) 22:08:330884デフォルトの名無しさん
2011/02/08(火) 02:19:16/\.aac$/
0885デフォルトの名無しさん
2011/02/08(火) 09:57:24$j =~ s/([()])/\\$1/g;
0886デフォルトの名無しさん
2011/02/08(火) 15:49:32http://www.yabbforum.com/community/YaBB.pl?num=1286567562
今日もlispスレでperl糞とか言われてしまったわ
0887Perl評論家
2011/02/08(火) 17:21:51ここで
shitっていれてもでてきませんでした
糞ってどこに書いて案ですか?
0888Perl評論家
2011/02/08(火) 17:41:010889デフォルトの名無しさん
2011/02/08(火) 21:04:08回答ありがとうございます。
そして、言葉足らずですみません。
$filenameに格納された文字列でマッチをさせたいのですが
どのようにすればよいでしょうか?
0890882,889
2011/02/08(火) 21:08:15度々すみません。
$filenameに格納された文字列を含んで、aacも含む
条件でマッチさせたいです。
その時はどのようにすればよいでしょうか?
0891デフォルトの名無しさん
2011/02/08(火) 21:12:490892デフォルトの名無しさん
2011/02/08(火) 21:13:050893882,889
2011/02/08(火) 21:23:58回答ありがとうございます。
if($j=~/\Q$aacfilename\E.+aac$/){
で期待通りの結果になりました。
これでファイル処理が楽になります
ありがとうございました。
0894Perl忍者 ◆M5ZWRnXOj6
2011/02/08(火) 23:48:32正規表現ぐらいで質問してるやつ
0895デフォルトの名無しさん
2011/02/08(火) 23:52:08ファイルの読み書き、コマンドプロンプトに文字を表示、文字列の操作や数値の計算などの簡単なものです
あとはCPANでのモジュールのインストールなどです
やり方を一新しないとモジュールのインストができない、とかはないですよね?
以前やってた時はコマンドプロンプトで
perl -MCPAN -e shell
install (モジュール名)
のようにやってました
0896デフォルトの名無しさん
2011/02/08(火) 23:57:04おれさあ
Windows買ってからさあ
CPANとかで導入するときエラー出てやる気うせるんだよね^^;
だからWindowsでPerlやるのめんどくさいんだよね
ichatのBOTつくろうとしたら
モジュール入れるとき Linuxみたいに入らなくてやる気うせたんだよね^^;
windows764bitだとnmake意味不明だったから^^;
0897デフォルトの名無しさん
2011/02/09(水) 00:50:26ありがとうです。
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インストしたら出来るのかな・・・
0898デフォルトの名無しさん
2011/02/09(水) 07:53:160899デフォルトの名無しさん
2011/02/09(水) 17:19:24引数の内容や数でサブルーチンの処理を動的に変えたいです。
例えば引数の和を返す場合に処理の部分をスマートに書く方法はありますか?
add($a);
add($a, $b);
add(@c);
add(\@d, \@e);
sub add
{
処理;
return $ans;
}
0900デフォルトの名無しさん
2011/02/09(水) 17:44:47リファレンスはめんどくさいので考慮しないとしてw、
sub add{
my @data = @_;
my $total = 0;
foreach my $datum (@data){
$total += $datum;
}
return $total;
}
なんも考えずにざっと組むと、こんな感じ。
0901デフォルトの名無しさん
2011/02/09(水) 17:52:38my$sum = 0;
$sum += ref $_ eq "ARRAY" ? add(@$_) : $_ foreach @_;
return $sum;
}
0902899
2011/02/09(水) 17:58:03「引数の内容で処理を変えたい」です。
サブルーチンのプロトタイプ宣言が複数できれば簡単なのですが、perlでは無理みたいです。
sub add(\$)
sub add(\$\$)
sub add(\@)
やはり引数に応じてサブルーチンを複数作るのがベストプラクティスなのでしょうか?
0903899
2011/02/09(水) 18:10:54型をチェックして処理を分けるイメージですね
引数のパターンをいかにチェックするかがキーなのか・・・
ありがとうございます、方向性が見えてきました。
0904デフォルトの名無しさん
2011/02/09(水) 19:20:12use 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(@_);
}
0905デフォルトの名無しさん
2011/02/09(水) 22:46:170906デフォルトの名無しさん
2011/02/10(木) 00:14:01perl初心者です
mac です
hello worldまで、実現したいです
macは、はじめから、perlをはいっているとしりました
どこにありますか?
すいません
0907デフォルトの名無しさん
2011/02/10(木) 00:19:06システムにありました
次は、helloworldをかきたいです
何のファイルを、使えばよいでしょう?
たびたびすいません
0908デフォルトの名無しさん
2011/02/10(木) 00:49:36規模にもよるけど、引数のセット毎に別のクラス作って実装するかな。
0909デフォルトの名無しさん
2011/02/10(木) 01:31:50そこからperl -e "print qq/hello the world./;"とでもうちこんでみればどうか
0910デフォルトの名無しさん
2011/02/10(木) 02:36:54use Class::Multimethods;
...
multimethod add => ('$', '$') => sub { ... };
multimethod add => ('ARRAY') => sub { ... };
multimethod add => ('$', 'ARRAY') => sub { ... };
0911デフォルトの名無しさん
2011/02/10(木) 04:33:52my ($x, $y, @array);
for (0 .. 1) {
$array[$_] = $_;
$array[$_] ? ($x = 1) : ($x = 0);#期待通りの結果
$array[$_] ? $y = 1 : $y = 0; #期待と異なる結果
print "array = $array[$_], x = $x, y = $y\n";
}
結果
array = 0, x = 0, y = 0
array = 1, x = 1, y = 0
0912デフォルトの名無しさん
2011/02/10(木) 04:53:450913デフォルトの名無しさん
2011/02/10(木) 07:38:04$array[$_] ? $y = 1 : $y = 0;
だと、
($array[$_] ? $y = 1 : $y) = 0;
のようになっている気がする。
$array[$_] ? ($y = 1) : ($y = 0);
ておけば大丈夫…だが、そもそも
$y = $array[$_] ? 1 : 0;
と書けばなんてことはない。
0914デフォルトの名無しさん
2011/02/10(木) 08:49:45thx!
god bless you ,909
0915デフォルトの名無しさん
2011/02/10(木) 12:08:05C-c C-r
で選択したところだけ評価したいのですが
.emacsにいろいろ設定しないとだめなのでしょうか
デフォルトでperl-modeやcperl-modeってのが入ってるみたいですが
そのままでは上記のことができません
0916デフォルトの名無しさん
2011/02/10(木) 12:47:24ありがとうございます。
>そもそも
>$y = $array[$_] ? 1 : 0;
>と書けばなんてことはない。
その通りなのですが、
実際は $array[$_] ? ($x = 1) : ($y = 0); のような処理なのです。
0917デフォルトの名無しさん
2011/02/10(木) 13:21:130918デフォルトの名無しさん
2011/02/10(木) 13:40:560919デフォルトの名無しさん
2011/02/10(木) 14:11:11組込み巻数にはなく、サブルーチン自作でしょうか?
0920デフォルトの名無しさん
2011/02/10(木) 14:27:40map {$_->[1]}
sort {$a->[0] cmp $b->[0]}
map {[$_, $i++]}
@list;
0921デフォルトの名無しさん
2011/02/10(木) 14:50:35値を使う訳じゃないならわざわざ三項演算子で見づらくしなくても
if文でいいんじゃないかという素朴な疑問
0923デフォルトの名無しさん
2011/02/10(木) 16:40:58>>919
my @array = qw( b c a );
my @order = sort { $array[$a] cmp $array[$b] } 0..$#array; # 2,0,1
my @sorted = @array[@order]; # qw( a b c )
my %sorted = map +($array[$_] => $_), @order; # (a=>2, b=>0, c=>1)
0925gfx
2011/02/10(木) 19:23:16$i=if->aaa[100];
map printf "$i+++";
@list print;
$aa=qw/ /=qw/aaza/aa/a/a/aa/;
0926gfx
2011/02/10(木) 20:46:350927gfx
2011/02/10(木) 20:54:240928デフォルトの名無しさん
2011/02/10(木) 22:36:300929デフォルトの名無しさん
2011/02/11(金) 09:06:37「Perlという言語の中で論理的に定義された復帰文字と改行文字です」
と書かれています。
Perlメモ
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
Windowsの場合、\n(=\x0A)はPerlIOを通過する時に(:crlfレイヤがあれば)\x0D-\x0A
に変換されると認識しておりました(入力の場合はその逆の変換)。
ただ、上記サイトの表に、Macの場合、
binmode FH;
print FH "\n"; # => \x0D を出力
と書かれています。
今のMacはUNIXベースなので、多分、改行は\x0Aだと思いますが、昔のMacは本当に
binmodeした時でも、\x0Dを出力していたのでしょうか?
もし、そうならば上記サイトで指摘されているように、「\r=\x0D、\n=\x0A」という
私の認識は間違いのような気がします。
0930デフォルトの名無しさん
2011/02/11(金) 09:42:13http://perldoc.perl.org/perlport.html#Newlines
気になるなら自分で環境を手に入れて確認してくれ。
0931デフォルトの名無しさん
2011/02/11(金) 10:09:48ありがとうございます。
「\nは論理的な改行を表す」と書いてありますね。
1つ賢くなりました。
>Perl uses \n to represent the "logical" newline, where what is logical may
>depend on the platform in use. In MacPerl, \n always means \015 .
>In DOSish perls, \n usually means \012
0932http://blog.oricon.co.jp/benjo/
2011/02/11(金) 10:26:540933デフォルトの名無しさん
2011/02/11(金) 10:51:27細かい小数点は省くけど
rand(2) → 0 〜 1.99
rand() * 2 → (0 〜 0.99) * 2 = 0 〜 1.98 (ただし得られるのは2の倍数のみ)
となります
0934デフォルトの名無しさん
2011/02/11(金) 11:09:40その解釈も違うと思う。
>perl -we "print rand * 2"
Argument "*main::2" isn't numeric in rand at -e line 1.
0.849334716796875
>perl -we "$foo = 100; print rand $ foo"
79.45556640625
>perl -we "print rand 0"
0.341094970703125
Perl はプレフィクスとトークンの間にホワイトスペースが入ってもいいんだ。
0935デフォルトの名無しさん
2011/02/11(金) 11:48:400936デフォルトの名無しさん
2011/02/11(金) 14:09:11最初のやつ、「2」が数値扱いされて
ないだろ?
「*2」としてrandの引数になってる。
0937デフォルトの名無しさん
2011/02/11(金) 17:31:500938デフォルトの名無しさん
2011/02/12(土) 02:11:030939デフォルトの名無しさん
2011/02/12(土) 03:37:150940Perl忍者 ◆M5ZWRnXOj6
2011/02/12(土) 09:07:09http://lhlhlh.blog71.fc2.com/blog-entry-117.html
「広い意味でコンピュータ関係のブログ」
前にスクリーンショットのこと聞いてたし
>perlでウェブページのスクリーンショット保存アップロードし一覧にしてhtml出力
0941デフォルトの名無しさん
2011/02/12(土) 11:46:13後にかかないと エラーでちゃいます
無名関数はプロトタイプ宣言できないのでしょうか?
package car;
sub new{
my $self=shift;
return bless({},$self);
}
my $punk=sub{
my $self=shift;
print "punk!";
};
sub boo{
my $self=shift;
print "booo!";
$self->$punk;
}
$punkを後に書くとエラーでます
やはり前に書くしかないのでしょうか?
0942デフォルトの名無しさん
2011/02/12(土) 11:53:56sub aa;みたいに
やっぱり 無名関数は変数としてみるから前に書かないといけないんですか?
教えてください
0943Perl忍者 ◆M5ZWRnXOj6
2011/02/12(土) 11:57:41レキシカル変数に無名サブルーチン代入してるじゃないですか 変数ですよこれ
newの下か上に宣言しろよw そうすればその下のメソッドで利用可能になるから
なのでsub $punk;なんてできません
そのぐらいわかれよカス
0944デフォルトの名無しさん
2011/02/12(土) 14:28:13質問内容と具体例が乖離してるぞ。
サブルーチンリファレンスにて
「プロトタイプ宣言出来るか?」
「プロトタイプの先行宣言出来るか?」
って質問なら、
前者は出来ない(宣言したつもりでも無視される)し、
後者も出来ない(シンタックスエラーになるか、したつもりになるだけ)。
==============
#!/usr/bin/env perl
use strict ;
use warnings ;
my $sub = sub ($) {} ; # 先行宣言したつもり
$sub->( q{hoge}, q{foo} );
$sub = sub ($) { printf "%s %s\n", @_ } ; # プロトタイプ宣言したつもり
$sub->( q{hoge}, q{foo} );
{
sub new { bless {}, shift }
my $foo ; # 先行宣言したつもり
sub echo{ shift->$foo }
$foo = sub{ printf "%s\n", shift } ;
}
main->new->echo ; # <= 先行宣言の検証にはなりえない。
==============
0945デフォルトの名無しさん
2011/02/12(土) 16:46:010946デフォルトの名無しさん
2011/02/12(土) 18:31:58_1が付いたのも既にあったら_2を付ける的に順次増やしていく方法で
ファイル名を決定するスマートなやり方は?
0947Perl評論家
2011/02/12(土) 18:47:170948デフォルトの名無しさん
2011/02/12(土) 18:47:49命名規則の話?
ファイル検索ロジックの話?
「_1」を「_2」に置換するコードの話?
0949デフォルトの名無しさん
2011/02/12(土) 19:11:07ループにして最初に存在しなかったファイル名で決定すりゃいいだけでしょ?
for(0..99){
my $fn = "hoge" . ($_ ? "_$_" : "");
if(-e $fn) {
print "${fn}は存在した\n";
}else{
print "${fn}は存在しなかったので決定\n";
last;
}
}
ちなみにlogrotateとは動き違うよ
0950Perl評論家
2011/02/12(土) 19:18:010951デフォルトの名無しさん
2011/02/12(土) 19:28:32利用している無料サーーバーはPerlに対応しているのですが、
Mechanizeに対応しているかは分かりません。
Mechanizeのインストール方法は、下記のQ&Aの通りでいいのでしょうか?
http://oshiete.goo.ne.jp/qa/1680065.html
実際にやってみたのですが、cgiページを表示しても500エラーになります。
アップするフォルダや、cgiに書くフォルダ位置などを色々変えて試しましたが、
やはり動きません。
Mechanizeが使えるサーバーであるどうか、チェックする方法や、
初心者向けのインストール方法などが解説されたサイトはないでしょうか?
0952デフォルトの名無しさん
2011/02/12(土) 19:34:58三項演算子がうまく使えるな
0953デフォルトの名無しさん
2011/02/12(土) 19:43:42決定したときには存在しなかったファイルが、作成するときには
すでに存在する。 そういう場合がある。
0954デフォルトの名無しさん
2011/02/12(土) 20:04:270955デフォルトの名無しさん
2011/02/12(土) 20:13:51すでに存在する。 そういう場合がある。
0956デフォルトの名無しさん
2011/02/12(土) 20:16:15って書けばよろしいでしょうか(笑
0957デフォルトの名無しさん
2011/02/12(土) 20:30:050958デフォルトの名無しさん
2011/02/12(土) 20:30:590959デフォルトの名無しさん
2011/02/12(土) 23:28:54しかし、エロ画像に連番を振りなおす程度なら、ここまで仰々しいものは要らない。
use Fcntl qw(:DEFAULT :flock);
use Errno;
sub create_new_file {
my ($name, $ext) = @_;
my $file = "${name}.${ext}";
my $number = 1;
return sub {
while(1){
unless(-e $file){
if (sysopen(my $fh, $file, O_WRONLY|O_CREAT|O_EXCL)){
flock($fh, LOCK_EX);
return $fh;
}
($! == Errno::EEXIST) or last;
}
$file = "${name}_${number}.${ext}";
$number++;
}
die "cannot create file $!";
};
}
my $create = create_new_file("foo", "txt");
my $fh = $create->();
...
0960デフォルトの名無しさん
2011/02/12(土) 23:36:470961デフォルトの名無しさん
2011/02/12(土) 23:47:25#our @ISA = qw/Exporter/;
#our @EXPORT = qw//;
みたいにコメントアウトしても使えてるんだけど、これはこれで大丈夫なの?
0962Perl評論家
2011/02/13(日) 00:07:49作品のよさ>>>>>>>スマートとかコード美学>>>perl5の書き方 (笑)
0963デフォルトの名無しさん
2011/02/13(日) 00:14:02O_EXCLしてるんだから、-eで調べなくてもいいんじゃねーの?
-eとopenの間に他のプロセスに割り込まれる可能性を排除
できないから-eあんま意味ないと思う。
0964デフォルトの名無しさん
2011/02/13(日) 00:44:10これの一連の作業を%PLAYER_LISTの全員に対して行いたくて下記のようにしているのですが、
これだとforeachで%PLAYER_LISTを2度回して(?)いてループを無駄にしていると思います。
ループを一度で終わらせる方法はないのでしょうか?
foreach $id (keys %PLAYER_LIST){
&Ps_CONVERT($id);
$PL_p[$qn]=0;
open(PUSHLOG,">../$DBF/$nend/$DB_P");
flock(PUSHLOG, 2);
print PUSHLOG "\%PLAYER_LIST=(\n";
foreach $key (sort {$a<=>$b} keys %PLAYER_LIST){
if($key ne $_[0]){
print PUSHLOG "\'$key\'=>\'$PLAYER_LIST{$key}\',\n";
}
}
print PUSHLOG "\"$_[0]\"=>\'@PL_p\',\n";
print PUSHLOG ");\n1;\n";
close(PUSHLOG);
}
0965デフォルトの名無しさん
2011/02/13(日) 00:53:050968デフォルトの名無しさん
2011/02/13(日) 08:58:46-eとopenの間にディレクトリ作られたらだめなので、EACCESが
返ったらディレクトリがあるかチェックしてエラーにするか次の
番号に進むか分岐するようなロジックにしないといかんのでは?
0969デフォルトの名無しさん
2011/02/13(日) 09:25:44use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
まとめて、こう↓するのは、省略しすぎてわかりにくい?
use open qw/:encoding(cp932) :std/;
0970デフォルトの名無しさん
2011/02/13(日) 09:59:14エロ画像に連番を振りなおす上に重要な仕事などない。
0971デフォルトの名無しさん
2011/02/13(日) 11:49:22Can't locate object method "speak" via package "Mouse" at 12.pl line 13.
が表示される。
具体的にどこが悪いのだろうか。SUPERが関係はしていると思いますが
分かりません。済みません。教えてください。
1 { package Animal;
2 sub speak {
3 my $class = shift;
4 print "a $class goes ", $class->sound, "!\n"
5 }
6 }
7 # same Animal as before
8 { package Mouse;
9 # same @ISA, &sound as before
10 sub sound { "squeak" }
11 sub speak {
12 my $class = shift;
13 $class->SUPER::speak;
14 print "[but you can barely hear it!]\n";
15 }
16 }
Mouse->speak;
0972デフォルトの名無しさん
2011/02/13(日) 12:42:15Mouse の親クラスを @Mouse::ISA に指定していない
http://perldoc.jp/pod/perlboot#The20SUPER20way20of20doing20things
> SUPER クラスに変えることで 検索を自動的に全ての基底クラス群
> (@ISA に記述されているクラス群) に対して行うことができます。
0973デフォルトの名無しさん
2011/02/13(日) 14:35:230974デフォルトの名無しさん
2011/02/13(日) 14:36:190975デフォルトの名無しさん
2011/02/13(日) 15:26:48使いましょうということらしい。
使っちゃいけない標準モジュール - JPerl advent calendar 2010 casual Track
http://perl-users.jp/articles/advent-calendar/2010/casual/23
0976デフォルトの名無しさん
2011/02/13(日) 23:37:04-eとopenの間にディレクトリが作られたら何が駄目なの?
そういう場合はdieするだけじゃだめなの?
>>970
そんな仕事があるのか。世の中は広い…。
0977デフォルトの名無しさん
2011/02/13(日) 23:45:22ちょっとアレだったけど、ちゃんと回答してたperl忍者がマシに見えるわ。
0978デフォルトの名無しさん
2011/02/14(月) 02:25:55取得した文字列があったところのインデックスを取得したいのですが、やり方を教えていだたけないでしょうか。
0979デフォルトの名無しさん
2011/02/14(月) 02:52:45http://perldoc.perl.org/perlfaq4.html#How-do-I-find-the-first-array-element-for-which-a-condition-is-true%3F
0980デフォルトの名無しさん
2011/02/14(月) 07:01:14dieするんじゃなくて次の番号に行って欲しいと思うんだけどなぁ。
レアケースなのであきらめるというのもそれはそれでありだけど。
968のようにしたとしてもopenの直後にディレクトリを消されたら
同じような問題があって、結局アトミックに判定できない以上は
どこまで頑張るかの程度の違いでしかない。EACCESSを返すwindows
が一番悪いような気はするw
0981デフォルトの名無しさん
2011/02/14(月) 08:30:550982デフォルトの名無しさん
2011/02/14(月) 15:59:110983デフォルトの名無しさん
2011/02/14(月) 16:58:02----
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
● 2011/02/14 現在の最新版: 5.12.3
▼ 前スレ
Perlについての質問箱 45箱目
http://hibari.2ch.net/test/read.cgi/tech/1287755129/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-7 あたり
0984デフォルトの名無しさん
2011/02/14(月) 16:59:22Perl プログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/9784873114279/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://ascii.asciimw.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/
perldoc.jp: ttp://www.perldoc.jp/
perldoc.perl.org: ttp://perldoc.perl.org/
0985デフォルトの名無しさん
2011/02/14(月) 18:33:07for(my $i = 0; $i < @words; $i++) {
if($words[$i] =~ $y){
push(@founds, $i);
}
}
0986デフォルトの名無しさん
2011/02/14(月) 19:06:52http://hibari.2ch.net/test/read.cgi/tech/1297677532/
あと>>6と↓
[過去スレ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/
45 http://hibari.2ch.net/test/read.cgi/tech/1287755129/
0987デフォルトの名無しさん
2011/02/14(月) 19:57:49乙でした
0988デフォルトの名無しさん
2011/02/14(月) 20:02:42ほいさ、乙でした っていってそうだね
0989デフォルトの名無しさん
2011/02/14(月) 22:56:55教えてくださってありがとうございます
この方法がわからずに行き詰っていたので、本当に助かりました
0990デフォルトの名無しさん
2011/02/15(火) 16:15:31Skypeチャットに裏ワザ、送信後のメッセージを修正するコマンド
http://techwave.jp/archives/51594968.html
レス数が950を超えています。1000を超えると書き込みができなくなります。