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

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

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

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

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

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

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

[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perl5.8.x のドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi (停止中)
perldoc.jp: ttp://www.perldoc.jp/
perldoc.com: ttp://www.perldoc.com/
3デフォルトの名無しさん:2010/10/22(金) 22:45:55
4デフォルトの名無しさん:2010/10/22(金) 22:46:10
# [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1. の行を入れると、DOS 窓への日本語出力は簡便になりますが、
# ソースファイル名に非 ANSI 文字が含まれる場合に die 文の出力が失敗します。
# ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、
# この例のように cp932 でエンコードする必要があります。
5デフォルトの名無しさん:2010/10/22(金) 22:46:28
6デフォルトの名無しさん:2010/10/22(金) 22:46:40
7デフォルトの名無しさん:2010/10/22(金) 22:47:11
8Perl忍者 ◆M5ZWRnXOj6 :2010/10/22(金) 22:52:24
俺はこのゴミスレが消滅するまで
戦う
9デフォルトの名無しさん: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/
10デフォルトの名無しさん:2010/10/23(土) 00:47:21
>>1おつ。

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

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

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

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

sleep(5);

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

print $data, "\n";

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


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

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

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

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

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

と、

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

print $config->{'datadir'};

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

ってやったら

$config->{'datadir'};

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

結果→<strong>big</strong>

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

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

結果→<strong>$1</strong>
92デフォルトの名無しさん: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;
93デフォルトの名無しさん:2010/11/02(火) 04:07:32
分かりやすいように書いたのだと思うが、
$tmp いらないんじゃないかな

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


%*5d


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

覚えるコツ

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

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

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

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

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



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

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

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

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

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


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

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

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

if($data =~ /$word/)

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

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

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


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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ありがとうございます。

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

qwer載ってたし。

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

最終的にはアップロード->HTML出力みたいにしたいです。
html出力はこのようなかんじで。
<a href="http://www.flickr.com/photos/{user-id}/{photo-id}">
<img src="http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_m.jpg"></a><br /><br />
誰か助けてください。
212デフォルトの名無しさん: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までが
抽出されるか思いましたがダメでした。

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

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

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

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

   }
print "処理完了\n";

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

正常でしょ?
254デフォルトの名無しさん:2010/11/22(月) 19:46:43
>>250
@a のみとやると配列の中身を見るだけ
@a - 0 とすると @a は $test=@a のように評価されることになって
配列の要素数から0を引けばその結果が返ってくるだけ
255デフォルトの名無しさん:2010/11/22(月) 19:47:39
split の第一引数は 「区切りとなる文字」 ではなく 「区切りとなるパターン文字」 ですよん
256デフォルトの名無しさん:2010/11/22(月) 20:12:23
>>250
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod
split
> 文字列 EXPR を文字列のリストに分割して、リストを返します。
> デフォルトでは、行頭の空白は保存され、末尾の空白は削除されます。
> (全てのフィールドが空の場合、これらは末尾であるとして扱われます。)
257デフォルトの名無しさん: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"; # 全部空なら全部削除
258デフォルトの名無しさん:2010/11/22(月) 20:36:54
関数が多すぎで @EXPORT に列挙するのがめんどくさいけど簡素化できないもんでしょか?
259デフォルトの名無しさん:2010/11/22(月) 21:37:22
>>256,257

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

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

my $test;
testfunc();

exit;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

見てたぜあのとき

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

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

と言って

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

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

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

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

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

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

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

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

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

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

uaで解決しました

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

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

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

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

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

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



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

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

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

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

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


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

ua

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

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

でできました

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

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

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

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

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

sort(keys(%test));

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

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

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

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

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

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

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

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

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

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

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


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


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

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

おれよりごみじゃん

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

use strict;
use warnings;

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


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

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

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

my @hash{@array} = ();

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


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

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

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

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

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

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

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

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

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

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

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

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

希望する出力結果

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

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

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

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

211332610117914810142712253188346942352134316874410025422796508528424072411051269478614541589207349934511524844310619103
525512: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 ;
526512:2010/12/18(土) 00:09:32
>>524
それは
print %h;
の部分が悪いんだ!
そこ改良すればちゃんと意味が通るはずだ!

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

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

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

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

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

希望する出力結果

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

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

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


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

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

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

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

my $source = "aaa
bbb
ccc
";

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

print $i . "\n";
547デフォルトの名無しさん:2010/12/18(土) 14:15:25
my $len = $source =~tr/\n//;
548デフォルトの名無しさん: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) }->();

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

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

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

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

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

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

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

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

my $len = map { 1 } split(/\r?\n/, $source);
551デフォルトの名無しさん:2010/12/18(土) 14:45:13
my $len = scalar(my @h=(split("\n", $source)));
強引だけど
552デフォルトの名無しさん: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";
553デフォルトの名無しさん:2010/12/18(土) 14:51:38
index関数が-1返すまで回った回数をカウントするとか
554デフォルトの名無しさん:2010/12/18(土) 15:01:06
フツーに

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ppmを実行したとき、どちらか片方にモジュールをインストールしてしまう、
ということになったりしませんかね…?
たしか、何かしらレジストリに書き込みをしていた記憶があるのです>ActivePerl
そこを見て処理する何かが混ざってたら、
共存は難しいか、
もしくは、インストールする順番に注意しないといけないのでは、
という気がしているのですが…
575デフォルトの名無しさん: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

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

print Dumper(@list2);
579デフォルトの名無しさん:2010/12/19(日) 05:01:51
この程度なら忍者様の手を煩わせる必要もないな。
580デフォルトの名無しさん:2010/12/19(日) 10:00:06
>>578
横やりで申し訳ないけど、ランダム性を証明するにはどのようにしたらいい?
581デフォルトの名無しさん:2010/12/19(日) 10:17:05
所詮は疑似乱数だ
本気でランダムにするには、熱雑音モジュールとかを用意しないと
582デフォルトの名無しさん:2010/12/19(日) 10:17:41
583Perl忍者 ◆M5ZWRnXOj6 :2010/12/19(日) 10:42:06
シャッフルもわからねえばかしね

ほんとくず

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

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

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

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

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

正しい事が正しいなんて思ってるとはピュアでいいとは思うけどさ^^
597デフォルトの名無しさん:2010/12/19(日) 16:37:03
『Perl忍者』 くじけるなよ。ガンバレ。まじで。
598デフォルトの名無しさん:2010/12/19(日) 16:44:17
忍者が増えてる...
599デフォルトの名無しさん: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;
600デフォルトの名無しさん:2010/12/19(日) 21:34:41
>>574
> ppmを実行したとき、どちらか片方にモジュールをインストールしてしまう、
> ということになったりしませんかね…?

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


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

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

use List::MoreUtils qw(zip);

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

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

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

JavaScript でもハッシュの取り出し順は保証されているものではないというのと、
配列使えばいいというのは、まあ確かにそう思うのですがハッシュでできないかなー と。
608デフォルトの名無しさん:2010/12/20(月) 12:16:00
perlの普通のハッシュは格納順番に関する情報は一切保持してないから
死んでも無理。
609デフォルトの名無しさん:2010/12/20(月) 12:17:37
610607:2010/12/20(月) 12:48:37
>>609
出来た!
しかも JSON::XS でもちゃんと出ました。

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

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

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

それか


my $test;

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

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


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

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

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

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


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


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

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


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


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

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

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

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

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

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

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

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


use utf8;
use Encode;
use DB_File;

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

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

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


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

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

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

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

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

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

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

なぜ?


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

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

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

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

これを

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

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

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

のようなソースを

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

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

普通のWIkiなら、

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

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


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

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

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

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

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

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

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

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

ところで、

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

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

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

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

その人たちはどこいますか?perl-casual以外で教えてください
669デフォルトの名無しさん:2011/01/08(土) 19:02:50
はい、お気楽チャットです
670デフォルトの名無しさん:2011/01/08(土) 19:03:40
671デフォルトの名無しさん:2011/01/11(火) 16:12:02
if ($bool) {
$array->[$i] = $elem;
$str = "ほげ";
$new_array = $array;
} else {
$str = "ふが";
$new_array = $array;
}

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

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

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

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

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

という組み合わせでプログラミングできる環境を作ろうとしていますがうまくいきません
参考になるウェブページがあったら教えてください
684デフォルトの名無しさん:2011/01/14(金) 22:32:07
685デフォルトの名無しさん:2011/01/14(金) 23:04:23
そうそう
tk使うといろいろ楽しそうなのに、どうもハードルが高い
unixとwindowsはどこまで水と油なんだ
686デフォルトの名無しさん:2011/01/14(金) 23:30:06
WinでGUIやりたいなら.NET使えば
687デフォルトの名無しさん:2011/01/14(金) 23:56:31
.NETの最大の欠点は
ぐぐれない
688デフォルトの名無しさん:2011/01/15(土) 13:32:12
いくつかモジュール使っていて、この関数がどのモジュールからやって来たものなのかを
調べるにはどのようにしたらよいのでしょうか?
689デフォルトの名無しさん:2011/01/15(土) 14:03:16
use してるモジュールを一つづつコメントアウトしていく。
perldocでモジュールを調べる。
モジュールのソースを読む。
690デフォルトの名無しさん:2011/01/15(土) 14:33:57
use Class::Inspector;
691デフォルトの名無しさん:2011/01/15(土) 18:02:32
whileでずっと動かしてるサブルーチンがあるとして、これが「時速600回」みたいにどれぐらいのペースで動いてるかってのを出したいんですけど何か簡単な方法ないですか?
692デフォルトの名無しさん:2011/01/15(土) 18:39:31
Benchmarkモジュールのこと?
693デフォルトの名無しさん: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;
694デフォルトの名無しさん:2011/01/15(土) 19:38:08
>>691
Time::HiRes::time()
>>693
if ($point) { $check = 1; last; }
695Perl忍者 ◆M5ZWRnXOj6 :2011/01/16(日) 01:03:54
package Package;

use strict;
use Image::Magick;

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





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

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

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

 LABEL: foreach my $nen (@kakdt){
で、
 if ($point) { $check = 1; last LABEL; }
かな>>698
700693: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;}
}
}
701693: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"});
702デフォルトの名無しさん:2011/01/16(日) 02:11:21
こういうアホがcgi作るからデスマになるのか。
なるほど、勉強になったよ。
703デフォルトの名無しさん:2011/01/16(日) 02:31:12
local$,=","

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

資本金 1000万アデナ

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


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

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

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

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

>>737

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

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

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

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

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

動かすとどうなる?


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

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

お好きなのをどうぞどうぞ
761デフォルトの名無しさん:2011/01/18(火) 03:07:27
出力先は正しいですか
間違ったリダイレクトをされていませんか
バッファはフラッシュされていますか
762デフォルトの名無しさん:2011/01/18(火) 03:08:12
普通に+9すりゃいいじゃん
763デフォルトの名無しさん: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++;
}
764746:2011/01/18(火) 10:40:01
>>747
---load---が最初に読み込んだ1回分しか表示されず、ループ処理での読み込みが飛ばされていました。
どうも、同じファイルは1度しか読み込めないようです。
これはサーバーの仕様なのでしょうか?perlがそういうものなのでしょうか?

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

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

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

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

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

っで

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

use FileHandle;

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

}

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

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

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

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

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

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

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

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


(矢印演算子)

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

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


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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

おれさあ

Windows買ってからさあ

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

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

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

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

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

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

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

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

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


sub add{

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

return $total;

}




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

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

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

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

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

sub add {
no warnings 'once';
return reduce{ $a+$b } my_flatten(@_);
}
905デフォルトの名無しさん:2011/02/09(水) 22:46:17
Strawberry Perl良いんだけどactive scriptで動かないから結局AcrivePerl入れてしまう
906デフォルトの名無しさん:2011/02/10(木) 00:14:01
ぐぐったけどわからなかったです
perl初心者です
mac です
hello worldまで、実現したいです
macは、はじめから、perlをはいっているとしりました
どこにありますか?
すいません

907デフォルトの名無しさん:2011/02/10(木) 00:19:06
906です
システムにありました
次は、helloworldをかきたいです
何のファイルを、使えばよいでしょう?
たびたびすいません
908デフォルトの名無しさん:2011/02/10(木) 00:49:36
>>903
規模にもよるけど、引数のセット毎に別のクラス作って実装するかな。
909デフォルトの名無しさん:2011/02/10(木) 01:31:50
macってターミナルとかコマンドラインとかいわれてるやつあったっけ
そこからperl -e "print qq/hello the world./;"とでもうちこんでみればどうか
910デフォルトの名無しさん:2011/02/10(木) 02:36:54
こういうことをやりたかったのだろうか。

use Class::Multimethods;
...
multimethod add => ('$', '$') => sub { ... };
multimethod add => ('ARRAY') => sub { ... };
multimethod add => ('$', 'ARRAY') => sub { ... };
911デフォルトの名無しさん:2011/02/10(木) 04:33:52
条件演算子 ?= を使おうとしていますが、場合により結果が異なるのはどうしてでしょうか?

my ($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
912デフォルトの名無しさん:2011/02/10(木) 04:53:45
perlop > Conditional Operator
913デフォルトの名無しさん:2011/02/10(木) 07:38:04
>>911
$array[$_] ? $y = 1 : $y = 0;
だと、
($array[$_] ? $y = 1 : $y) = 0;
のようになっている気がする。
$array[$_] ? ($y = 1) : ($y = 0);
ておけば大丈夫…だが、そもそも
$y = $array[$_] ? 1 : 0;
と書けばなんてことはない。
914デフォルトの名無しさん:2011/02/10(木) 08:49:45
>909 できた!
thx!

god bless you ,909


915デフォルトの名無しさん:2011/02/10(木) 12:08:05
emacsでperlのコードを部分選択して
C-c C-r
で選択したところだけ評価したいのですが
.emacsにいろいろ設定しないとだめなのでしょうか
デフォルトでperl-modeやcperl-modeってのが入ってるみたいですが
そのままでは上記のことができません
916デフォルトの名無しさん:2011/02/10(木) 12:47:24
>>912>>913
ありがとうございます。

>そもそも
>$y = $array[$_] ? 1 : 0;
>と書けばなんてことはない。
その通りなのですが、
実際は $array[$_] ? ($x = 1) : ($y = 0); のような処理なのです。
917デフォルトの名無しさん:2011/02/10(木) 13:21:13
ワケワカランAAry
918デフォルトの名無しさん:2011/02/10(木) 13:40:56
if使って書き直したいところだな
919デフォルトの名無しさん:2011/02/10(木) 14:11:11
('b','c','a')をソートして、('a','b','c')と添字の順序(2,0,1)を得たいのですが、良い方法はありますか?
組込み巻数にはなく、サブルーチン自作でしょうか?
920デフォルトの名無しさん:2011/02/10(木) 14:27:40
$i=0;
map {$_->[1]}
sort {$a->[0] cmp $b->[0]}
map {[$_, $i++]}
@list;
921デフォルトの名無しさん:2011/02/10(木) 14:50:35
>>916
値を使う訳じゃないならわざわざ三項演算子で見づらくしなくても
if文でいいんじゃないかという素朴な疑問
922919:2011/02/10(木) 16:38:31
>>920
ありがとうございます
うまくできました
923デフォルトの名無しさん: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)
924919:2011/02/10(木) 18:42:12
>>923
ありがとうございます
こちらも保存しました 
925gfx:2011/02/10(木) 19:23:16
>>>919
$i=if->aaa[100];
map printf "$i+++";
@list print;
$aa=qw/ /=qw/aaza/aa/a/a/aa/;
926gfx:2011/02/10(木) 20:46:35
僕の株価がどんどんあがってますねw
927gfx:2011/02/10(木) 20:54:24
みんな gfx++ してくださいねw
928デフォルトの名無しさん:2011/02/10(木) 22:36:30
gfy
929デフォルトの名無しさん:2011/02/11(金) 09:06:37
私は今まで、「\r=\x0D、\n=\x0A」と思っていたのですが、下記サイト↓に、
「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」という
私の認識は間違いのような気がします。
930デフォルトの名無しさん:2011/02/11(金) 09:42:13
>>929
http://perldoc.perl.org/perlport.html#Newlines
気になるなら自分で環境を手に入れて確認してくれ。
931デフォルトの名無しさん:2011/02/11(金) 10:09:48
>>930
ありがとうございます。

「\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
932http://blog.oricon.co.jp/benjo/:2011/02/11(金) 10:26:54
rand 2 と rand * 2 はまったく同じですか?
933デフォルトの名無しさん:2011/02/11(金) 10:51:27
違います

細かい小数点は省くけど

rand(2) → 0 〜 1.99
rand() * 2 → (0 〜 0.99) * 2 = 0 〜 1.98 (ただし得られるのは2の倍数のみ)

となります
934デフォルトの名無しさん:2011/02/11(金) 11:09:40
>>933
その解釈も違うと思う。

>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 はプレフィクスとトークンの間にホワイトスペースが入ってもいいんだ。
935デフォルトの名無しさん:2011/02/11(金) 11:48:40
内部的には同じことをしているのでは
936デフォルトの名無しさん:2011/02/11(金) 14:09:11
>>934
最初のやつ、「2」が数値扱いされて
ないだろ?
「*2」としてrandの引数になってる。
937デフォルトの名無しさん:2011/02/11(金) 17:31:50
% perl -E'srand(1);say rand(2); srand(1); say rand() * 2'
938デフォルトの名無しさん:2011/02/12(土) 02:11:03
Mechanizeを使ったcgiに関する質問は、このスレでよろしいでしょうか?
939デフォルトの名無しさん:2011/02/12(土) 03:37:15
Mechanize はもう飽きたなぁw
940Perl忍者 ◆M5ZWRnXOj6 :2011/02/12(土) 09:07:09
Mechanizeの質問してるキチガイってこいつじゃないw
http://lhlhlh.blog71.fc2.com/blog-entry-117.html
「広い意味でコンピュータ関係のブログ」

前にスクリーンショットのこと聞いてたし


>perlでウェブページのスクリーンショット保存アップロードし一覧にしてhtml出力
941デフォルトの名無しさん: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を後に書くとエラーでます
やはり前に書くしかないのでしょうか?

942デフォルトの名無しさん:2011/02/12(土) 11:53:56
サブルーチンの場合は

sub aa;みたいに

やっぱり 無名関数は変数としてみるから前に書かないといけないんですか?

教えてください
943Perl忍者 ◆M5ZWRnXOj6 :2011/02/12(土) 11:57:41
変数ってなにかわかりますか?^^;
レキシカル変数に無名サブルーチン代入してるじゃないですか 変数ですよこれ
newの下か上に宣言しろよw そうすればその下のメソッドで利用可能になるから
なのでsub $punk;なんてできません

そのぐらいわかれよカス
944デフォルトの名無しさん:2011/02/12(土) 14:28:13
>>941
質問内容と具体例が乖離してるぞ。
サブルーチンリファレンスにて
「プロトタイプ宣言出来るか?」
「プロトタイプの先行宣言出来るか?」
って質問なら、
前者は出来ない(宣言したつもりでも無視される)し、
後者も出来ない(シンタックスエラーになるか、したつもりになるだけ)。

==============
#!/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 ; # <= 先行宣言の検証にはなりえない。
==============
945デフォルトの名無しさん:2011/02/12(土) 16:46:01
作りにくい設計は良くない設計
946デフォルトの名無しさん:2011/02/12(土) 18:31:58
出力ファイルが既にあった時に、_1を付けて別の名前を付けるけど、
_1が付いたのも既にあったら_2を付ける的に順次増やしていく方法で
ファイル名を決定するスマートなやり方は?
947Perl評論家:2011/02/12(土) 18:47:17
まっちんぐさせて 数値をインクリメント
948デフォルトの名無しさん:2011/02/12(土) 18:47:49
>>946
命名規則の話?
ファイル検索ロジックの話?
「_1」を「_2」に置換するコードの話?
949デフォルトの名無しさん:2011/02/12(土) 19:11:07
>>946
ループにして最初に存在しなかったファイル名で決定すりゃいいだけでしょ?
for(0..99){
 my $fn = "hoge" . ($_ ? "_$_" : "");
 if(-e $fn) {
  print "${fn}は存在した\n";
 }else{
  print "${fn}は存在しなかったので決定\n";
  last;
 }
}

ちなみにlogrotateとは動き違うよ
950Perl評論家:2011/02/12(土) 19:18:01
俺のまねスンナ
951デフォルトの名無しさん:2011/02/12(土) 19:28:32
Mechanizeの利用でつまづいています。
利用している無料サーーバーはPerlに対応しているのですが、
Mechanizeに対応しているかは分かりません。

Mechanizeのインストール方法は、下記のQ&Aの通りでいいのでしょうか?
http://oshiete.goo.ne.jp/qa/1680065.html
実際にやってみたのですが、cgiページを表示しても500エラーになります。
アップするフォルダや、cgiに書くフォルダ位置などを色々変えて試しましたが、
やはり動きません。

Mechanizeが使えるサーバーであるどうか、チェックする方法や、
初心者向けのインストール方法などが解説されたサイトはないでしょうか?
952デフォルトの名無しさん:2011/02/12(土) 19:34:58
なるほど
三項演算子がうまく使えるな
953デフォルトの名無しさん:2011/02/12(土) 19:43:42
>>949
決定したときには存在しなかったファイルが、作成するときには
すでに存在する。 そういう場合がある。
954デフォルトの名無しさん:2011/02/12(土) 20:04:27
ロックぐらいするだろjk
955デフォルトの名無しさん:2011/02/12(土) 20:13:51
決定したときには存在しなかったファイルが、ロックするときには
すでに存在する。 そういう場合がある。
956デフォルトの名無しさん:2011/02/12(土) 20:16:15
ファイル名を決定する手続きを排他ロックする

って書けばよろしいでしょうか(笑
957デフォルトの名無しさん:2011/02/12(土) 20:30:05
その方法も教えてくれればベター。
958デフォルトの名無しさん:2011/02/12(土) 20:30:59
マルチコアのCPUだとそれでも失敗したり
959デフォルトの名無しさん: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->();
...
960デフォルトの名無しさん:2011/02/12(土) 23:36:47
元の「スマートなやり方」からかなり遠くまで来てしまった
961デフォルトの名無しさん:2011/02/12(土) 23:47:25
#use Exporter;
#our @ISA = qw/Exporter/;
#our @EXPORT = qw//;

みたいにコメントアウトしても使えてるんだけど、これはこれで大丈夫なの?
962Perl評論家:2011/02/13(日) 00:07:49

作品のよさ>>>>>>>スマートとかコード美学>>>perl5の書き方 (笑)
963デフォルトの名無しさん:2011/02/13(日) 00:14:02
>>959
O_EXCLしてるんだから、-eで調べなくてもいいんじゃねーの?
-eとopenの間に他のプロセスに割り込まれる可能性を排除
できないから-eあんま意味ないと思う。
964デフォルトの名無しさん: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);
}
965デフォルトの名無しさん:2011/02/13(日) 00:53:05
ファイルを開く前にロック出来れば問題解決出来るのになぁ。。。
966956:2011/02/13(日) 00:55:48
>>963
Windowsでは、同名のディレクトリがあるとEACCESを返すため。その対処。
967959:2011/02/13(日) 00:57:49
>>966=>>959
名前を間違えた。
968デフォルトの名無しさん:2011/02/13(日) 08:58:46
>>966
-eとopenの間にディレクトリ作られたらだめなので、EACCESが
返ったらディレクトリがあるかチェックしてエラーにするか次の
番号に進むか分岐するようなロジックにしないといかんのでは?
969デフォルトの名無しさん:2011/02/13(日) 09:25:44
>>4のテンプレート案なんですが、これ↓って

use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1

まとめて、こう↓するのは、省略しすぎてわかりにくい?

use open qw/:encoding(cp932) :std/;
970デフォルトの名無しさん:2011/02/13(日) 09:59:14
>>959
エロ画像に連番を振りなおす上に重要な仕事などない。
971デフォルトの名無しさん:2011/02/13(日) 11:49:22
下記は12.plの中身です。下記を実行させると、
Can'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;

972デフォルトの名無しさん:2011/02/13(日) 12:42:15
>>971
Mouse の親クラスを @Mouse::ISA に指定していない

http://perldoc.jp/pod/perlboot#The20SUPER20way20of20doing20things
> SUPER クラスに変えることで 検索を自動的に全ての基底クラス群
> (@ISA に記述されているクラス群) に対して行うことができます。
973デフォルトの名無しさん:2011/02/13(日) 14:35:23
971さんへ、動きました。有難うございました。助かりました。
974デフォルトの名無しさん:2011/02/13(日) 14:36:19
972さんへ、動きました。有難うございました。助かりました。
975デフォルトの名無しさん:2011/02/13(日) 15:26:48
>>972のページを見てて思い出したのですが、今はuse baseでなくuse parentを
使いましょうということらしい。

使っちゃいけない標準モジュール - JPerl advent calendar 2010 casual Track
http://perl-users.jp/articles/advent-calendar/2010/casual/23
976デフォルトの名無しさん:2011/02/13(日) 23:37:04
>>968
-eとopenの間にディレクトリが作られたら何が駄目なの?
そういう場合はdieするだけじゃだめなの?

>>970
そんな仕事があるのか。世の中は広い…。
977デフォルトの名無しさん:2011/02/13(日) 23:45:22
自分ではコード書かずに、ほんと、口ばっかりの奴でうんざりする。
ちょっとアレだったけど、ちゃんと回答してたperl忍者がマシに見えるわ。
978デフォルトの名無しさん:2011/02/14(月) 02:25:55
ある変数$yを使って、$yに収納されている文字列を配列@wordsの中から探し出して取得した際に
取得した文字列があったところのインデックスを取得したいのですが、やり方を教えていだたけないでしょうか。
979デフォルトの名無しさん:2011/02/14(月) 02:52:45
980デフォルトの名無しさん:2011/02/14(月) 07:01:14
>>976
dieするんじゃなくて次の番号に行って欲しいと思うんだけどなぁ。
レアケースなのであきらめるというのもそれはそれでありだけど。
968のようにしたとしてもopenの直後にディレクトリを消されたら
同じような問題があって、結局アトミックに判定できない以上は
どこまで頑張るかの程度の違いでしかない。EACCESSを返すwindows
が一番悪いような気はするw

981デフォルトの名無しさん:2011/02/14(月) 08:30:55
>>980を超えるとdat落ちが早いので次スレを立てられる人お願いします
982デフォルトの名無しさん:2011/02/14(月) 15:59:11
すみなせん すれたてれませんでしたすみなせん
983デフォルトの名無しさん:2011/02/14(月) 16:58:02
所詮p2だった
----

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 あたり
984デフォルトの名無しさん:2011/02/14(月) 16:59:22
[プログラミング自体の経験が無い奴はまずココを読め]
Perl プログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/9784873114279/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://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/
985デフォルトの名無しさん:2011/02/14(月) 18:33:07
my @founds = ();
for(my $i = 0; $i < @words; $i++) {

if($words[$i] =~ $y){
push(@founds, $i);
}

}
986デフォルトの名無しさん:2011/02/14(月) 19:06:52
987デフォルトの名無しさん:2011/02/14(月) 19:57:49
ほいさ
乙でした
988デフォルトの名無しさん:2011/02/14(月) 20:02:42
968と987は会場のごみ広いとかイス片付けとか色々やったあと

ほいさ、乙でした っていってそうだね
989デフォルトの名無しさん:2011/02/14(月) 22:56:55
>>979,985
教えてくださってありがとうございます
この方法がわからずに行き詰っていたので、本当に助かりました
990デフォルトの名無しさん
Skypeにこんな構文があったとは驚き

Skypeチャットに裏ワザ、送信後のメッセージを修正するコマンド
http://techwave.jp/archives/51594968.html