トップページ⇒tech
1001コメント303KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2011/05/25(水) 23:18:12.33
CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://hibari.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/05/25 現在の最新版: 5.14.0

▼ 前スレ
Perlについての質問箱 46箱目
http://hibari.2ch.net/test/read.cgi/tech/1297677532/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-7 あたり
0002デフォルトの名無しさん2011/05/25(水) 23:18:52.40
[プログラミング自体の経験が無い奴はまずココを読め]
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/
0003デフォルトの名無しさん2011/05/25(水) 23:19:02.02
[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

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

[Perl 5.8 Unicodeメモ]
ttp://www.rwds.net/kuroita/program/Perl_unicode.html (修正)
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん2011/05/25(水) 23:19:12.89
# [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 でエンコードする必要があります。
0005デフォルトの名無しさん2011/05/25(水) 23:19:21.98
[過去スレ1]
1 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/ (事故により消滅)
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/ (事故により消滅)
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 http://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 http://pc8.2ch.net/test/read.cgi/tech/1121804136/
19 http://pc8.2ch.net/test/read.cgi/tech/1126977805/
20 http://pc8.2ch.net/test/read.cgi/tech/1131286411/
0006デフォルトの名無しさん2011/05/25(水) 23:19:28.30
[過去スレ2]
21 http://pc8.2ch.net/test/read.cgi/tech/1134327348/
22 http://pc8.2ch.net/test/read.cgi/tech/1138519327/
23 http://pc8.2ch.net/test/read.cgi/tech/1141742901/
24 http://pc8.2ch.net/test/read.cgi/tech/1146022352/
25 http://pc8.2ch.net/test/read.cgi/tech/1149259409/
26 http://pc8.2ch.net/test/read.cgi/tech/1153412251/
27 http://pc8.2ch.net/test/read.cgi/tech/1157874614/
28 http://pc8.2ch.net/test/read.cgi/tech/1162273941/
29 http://pc11.2ch.net/test/read.cgi/tech/1166708139/
30 http://pc11.2ch.net/test/read.cgi/tech/1173880452/
31 http://pc11.2ch.net/test/read.cgi/tech/1181500187/
32 http://pc11.2ch.net/test/read.cgi/tech/1186995713/
33 http://pc11.2ch.net/test/read.cgi/tech/1192463997/
34 http://pc11.2ch.net/test/read.cgi/tech/1199977642/
35 http://pc11.2ch.net/test/read.cgi/tech/1208674881/
36 http://pc11.2ch.net/test/read.cgi/tech/1215569470/
37 http://pc11.2ch.net/test/read.cgi/tech/1218449440/
38 http://pc11.2ch.net/test/read.cgi/tech/1221967332/
39 http://pc12.2ch.net/test/read.cgi/tech/1234181856/
40 http://pc12.2ch.net/test/read.cgi/tech/1243631674/
0007デフォルトの名無しさん2011/05/25(水) 23:19:36.28
[過去スレ3]
41 http://pc12.2ch.net/test/read.cgi/tech/1249581780/
42 http://pc12.2ch.net/test/read.cgi/tech/1257139591/
43 http://pc12.2ch.net/test/read.cgi/tech/1266565626/
44 http://hibari.2ch.net/test/read.cgi/tech/1280541200/
45 http://hibari.2ch.net/test/read.cgi/tech/1287755129/
46 http://hibari.2ch.net/test/read.cgi/tech/1297677532/
0008デフォルトの名無しさん2011/05/25(水) 23:21:56.41
>>1乙

テンプレなげーよ。
0009デフォルトの名無しさん2011/05/26(木) 02:10:26.60
JPerl からひさしぶりに Perl な世界でよくわかりませんが >>4 の

binmode STDIN => ":encoding(cp932)"; 
binmode STDOUT => ":encoding(cp932)"; 

が

use encoding "cp932";

でも、いいような気がしるけど、いまいち理解できてないです…
0010デフォルトの名無しさん2011/05/26(木) 02:38:46.95
それは気のせいだよ
0011デフォルトの名無しさん2011/05/26(木) 06:36:42.24
>>9
全然ダメ
0012デフォルトの名無しさん2011/05/26(木) 12:40:27.81
>>10-11
kwsk
0013デフォルトの名無しさん2011/05/26(木) 13:14:43.30
use encoding "cp932"にするとソースもcp932で書かなきゃ
いけなくなるのが余計ってことなんじゃ。
001492011/05/26(木) 13:15:44.46
>>12さんどうもです。

とりあえず、最初は

use utf8;
use encoding "cp932";
use open IO => ":encoding(cp932)";
binmode STDERR, ":encoding(cp932)";

こんな感じで、UTF-8形式でソース保存しています。
あ…ファイル名に全角文字だとさらにややこしくなるんですね… orz
001592011/05/26(木) 13:17:59.16
実行環境は、Win7 64bit コマンドプロンプトのローカル環境です。
0016デフォルトの名無しさん2011/05/26(木) 14:19:17.56
use utf8 するとめんどくさいので、use utf8 は使わないなぁ
ソースを utf8 で保存しれりゃ別にえぇんとちゃうのん?と思う。

文字数を数えたいなら decode してフラグ付けりゃいいだけだしさ。
0017デフォルトの名無しさん2011/05/26(木) 14:33:53.73
もつ
0018デフォルトの名無しさん2011/05/26(木) 15:11:12.92
>>1 乙

テンプレが長いのは過去スレが多いからだが、過去スレはやめても
いいんじゃない?
他のスレでも、省略しているものが多いみたいだし。
0019デフォルトの名無しさん2011/05/26(木) 17:37:42.78
フォームから入力されたデータ
例えば<font size="6">www</font>"aaa"<font color="#0000ff">www</font>"bbb"という文字列の
タグの中の"を'にタグ外の"は&quot;に変換して
<font size='6'>www</font>&quot;aaa&quot;<font color='#0000ff'>www</font>&quot;bbb&quot;というようにするには
どうしたらいいんでしょうか?
0020デフォルトの名無しさん2011/05/26(木) 18:19:43.27
>>19
そんなこと聞いてるやつがインジェクション攻撃に
対処できると思わないからタグ自体禁止する。
0021デフォルトの名無しさん2011/05/26(木) 18:44:50.03
たぶん聞かないなこりゃ<タグ禁止
0022デフォルトの名無しさん2011/05/26(木) 18:50:12.18
>>19
1.行全部のクォートを"にする
2.タグの中の"を'に変換する
3.SQLなどへのインジェクションで泣きを見る
4.あなたは晴れて失業
5.perl忍者が増える
0023デフォルトの名無しさん2011/05/26(木) 21:40:54.68
すみません初歩的な質問なのですが
ハッシュ変数wordに$word{"テスト"}="だよ";
のような感じで値を渡しているのですが
いざif文で if ($word{$a} == "だよ")で判別しようとすると
$aがどんな値でも上記の条件式が必ず実行されてしまいます。
意味不明だと思いますがエスパーの方いましたらよろしくお願いします。
0024デフォルトの名無しさん2011/05/26(木) 22:03:53.54
初歩の初歩だ
文字列比較には==ではなくeqを使え
0025デフォルトの名無しさん2011/05/26(木) 22:33:22.35
== eq
!= ne
常識
0026デフォルトの名無しさん2011/05/26(木) 22:42:03.07
>>24-25
無事解決しました!
なるほど文字列の比較の仕方が間違ってたんですね。
どうもありがとうございました。
0027デフォルトの名無しさん2011/05/26(木) 23:01:20.86
>>19
タグの外ってことは > と < にはさまれてるって考えれば良いかと
0028デフォルトの名無しさん2011/05/26(木) 23:10:34.54
>>27
<img/>とか<br/>はどうすんの
0029デフォルトの名無しさん2011/05/26(木) 23:30:08.44
>>14
> use utf8;
> use encoding "cp932";
両方同時に使うのは間違い

ttp://perldoc.jp/docs/perl/5.8.1/utf8.pod
ttp://blog.livedoor.jp/dankogai/archives/51221731.html
0030デフォルトの名無しさん2011/05/27(金) 03:45:12.00
うーむ、>>14の例がどうしてutf8が優先されるのか分からない。
それは置いといて、encodingを使うと、
binmode STDIN => ":raw :encoding(cp932)";
binmode STDOUT => ":raw :encoding(cp932)";
こうなって、"\n"の挙動が変わるから注意は必要だね。
0031デフォルトの名無しさん2011/05/27(金) 08:24:04.59
単に記述を短くしたいだけなら以下でいいのでは?

use utf8;
use open qw(:encoding(cp932) :std);
0032デフォルトの名無しさん2011/05/27(金) 10:32:06.73
>>19
>フォームから入力されたデータ
この意味がよくわかんないんだけど、単なる文字列の変換なら

my $str = '<font size="6">www</font>"aaa"<font color="#0000ff">www</font>"bbb"';
$str =~ s/(<[^>]*?)"(.*?)"/\1'\2'/g;
$str =~ s/"/&quot;/g;
0033デフォルトの名無しさん2011/05/27(金) 13:05:02.52
文字列の #ff4500ff とか 16進数の 0xff4500ff とかを
0 から 1 までの範囲の RGBA の配列に変換してくれるモジュールには
どういったのがあるのでしょうか?
サブルーチンを自分で書いた方が早い気がしますが、
CPAN にあるのならそれを使った方が良いかなあ?と思って
0034デフォルトの名無しさん2011/05/27(金) 13:25:00.08
正規表現で.(ドット)は改行以外の任意の1文字ですが
改行を含む任意の1文字はどう表現すればいいですか?
0035デフォルトの名無しさん2011/05/27(金) 13:39:48.57
>>34
s修飾子を使うか | で並べる

/./s
/.|¥n/

お好きな方で。
0036デフォルトの名無しさん2011/05/27(金) 14:42:25.83
>>30
よく解らなかったので検索したら、たとえば

binmode STDOUT => ":crlf:encoding(cp932)";

という指定で大丈夫でしょうか?
0037デフォルトの名無しさん2011/05/27(金) 17:58:40.36
>>36
礼儀正しくやるならそうなるね。
面倒ならSTDINだけ:crlfを追加とか。
binmode STDIN => ":crlf";
0038デフォルトの名無しさん2011/05/27(金) 18:52:12.71
$str="aaa{aaabbbccc}aaa{aaabbbccc}";の
{}の中のaaaをAAAにしたいんですけど
$str=~s/{aaa}/AAA/g;としてもうまくいきません
どうすればうまくいくんでしょうか?
0039デフォルトの名無しさん2011/05/27(金) 19:03:27.46
Perlはじめようと思ったのですが
やめたほうがいいといわれたのでやめます
0040デフォルトの名無しさん2011/05/27(金) 19:23:35.56
>>38
$str="aaa{aaa}aaa{aaa}";
なら $str=~s/{aaa}/AAA/g;でうまくいくよ。
0041デフォルトの名無しさん2011/05/27(金) 22:48:57.57
こえぇ…pmとかでお伺いを立てないで
CPANにUPすると容赦なくdisられるのな…。
0042デフォルトの名無しさん2011/05/27(金) 23:22:45.70
初歩の初歩だけど


#!C:/Perl/bin/perl

require 'cgi-lib.pl';
require 'jcode.pl';

print "Content-type: text/html\n";
print "\n";

%form = &read_input('euc');

$name= $form['name'];

print "$name";


これでなんで何も表示されないのか全くわからん。
ディレクトリ内の「cgi-lib.pl」の名前を変えてみたところサーバーエラーになったらから、
「cgi-lib.pl」の読み込みはちゃんとできていたということになるんだけど。
0043デフォルトの名無しさん2011/05/27(金) 23:24:08.08
$name= $form['name'];
これなに
0044デフォルトの名無しさん2011/05/27(金) 23:27:48.26
連想配列のnameの要素を参照したんだけど。
0045デフォルトの名無しさん2011/05/27(金) 23:37:14.62
$name = $form{'name'};
0046デフォルトの名無しさん2011/05/27(金) 23:49:49.21
[] 配列
{} ハッシュパピー
0047デフォルトの名無しさん2011/05/27(金) 23:56:18.76
あ、そっか。ありがとう!

よーし治……らない! なぜ。
0048デフォルトの名無しさん2011/05/27(金) 23:59:50.55
print $
0049デフォルトの名無しさん2011/05/28(土) 00:00:50.35
print %form

した結果はどうなる?
0050デフォルトの名無しさん2011/05/28(土) 00:07:35.23
>>49 相変わらず何も出ませんの。
0051デフォルトの名無しさん2011/05/28(土) 00:10:44.02
&read_input('euc');
ジャッジメントですの!
0052デフォルトの名無しさん2011/05/28(土) 00:19:17.65
cgi-lib.plで使える関数ですってよ?
というか
http://www.tiu.ac.jp/~nakabasa/Internet/CGI/cgi4.html
このページの下のほうを参考にしたんで、負ける気がしない!
0053デフォルトの名無しさん2011/05/28(土) 00:24:03.09
Perl4とかゴミだろ
0054デフォルトの名無しさん2011/05/28(土) 00:24:44.84
めんどくさいので以下のように書き換えるがよろし


use CGI;
my $form = CGI->new;
print $form->param('name');

0055デフォルトの名無しさん2011/05/28(土) 00:32:24.33
500エラー来ました。

もう1度検討を重ねてから出直してきます。
0056デフォルトの名無しさん2011/05/28(土) 01:20:02.71
ああ、なんか&read_input('euc');が入ってると問答無用で何一つ出力されなくなるみたい。
0057デフォルトの名無しさん2011/05/28(土) 01:28:18.81
なんかよくわかんないけど
&read_input('euc');
をやめて
&ReadParse;
にしたらできた。ていうかcgi-lib.plに「read_input」なんて文字列自体存在しなかったぞ。どうなってんだ^o^
0058デフォルトの名無しさん2011/05/28(土) 02:33:27.61
初歩の初歩以前の問題だったようだな
0059デフォルトの名無しさん2011/05/28(土) 05:41:01.87
cgi-lib.pl は古いから CGI.pm 使えって
0060デフォルトの名無しさん2011/05/28(土) 07:12:47.44
cgi-lib互換モードもあるよ

use CGI ':cgi-lib';
%form = Vars;
0061デフォルトの名無しさん2011/05/28(土) 12:29:11.06
ご丁寧にありがとうございました。
でもすでに手作業で移行しますた
0062デフォルトの名無しさん2011/05/29(日) 03:13:18.36
>>61
> でもすでに手作業で移行しますた
なってねえな〜「でもすでに」じゃねーだろ
そういう時はウソでも「参考になりました」とか「もっと精進します」とか書いとけよ
0063デフォルトの名無しさん2011/05/29(日) 03:23:49.62
これ以上ゴミコードを増やす意味はないだろ。
0064デフォルトの名無しさん2011/05/29(日) 04:26:29.99
>>63
日本語でおk
0065デフォルトの名無しさん2011/05/30(月) 11:26:36.12
cpan> install Gtk2
Running install for module 'Gtk2'
Running make for F/FL/FLORA/Gtk2-1.223.tar.gz
Has already been unwrapped into directory C:\strawberry\cpan\build\Gtk2-1.223-C10W1L
'C:\strawberry\perl\bin\perl.exe Makefile.PL' returned status 512, won't make
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install

なんかこうなるようになっちゃったんですけど
最初からやり直すにはどうしたらいいんざましょ?
0066デフォルトの名無しさん2011/05/30(月) 13:26:37.32
>65
エラーメッセージで
「Gtk2-1.223.tar.gz は C:\strawberry\cpan\build\Gtk2-1.223-C10W1L にもう展開してあるよ!」って言ってるんだから
コマンドプロンプトで C:\strawberry\cpan\build\Gtk2-1.223-C10W1L に移動して、

make
make test
make install

で良いんじゃないの?
0067デフォルトの名無しさん2011/05/30(月) 14:15:45.27
cpan> look Gtk2
0068デフォルトの名無しさん2011/05/30(月) 21:53:49.88
while(<>){
}
この<>はなんですか?
0069デフォルトの名無しさん2011/05/30(月) 22:06:24.93
>>68
@ARGVに設定された引数のファイル名の内容を順に1行読むか、引数がない場合は標準入力から読む 、という指定。
I/O Operators in perldoc perlop
0070デフォルトの名無しさん2011/05/30(月) 22:10:13.37
>>68
山カッコ演算子。
ダイヤモンド演算子とも呼ばれる。
0071デフォルトの名無しさん2011/05/30(月) 22:10:56.31
ダイヤモンド演算子
0072702011/05/30(月) 22:35:16.91
>>71
ん?間違ってる?
0073デフォルトの名無しさん2011/05/30(月) 22:40:02.95
>>69-71
ありがとうございます。検索しても記号だと見つからないようなので助かりました。
0074デフォルトの名無しさん2011/05/30(月) 22:43:00.98
いえいえ、どういたしまして。
0075デフォルトの名無しさん2011/05/31(火) 09:24:40.69

暇な人に対するアホな質問です。

昔自分で作った記述ですが、昔すぎて作ってた時の記憶が出てきません。
特定のケースで不備が出る場合とか、そうゆうのを思いついたら教えてください。

処理の目的はどんな文字でも一緒に混ぜても大丈夫、みたいな感じです。
たぶん一般的な通信のヘッダーとかの分解にも使えたような気がします。



sub Separator_join ($$;@) {

    my $separat =  shift           or return();
    my $enclose =  shift           or return();
    my @entity  =  @_              or return();
       $separat ne $enclose        or return();

    map {s/($separat+)/$separat$1/go}  @entity;
    return( join qq[$enclose$separat$enclose], @entity );

}
#▼Separator_joinで生成されたスカラーに対し、安全にセパレータで分割してリストを返す
sub Separator_split ($$$) {

    my ($separat, $enclose, $all) = @_;
    my @entity = split /$enclose$separat$enclose/, $all;

    map{s/$separat(?!$separat)//go} @entity;
    return(@entity);
0076デフォルトの名無しさん2011/05/31(火) 10:25:46.36
q{0}
0077752011/05/31(火) 13:01:56.41
>>76
ありがとうございます。Perlだったか!という感じです。

アルゴリズム的な問題とか、想定範囲の抜け目とか、その変もお願いします。
おかしな事が起きない確証(?)って言うか確信みたいなのが欲しい感じです。

メモリが足りない場合……とか、そうゆう関数に直接関係ないのはいいですけど。
別に暇な人でいいんで、お願いします。

曖昧な記憶ではメールの仕様と同じだったと思うんで、
どんな内容でもデータは壊れないし復元できると信じたい想いなんですが。
0078デフォルトの名無しさん2011/05/31(火) 13:19:05.51
文字が化けちゃうんですけど化けないようにするにはどうしたらいいんでしょうかね?
>>4のやり方で、MechanizeでShift_JISのページを取得してファイルに出力したところ、
�@�U�пァが
\x{fffd}@\x{fffd}K\x{fffd}Z〒に
なってました。
0079デフォルトの名無しさん2011/05/31(火) 13:21:12.04
MovableTypeのカスタマイズのためだけにPerlをこれから覚えるのは時間かかりますか?
0080デフォルトの名無しさん2011/05/31(火) 13:31:09.93
$separatと同じ文字が$encloseに混じってたりすると嫌なことが
起こりそうとか、メタキャラクタのエスケープしてないぞとか
s///o使ってるので$separatや$encloseを違う文字列で呼んだら
おかしくなりそうとかその辺が突っ込みどころかなぁ。

ちゃんと仕様を残しましょうww
0081デフォルトの名無しさん2011/05/31(火) 13:47:15.14
外部コードは処理する前に内部コードに変換
0082752011/05/31(火) 15:33:04.61
ありがとうございます。

>$separatと同じ文字が$encloseに混じってたりすると嫌なことが
>起こりそうと

考えてみた結果、

$separat = q(/);
$enclose = q(_/);
@entity = (q(_/_/));

これで見事におかしくなる予感がしました。
こんな引数使う馬鹿誰だよ、って少し思いますけど。
一文字限定とか仕様変えてもいいんですが、既存のどっかにバグが出たら嫌なので
重複文字列の全チェック関数を作ります。無駄に重たくなりそうだけど…。

>メタキャラクタのエスケープしてない
仰るとおりです。


>s///o使ってるので$separatや$encloseを違う文字列で呼んだら
>おかしくなりそうとかその辺が突っ込みどころかなぁ。

あれ、関数を再度呼んだらoは初期化されないんですか?
ループの中だけで有効で、スコープ抜けたら初期化される物と勝手に思ってました。
すみません検索してきます。
0083デフォルトの名無しさん2011/05/31(火) 19:44:13.28
>>81
decode('cp932',$cp932_char);
decode('utf8',$utf8_char);
とかやってから処理すればいいんですかね?
なんだかどれがどれと一緒なのかわからなくなっとります
0084デフォルトの名無しさん2011/06/01(水) 15:03:51.07
まだこいつ文字コードのことやってんの
きもちわる
0085デフォルトの名無しさん2011/06/01(水) 15:57:02.30
波ダッシュとか意味わかんないんだもん・・・
0086デフォルトの名無しさん2011/06/01(水) 17:39:27.81
やっと解決したよ!
Mechanizeが悪かったこの野郎!
勝手にデコードしやがって!
寝る
0087デフォルトの名無しさん2011/06/01(水) 22:32:35.23
オブジェクト作るときにエラーが起きたとき bless の結果を返さずに undef を返しても OK なんですよね?

new{
 $obj = {'is_error' => 0};
 bless $obj, $pkg;
 return $obj;
}

my $test = TEST->new();
if($test->{'is_error'}){〜}

みたいに一々書く必要は無いですよね?(サンプル自体が分かりにくいかもしれませんが・・・^-^;)
0088デフォルトの名無しさん2011/06/01(水) 23:33:59.13
TEST->new() or die;
むしろ$test->{is_error}でハッシュを参照するのがよろしくない
0089デフォルトの名無しさん2011/06/02(木) 00:01:01.82
あっ、ほんとは is_error() の予定だったんだけど、記述を減らしたかったので便宜上そう書かせていただきました。


new() or die みたいな書き方を書かれてるってことは、new でエラーを返したい場合は undef を返しても OK という事ですよね?
0090822011/06/02(木) 00:44:32.99
仕事の都合上書くの遅れました。


sub test_1{
    my $test  = $_[0];
    my $test2 = 'aabb';
    { $test2 =~ s/$test//og }

    print "$test2\n";
}

&test_1("a");
&test_1("b");

いったいこの o の仕様はどうゆうこと。
スコープ抜けてもoは継続されるわ、
myの変数だからサブルーチン呼んだら新しい変数になってるハズなのに、oがそのまま記憶されてるわ、
なんですかこの仕様。

サブルーチンで o 使えないじゃないですか。
Perl作った人は何考えてるんですか。

なんかoを「ここでoを初期化させる!」みたいな記述とかないんですか?
0091デフォルトの名無しさん2011/06/02(木) 01:05:24.66
/oの仕様って知ってる?
0092デフォルトの名無しさん2011/06/02(木) 01:14:17.30
>>89
他のモジュールでも参考にして好きにすりゃいいよ
あとreturnはundefじゃなくて引数なしにしとけ
0093デフォルトの名無しさん2011/06/02(木) 01:24:31.62
>>90
http://perldoc.jp/docs/perl/5.10.0/perlfaq6.pod#What32is32o32really32for63
0094902011/06/02(木) 01:42:21.43
>>93
ありがとう。
なんとも言いがたいルールでした。
0095デフォルトの名無しさん2011/06/02(木) 02:07:27.26
なるほど
undef を含む配列となる場合があるから return undef じゃなくて return のみ
書くと良い訳ですね。


ふと思ったけど、たしか関数が何で評価されてるか知る関数ありましたよね?

スカラなら return undef で、配列なら return で返せるといいなぁ。

やっぱ undef をちゃんと返したい (^_^;)
0096デフォルトの名無しさん2011/06/02(木) 02:18:51.37
>>95
質問の前に関数一覧ぐらい確認しろ
http://perldoc.jp/index/function
0097デフォルトの名無しさん2011/06/02(木) 07:00:23.29
2011-06-01 の形式で与えられる日付から
前日(2011-05-31)と、一週間前(2011-05-25)を求めたい
丁度いいモジュールか計算方法を教えて下さい
0098デフォルトの名無しさん2011/06/02(木) 07:20:17.60
use Date::Simple;
0099デフォルトの名無しさん2011/06/02(木) 07:30:12.77
>>97
use Time::Piece;
use Time::Seconds;
my $t = Time::Piece->strptime("2011-06-01","%Y-%m-%d");
say ($t - ONE_DAY); # Tue May 31 00:00:00 2011
say ($t - ONE_WEEK); # Wed May 25 00:00:00 2011

>>98
Date::Simple もたしかにいいね
0100デフォルトの名無しさん2011/06/02(木) 14:14:14.98
>>75
separator やenclosure 自体のエスケープがないのだから、 $enclose$separat$enclose をそのまま並べた文字列がきたらアウトだろ。
CSVの """" や application/x-www-form-urlencoded の %HH のようなエスケープ処理がないと無理。
0101デフォルトの名無しさん2011/06/02(木) 15:35:44.19
必ずしもそうではないんだなそれが。元データに$separatが含まれていたら
$separatを1つ付け加えることで、$enclose$separat$encloseという並びが
付け加える処理を行った後のデータには含まれてないことが保証されるように
するって考えなわけです。$separatは前処理で少なくとも2回以上の繰り返し
になっているはずなので一つだけなら区切りだとわかるわけだな。
0102デフォルトの名無しさん2011/06/03(金) 00:16:40.95
> $enclose$separat$enclose をそのまま並べた文字列
それは存在出来ないのでは
0103752011/06/03(金) 00:33:11.64
>>101私の代わりに説明ありがとう。

>>100 joinがそれを起こすので、それを起こさないための Separator_join ですね。それじゃjoinと全く同じですw。
そこはメインで解決されてると言うか、そのための関数です。本趣旨がそれなんでw。

蛇足ですが、この前メールのヘッダーを調べてきたら  Separator_join(q[.], qq[\n], @hoge); と同じ仕様だったようです。
メーラー作る時はSeparator_split(q[.], qq[\n], $hoge); で文字を壊さずに復元できるようです。
(メールは全文字列を受け付けます。問題は想定ミスや記述ミスだと思います)。

ちなみにセパレーターとかを選べるのは、プログラマーが処理が増大しないような文字を勝手に考えて決めろ、って言うことです。
0104デフォルトの名無しさん2011/06/03(金) 07:04:43.98
>>98 >>99
うまくいきました。ありがとうございます
0105デフォルトの名無しさん2011/06/04(土) 02:19:25.49
my @map;
foreach my $com1 (0 .. 199){
foreach my $com2 ( 0 .. 150 ){
$map[$com1]->[$com2] = 1;
}
}


上記の処理をアルファベットの x を使って my と同時に一行で書ける処理があったような気がするんですが、
どうにも思い出せません。
すみませんけど教えてください。
0106デフォルトの名無しさん2011/06/04(土) 02:27:32.10
ここらあたりか
ttp://chaichan.web.infoseek.co.jp/perlnote/perlnote2008-04-062.htm
ttp://chaichan.web.infoseek.co.jp/perlnote/perlnote2008-04-062.htm
0107デフォルトの名無しさん2011/06/04(土) 02:27:53.05
>>105
http://perldoc.jp/docs/perl/5.12.1/perlop.pod#Multiplicative32Operators
http://perldoc.jp/func/map
http://perldoc.jp/docs/perl/5.10.0/perllol.pod
http://perldoc.jp/docs/perl/5.10.0/perldsc.pod (broken)

my @map = map [ (1) x 151 ], 0..199;
0108デフォルトの名無しさん2011/06/04(土) 02:28:23.45
これね。
ttp://ameblo.jp/jiang4/entry-10746177724.html
0109デフォルトの名無しさん2011/06/04(土) 02:37:49.06
$map = ([1] x 151) x 200;
でいいのだろうか?

それともこうだろうか?
$map = ((([1]) x 151) x 200);

ごめんなさい、なんかどうカッコを書けばどうゆうリストが返るのかイマイチ分かってないです。
0110デフォルトの名無しさん2011/06/04(土) 02:46:04.63
([(1) x 151]) x 200
こうのような気がしてきました。一応試してみますけど、
カッコとxの関係を誰か教えてください。
0111デフォルトの名無しさん2011/06/04(土) 02:59:27.40
>>110
>>107
http://perldoc.jp/docs/perl/5.10.0/perlref.pod

#!/usr/bin/perl -w
use strict;
my @map = map [ (1) x 3 ], 0..4; # リストリファレンスを5回作る
print '$map[', $_, '] = ', "$map[$_]\n" for 0..$#map;
print "---\n";
@map = ([(1) x 3]) x 5; # 一度作ったリストリファレンスのコピーを5個入れる
print '$map[', $_, '] = ', "$map[$_]\n" for 0..$#map;
__END__
0112デフォルトの名無しさん2011/06/04(土) 03:03:25.72
>>111
すみません、mapを使わなくても出来たような記憶があるんです。


テストしてませんが調べてきました。
xはスカラー値に対しては、その回数を繰り返し連結したスカラーを返すようです。
()に対する x は全く別の働きをし、リストとして複製し、リストを返すようです。
まだテストしてませんが、たぶん>>110で大丈夫だと思います。
0113デフォルトの名無しさん2011/06/04(土) 03:14:16.79
一応結果報告しときます。

my @test = ([(1) x 3]) x 5;


foreach my $ref_ary (@test){
foreach my $print (@$ref_ary ){
print "$print\n";
}
print "\n"

}
0114デフォルトの名無しさん2011/06/04(土) 03:16:11.44
@map = ((1x150)x200);

なんとなく書いてみたけど、これでいいような気もしなくはない
0115デフォルトの名無しさん2011/06/04(土) 03:16:47.89
>リストリファレンスのコピーを5個入れる
まじすみません!
流し読みしてました!
ソレは困ります!
0116デフォルトの名無しさん2011/06/04(土) 03:25:28.38
>>112
ちょっと考えましたが x だと同じリファレンスのコピーしか生成しない気がしたので、
map関数の記述をありがたく頂くことにしました。
ありがとうございます。

>>114
その記述だともしうまく行っても、Perl特有の暗黙のなんかがあるのだろうけど、
どこでリファレンスが発生するのかよくわからない・・・
0117デフォルトの名無しさん2011/06/04(土) 03:26:15.46
しかも安価間違えました。
下らんことで長々すみませんでした。
0118デフォルトの名無しさん2011/06/04(土) 09:11:22.28
ファイルハンドルの取り扱いを教えて。

複数のFHを扱うので、ハッシュがいいのですが、
open FH, ファイル名
$test=*FH
で変数扱いdと上手くいくけど、
$hash{"FILE1"}=*FH
でハッシュだと上手くいきません。
0119デフォルトの名無しさん2011/06/04(土) 09:13:13.18
{ } でくくる
0120デフォルトの名無しさん2011/06/04(土) 09:20:05.75
>>119
すいません、わかりません ><
具体的に教えて
0121デフォルトの名無しさん2011/06/04(土) 09:45:32.31
>>118
http://perldoc.jp/docs/perl/5.10.1/perlfaq5.pod#How32can32I32use32a32filehandle32indirectly63
http://perldoc.jp/docs/perl/5.10.1/perlfaq5.pod#How32can32I32make32a32filehandle32local32to32a32subroutine63How32do32I32pass32filehandles32between32subroutines63How32do32I32make32an32array32of32filehandles63
http://perldoc.jp/docs/perl/5.10.0/perldata.pod#Typeglobs32and32Filehandles
0122デフォルトの名無しさん2011/06/04(土) 14:08:27.01
>>121
具体的にって言ってんだろ死ねよボケ
0123デフォルトの名無しさん2011/06/04(土) 14:35:10.92
通報した
0124デフォルトの名無しさん2011/06/04(土) 15:13:20.60
>>122
リンク先に具体的にいろいろ書いてあるだろ
隅々までよく読んで勉強せい
0125デフォルトの名無しさん2011/06/04(土) 15:44:05.76
質問自体がここは10年前か?みたいなのが多いんだよ。
へんな化石みたいなサイトを見てるくせにまっとうなところは見ない。
0126デフォルトの名無しさん2011/06/04(土) 16:01:16.61
まず perldoc して自分が使ってる perl のドキュメントを読む習慣を付けた方が良いと思う。
0127デフォルトの名無しさん2011/06/04(土) 16:02:41.48
受身のままじゃ使えない奴のままだよな
0128デフォルトの名無しさん2011/06/04(土) 17:56:42.16
ありのままに生きたいと願ったアリはずっとアリのままだった
みたいだな
01291182011/06/04(土) 17:59:25.89
なんかいろいろスミませんでした。
>>121さんを参考に努力してみます。

 (´Д`;) 
   ∨)
   ((
0130デフォルトの名無しさん2011/06/04(土) 18:37:12.93
今perlがなんていう変数を何個持っててメモリをどのくらい使ってるか
計測するツールはありますか?
0131デフォルトの名無しさん2011/06/04(土) 18:48:37.18
WWW::Mechanizeでスクレイピングしていると異常に時間が掛かるのですが、何をチェックすればいいのでしょうか。
システムはFedora13で、webページでログインして数カ所を巡回する程度ですが、1分以上掛かります。
sslが遅いのかもしれませんがよく分かりませんでした。
0132デフォルトの名無しさん2011/06/04(土) 19:01:21.03
ストップウォッチのようなものをつける
0133デフォルトの名無しさん2011/06/05(日) 09:16:21.08
ファイルの先頭行にメッセージをいれるべく、
`sed -i '1s/^/MESAAGE\n' $file`
って書いたのに、
sed: -e 表現 #1, 文字数 10: 「s」コマンドが終了していません
とか言われるのは何故?
01341342011/06/05(日) 09:35:25.23
`sed -i '1s/^/MESAAGE\n/' $file`
01351352011/06/05(日) 10:20:36.57
ちっともPerlについての質問じゃないし。
01361362011/06/05(日) 10:34:31.12
メサアゲ
0137デフォルトの名無しさん2011/06/05(日) 11:45:45.49
普通のラー油ででかい瓶で安く売ってないのかな。
ふつうのやつって、半分以上容器代だよね。
0138デフォルトの名無しさん2011/06/05(日) 12:01:09.95
Perlも半分以上は使いもしない無駄な機能でできています。
0139デフォルトの名無しさん2011/06/05(日) 12:40:03.74
ドキュメントも、重要なのは全体の10%だけで、
いつも残りの90%で時間を無駄にしている気がする
0140デフォルトの名無しさん2011/06/06(月) 05:52:55.44
例えばオブジェクト指向で得られる利点とはなんですか?

my $obj = CGI->new;
とか、書くのが書籍などではオブジェクト思考と言われていますが
普通に require や use して、package::package_sub();
として呼び出すだけじゃだめなんですか?
そもそも、パッケージ化してその都度呼び出すこと自体がオブジェクト指向じゃないんですか?
0141デフォルトの名無しさん2011/06/06(月) 06:08:37.67
>>140
状態を持つオブジェクトを複数同時に扱 うのが楽。
IO::FileのかわりにIO::Stringをサブルーチンに渡すなどの応用が楽。
ただしモジュールを書く側は再利用を考えて設計するので面倒。
0142デフォルトの名無しさん2011/06/06(月) 06:12:13.10
>>140
http://perldoc.jp/docs/perl/5.10.0/perlboot.pod
0143デフォルトの名無しさん2011/06/06(月) 23:30:46.92
初歩的な質問なのですが…
@aiueo = ('a', 'b', 'c', 'd', 'e');
$rand = int(rand(6))
if($rand == 0){print "$aiueo[0]";}
elsif($rand == 1){print "$aiueo[1]";}
elsif($rand == 2){print "$aiueo[2]";}
elsif($rand == 3){print "$aiueo[3]";}
elsif($rand == 4){print "$aiueo[4]";}
このソースをなんとかしてまとめることは出来ませんか?
$aiueoの[]の中に乱数をそのまま入れたいんです、お願いします><
0144デフォルトの名無しさん2011/06/06(月) 23:33:56.91
@aiueo = ('a', 'i', 'u', 'e', 'o');
$rand = int(rand(6));
print "$aiueo[$rand]";

どうでしょう
0145デフォルトの名無しさん2011/06/06(月) 23:39:20.14
@aiueo = qw(a b c d e);
print $aiueo[rand @aiueo];
0146デフォルトの名無しさん2011/06/07(火) 00:09:21.69
初歩的な質問します。

代数の値があまりにも大きいとe+○○という数になります。
これを整数で表示させる方法はないでしょうか。
0147デフォルトの名無しさん2011/06/07(火) 00:09:24.33
>>144-145
助かりました、ありがとうございます!
0148デフォルトの名無しさん2011/06/07(火) 00:11:43.67
>>146
BigIntを使う
0149デフォルトの名無しさん2011/06/07(火) 00:15:16.55
>>148
use Math::BigInt; ってのがあったんですね。
ありがとうございました。
0150デフォルトの名無しさん2011/06/07(火) 00:21:14.95
割り算しないならuse bigint
0151デフォルトの名無しさん2011/06/07(火) 01:01:53.85
>>143
>>144
ちょっとまて
その場合rand(6)じゃなくてrand(5)だろ?
0152デフォルトの名無しさん2011/06/07(火) 21:54:25.93
$# 使えよ
0153デフォルトの名無しさん2011/06/07(火) 22:45:44.96
ざわざわっ
カイジ「ちょっとまてその場合rand(6)じゃなくてrand(5)だろ?」
0154tokuhirom2011/06/08(水) 00:09:28.93
よかったら僕になんでもきいいてください
なんでもこたえられます
職業Perlプログラマです
0155tokuhirom2011/06/08(水) 00:10:26.81
毎日ここをチェックしてるよ
0156tokuhirom2011/06/08(水) 00:11:06.70
僕 書籍に60万円いじょうお金かけてるからすごいよ
0157tokuhirom2011/06/08(水) 00:21:55.01
こiPhoneのブックマークにいれてますね
ここのスレ毎日チェックしてますね
おもしろいスレですね
2chやってることかくしてましてねえ
小飼弾はしにま
0158tokuhirom2011/06/08(水) 00:22:30.35
もう寝ますね
ききたいことあったら明日きいてね
ぼくいつでもいるから
0159tokuhirom2011/06/08(水) 00:23:04.12
明日の当番はotsuneだったね
ぼくのファンのかた残念だたね
おやすみ
0160tokuhirom2011/06/08(水) 00:24:42.20
寝るところがないから新宿の道路でねてま
0161デフォルトの名無しさん2011/06/08(水) 01:46:40.11
ネイピア数の簡単なプログラムです。

use Math::BigFloat;
for($k = 1,$n = <>;$k <= $n;$k++){
$m = (1+ 1/$k) ** $k;
print "$m\n";
}

Math::BigFloat;を使っても、
計算精度も桁数も変わらないんですが、なぜでしょうか?
0162デフォルトの名無しさん2011/06/08(水) 01:50:12.07
使わなきゃ変わるわけない
0163デフォルトの名無しさん2011/06/08(水) 02:08:47.36
え
0164デフォルトの名無しさん2011/06/08(水) 02:11:36.89
使っているように見えないが
0165デフォルトの名無しさん2011/06/08(水) 02:26:55.56
どうすればいいですか
0166デフォルトの名無しさん2011/06/08(水) 03:28:45.79
>>161
use Math::BigFloat;

my $n = <>;
for(my $k = Math::BigFloat->new(1); $k <= $n; $k++){
my $m = (1 + 1/$k) ** $k;
print "$m\n";
}

面倒なら、use bignum;使うといいよ。チョーお勧め。
0167デフォルトの名無しさん2011/06/08(水) 03:40:50.41
オブジェクト作る時の最初に new しますが、
new の中から、そのパッケージのメソッドを呼ぶにはどうすれば良いですか?
あるメソッドの内容とコンストラクタの中とで重複する処理があるので、コンストラクタから
メソッドを呼びたいです。


と書いたところでググってたら、コンストラクタからメソッドは呼ぶな!というのがあって、
めんどくさいけど、同じ内容を書こうと思います。
0168デフォルトの名無しさん2011/06/08(水) 04:14:54.33
>>167
何の事か分からんけど、副作用が無ければ、
下のようにして_init内にゴリゴリ書けばいいよ。

package _Foo;
sub new {
my ($class) = @_;
my $self = bless{}, $class;
$self->_init;
return $self;
}
sub _init {
my ($self) = @_;
...
}
0169デフォルトの名無しさん2011/06/08(水) 04:42:24.92
オブジェクトの中でprintするか、返した文字列をprintすべきか迷い中。。。
0170デフォルトの名無しさん2011/06/08(水) 07:35:45.29
>>166
use bignumを調べてみました
ホントに便利ですねw
貴重な情報ありがとうございました。


それと、
出力結果を、
メモ帳にリダイレクトする方法はありませんか?
0171デフォルトの名無しさん2011/06/08(水) 11:20:00.99
>>170
メモ帳はできないみたいだけど、エディタによってはできるんじゃない?
秀丸の場合は
perl hoge.pl | C:\PROGRA~1\Hidemaru\Hidemaru.exe
0172デフォルトの名無しさん2011/06/08(水) 12:36:11.39
スパゲッティなperl cgiにアクセスログなどを保存するコードを追加できなくて困っています

もうじき成立する法律で、自前サイトもってる人がログ保存してないと3年の懲役らしいのです
http://www.asyura2.com/11/senkyo113/msg/921.html

半分ぐらいはネットで拾ったコードなので中身把握してないので非常に困ってます
01731722011/06/08(水) 12:37:45.60
http://www.moj.go.jp/content/000072565.htm
念の為に法務省の法律の原文です
0174デフォルトの名無しさん2011/06/08(水) 12:52:03.29
>>172
Webサーバを運用してるのなら Webサーバのアクセスログで良くね?
Webサーバを運用なら何か他の目的で必要としない限りは必要無いだろ
01751742011/06/08(水) 12:53:04.68
Webサーバを運用なら→Webサーバを運用してないなら
0176デフォルトの名無しさん2011/06/08(水) 12:57:05.89
自宅サーバーなので
apacheのログだけとれば十分ということでもないようです

FreeBSDのportsで入れた後で少し改造した物などでは
apacheを経由してないものもあるみたいなのです
0177デフォルトの名無しさん2011/06/08(水) 15:19:07.88
窓から投げ捨てろ
0178デフォルトの名無しさん2011/06/08(水) 15:21:38.65
(?i:hoge) の逆を表す方法があればご教示ください。よろしくお願いします。
0179デフォルトの名無しさん2011/06/08(水) 15:29:06.85
逆ってなんだよ
/(?-i:hoge)/i ってことか?
0180デフォルトの名無しさん2011/06/08(水) 16:29:18.06
ありがとうございます。それです。
0181デフォルトの名無しさん2011/06/08(水) 18:50:28.98
>>171
ありがとうございます。

メモ帳以外ならどこかにリダイレクト可能ですか?
0182デフォルトの名無しさん2011/06/08(水) 18:57:59.87
>>181
Tempフォルダにでもファイルとしてリダイレクトして
その後にメモ帳で開けば良いんでね?
0183デフォルトの名無しさん2011/06/08(水) 20:06:42.37
コマンドラインに変数は渡せない?
$a = `nkf -j $b`;
がうまくいかない・・・

どうしたらよい?
01841832011/06/08(水) 20:56:10.83
あぁ、nkfはファイル指定だった・・・
$bはファイル名じゃなくてもろに
変換したい文字列だからいけないんだなw

自己解決。
0185デフォルトの名無しさん2011/06/08(水) 21:10:21.34
>>182
ありがとうございました!
0186Perlインストラクターm.a.l.a2011/06/08(水) 23:17:49.06
わからないことあったらtokuhiromにきいてね
0187Perlインストラクターm.a.l.a2011/06/08(水) 23:20:27.97
tokuhiromにdiffの件でYappo氏のモジュールいってたときは吹いた
ぜんぜん使い方がちがうのに yappoのString::Diffモジュールだしてて は?wっておもいました
だまってました 明らか文字列じゃなくて  行のくらべなのにString::Diffだしてこけてました
ですが笑いがこらえられませんでした  わざといったのか まじで勘違いしてミスってたのかおもしろかったです
0188Perlインストラクターm.a.l.a2011/06/08(水) 23:21:04.23
tokuhiromをなめんなよ
0189デフォルトの名無しさん2011/06/08(水) 23:52:29.65
//test.pl
use strict;
use warnings;

require 'test_mod.pl';
MYTEST->import;
print MYTEST->abcd;


//test_mod.pl
use strict;
use warnings;

package MYTEST;
sub abcd{
  $aaa = '123';
  return $aaa;
}



abcd() の $aaa は my とか our とかで宣言してないからエラーが出るものと思ってましたが、
普通に 123 と表示されてしまいます。

これって何故なんでしょう?

あと
  return $aaa;
を
  print $aaa; # 呼び出しは MYTEST->abcd; のみ
とすると、コンソールに何も表示されません。
何故なんだぜ?
0190デフォルトの名無しさん2011/06/09(木) 01:47:15.29
すんません。
編集中にファイルを変更してて、編集すべきファイルが異なってました ^-^;



ついでなのですが、作った package にオブジェクトと関数を混在して書くのは、
別に行儀の悪い事ではないですよね?

package TEST;
use base Exporter;
our @EXPORT = qw/func1 func2/;
sub func1{〜} # ただの関数
sub func2{〜} # おなじく関数
sub new{〜} # おぶじぇくとさくせー
sub proc{〜} # おぶじぇくとに対する処理

こんな感じを考えてます。
0191デフォルトの名無しさん2011/06/09(木) 19:10:22.56
perlスクリプト内でそれを実行しているperl.exeのパスを取得できますか?
Xp SP3, perl 5.10です。
0192デフォルトの名無しさん2011/06/09(木) 19:24:55.25
>>191
http://perldoc.perl.org/perlvar.html#$EXECUTABLE_NAME
0193デフォルトの名無しさん2011/06/09(木) 21:32:24.22
>>192
それです。探していたそのものです。
0194otsune2011/06/09(木) 23:04:27.54
探し物はなんですか?
みつけにくいものですか?
かばんの中も机の中も探したけれど見つからないのにまだまだ探す気ですか?
0195デフォルトの名無しさん2011/06/10(金) 00:06:43.33
>>194
ttp://a1.twimg.com/profile_background_images/3696118/otsune.jpg
0196デフォルトの名無しさん2011/06/10(金) 00:30:11.47
>>194
カスラックから許諾とらないとダメですよ。
0197otsune2011/06/10(金) 19:16:47.67
RTオタクって呼んでください
0198デフォルトの名無しさん2011/06/11(土) 00:03:27.02

perl - 勝手に添削 - utf8環境でperl::Jcodeのtrが使えないとき
ttp://blog.livedoor.jp/dankogai/archives/51693618.html

>前世紀まではそれで正しかったのですが…

なんでいちいち嫌味ったらしいんだろうな。
0199デフォルトの名無しさん2011/06/11(土) 00:14:17.53
そういう性格だから
0200デフォルトの名無しさん2011/06/11(土) 02:04:59.31
ちょっと沸点が低いよ
0201デフォルトの名無しさん2011/06/11(土) 04:07:03.26
シェルスクリプト総合 その17
http://hibari.2ch.net/test/read.cgi/unix/1290209379/49

のPerlのパターンマッチに異常に時間がかかる例の回避法をおしえてください。
0202デフォルトの名無しさん2011/06/11(土) 06:19:18.19
>>201
実用上での話ならケースバイケース。
http://perldoc.jp/docs/perl/5.10.0/perlretut.pod
0203デフォルトの名無しさん2011/06/11(土) 09:41:20.26
if ( 文字列 =~ /^始まりパターン*終わりパターン$/ )
で、引っ掛らないけどアスタリスクってダメなのか
0204デフォルトの名無しさん2011/06/11(土) 09:52:58.05
.*
0205デフォルトの名無しさん2011/06/11(土) 10:37:55.30
>>203
具体的にその引っかからない元文字列と正規表現パターンを示してみい
0206デフォルトの名無しさん2011/06/12(日) 04:39:05.47
print AAA::BBB::
ってやったら、AAA::BBB って
表示されたんですが、これはバグですか仕様ですか?
0207デフォルトの名無しさん2011/06/12(日) 04:44:44.82
あ、printじゃ表示できなかったです。

warn AAA::BBB::; ってやったら、
AAA:BBBってでるんですが(ry
0208デフォルトの名無しさん2011/06/12(日) 09:49:50.87
ウェブサイト作成協力して頂けませんか?
http://jpcity.lolipop.jp/phpBBq/viewtopic.php?f=29&t=957#p1595
0209デフォルトの名無しさん2011/06/12(日) 10:43:30.94
>>207
> warn AAA::BBB::; ってやったら、
> AAA:BBBってでるんですが(ry

嘘をつくな。
AAA::BBB
と表示されるぞ。

そもそも warn AAA::BBB::; で何がしたいんだ?
0210デフォルトの名無しさん2011/06/12(日) 12:41:37.61
>>209
> AAA::BBB
> と表示されるぞ。

え? だからそれ、嘘じゃなくて自分が
書いている通りの結果ですよね?

warn AAA::BBB:: と書いたら、
AAA::BBB:: ではなく、AAA::BBB ってなる
理由を聞いているのですが。
0211デフォルトの名無しさん2011/06/12(日) 18:17:32.87
$abcという値が5だとします。
それを$abc2という変数で05と表示させたいです。
%02dを使えばできそうですがどのように書けばよいかわかりません。
0212デフォルトの名無しさん2011/06/12(日) 18:39:28.29
>>210
perl -MO=Deparse -e 'warn AAA::BBB::;'
warn 'AAA::BBB';
-e syntax OK

文字列'AAA::BBB'と認識されてるから。
なぜそうコンパイラが認識するかは知らん。

>>211
my $abc = 5;
my $abc2 = '%02d';
printf($abc2, $abc);
0213デフォルトの名無しさん2011/06/12(日) 19:15:25.31
>>212
説明不足ですみません
printf('%02d', $abc); を $abc2で表すにはどうすればよいでしょうか。
(printfを使わずに)

あいう$abc2えお と書けば、 あいう05えお
になるようにしたいのですが。
0214デフォルトの名無しさん2011/06/12(日) 19:21:00.35
>>207ではコロンが一個になってるじゃーん
0215デフォルトの名無しさん2011/06/12(日) 19:31:20.65
>>213
my $abc2 = sprintf('%02d', $abc);
0216デフォルトの名無しさん2011/06/12(日) 19:40:53.62
pythonのctypesみたいなものはありますか?

XSとかInline::Cを使わないでCの関数を呼んだり
perlの関数をコールバックとしてCの関数に渡したりしたいです

0217デフォルトの名無しさん2011/06/12(日) 19:43:00.93
>>215
ありがとうございました
0218デフォルトの名無しさん2011/06/12(日) 19:52:03.85
群馬県高崎市に住む39歳AB型、製造業界で派遣プログラマーの仕事をしているhekenekoこと、黒飛健と申します。
新日本テクトスという会社を追われ、その後どうしてよいかわからなくなりました。
だけど私の大好きな尾崎豊の歌に励まされ、夢であるプロのクリエイターを目指すことにしました。
何度も挫けそうになりましたが、尾崎豊の歌を聞きながら自分を励ましています。
今も尾崎豊の歌のおかげで、夢を諦めずにCGアニメの製作を続けられています。

とりあえず、以下の動画を見てください。一生懸命作ったもので、自分では既にプロレベルの傑作だと思ってます。
できればみなさんのご意見、ご感想を聞きたいです。

復興支援アニメ.mp4
http://www.youtube.com/watch?v=yn4uTiN8vvM

湾岸鉄道キャンペーンCM(カラー).mp4
http://www.youtube.com/watch?v=g3PlX1OAhug&feature=channel_video_title


これは力作で、にしおかすみこさんにも是非見てもらいたかったため彼女のブログにコメントしたんですが無視されました。
http://blog.watanabepro.co.jp/nishiokasumiko/archives/2008/02/22_15_post_22.html
(下の方にあります。投稿者: hekeneko | 2008年03月24日 22:54)
やはり私の才能に気づいてくれる人は中々いないみたいですね(苦笑)。


題名”ラダニアムの翼”
A wing of radaniam_part�U.mp4
http://www.youtube.com/watch?v=keSK70uqDJY
A wing of radaniamu part_�V.mp4
http://www.youtube.com/watch?v=-LRZbXbirR0

題名”hekeneko honey”
http://www.youtube.com/watch?v=kATwf6fAkG8
私の世界観の全てを凝縮した力作です。hekenekoワールドをご堪能あれ。
0219デフォルトの名無しさん2011/06/12(日) 20:05:36.19
>>218
(苦笑) だけ読んだ
0220デフォルトの名無しさん2011/06/12(日) 20:18:17.63
>>218
著作権法違反ネー
0221デフォルトの名無しさん2011/06/12(日) 20:57:57.23
掲示板で
タグは無効かつ改行は有効にするにはどうしたらいいでしょう。

これだとタグは無効になりますが改行も無効になってします。
$in{'bbs'} =~ s/</</g;
$in{'bbs'} =~ s/>/>/g;
$in{'bbs'} =~ s/\r\n/<br>/g;
0222デフォルトの名無しさん2011/06/12(日) 21:23:10.01
>>221
あっすいません ここも掲示板なんで&lt;が< &gt;が>に化けちゃってますね

正しくは下記のとおりです
(&は小文字です)
$in{'bbs'} =~ s/</&lt;/g;
$in{'bbs'} =~ s/>/&gt;/g;
$in{'bbs'} =~ s/\r\n/<br>/g;
0223デフォルトの名無しさん2011/06/12(日) 21:45:49.22
>>216
使った事は無いけど、こんなのがあるらしい。
http://search.cpan.org/~rurban/C-DynaLib-0.61/lib/C/DynaLib.pm
Cの関数側からPerlを使うには…どうなんだろ。

Windows限定ならWin32::APIで出来るけどね。

>>222
期待してる結果が分からないので…HTML::Entitiesを使うと楽だよ。

use HTML::Entities;
...
$in{bbs} = encode_entities($in{bbs});
$in{bbs} =~ s/\r\n/<br>/g;
0224デフォルトの名無しさん2011/06/12(日) 23:02:01.94
>>222
たぶんこうだべ。

$in{'bbs'} =~ s/</&lt;/gs;
$in{'bbs'} =~ s/>/&gt;/gs;
$in{'bbs'} =~ s/\r\n/<br>/gs;

改行の変換のところは \r\n 固定でいいのかね?
0225デフォルトの名無しさん2011/06/12(日) 23:09:36.77
ぷぷぷ
0226デフォルトの名無しさん2011/06/12(日) 23:20:03.25
/s には . が \n がマッチするようになる以外の効果ないと思うけど
0227デフォルトの名無しさん2011/06/12(日) 23:20:41.63
s/が/で/
0228デフォルトの名無しさん2011/06/13(月) 01:14:37.89
そうか s オプションは関係なかったか。適当なことを書いてすまんかった。
「改行も無効になって」しまう、の意味がいまひとつわからんかったのだが
単に処理対象テキストの改行コードが "\r\n" ではなく "\r" または "\n" だから、
ってだけの気もするよ。

しかしそもそもCGIの質問はスレ違いだったか。
0229デフォルトの名無しさん2011/06/13(月) 01:27:08.04
>>223-227
全部だめでした;

そこらの掲示板はタグは無効かつ改行は有効が普通ですけど、
結構難しいプログラムなんですかね?
0230デフォルトの名無しさん2011/06/13(月) 01:41:58.86
手前が何をしたいのかを理解するのが難しいね
0231デフォルトの名無しさん2011/06/13(月) 01:46:50.66
$in{'bbs'} 内に本当に改行コードは存在するのか?
入力テキストの改行部分は既に<br>なりに置換済なんじゃないのか?
仮に改行部分が<br>に置換済だとすると

$in{'bbs'} =~ s/</&lt;/g;
$in{'bbs'} =~ s/>/&gt;/g;

の時点でテキスト内の <br> は &lt;br&gt; に置き換わってしまい、

$in{'bbs'} =~ s/\r\n/<br>/g;

は何の意味もない。

もしくは、本当に $in{'bbs'} 内に改行(コード)が存在するなら、

$in{'bbs'} =~ s/\r\n/<br>/g;

を

$in{'bbs'} =~ s/\r\n/\n/g;
$in{'bbs'} =~ s/[\r\n]/<br>/g;

に置き換えれば動くかもしれない。
0232デフォルトの名無しさん2011/06/13(月) 01:48:25.87
>>228
>>「改行も無効になって」しまう、の意味がいまひとつわからんかったのだが
222の書き方だと改行した部分が<br>になってしまうという意味です

>>しかしそもそもCGIの質問はスレ違いだったか。
これってPerlの正規表現じゃないんですかね;
0233デフォルトの名無しさん2011/06/13(月) 02:26:47.89
<br>になってるんなら目論見どおりじゃん。
&lt;br&gt;になってしまうと言いたかったんだとしたら、>>222で示されてない部分で何か間違ってるんだろとしか。

my $s = "<span>foo</span>\nbar";
$s =~ s/</&lt;/g;
$s =~ s/>/&gt;/g;
$s =~ s,\r?\n,<br />,g;
print $s, "\n";

# 結果
&lt;span&gt;foo&lt;/span&gt;<br />bar
0234デフォルトの名無しさん2011/06/13(月) 02:46:23.48
いまさらPerlかよ
0235デフォルトの名無しさん2011/06/13(月) 03:32:10.20
>>232
デフォルトだとこうなっていました。この状態だと改行されますが、HTMLを入力された場合もタグとして表示されてしまいます。#1、#2を消すと確かにHTMLは文字として表示され無効になりますが、改行も文字として表示されてしまいます。

#タグ禁止処理
#1 $in{'m_com'} =~ s/</&lt;/g;
#2 $in{'m_com'} =~ s/>/&gt;/g;
# コメントの改行処理
$in{'m_com'} =~ s/\r\n/<br>/g;
$in{'m_com'} =~ s/\r/<br>/g;
$in{'m_com'} =~ s/\n/<br>/g;

デフォルトの場合
--------------------------------------------------
あいうえお
<b>かきくけこ</b>

↓投稿後の表示

あいうえお
かきくけこ(太字)
--------------------------------------------------

#1、#2を消した場合
--------------------------------------------------
あいうえお
<b>かきくけこ</b>

↓投稿後の表示

あいうえお<br><b>かきくけこ</b>
--------------------------------------------------
0236デフォルトの名無しさん2011/06/13(月) 03:59:57.04
>>235
あのさー。
タグ禁止処理をしてないのに、改行させたい箇所が
ちゃんと“表示上”改行されているんだったら、
そのテキストには改行箇所に"\r\n"とかではなく
"<br>"の形でタグが入ってるってことでしょうが。
そのテキストで「タグ禁止処理」をしたら、
当然"<br>"は"&lt;br&gt;"に変換されてしまって、
改行させたい箇所にそれが"<br>"の形で表示されるでしょ。
何の不思議もないじゃん。

そのテキストで改行の"<br>"のみ有効のままにして
他のタグは全部無効にしたいなら、例えば
$in{'bbs'} =~ s/<br>/[[[BR]]]/g;
$in{'bbs'} =~ s/</&lt;/g;
$in{'bbs'} =~ s/>/&gt;/g;
$in{'bbs'} =~ s/[[[BR]]]/<br>/g;
みたいな処理をせにゃ。まあ上の例は適当だけど。
0237デフォルトの名無しさん2011/06/13(月) 17:05:13.36
WWW::MechanizeあたりでGmailにログインして新着と件名をチェックするのを組みたいんですけど
同じようなことをやっている人いますかね?
いたらサンプル見せてもらえるとありがたいんですが・・
0238デフォルトの名無しさん2011/06/13(月) 17:25:49.97
>>237
無いのかと思ってgoogle先生に聞いてみたら
腐るほどでてきじゃなないか・・・

プログラム全体のサンプルとかスレチ。
0239デフォルトの名無しさん2011/06/13(月) 17:29:28.97
ググってもいまいち分からなかった
ちなみに英語は完全スルー
0240デフォルトの名無しさん2011/06/13(月) 17:31:36.44
ナラアキラメロ
0241デフォルトの名無しさん2011/06/13(月) 18:03:50.84
とりあえずいたらお願いします
最悪ログイン部分だけでもいいので
0242デフォルトの名無しさん2011/06/13(月) 19:57:19.59
奈良彰メロ
0243デフォルトの名無しさん2011/06/13(月) 20:14:25.32
ファイルのロックをするときよくロック用のディレクトリを作って
そのディレクトリがあるかどうかでロックの判断をしている場合が多いけど
ディレクトリの変わりにロック用のファイルにして処理すると問題あるんですか?
(ロック用のファイルが存在していればロックして書き込めないというように)
0244デフォルトの名無しさん2011/06/13(月) 20:16:36.68
>>238
ではサンプルでなくてログインの仕方を教えてください
お願いします。分からないのなら知っている方がいたらお願いします
0245デフォルトの名無しさん2011/06/13(月) 20:34:37.14
>>244
ググり方から勉強した方がいいんじゃない?
思いっきりそのままのコードが出てきたよw

そんな言い方したら多分もう誰も教えてくれない。
0246デフォルトの名無しさん2011/06/13(月) 20:58:17.93
お前ら意地悪だな
ちゃんと教えてあげなよ!


・・・


>>237
ググったら2個目のリンクに出てくるじゃねぇか
ちゃんと探せよクズw
0247デフォルトの名無しさん2011/06/13(月) 21:04:45.91
>>245
>>246
ぐぐりかたを参考におしえてください
0248デフォルトの名無しさん2011/06/13(月) 21:09:10.50
あ。スレ違いなのでやっぱりいいです
どうせあれだし
0249デフォルトの名無しさん2011/06/13(月) 21:11:21.91
パッケージの話になると知っている人は少ない。
0250デフォルトの名無しさん2011/06/13(月) 21:17:31.03
>>243
排他処理はアトミックに行わないとダメ。

> (ロック用のファイルが存在していればロックして書き込めないというように)
「存在する」と「ロックする」の間で、割り込まれる可能性がある。
0251デフォルトの名無しさん2011/06/13(月) 21:45:44.12
まずテキトーにprintして変数の中身がどうなってるか確認しろよさせろよ
0252デフォルトの名無しさん2011/06/13(月) 21:47:51.68
>>247
>>237にキーワードが沢山あるじゃん
ここまで物を探せないって幼稚園児じゃあるまいし・・・
0253デフォルトの名無しさん2011/06/13(月) 23:36:30.59
>>237
まずこれね。
http://news23.2ch.net/test/read.cgi/news/1183181612
0254デフォルトの名無しさん2011/06/14(火) 23:49:16.30
>>253
dat落ちしてて読めない
0255デフォルトの名無しさん2011/06/15(水) 00:53:34.08
初めてPerlをインストールして、
とりあえず対話式で学んでいこうかなと思ったんだけど、
デフォルトではそういう機能ないみたいですね?
Rubyで言うところのirbみたいな機能のことですけど。
0256デフォルトの名無しさん2011/06/15(水) 01:25:28.26
perl -de 1

↑これでrubyのirbみたいな感じになるんだね。今調べてみてわかった。
0257デフォルトの名無しさん2011/06/15(水) 16:21:15.71
連想配列の{}の中の文字列は使ってはいけない文字とかあるんですか?
ドットとかもいいんでしょうか?
0258デフォルトの名無しさん2011/06/15(水) 16:57:13.54
>>257
逆に使えない文字があったらびっくり。
0259デフォルトの名無しさん2011/06/15(水) 20:53:18.91
好きなだけ好きな文字を使えばいい
0260デフォルトの名無しさん2011/06/15(水) 23:41:27.40
4TB長ぐらいの文字列とか
0261デフォルトの名無しさん2011/06/15(水) 23:46:39.43
使えばいんじゃない
0262デフォルトの名無しさん2011/06/16(木) 00:07:59.06
やれるもんだったらやってみろ
0263デフォルトの名無しさん2011/06/16(木) 00:12:08.45
Out of memory!
0264デフォルトの名無しさん2011/06/16(木) 09:29:23.09
out of 眼中
0265デフォルトの名無しさん2011/06/16(木) 10:25:35.80
まぁ、使える文字と使える文字数は
別モンの質問だな。
0266uy ◆yyC0rYWEq2 2011/06/16(木) 16:39:59.82
>>237
Perlスレ住民はゴミだからRubyにこい
ログインするところまではかいてやった
>gem install mechanize


require 'rubygems'
require 'mechanize'
require 'kconv'
agent = Mechanize.new

uri = URI.parse("http://www.google.co.jp/")
agent.get(uri)
agent.page.link_with(:text => "Gmail".toutf8).click

#puts agent.page.uri

agent.page.form_with(:name => nil){|f|
f.field_with(:name => "Email").value = " ID "
f.field_with(:name => "Passwd").value = " password"
}.click_button
puts agent.page.uri
0267uy ◆yyC0rYWEq2 2011/06/16(木) 17:02:14.30
require 'rubygems'
require 'mechanize'
require 'kconv'
agent = Mechanize.new

uri = URI.parse("http://www.google.co.jp/")

agent.get(uri)
agent.page.link_with(:text => "Gmail".toutf8).click


agent.page.form_with(:name => nil){|f|
f.field_with(:name => "Email").value = " ID "
f.field_with(:name => "Passwd").value = " password "
}.click_button
puts agent.page.uri

s = Kconv.tosjis(agent.page.body)

a = "</font></font> <b>"
b = "</b>"
puts "si nn tya ku"
s.scan(/#{a}(.*?)#{b}/) do | n |
puts n
end

余裕すぎワロタ
0268デフォルトの名無しさん2011/06/16(木) 17:18:56.94
2ちゃんにソース貼るとき、インデントをちゃんと表示するにjはどうすればいいの?
0269uy ◆yyC0rYWEq2 2011/06/16(木) 17:21:31.89
&nbsp;だよ死ねゴミ
0270デフォルトの名無しさん2011/06/16(木) 18:15:00.21
ファイルのロックは書き込みのときだけでいいんでしょうか?
ファイルの読み込みのときはロックしなくても問題ないですか?
0271デフォルトの名無しさん2011/06/16(木) 18:20:39.28
それと連動する2つのファイルに書き込む場合

ファイル1のロック
ファイル1への書き込み
ファイル1のロック解除
ファイル2のロック
ファイル2への書き込み
ファイル2のロック解除
でも問題ないんでしょうか?

ファイル1がロック中でファイル2がロックじゃないとき
ファイル1には書き込まれなくてファイル2には書き込まれるということになると
連動する場合ファイル1と2でデータがずれる気もしますが
0272デフォルトの名無しさん2011/06/16(木) 18:34:07.23
うん
0273デフォルトの名無しさん2011/06/16(木) 18:34:59.20
>>270-271
http://perldoc.jp/func/flock
http://perldoc.jp/docs/perl/5.10.1/perlfaq5.pod#How32can32I32lock32a32file63
その下3つのQ&Aも
0274デフォルトの名無しさん2011/06/16(木) 18:39:40.17
open してからロックってのが気にくわないんだよね
0275デフォルトの名無しさん2011/06/16(木) 20:34:58.46
>>274
対象を指定せずに何をロックするんだ
http://perldoc.jp/docs/perl/5.10.0/perlopentut.pod#File32Locking

単にPerlスクリプト上での見た目の話なら、環境によっては
sysopen で O_EXLOCK や O_SHLOCK が使える
0276デフォルトの名無しさん2011/06/16(木) 23:16:06.14
>>257
$;
ハッシュのキーでこの中にある文字は使ってはいけません。
いや、使ってもいいんだけど、変な事が起きても知りません的なことになりかねません。
0277デフォルトの名無しさん2011/06/16(木) 23:35:52.09
>>237
まだ見てるか分からないけど、IMAP 使ったほうが楽じゃない?
0278デフォルトの名無しさん2011/06/16(木) 23:51:16.43
2つのファイルをロックするなら
分けてロックするより

ロック
ファイル1の書き込み
ファイル2の書き込み
ロック解除
の方がいい
0279デフォルトの名無しさん2011/06/16(木) 23:53:10.84
訂正:2つのファイルに書きむなら
0280デフォルトの名無しさん2011/06/17(金) 00:08:30.85
テンポラリファイル1に書き込み
テンポラリファイル2に書き込み
ロック
元のファイルを別名にリネームして、テンポラリファイル1をリネーム
元のファイルを別名にリネームして、テンポラリファイル2をリネーム
アンロック

の方が、オリジナルファイルに対するファイル操作時間が少なくてオススメ。
もしテンポラリファイルの書き込み途中でスクリプトが kill されてても、
所詮はテンポラリファイルなのでオリジナルのファイルには影響無い。

テンポラリファイルは1時間とかそれ以上の時間があるものなら削除するようにすれば OK。
0281デフォルトの名無しさん2011/06/17(金) 00:31:00.38
>>280
その場合、ほぼ同時に二つのプロセスが進入すると、
先に進入したプロセスの結果が消えることがある。
0282デフォルトの名無しさん2011/06/17(金) 00:33:56.82
?
0283デフォルトの名無しさん2011/06/17(金) 00:41:31.59
テンポラリもロック後ですね
間違えた。
0284デフォルトの名無しさん2011/06/17(金) 19:44:52.53
perlで作られたredmineやtrucみたいなものないのでしょうか
0285デフォルトの名無しさん2011/06/18(土) 00:26:07.45
Bugzilla
0286デフォルトの名無しさん2011/06/18(土) 14:09:27.65
sed の -iオプションみたいな機能ってありますか?
0287デフォルトの名無しさん2011/06/18(土) 15:13:39.49
>>286
http://perldoc.perl.org/perlrun.html#*-i*[_extension_]
http://perldoc.jp/docs/perl/5.10.0/perlrun.pod
0288デフォルトの名無しさん2011/06/18(土) 16:20:17.32
>>287
あるかないか だけ答えろよ。うっとおしいやつだな。
0289デフォルトの名無しさん2011/06/18(土) 16:52:34.62
てst
0290デフォルトの名無しさん2011/06/18(土) 16:56:02.01
>>288
その言葉から読み取れる脳の思考の意図を読め。
言葉遊びたりともうっとおしいという日本語は存在しない。
0291デフォルトの名無しさん2011/06/18(土) 18:24:54.51
× うっとおしい
○ うっとうしい (鬱陶しい)
0292デフォルトの名無しさん2011/06/18(土) 18:34:16.09
うっおとしいぞ!
0293デフォルトの名無しさん2011/06/18(土) 18:39:30.57
何をするだ
0294デフォルトの名無しさん2011/06/18(土) 19:03:28.41
みんな
Perl界のアイドルはtokuhiromね
覚えてねみんな


http://twitter.com/tokuhirom
よろしく
0295デフォルトの名無しさん2011/06/18(土) 19:05:32.27
http://d.hatena.ne.jp/sugyan/20110616/1308203734

ここに乗ってるの全員フォローしてください
お願いします
よろしくかすども
0296デフォルトの名無しさん2011/06/18(土) 20:48:38.03
>>290
> 言葉遊びたりともうっとおしいという日本語は存在しない。

そんな「たりとも」の使い方は少なくとも日本語には存在しない。
こんな日本語不自由な奴に他人の日本語の間違いを指摘する資格はない。
0297デフォルトの名無しさん2011/06/18(土) 21:20:42.83
YAMLで書いたコンフィグファイル内に環境変数を埋め込んでload側で環境変数を解決したいです。なんかうまい方法ないですか?
0298デフォルトの名無しさん2011/06/18(土) 21:41:04.75
一度テンプレートエンジンを通してから読み込むようにすれば?
0299デフォルトの名無しさん2011/06/18(土) 21:48:24.17
>> 297
なるほど、それやってみます。ありがとでした。
0300デフォルトの名無しさん2011/06/18(土) 21:50:28.09
間違えました。。
>> 298
ありがとでした。
0301デフォルトの名無しさん2011/06/19(日) 00:28:33.12
連想配列 %hash を key=value みたいに出力したいんだけど
どういう書き方が一番短く出来るの?
while( ($key,$value) = each %hash ){ print "$key=$value\n"; }
みたいな感じのやつ
0302デフォルトの名無しさん2011/06/19(日) 00:34:37.67
map {print "$hash{$_}=$_\n"}%hash;
0303デフォルトの名無しさん2011/06/19(日) 00:40:53.89
map {print "$_=$hash{$_}\n"} keys %hash;
0304デフォルトの名無しさん2011/06/19(日) 00:45:38.82
print "$_=$hash{$_}\n" for (keys %hash);
0305デフォルトの名無しさん2011/06/19(日) 01:00:50.88
連想配列って書いてた奴、以前にもいたなあ。古い言い方。
今はハッシュって言うよね。
0306デフォルトの名無しさん2011/06/19(日) 01:01:23.10
すげえなんだこれ
perl使いはすげえ
0307デフォルトの名無しさん2011/06/19(日) 01:06:56.51
>>305
別に古い言い方ではないよ、同様の要素の総称としてなら現役で使われる用語
ただPerl用語としてはハッシュと呼ぶのが公式だな
0308デフォルトの名無しさん2011/06/19(日) 01:13:05.32
ほんらい連想配列という機能があって、それを実装する方法の一つがハッシュだから、
連想配列という名前の方が正しい。
0309デフォルトの名無しさん2011/06/19(日) 06:27:01.10
二分木で実装してる言語もあるらしいからね(C++?)
0310デフォルトの名無しさん2011/06/19(日) 12:23:56.39
forとforeachとeachってどれがいいの?
0311デフォルトの名無しさん2011/06/19(日) 13:08:38.74
eachだけ仲間外れ
0312デフォルトの名無しさん2011/06/19(日) 13:13:40.90
forとforeachは変わらないって初めてのPerlに書いてあるのに
foreachのほうが処理が速いって言ってるサイトがあるけど、いったいどっちが本当なんだ
0313デフォルトの名無しさん2011/06/19(日) 13:26:10.39
And it's faster because Perl executes a foreach statement more rapidly than it would the equivalent for loop.
0314デフォルトの名無しさん2011/06/19(日) 13:55:44.38
>>312
コード上で 'for' と書かれているか 'foreach' と書かれているかに関係なく、
条件部が3文から成っていれば「for」ループと解釈され、
リストが置かれていれば「foreach」ループと解釈されるので「変わらない」。

リストの全要素に対して反復処理を行う場合は、「for」ループで
同様の処理を書くよりも専用の「foreach」ループの方が「速い」。

#!/usr/bin/perl -w
use strict;
use Benchmark 'timethese';
my @Array = (0..9,'A'..'Z','a'..'z') x 100;
timethese(-5, {
  f1 => sub { for (my $i = 0; defined $Array[$i]; ++$i) {} },
  f2 => sub { foreach (my $i = 0; defined $Array[$i]; ++$i) {} },
  e1 => sub { foreach my $chr (@Array) { defined $chr } },
  e2 => sub { for my $chr (@Array) { defined $chr } },
  e3 => sub { my $i = 0; foreach my $chr (@Array) { defined $chr; ++$i } },
  e4 => sub { my $i = 0; for my $chr (@Array) { defined $chr; ++$i } },
});
__END__
0315デフォルトの名無しさん2011/06/19(日) 13:57:09.54
>>313
foreach( $i=0; $i<@array; $++ ) という形式のことを
慣例上 for と言ってるだけ?
0316Perl忍者2011/06/19(日) 15:07:21.27
まだお前らこんなカスなことやってんだね

いい加減進歩ないね

あほみたいですね

ばっかじゃねーの バーーーカ
0317Perl忍者2011/06/19(日) 15:07:57.66
文法なんてできてあたりまえだろはげwwwwwwww
wwwwwwwwwwwwwwwwwww
wwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwww文法なんてできてあたりまえだろはげwwwwwwww
wwwwwwwwwwwwwwwwwww
wwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwww文法なんてできてあたりまえだろはげwwwwwwww
wwwwwwwwwwwwwwwwwww
wwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwww文法なんてできてあたりまえだろはげwwwwwwww
wwwwwwwwwwwwwwwwwww
wwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwww文法なんてできてあたりまえだろはげwwwwwwww
wwwwwwwwwwwwwwwwwww
wwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwww文法なんてできてあたりまえだろはげwwwwwwww
wwwwwwwwwwwwwwwwwww
wwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwww
0318Perl忍者2011/06/19(日) 15:09:03.03
おえええええええええええええええ!
こいつら新車wwwwwwwwwwwww
Perl新車だよwwwwwwww「

あと30年たってもPerlPerlわめいてそうですねwwwwwwwwwwwww
0319デフォルトの名無しさん2011/06/19(日) 16:55:19.13
にんにん
0320デフォルトの名無しさん2011/06/19(日) 17:51:21.96
>>314
なるほど、どっちも正解だったのか
何も考えずforeachで統一することにするよ
ありがとう
0321デフォルトの名無しさん2011/06/19(日) 18:22:29.89
>>320
どちらかと言えばforに統一のが良いような…
foreachって書くと、あまり三文形式のforに見えないイメージ
一方のforはforeachの意味で使う言語が結構あるからね
0322デフォルトの名無しさん2011/06/19(日) 18:57:19.03
自分はforeachしか使わないな。
こだわりがあったわけじゃないけど、そもそも三文形式のforを使う機会がなかった。

0323デフォルトの名無しさん2011/06/19(日) 18:59:20.47
foreachとしてforを使ってた人は 俺のほかに何人いますか
0324デフォルトの名無しさん2011/06/19(日) 19:08:32.57
クックブックは、三文形式でない場合はforeachを使うと英語の文になってわかりやすからとforeachを推奨してるね
0325Perl忍者2011/06/19(日) 19:09:07.90
foreachのほうがわかりやすいんだけどwwwwwwwwwばかだねおまえら
0326デフォルトの名無しさん2011/06/19(日) 19:11:16.51
俺は書き分けてるなあ
3文のほうはfor、変数とリストのほうはforeach
0327デフォルトの名無しさん2011/06/19(日) 19:20:07.85
326とおんなじルールだけど、ワンライナーとかで後置するときはfor使うね
0328デフォルトの名無しさん2011/06/19(日) 19:40:31.42
3文形式とか使わねーし
0329Perl忍者2011/06/19(日) 19:45:15.12
ワンライナーとかなれてねーくせして無理につかってんじゃねーよw
Perl通気取りwwwwwwwwwwwwwwwwwwwwwwwww
0330Perl忍者2011/06/19(日) 19:45:49.06
ワンライナーでかけるとかわめかれてもほとんど津川ねーからメリットのうちにはいらねーよばーかwwwwwwwwwwwwwwwww
0331デフォルトの名無しさん2011/06/19(日) 20:05:35.15
扱う数が浮動小数点数の範囲を越えてしまって
範囲演算子を使えない場合には 3文形式は便利
0332デフォルトの名無しさん2011/06/19(日) 20:07:00.24
$iが踊るときには便利かな
0333デフォルトの名無しさん2011/06/19(日) 23:39:33.05
元ネタは踊る人形ですね。
わかります。
0334デフォルトの名無しさん2011/06/21(火) 13:22:19.84
$iは踊る、されど進まず
0335デフォルトの名無しさん2011/06/21(火) 14:11:57.86
はじめましてよろしくお願い致します。
perlのWin32::Registryモジュールについて質問です。

windowsにてレジストリの値を取得するため、使用させていただいてるのですが、たとえば

use strict;
use Win32::Registry;

my $reg = $HKEY_LOCAL_MACHINE;
my $key = "SOFTWARE\\value\\value01";
my $value_name = "value_name";
my $value;
my $type;
my $sub_reg;

$reg->Open($key, $sub_reg);
$sub_reg->QueryValueEx($value_name, $type, $value);
$reg->Close();

これで$valueに値がセットされて取得することができるとおもうのですが、
これを、また別の値を取得しようとして、もういちど繰り返すとエラーがでてしまいます。
どうやら、 $HKEY_LOCAL_MACHINEでつまずいてるようなのですが、解決法がわかりません。
$HKEY_LOCAL_MACHINE自体をprintすると、”Win32::Registry=HASH(0x18e843c)”という文字列で、
HASH以下は、取得するたびに変わるようでした。
サブルーチン化するにしても、結局$HKEY_LOCAL_MACHINEでつまずくので、どうしようもありません・・・
いいお知恵がありましたらご教示いただけると幸いです。
0336デフォルトの名無しさん2011/06/21(火) 14:41:24.48
obsolete, use Win32::TieRegistry
0337デフォルトの名無しさん2011/06/21(火) 22:48:11.01
>>336
ありがとうございます!下記のようにして、どうにか取得できました!

use strict;
use Win32::TieRegistry(Delimiter => "/");

my $dir01 = $Registry -> {"LMachine/SOFTWARE/value/value01"};
my $value01 = $dir01 -> GetValue("value_name");

my $dir02 = $Registry -> {"LMachine/SOFTWARE/value/value02"};
my $value02 = $dir02 ->GetValue("value_name");

print "$value01\n";
print "$value02";
0338デフォルトの名無しさん2011/06/23(木) 02:07:33.68
気がついたらいつのまにか 5.14.1 が出てた。
0339デフォルトの名無しさん2011/06/23(木) 09:04:03.75
<> で1行読み込みですが、1行は何文字OKですか?
0340デフォルトの名無しさん2011/06/23(木) 09:40:27.50
変数の大きさは上限いくつですか?
0341デフォルトの名無しさん2011/06/23(木) 10:00:08.32
>>339
日本語でも英語でもなんでも
0342デフォルトの名無しさん2011/06/23(木) 10:39:41.10
>>341
<>で読み出せる1行の最大の大きさは何文字?
0343デフォルトの名無しさん2011/06/23(木) 10:42:21.59
その1 perl -pe '$i++;print$i'
だと各行の先頭に行番号を打てるけど
その2 perl -pe '$i++}{print$i'
だと全体の行数しか出力しない

行数を数えつつ各行も出力もしてほしかったんだけど
なぜその2では各行が表示されなくなってしまったんだ?
0344デフォルトの名無しさん2011/06/23(木) 12:46:46.30
CAPN Search にある安定版リリースは 27 Feb 2010 の 0.06 なのに
cpan > install Crypt::SaltedHash
で入るバージョンが 0.05 なのはなぜなんだろう?
0345デフォルトの名無しさん2011/06/23(木) 12:59:49.18
>>343
}{ とかちゃんと意味わかって使ってる?
perl -pe 'CODE HERE' は
while (define($_ = <>) { CODE HERE } continue { print $_ }
に展開される(エラー処理とかも入ってるけど省略)から、
その2は
while (...) { $i++}{print$i } continue { print $_ }
となって、continue ブロックは while ブロックにではなくその外の {print$i } に紐付けられるから、最後に1回実行されるだけになる。

-p で各行を出力しつつループの外でも何かしたかったら BEGIN / END を使うのが無難。
$ perl -pe 's//$. /;END{print"$. lines\n"}'

あえて }{ を使って上と同じ結果を得たいなら
$ perl -ne 'print"$. $_"}{print"$. lines\n"'
$ perl -pe 'print"$. $_"}{$_="$. lines\n"'
0346デフォルトの名無しさん2011/06/23(木) 13:56:02.47
>>345
ありがとう! 完全に理解した。
while(<>){ $i++ } と { print $i }continue{ print $_; }
に解釈されるってことか!
0347デフォルトの名無しさん2011/06/23(木) 13:57:04.14
perl -pe '$\++}{' なんて書き方に縮まるのか・・・ 恐ろしい・・・
03483392011/06/23(木) 14:37:28.71
だれもわかりませんか?
0349デフォルトの名無しさん2011/06/23(木) 15:48:46.66
>>348
しるか!環境依存じゃ。
perlでは制限してない。
03503392011/06/23(木) 16:18:28.98
>>349
環境依存であることのソースを教えてください
本当に制限していないんですか?
環境依存であるとして、オーバーしたら何がおきますか?
エラーが発生しますか? アウトオブメモリーになりますか?
0351デフォルトの名無しさん2011/06/23(木) 17:00:51.80
>>350
疑問を持った君が検証して率先垂範してくれたまえ
0352デフォルトの名無しさん2011/06/23(木) 17:04:21.09
>>350
自分の環境でプログラム止まるまで文字足せよw
エディタがエラーになるまでひたすら一行かけよ。
それがなによりのソースだ。


そもそも何その質問の仕方。
釣りかよ。
0353デフォルトの名無しさん2011/06/23(木) 18:42:47.64
やれやれ。
質問箱といいながらちょっと難しい質問になるとまったく答えられる人がいないんですね。
かなりがっかりしました。
0354デフォルトの名無しさん2011/06/23(木) 18:53:14.13
はあ、そうですか
0355デフォルトの名無しさん2011/06/23(木) 19:26:54.97
ウンコみたいな簡単な質問でも
自分がわからないと難しく感じるものですよね。
うんうん、わかりますよ、その気持ち。

捨て台詞とか小学生っぽいことしたくなるの
そんな次期に良くある衝動ですよ。
心配しなくても多分治ります、大丈夫ですよ。
どうぞperlと人生を楽しんで下さい。
0356デフォルトの名無しさん2011/06/23(木) 19:37:45.90
はい
0357デフォルトの名無しさん2011/06/23(木) 19:44:30.79
http://perldoc.jp/docs/perl/5.10.0/perlguts.pod
> STRLEN は perl が扱えるどんな文字列のサイズも表現するのに
> 十分なだけの 大きさを持つことが保証されている整数型(Size_t,
> 普通は config.h で size_t として定義されています)。

ここから考えると、メモリ量で決まるだろうなあと思う。
実際に試していないし、他の条件があるかも知れないので、
>>350の挑戦に期待。
0358デフォルトの名無しさん2011/06/23(木) 21:06:45.32
どうだろうね
アドレス空間の枯渇のほうが先に来るかもしれない

>>339は1文字が1バイトとは限らないという引っ掛けかと思ってた
0359 忍法帖【Lv=5,xxxP】 2011/06/23(木) 21:21:40.36
すみません。文字コードの文字列をもとに戻すにはどうしたらいいのでしょうか?
ソースは utf8 で、cp932の文字コードが入っています。

my @mojilist = unpack('H*', encode('cp932','もじもじ'))
print @mojilist;
print pack('H*',@mojilist)

2行目で "82e082b682e082b6" となってるのですが、
3行目(実際は22行目です)の結果が

"\x{0082}" does not map to cp932 at moji.pl line 22.
:(省略)
"\x{00a0}" does not map to cp932 at moji.pl line 22.
\x{0082}a\x{0082}¶\x{0082}a\x{0082}¶\x{00a0}

のようになります。
0360デフォルトの名無しさん2011/06/23(木) 22:12:33.66
文字コードの変換をするライブラリで
一番現実的な意味で完璧なものってなんでしょうか?
日本語以外も含まれます。
0361デフォルトの名無しさん2011/06/23(木) 22:54:21.68
下のように$aaaというディレクトリの中にあるファイルとディレクトリを分けて表示するのがうまくいきません
windows環境です

opendir(D,$aaa);
@files = readdir(D);

foreach $file(@files){

if(-d $file){
print "ディレクトリ=$file<BR>";
}
if(-f $file){
print "ファイル=$file<BR>";
}
}
closedir(D);

windowsでも分けて表示できる方法ってありますか?
できればモジュールは使わないでできる方がいいです。
03623392011/06/23(木) 22:57:21.34
>>357
ありがとう
32bitOSなら4G-1までですね
0363デフォルトの名無しさん2011/06/23(木) 22:58:44.18
>>361
http://perldoc.jp/func/readdir
0364デフォルトの名無しさん2011/06/24(金) 01:23:52.48
>>359
utf8 -> cp932 -> hexdata -> cp932 -> utf8
この最後のutf8に変換が抜けてるのでは。
0365デフォルトの名無しさん2011/06/24(金) 02:00:07.67
変換・逆変換が対称になってないしな
0366デフォルトの名無しさん2011/06/24(金) 02:29:49.53
mkpath でディレクトリ作ると、読み取り専用の属性がつくっぽいのだが、
エクスプローラのフォルダのプロパティからも、attrib コマンドでも ReadOnly の属性が外れない。。。
0367 忍法帖【Lv=6,xxxP】  3592011/06/24(金) 03:55:52.91
>>364 >>365
ヒントありがとうございました。
UTF8フラグ付きに戻す作業が必要でしたm(_ _)m
------
use strict;
use utf8;
use Encode;

binmode STDERR, ":encoding(cp932)";
binmode STDIN,  ":encoding(cp932)";
binmode STDOUT, ":encoding(cp932)";

my $sjiscode = unpack('H*', encode('cp932','もじ'));
print $sjiscode,"\n"; # "82e082b6"

my $text = pack('H*',$sjiscode);

print decode('shiftjis', $text);
0368デフォルトの名無しさん2011/06/25(土) 15:21:47.21
Perlでfirefoxで表示されているHP情報を取得して
Perl内で編集処理してまたfireofxにて編集した内容を再表示させることって可能ですかね?
可能だったらやり方かもしくはそのようなことを詳しく書いてあるようなサイトを教えてもらえるとありがたいです
0369デフォルトの名無しさん2011/06/25(土) 15:28:58.17
不可能
0370デフォルトの名無しさん2011/06/25(土) 16:05:18.29
スクレイピングってこと?
0371デフォルトの名無しさん2011/06/25(土) 16:20:25.11
JavaScriptでするDOM操作みたいなのをPerlでやりたいってことじゃないのかな?
0372デフォルトの名無しさん2011/06/25(土) 16:44:00.69
いえ、だから不可能です。

空気嫁よな。
0373デフォルトの名無しさん2011/06/25(土) 17:06:11.85
オミトロンをPerlでやりたいみたいなものか
0374デフォルトの名無しさん2011/06/25(土) 21:38:44.17
>>368
可能。
webサーバを用意して、firefoxにperlから
URLとしてブックマークレットを投げて
そこでajaxで中身をサーバに送りつけれ。
0375デフォルトの名無しさん2011/06/25(土) 21:51:59.57
>>368
http://search.cpan.org/dist/WWW-Mechanize-Firefox/
0376デフォルトの名無しさん2011/06/25(土) 22:18:56.68
Net::SMTPモジュールを使ったメール送信です。
メールが送れていません。どこが間違ってますかね

http://www.kent-web.com/pubc/book/test/uploader/uploader.cgi?mode=downld&no=4398
0377デフォルトの名無しさん2011/06/25(土) 22:19:42.21
kentという時点で間違ってる。

あれを参考にしていいのは
中学生まで。
0378デフォルトの名無しさん2011/06/25(土) 22:20:41.00
Jcodeワロタwwww

まだ使ってるのか。
標準モジュール使えよ。
0379デフォルトの名無しさん2011/06/25(土) 23:03:05.72
一体いつまで過去の遺物を引きずってるんだよ……
0380デフォルトの名無しさん2011/06/26(日) 01:30:59.36
>>377-379
解決法がわからないのに糞レスしてるお前らにワロタwwwww
無論俺も知らないがw
0381デフォルトの名無しさん2011/06/26(日) 01:39:24.42
perlは10年くらい触ってないんだけどJcodeってjcode.plのこと?
0382デフォルトの名無しさん2011/06/26(日) 01:41:38.98
日本語にしか対応してないアレか
0383 忍法帖【Lv=7,xxxP】 2011/06/26(日) 03:18:28.29
>>376
Jcode関係外して、アルファベットだけでも送れます?
0384デフォルトの名無しさん2011/06/26(日) 10:20:57.95
webいじってりゃメール送信くらい誰でもつけるだろ。

POP before SMTPはせんで良いの?
0385デフォルトの名無しさん2011/06/26(日) 13:16:36.55
>>374
>>375
どうもありがとうございます
0386デフォルトの名無しさん2011/06/26(日) 15:19:33.68
>>384
しない。対応してる送信ソフトなんて存在しないし。
0387デフォルトの名無しさん2011/06/26(日) 16:34:53.01
>>386
はぁ?
0388デフォルトの名無しさん2011/06/26(日) 17:20:53.37
>>387
何がはぁだよ。具体的反論をしろ。
0389デフォルトの名無しさん2011/06/26(日) 17:29:06.75
>>388
おまえこそ意味不明なこと言ってるんじゃねえよ。
0390デフォルトの名無しさん2011/06/26(日) 21:40:14.38
>>389
はぁ?
0391デフォルトの名無しさん2011/06/26(日) 22:01:38.06
>>390
はぁ?じゃねえよカス
0392デフォルトの名無しさん2011/06/26(日) 22:25:35.74
落ち着こう。
0393デフォルトの名無しさん2011/06/26(日) 22:55:58.96
>>376
うちのMTAではそのコードで送信でけましたよ。
送れない原因についてはPBSもそうだろうしSMTP-AUTH必須なのかもしれないし、
OP25B対策されててそのアプリからMTAをつつけてない可能性もありますし、
もしくはあなたが構築したかもしれないMTAが機能してないって可能性もあるし、
原因は山ほど想定されるのでよくわからんという事だと思われます。
03943922011/06/26(日) 23:03:22.10
>>376
続きです。
コンストラクタを以下のようにして
$smtp = Net::SMTP->new($mailhost, Debug => 1);
送信してみるのが最初じゃないでしょうか。
SMTPの応答とmtaのログ見て、原因を切り分けたらまたここに質問すればいいですし。
もしかしたらperlの質問ではなくなるかもしれないですしね。
あとみんなが言ってるようにJcodeじゃなくEncodeつかったほうがいいですし、
Net::SMTPじゃなくEmail::Senderとか使ったほうがいいですし、
そもそもuse strict;とuse warnings;付けないのは、やめたほうがいいですよ。
0395デフォルトの名無しさん2011/06/26(日) 23:10:02.91
いや、だからまずPBS用のコードを足してみろって。第一の可能性だ。
0396デフォルトの名無しさん2011/06/27(月) 00:24:38.13
Perlの質問なんですが
Perl忍者が最近来てません どうしたんですか?
0397デフォルトの名無しさん2011/06/27(月) 01:03:38.72
dbi:ODBCでDSNなしでコネクションを作りたいのですが、
DBI->connect("dbi:ODBC:Driver=PostgreSQL ANSI", "postgres", "postgres");
とやっても動きません。
DBI connect('Driver=PostgreSQL ANSI','postgres',...) failed: [unixODBC][Driver Manager]Data source name not found, and no default driver specified (SQL-IM002)(DBD: db_login/SQLConnect err=-1) at ./test.pl line 7
同じセッションからDSNを指定してやると動きます。(PGSQLがDSN)
DBI->connect("dbi:ODBC:PGSQL", "postgres", "postgres");
odbcinst.iniにはPostgreSQL ANSIで登録されているのですが、あとなにか設定が必要なのでしょうか?
0398デフォルトの名無しさん2011/06/27(月) 07:33:43.98
>>396
就職できたんだろ
0399デフォルトの名無しさん2011/06/27(月) 22:37:14.52
うむ
0400 忍法帖【Lv=9,xxxP】 2011/06/28(火) 00:55:36.97
Win7 x64/5.12.4使っています。

glob が 3TB HDDでフリーズする… orz
同じスクリプトで 2TB HDD では動くんだけどなぁ。

@filelist = <*.*> もフリーズするし、んがー… 寝ろ… オヤシミ

あ、フリーズと言っても CTRL+C でコマンドラインに戻れます。
0401デフォルトの名無しさん2011/06/28(火) 02:12:58.04
CTRL+Cで戻れるなら、それはフリーズとは言わない。
0402デフォルトの名無しさん2011/06/28(火) 11:49:02.23
さくら鯖ってEmail::Sender使えねーだろ
0403デフォルトの名無しさん2011/06/28(火) 11:50:07.96
>>402 → >>394
0404デフォルトの名無しさん2011/06/28(火) 21:10:39.50
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
0405デフォルトの名無しさん2011/06/28(火) 21:11:10.60
はい
0406デフォルトの名無しさん2011/06/28(火) 23:12:29.39
まあ、本来CGIの話ではないが、少なくとも>>376がその区別がついてないのは
コードから明らかだからな。
わからないことがわからない状態で、他人に質問すべきではない。
0407デフォルトの名無しさん2011/06/28(火) 23:22:08.13
だがこうやって質問したおかげで
色んなことが分かる。

勝利したのはどっちかな?w
0408デフォルトの名無しさん2011/06/29(水) 01:41:06.76
>勝利したのはどっち

んな愚劣なことを言っている限り、一生ダメなまんま終わるよ。

ググって行き当たりばったりでコピペしてたまたま動いたらOK、動かなかったら匿名掲示板で質問、
答えらしきもものをもらえば、なにやらわかった気になる。以下繰り返し。

なんたら忍者もそうだが、耳年増にはなれても、自分のオツムの足しにはまったくなっていない。
糞の役にも立たんゴミでオツムがいっぱいの人間ができあがる。
0409デフォルトの名無しさん2011/06/29(水) 02:27:18.56
などと2ちゃんねるで説教垂れて
無駄な時間を過ごすのであったw
0410デフォルトの名無しさん2011/06/29(水) 07:08:07.96
コピペだけして分かった気になっちゃうのは中学生で卒業しとけよ
0411uy ◆hi.ht/Isu2 2011/06/29(水) 07:33:20.60
おれが荒らすまでも無く、すでに荒れてるってどういうことなの?

このスレはつまらん
0412デフォルトの名無しさん2011/06/29(水) 10:19:35.05
知らないふりして下手に出たらこの調子w
マジウケたわwどいつもこいつも、上から目線…
調べりゃ分かる事を書いてんのに、ググれの一言も無い始末。一々釣られて、勝手に厨房呼ばわりですか?
文章力はおろか、勝手に決めつけて考える力も無い様ですねwwwww
0413デフォルトの名無しさん2011/06/29(水) 10:32:07.26
>>412
何処縦?
0414デフォルトの名無しさん2011/06/29(水) 10:52:03.90
if ( /^>(.*)/ )
で指定して
>以降の文字を取得してるのですが、この>以降に/が入っているとその行を認識してくれません
対処法が分かる方いましたらお願いします
0415デフォルトの名無しさん2011/06/29(水) 10:54:13.83
自己解決
0416デフォルトの名無しさん2011/06/29(水) 11:06:59.77
自己解決してなかった。

見やすいように全角で書きます
(.*)の部分を/が入ってても無視しなくて、スペースがあってもスペースの手前までじゃなくて">"以降のその行全体を取得するにはどうしたらいいでしょうか
0417デフォルトの名無しさん2011/06/29(水) 11:23:48.96
>>414
if(/^(>[^\s]*)/)
でいいんじゃね?あと/が入ってても無視なんてされないよ。
0418デフォルトの名無しさん2011/06/29(水) 11:24:26.04
>>416
$_を使わずにちゃんと変数を使う。

>この>以降に/が入っていると・・・
んなこたぁない。問題はその他で起こっている。
0419デフォルトの名無しさん2011/06/29(水) 11:52:03.91
レスありがとうございます

>>417
それでいくと
>AAA BBB CCC
>aaa b/b ccc
のAAAとaaaの部分だけしか得られませんでした。後ろのBとCのエリアもまとめて取得したいんです

>>418
元ファイルの/を別の単語に置き換えると問題なく動くんです(´・ω・)
0420デフォルトの名無しさん2011/06/29(水) 12:03:25.00
>>419
ふ〜ん、下記してもか?

#!/usr/bin/perl -w

$_='> awsd/ zxc';
print $1 if( /^>(.*)/ );
print "\n";
exit;
0421デフォルトの名無しさん2011/06/29(水) 12:50:19.42
>>419
勘違いしてた。 [^\s] を . に変えてやって。
0422デフォルトの名無しさん2011/06/29(水) 13:21:23.29
>>414
できたよー。
foreach('>AAA BBB CCC', '>aaa b/b ccc', 'aaa b'){
if ( /^>(.*)/ ) {
print $1, "\n";
}
}
0423デフォルトの名無しさん2011/06/29(水) 14:06:44.39
>>422
だからなんだよw
とっくに解決してる。
04244222011/06/29(水) 14:24:28.10
>>423
いや、最初から問題無いよ。
0425デフォルトの名無しさん2011/06/29(水) 17:17:06.38
そう、最初から問題ない。
>>414が何をどう勘違いしていたのか微妙に興味をそそられるな。
0426天使 ◆KOAgYBL/Xg 2011/06/29(水) 17:55:45.95
だからなんで最初から荒れてんの
荒らさせろよ
0427デフォルトの名無しさん2011/06/29(水) 18:33:23.66
お客さんが全然来てくれないときがあるからそういうときに来ればいいよ。
0428デフォルトの名無しさん2011/06/30(木) 04:16:10.55
perldoc overload の文中の「Camel hair」これってどういう意味なんでしょうか?
過去に同じ疑問を持った方がいたようですが結局分からずじまい。

Perl演算子のオーバーロードと「ラクダの毛」の関係とは?
http://www.nishishi.com/blog/2006/05/perl_overload.html

さんざんググっても分からず。分かる人がいれば教えてほしいです。
0429デフォルトの名無しさん2011/06/30(木) 05:16:31.74
>>428
ラクダの毛は脱色・染色が難しいので
染めずにそのまま(の色で)使われるのが一般的らしい。
その性質と、実際にはoverloadされないPerlの代入演算子の性質とが
なんとなく関係ありそうな気がしなくもないけど…
どうなんでしょうね。

ttp://www.kilimnews.com/article/13122651.html
ttp://www.tajiri-y.co.jp/kisochisiki/tennensozai/syurui/kyameru.htm
ttp://www11.ocn.ne.jp/~pierrot/info3_bn/info3_bn38.htm
04304282011/06/30(木) 07:31:27.82
>>429 ありがとうございます。
その説明で納得できそうです。
欧米の知識人には常識とか
単に著者がラクダに馴染みの深い地域出身なのかも知れませんね。
すっかりPerlのラクダ本の方に引きずられてしまっていました•••。
それも意図した洒落た表現なのでしょう。
0431デフォルトの名無しさん2011/06/30(木) 13:08:04.20
camel toe
0432デフォルトの名無しさん2011/06/30(木) 13:24:24.69
camel clutch
0433デフォルトの名無しさん2011/06/30(木) 17:28:46.98
もしかして弾さんはアニオタなの?
0434デフォルトの名無しさん2011/06/30(木) 19:12:22.54
若者に話を合わせるために見ているだけだと思う。決して観てはいない。
0435デフォルトの名無しさん2011/06/30(木) 19:49:05.16
ヒゲサスペンダーさんの趣味はPerlとは関係ないよね。
0436デフォルトの名無しさん2011/06/30(木) 20:26:57.25
あの人の趣味はperlかと思ってた。
0437デフォルトの名無しさん2011/06/30(木) 20:48:14.01
「perlについての質問」じゃないだろ、って話でしょ。
0438デフォルトの名無しさん2011/06/30(木) 21:49:52.96
どうぞ専用板へ
http://hibari.2ch.net/test/read.cgi/prog/1258970886
0439デフォルトの名無しさん2011/07/01(金) 00:17:34.44
小飼アニオタ しね
0440デフォルトの名無しさん2011/07/01(金) 14:43:23.42
''=~('(?{'.('[[).[|`%,,/`[/[@$'^'+)@@/^(@@@@@,@),@').'!"})')

上記を実行すると
Hello world!
と表示されるのですが、
動作原理を教えてください。
0441デフォルトの名無しさん2011/07/01(金) 15:11:12.07
''=~ (
'(?{'
. ( '[[).[|`%,,/`[/[@$' ^ '+)@@/^(@@@@@,@),@' )
. '!"})'
);

'' =~ は空文字列に対する正規表現マッチ
(?{ ... }) はマッチしたときに ... をevalする拡張正規表現
'[[).[|`%,,/`[/[@$' ^ '+)@@/^(@@@@@,@),@' は2つの文字列の排他的論理和で、演算すると「print"Hello world」
全部合わせると '' =~ /(?{print"Hello world!"})/ とやってるのと同じこと
0442デフォルトの名無しさん2011/07/01(金) 15:57:34.13
>>441
ありがとー
理解できました
0443デフォルトの名無しさん2011/07/01(金) 23:33:44.10
改行はwindowsでは\r\n,UNIXでは\nらしいですが

FORMのenctypeがmultipart/form-dataで送信した場合
送信したデータをFORMデータ部分と画像データ部分などに
splitなどで分割していく場合もwinは\r\n区切り、UNIXは\n区切りなんでしょうか?
0444デフォルトの名無しさん2011/07/01(金) 23:37:24.30
WEB プログラミング板に行ってください。
0445デフォルトの名無しさん2011/07/02(土) 01:09:00.16
s/\r|\n|\r\n/\n/g;
0446デフォルトの名無しさん2011/07/02(土) 01:24:37.09
chompしてs/\r//gすればいいんじゃない?そういう問題じゃないの?
0447名無しさん@お腹いっぱい。2011/07/02(土) 09:37:45.05
s/\R//g;

、な。
0448デフォルトの名無しさん2011/07/04(月) 01:08:20.82
s/\r\n/\n/gだとアップロードしたファイルの中身の\n\nも\nになっちゃうんじゃないの?
0449デフォルトの名無しさん2011/07/04(月) 03:13:02.52
WebProgネタだから向こうで待ってたんだけどお客さん来ないな。
分解前のmultipartをまるごと書き換えにかかる回答はネタだと思いたい。
0450デフォルトの名無しさん2011/07/04(月) 03:21:59.68
きっと本気だよ。

そして\rや\nが途中に含まれている
バイナリデータを壊すんだw

ばかだよなwww
0451大天使 ◆uL5esZLBSE 2011/07/04(月) 12:01:33.62
>ばかだよなwww
ゴミがなにいってんだか
0452デフォルトの名無しさん2011/07/04(月) 12:14:43.63
分解前のmultipartはform入力部分のデータとアップロードファイルの中身の区切りはOSに関係なく\r\nなのでしょうか?
0453デフォルトの名無しさん2011/07/04(月) 12:33:45.71
はいそうです
OSには関係ありません
0454デフォルトの名無しさん2011/07/04(月) 12:35:28.69
>>452
そう。じゃないと異なるOS間でやりとりできなくなっちゃうだろ。
詳しくはRFC2046あたり読め。
0455デフォルトの名無しさん2011/07/04(月) 12:39:29.42
初歩的な質問かもしれませんが、配列の後ろからn番目の要素までを取り出すにはどうしたらいいんでしょうか?
0456デフォルトの名無しさん2011/07/04(月) 12:42:30.42
spliceで調べろ
もしくはpush pop shift unshift を調べろ
0457デフォルトの名無しさん2011/07/04(月) 12:55:55.21
>>455
http://perldoc.jp/docs/perl/5.10.0/perldata.pod#Subscripts
http://perldoc.jp/index/function の「実配列のための関数」
http://perldoc.perl.org/perlfaq4.html#Data:-Arrays
0458デフォルトの名無しさん2011/07/04(月) 12:58:26.51
>>452
\r\n でなく \x0D\x0A で、入力をバイナリとして正しく扱っていれば YES
0459デフォルトの名無しさん2011/07/04(月) 16:21:07.36
アスキーで入力されたものは環境に合わせて改行コードは変更される
:rawで読み込めばいいんだけど:rawで開いたファイルに対して$line=<INPUT>で1行をちゃんと取れるかは不明
大丈夫だとは思うけどね。。。
0460デフォルトの名無しさん2011/07/04(月) 22:32:48.11
>>454
でもさ、Perl+メールで有名な
MIME::Toolsってメールをパースすると
\n に統一されるんだよな。
RFC違反。
0461デフォルトの名無しさん2011/07/04(月) 23:20:40.70
>>460
送信するときには\r\nになるから安心しろ
0462デフォルトの名無しさん2011/07/04(月) 23:56:25.12
>>461
ならねーよw

つーかMIME::Toolsには
送信機能はありません。
0463デフォルトの名無しさん2011/07/05(火) 00:17:05.50
MIME::Tools に送信機能が無いなら、送信時に改行コードの変更が行われない。
というお前のコメントも矛盾だぜ?うんこ野郎w o(^-^)o
0464デフォルトの名無しさん2011/07/05(火) 00:57:38.53
>>463
あまり弱いモノいじめするな。かわいそうだろ
0465デフォルトの名無しさん2011/07/05(火) 02:40:19.55
だからMIME::Toolsの話をしている。
MIME::Toolsは\nに変換する。

ここんところは間違ってないだろ。
0466デフォルトの名無しさん2011/07/05(火) 02:42:32.73
じゃあ>>462は間違いというのもおkね
0467デフォルトの名無しさん2011/07/05(火) 02:49:43.59
>>466
意味がわかららん。

あるライブラリにバグがあって、
それをライブラリ外で修正したからって
ライブラリにバグがあることに変わりはないだろ。
0468デフォルトの名無しさん2011/07/05(火) 03:54:37.30
MIME::Tools にメール送信機能が無いってことを知ってるキミは、
メール送信時は別のモジュールを使うって事を知りえてるわけだ。


なのに 「送信するときには\r\nになるから安心しろ」 を否定してる時点でおかしいというワケ


これでキミが矛盾を察しない時点で小学生から国語を勉強しなおせ。
0469デフォルトの名無しさん2011/07/05(火) 10:11:09.87
なんか会社にもいるよね、こういうの
「おれは間違ってない!」って言い張ってて
矛盾を指摘しても認めない人。
0470デフォルトの名無しさん2011/07/05(火) 10:29:15.49
そういう依怙地な人は真っ先に首切り対象になるな
つーか自分で言ってることの意味に気付いてないモン、
頭がおかしい
0471デフォルトの名無しさん2011/07/05(火) 10:37:56.72
引っ込みがつかないんだよ
>>463の時点でひどすぎる
0472デフォルトの名無しさん2011/07/05(火) 10:41:58.83
ひっこみがつかないからウンコなんだよ
0473デフォルトの名無しさん2011/07/05(火) 10:52:22.96
だれうま
0474デフォルトの名無しさん2011/07/05(火) 11:29:54.68
>>462って今頃顔真っ赤にしてんだろ。
0475デフォルトの名無しさん2011/07/05(火) 11:41:07.43
speedycgiを使用してみたいと考えています。
これはメモリに常駐させるようなのですが、終了(メモリから消去)させる場合は
どうすればよいのでしょうか?
時間がたてば勝手に終了するのでしょうか?

あと、cgiを更新した場合、speedycgiが自動で判別して、常駐を再起動するのでしょうか?
0476デフォルトの名無しさん2011/07/05(火) 11:42:39.66
>>475
ならねーよw

つーかspeedycgiには
常駐機能はありません。
0477デフォルトの名無しさん2011/07/05(火) 11:56:50.24
perldoc CGI::SpeedyCGI
0478デフォルトの名無しさん2011/07/05(火) 12:10:12.60
>>476
相変わらずお前ってバカだね
0479天使 ◆uL5esZLBSE 2011/07/05(火) 14:39:53.18
そんなんだからゴミなんだろ

はいゴミ死ね
0480デフォルトの名無しさん2011/07/05(火) 19:04:58.80
my $temp = {};

こうやって宣言したとき、
$temp->{'abc'} = '';
$temp->{'bcd'} = '';
 |
$temp->{'ijk'} = '';
のような初期化を1行で済ませたいのですが、やり方を教えてください。

my $temp = {};
$temp = map { {$_ => ''} } qw/abc bcd cde def efg fgh ghi hij ijk/;

とやったら

Can't use string ("9") as a HASH ref while "strict refs" in use at test.pl line xxx.

とでました。

$temp->{qw/abc bcd cde def efg fgh ghi hij ijk/} = ''x9;

これだとエラーは出ませんが、初期化できませんでした。
0481デフォルトの名無しさん2011/07/05(火) 19:40:12.97
>>480
my $chr = 'a';
my %temp;

for(my $i=0;$i<=8;$i++){
my $chr2 = $chr;
$chr++;
my $str = ($chr2++).($chr2++).($chr2);
$temp{$str} = '';
}
0482デフォルトの名無しさん2011/07/05(火) 19:41:38.27
Perl使いは既に知ってそうだけどこんなの見っけたので
http://oreilly.com/catalog/9780596004927/

Programming Perl: Unmatched power for text processing and scripting
By Tom Christiansen, Larry Wall, Jon Orwant
Publisher: O'Reilly Media
Released: October 2011 (est.)
Pages: 1000 (est.)
0483デフォルトの名無しさん2011/07/05(火) 19:41:55.19
>>480

%$temp = map { $_ => '' } qw/abc bcd cde def efg fgh ghi hij ijk/;

か

@$temp{qw/abc bcd cde def efg fgh ghi hij ijk/} = ('') x 9;

だな。
04844812011/07/05(火) 19:43:06.24
一行かw
0485デフォルトの名無しさん2011/07/05(火) 19:43:25.52
上のmapの方がperlくさいな。
9とか入ってないし。
0486デフォルトの名無しさん2011/07/05(火) 19:56:24.07
>>483
あ〜なるほど
代入される側に % が必要なわけか

>>485
自分も上の方がしっくりくるって思った



ありがとうございました m(_ _)m
0487デフォルトの名無しさん2011/07/05(火) 20:01:35.97
>>483
好みの問題ではあるけど、前者は $temp をデリファレンスするより代入値を無名ハッシュリファレンス化するほうが一般的では。my 宣言も同時にできるし。
my $temp = { map { $_ => '' } qw/abc bcd cde def efg fgh ghi hij ijk/ };

後者なら要素数はベタ書きじゃなくてキーを配列に入れといてそれ使うのがいいね。
my $temp;
my @keys = qw/abc bcd cde def efg fgh ghi hij ijk/;
@{$temp}{@keys} = ('') x @keys;
04884832011/07/05(火) 20:21:10.53
ああ、確かに >>487 の前者が一番しっくり来るな。何やってるか見てすぐわかるし。
0489デフォルトの名無しさん2011/07/05(火) 20:25:37.06
ディレクトリの容量を取得するにはどうすればいいんでしょうか?

$dir_size = -s $dir;で$dirにディレクトリを指定してもディレクトリの容量が取得できません
ファイルの容量なら取得できました。(windows環境です)

ディレクトリの中のファイル一覧やサブディレクトリ一覧を取得して
それぞれの容量を出して合計するしか方法はないんでしょうか?
0490デフォルトの名無しさん2011/07/05(火) 20:39:49.57
後者の方法でどうぞ」
0491デフォルトの名無しさん2011/07/05(火) 20:44:04.39
それしかないね。ディレクトリの容量なんてファイルシステムに情報として持ってないもの。
Windowsでもファイルたくさん入ったディレクトリのプロパティとか開くとその場で計算するから容量の数字がだんだん増えてくでしょ。

とはいえ、そういう面倒な部分を引き受けてくれるモジュールはあると思うよ。
Filesys::DiskUsage とか中身は見てないけどそれっぽい。
0492デフォルトの名無しさん2011/07/05(火) 21:03:08.20
perl -MFile::Find -le 'find sub { -f and $s += -s }; print $s'
0493デフォルトの名無しさん2011/07/05(火) 21:07:08.16
misu

perl -MFile::Find -le 'find sub { -f and $s += -s }, qw(.); print $s'
0494デフォルトの名無しさん2011/07/05(火) 21:13:21.47
すいません。MIME::Toolsでメールをパースしたら
\nに変換されてしまいます。バグですか?

MIME::Toolsにはバグと書いてあるようですが・・・
0495デフォルトの名無しさん2011/07/05(火) 21:23:31.28
仕様
0496デフォルトの名無しさん2011/07/05(火) 21:25:12.32
バグだろ。英語ぐらい読め。
0497デフォルトの名無しさん2011/07/05(火) 21:35:57.55
perldoc -T MIME::Tools | perl -le 'print if /bug/'

0498デフォルトの名無しさん2011/07/05(火) 22:09:20.63
さすがにそこはgrepちゃん使ってあげたら
0499デフォルトの名無しさん2011/07/05(火) 22:18:56.08
TODO FIXME って書いてあるな。
0500デフォルトの名無しさん2011/07/05(火) 23:43:56.10
TODO FIXME All encoders currently output the end‐of‐line sequence as a
"\n", with the assumption that the local mail agent will perform the
conversion from newline to CRLF when sending the mail. However, there
probably should be an option to output CRLF as per RFC 2045


内容は、
「今は、全てのエンコーダで"\n" 出力にしてますよーー。
だって、(あんたの使う)local mail agent がCRLFに変換持ってるっしょ?
しかしまあ、たぶんCRLF出力オプションを付けるべきなんだろーね。」

0501デフォルトの名無しさん2011/07/06(水) 00:01:39.71
RFC 2045 が抜けてる
0502デフォルトの名無しさん2011/07/06(水) 00:04:04.27
いや、こんな適当な訳に突っ込み入れられても(汗
真面目に訳そうかとも思ったけど、そのレベルの文章か?コレ
0503デフォルトの名無しさん2011/07/06(水) 08:08:28.53
>>493
それだとリンクを考慮してないからだぶって数えちゃうよ。

% ls -li
total 208
3665130 -rw-r--r-- 2 nobody nogroup 100000 Jul 6 07:50 x
3665131 lrwxrwxrwx 1 nobody nogroup 1 Jul 6 07:50 y -> x
3665130 -rw-r--r-- 2 nobody nogroup 100000 Jul 6 07:50 z
% perl -MFile::Find -le 'find sub { -f and $s += -s }, qw(.); print $s'
300000
% du
108 .

0504デフォルトの名無しさん2011/07/06(水) 10:12:57.71
結局バグではないことが証明されてしまった
0505デフォルトの名無しさん2011/07/06(水) 13:50:44.02
perl素人なのですが、質問よろしいでしょうか。

perl上でURLにアクセスし、送られてくるcookieを保存して
そのcookieからある一つのcookieのみを返す。
というような動作は再現可能なのでしょうか。
0506デフォルトの名無しさん2011/07/06(水) 14:17:02.34
>>505
可。
可どころか優w
0507デフォルトの名無しさん2011/07/06(水) 15:41:03.88
>>506
返信ありがとうございます。
何か参考にできるサイトがあったら教えてください。
もしよろしければ、簡単に説明してもらえませんか?
0508デフォルトの名無しさん2011/07/06(水) 16:20:14.95
>>507
>>1 に良い事書いてあるぞ。
それ、webプログラムや。
0509デフォルトの名無しさん2011/07/06(水) 16:56:04.34
>>508
ふむ。そうなのですか。
区別ができないほど素人なもので・・・スレ汚しすみませんでした。
0510デフォルトの名無しさん2011/07/06(水) 17:02:40.34
たぶんクライアントサイドだと思うよ。
cookie_jar から /HAP=FOXdayo[0-9a-f]+/ という文字列を集められたら
いいのかなという気がした。なんとなく。
0511デフォルトの名無しさん2011/07/06(水) 22:34:51.70
@aiueo = ();
$i = 0;
$ii = 1;
while($i < 2){
while($ii < 3){
push(@aiueo, "$ii$i");
$ii++;
}
$i++;
}
print @aiueo;

これを実行しても@aiueoに1020しか入りません、
本当は1020のあとに1121が入るはずだと思うのですが、うまくいきません
簡単な質問ですみません。どなたか教えてください。
0512デフォルトの名無しさん2011/07/06(水) 22:48:14.26
すみません自己解決しました…無視してください
0513デフォルトの名無しさん2011/07/06(水) 22:49:41.86
..使えよ

for my $i (0 .. 1) {
for my $ii (1 .. 2) {
push @aiueo, $ii.$i;
}
}
print @aiueo
0514デフォルトの名無しさん2011/07/06(水) 22:52:21.26
だって $ii が 3 になってるから。。。

my @aiueo = ();
for(my $i = 0; $i < 2; $i++){
  for(my $j = 1; $j < 3; $j++){
    push(@aiueo, "$j$i");
  }
}
print @aiueo, "\n";


どうしても while を使いたいなら
  $i++;
のあとに
  $ii = 1;
と。
0515デフォルトの名無しさん2011/07/07(木) 18:35:39.56
$N=$ARGV[0];
$i=2;
while($N>=$i){
if($N % $i ==0){say"$N $i"; $N/=$i}
else{$i++}
}
これより早い素因数分解のプログラムってありますか?
0516デフォルトの名無しさん2011/07/07(木) 18:46:57.02
else{$i++}
↓これに訂正します
else{$i!=2 ? $i+=2 : $i++}

ある奇数で割り切れるのかどうか実際に割り算をする以外に調べる方法はないでしょうか?
0517デフォルトの名無しさん2011/07/07(木) 19:15:40.91
use bigint;
$N=$ARGV[0];
$i=2;
while ($N >= $i**2) {
unless ($N % $i){ $N/=$i; print"$i " }
else { $i!=2 ? $i+=2 : $i++ }
}
print $N;

これで最後の無駄な割り算をカットできました
これ以上はもう無理です誰か助けてください
0518デフォルトの名無しさん2011/07/07(木) 19:53:00.70
while ($N >= $i**2) {
でイチイチ二乗しているような気がする
0519デフォルトの名無しさん2011/07/07(木) 20:02:32.02
my $tgt = 60 ;
while( (1 x $tgt)=~/^(11+?)\1+$/ or ( print $tgt . "\n" and 0 ) ){
 $tgt /= my $l = length $1 ;
 print $l . "\n" ;
}
0520デフォルトの名無しさん2011/07/07(木) 20:10:13.51
print `factor $ARGV[0]`;
0521デフォルトの名無しさん2011/07/08(金) 11:24:57.71
WindowsXP ActivePerl 5.12.4です。

Cwd::getcwd();
でカレントディレクトリを得た場合、帰ってくる文字コードはcp932ではないのでしょうか?
たとえば、カレントディレクトリがC:\成績表やC:\ソナタ
の場合
use Cwd;
print getcwd();
すると
C:/成績・ やC:/・ナタ
となってしまい、うまく得られません。どうしたらちゃんと得られるんでしょうか?
0522デフォルトの名無しさん2011/07/08(金) 11:52:25.76
>>519
アルゴリズムの意味がよく分かりません
なぜ^(11+?)\1+$これで素因数を求められるんでしょう・・・
>>520
factor速すぎます。ソース見てよく勉強しないといけないみたいですね
0523デフォルトの名無しさん2011/07/08(金) 12:14:22.18
正規表現の意味、分かりました
素因数の数が3個の場合 ^((11+?)\1+)\2+$
素因数の数が4個の場合 ^(((11+?)\1+)\2+)\3+$
こういう書き方は出来ないんでしょうかね
0524デフォルトの名無しさん2011/07/08(金) 12:35:33.02
>>521
Cwdのバグが原因。2 バイト目が「\」になるWin使うときは要注意

このへんを参考に自分で直せ
http://miau.s9.xrea.com/blog/index.php?itemid=471
0525デフォルトの名無しさん2011/07/08(金) 17:43:53.38
ひさーしぶり(7年ぶりくらい)にperlに帰ってきたんだが、
いまperl書くとき使うIDEとしては、
Padre と Eclipse + EPIC のどっちがお勧めかな?

それともこれ以外の何か?
0526デフォルトの名無しさん2011/07/08(金) 19:00:26.47
>>525
秀丸おすすめ
0527デフォルトの名無しさん2011/07/08(金) 19:42:16.55
>>526
やっぱ、秀丸?
7年前も秀丸だったんだが、
最近は Java 書くときに Eclipse さんにおんぶに抱っこだったので、
perlも進化したかなーとおもってさ

情報thx
0528デフォルトの名無しさん2011/07/08(金) 19:53:08.88
秀丸も単語補完機能とかプロジェクト管理機能とかついたからな
7年前に比べたらすごい違う
なんか、ガンプラの進化を見ているみたいに違う
0529デフォルトの名無しさん2011/07/08(金) 20:25:05.97
>>523
perl10以降(?)だと、出来なくもない。
my $tgt = 60 ;
while( ( 1 x $tgt ) =~ /^(?<i>(?<h>11+?)\k<h>+?)\k<i>+?$/ ){
 print +( length $+{h} ) . "\n" ;
 print +( (length $+{i} ) / ( length $+{h} ) ) . "\n" ;
 last ;
}

くわしくは perldoc perlre して。
0530デフォルトの名無しさん2011/07/08(金) 20:53:03.88
5.10な
0531デフォルトの名無しさん2011/07/08(金) 20:54:17.29
おそろしいな
言われるまでそのままperl5.10だと思い込んでた。
いやあ人間の脳ってすばらしい
存在しない情報を勝手に補完して読みやすくしてくれる
脳みそさまさまだ
0532デフォルトの名無しさん2011/07/08(金) 21:08:05.34
ぎゃーー、5.10のつもりで書き込んでた、
>>530
指摘thx.
0533デフォルトの名無しさん2011/07/09(土) 14:02:30.38
正規表現を外部のファイルから読み込ませることはできないでしょうか?

例えば次のスクリプトに対して、「/^hoge/」をスクリプトの中に直接書くのではなく
あらかじめ正規表現を記載したテキストファイルを別途用意しておいてそこから
読み込ませるようにはできないでしょうか?
どうぞよろしくお願いします。

☆こんなスクリプトがあるとして
my $str = 'hogehoge';
if ($str =~ /^hoge/) {
print "Match\n";
} else (
print "No match\n";
}

☆正規表現を書いたリストファイルを用意してそちらから読ませたい
# cat pattern.txt
^hoge

0534デフォルトの名無しさん2011/07/09(土) 16:11:05.91
>>533
できるか否かで答えれば、できる。
それ以上は何が分からないのか分からないから
>>2 の最初のサイトを一通り読めとしか言いようがない。
0535デフォルトの名無しさん2011/07/09(土) 18:38:38.25
open H,"pattern.txt";
$regexp=<H>;
close H;
chomp $regexp;
これでいいんでしょ?
0536デフォルトの名無しさん2011/07/09(土) 20:04:14.16
なぜスカラなのか
0537デフォルトの名無しさん2011/07/09(土) 20:23:47.15
ルカニルカニ
0538デフォルトの名無しさん2011/07/09(土) 20:38:27.57
マゾピックつかえ
0539デフォルトの名無しさん2011/07/09(土) 21:20:18.92
if(open(my $fh, '<', 'test.txt')){
 〜
}


って書いた時、ブロックから出たら $fh は勝手に閉じられるんでしょうか?
0540デフォルトの名無しさん2011/07/09(土) 22:08:18.64
はい
0541デフォルトの名無しさん2011/07/09(土) 22:10:38.20
でもふつうは
open my $fh, '<', 'test.txt' or die $!;
とか書くからそもそもそういうifの使い方はしないな
0542デフォルトの名無しさん2011/07/09(土) 22:23:26.48
常道とはまた違うひとつの道として、興味深い書き方ではあるね
0543デフォルトの名無しさん2011/07/09(土) 22:44:02.53
開こうとしたファイルが開けなかったとき、
そのエラーがスクリプトから見たらクリティカルじゃない場合、
die で止めちゃうのはどうなんだろう?


って考えがあるのですが、、、
0544デフォルトの名無しさん2011/07/09(土) 22:58:08.40
向こうの板の範疇だと die しないほうが一般的だろうし
どうトラップするかどう止めるかみたいなのは状況次第だと思う。
0545デフォルトの名無しさん2011/07/10(日) 01:49:32.70
dieしないほうが一般的!?
0546デフォルトの名無しさん2011/07/10(日) 02:01:12.61
デフォルトの503よりもエラーメッセージを出した方が親切だと思うが
dieしてもエラーログが見れなければだし
0547デフォルトの名無しさん2011/07/10(日) 02:12:33.46
dieは終了じゃないよ。
親関数でトラップできる。

try 〜 catchと同じで、親関数にエラーを返すだけ。
親でトラップしていなければ、その親。
その親でもトラップしていなければ、その親。
どの親でもトラップしていないときは異常終了する。

だれもトラップしてないときに終了するだけであって、
本質的には親関数にエラーを返すもの。
0548デフォルトの名無しさん2011/07/10(日) 07:39:47.59
一見まともそうに大嘘書くなよ。
die は eval 中で挙動が変化するだけだぞ。
$SIG{__DIE__} でシグナルを掴まえて死ぬ前に特定挙動を
させる事が出来るが、基本的には eval 以外でトラップ
する事は出来んだろ。

eval { die "TRY:$!" };
if ( $@ ){ print "CATCH:$@" ;}

そもそも親関数って何だ?
05495332011/07/10(日) 09:32:04.17
お返事遅れました

>>534 さん、>>535 さん、回答ありがとうございます。
参考になりました。変数の中に前もって正規表現のパターンを入れておけばいいのか。

534さん、書き方が曖昧だったようですね。文章ヘタですみません。今後気をつけます。
0550デフォルトの名無しさん2011/07/10(日) 11:28:55.11
>>548
だからevalでトラップするんだよ。

perl例外処理の基本だろ。
0551デフォルトの名無しさん2011/07/10(日) 14:14:43.68
evalってそんなほいほいつかっていいものなの?
0552デフォルトの名無しさん2011/07/10(日) 14:19:07.52
使っていけない理由がない。
0553デフォルトの名無しさん2011/07/10(日) 14:50:46.72
ブロックならほいほい使って良い
0554sugyan2011/07/10(日) 15:01:50.45
俺のことむかつく人いますか?
0555デフォルトの名無しさん2011/07/10(日) 15:05:22.25
>>554
うぜえ。
0556デフォルトの名無しさん2011/07/10(日) 16:39:32.35
>>554
死ね
0557デフォルトの名無しさん2011/07/10(日) 17:25:03.23
文字列(特に外部要素によって改変される可能性のある文字列)は危ないけどな
ちゃんと用法容量を守ってお使いくださいってことだ
0558デフォルトの名無しさん2011/07/10(日) 18:22:02.20
ディレクトリの中のファイル一覧配列とディレクトリ一覧配列を戻り値としてreturnで返したいんですが
returnでは1つの配列しか返せないんでしょうか?
2つの配列を戻り値として返す場合はどうすればいいんでしょうか?
0559デフォルトの名無しさん2011/07/10(日) 18:54:21.37
配列へのリファレンス
0560デフォルトの名無しさん2011/07/10(日) 19:01:23.05
配列のリファレンスの配列じゃいかんの?
0561デフォルトの名無しさん2011/07/10(日) 19:02:51.40
>>558
http://perldoc.jp/docs/perl/5.10.0/perlsub.pod#Pass32by32Reference
0562デフォルトの名無しさん2011/07/10(日) 20:38:29.61
英語読めない癖に「英語読め」って宣言したり、
perldoc誤読して自慢気に書き込んで指摘されたり、、、
忍者が名無しで書き込んでんのか?
0563デフォルトの名無しさん2011/07/11(月) 02:03:23.21
>>557
なぜエラートラップするだけのevalに
文字列を入れないといけないのか?
0564デフォルトの名無しさん2011/07/11(月) 06:25:15.28
>>563
いや、だから、文字列じゃないから大丈夫だろ、って言いたかったんだが…
0565デフォルトの名無しさん2011/07/11(月) 08:52:11.51
複数の戻り値だけど下のようにやってもなにも表示されませんでしたがどこに問題がありますか?

(@www1,@www2)=&func;

print "@www1,www2";

sub func{
local(@aaa)=("aaa1","aaa2","aaa3");
local(@bbb)=("bbb1","bbb2","bbbs");

return(@aaa,@bbb);
}
0566デフォルトの名無しさん2011/07/11(月) 09:21:30.16
忍者さん、名無しで質問やめてください
0567デフォルトの名無しさん2011/07/11(月) 10:09:34.13
>>566
荒らしの話はするな
0568デフォルトの名無しさん2011/07/11(月) 11:33:10.89
local される前の @aaa と @bbb はどこに居るんだい?
local は関数内でglobalを一時対比するだけのもの。
0569デフォルトの名無しさん2011/07/11(月) 12:42:16.01
>>565
表示される。
おわり。
0570デフォルトの名無しさん2011/07/11(月) 12:49:37.90
>>565
558と同じ質問じゃねーか。リファレンス使えって答は出てるだろ。

何も出力されないというのはおかしいけどな。改行問題?
0571デフォルトの名無しさん2011/07/11(月) 13:14:53.08
>>565
ActivePerl 5.8.9だけど表示された
0572デフォルトの名無しさん2011/07/11(月) 14:06:22.64
表示されたとか書くやつら、use strict と use warnings はちゃんと書いとけよ。
0573デフォルトの名無しさん2011/07/11(月) 14:10:36.68
use strict;
use warnings;

our @aaa;
our @bbb;
my (@www1, @www2)=&func;
print "@www1,www2";

sub func{
  local @aaa = ("aaa1","aaa2","aaa3");
  local @bbb = ("bbb1","bbb2","bbbs");

  return(@aaa,@bbb);
}
0574デフォルトの名無しさん2011/07/11(月) 14:16:56.57
糞コテ哀れ(プ
0575デフォルトの名無しさん2011/07/11(月) 18:13:04.16
@www1に全部配列の要素が入って
@www2は空でした
0576デフォルトの名無しさん2011/07/11(月) 19:25:34.21
www
0577デフォルトの名無しさん2011/07/11(月) 19:37:13.18
http://perldoc.jp/docs/perl/5.10.0/perldata.pod
> リストの中にリストがある場合には、自動的に展開されてしまいます。
> これは、外側のリストが評価されると、リストの個々の要素がリストコンテキストで
> 評価され、その結果のリスト値の個々の値が、元のリストの要素であるかのように
> 展開されるのです。

return(@aaa,@bbb);

http://perldoc.jp/docs/perl/5.10.0/perlsub.pod#Pass32by32Reference
> もし、配列やハッシュを二つ以上関数に渡したいとか関数から返したいと
> 考えていて、同時にそれらを完全な状態で扱いたいというのであれば、
> 明示的に参照渡しを使う必要があるでしょう。

> (@a, @b) = func(@c, @d);
> or
> (%a, %b) = func(%c, %d);
> これらの構文は単純にうまくいきません。 戻り値は @aや %aだけにセットされて、
> @b や %b はクリアされます。

my (@www1, @www2)=&func;
0578P erl忍者2011/07/11(月) 20:48:59.14
ハッシュのスライスって配列の入れ替えと同じですか
教えてください
0579デフォルトの名無しさん2011/07/11(月) 21:51:46.19
ハッシュドポテトと
スライスチーズですか?
美味しそうですね。
0580デフォルトの名無しさん2011/07/11(月) 23:35:51.96
わろおおおおwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0581デフォルトの名無しさん2011/07/12(火) 03:28:49.86
現代的なPerlでは、サブルーチンの呼び出しに&はつけず()にするというのはわりと普及してる事項なんでしょうか?
0582デフォルトの名無しさん2011/07/12(火) 04:11:54.60
YES
0583デフォルトの名無しさん2011/07/12(火) 04:57:13.57
ありがとうございます。これから気をつけます。
0584デフォルトの名無しさん2011/07/12(火) 13:13:44.25
5.14 のバグっぽいの見つけたんだけど日本語で報告できるところってある?
0585デフォルトの名無しさん2011/07/12(火) 15:19:18.16
例の弾さんにけしかけてみる
0586デフォルトの名無しさん2011/07/12(火) 15:24:21.83
こがいたまさん。
0587デフォルトの名無しさん2011/07/12(火) 15:32:38.33
まあ普通に言ってもとりあわなさそうだから
「これってトリビアになりませんかね?」
みたいにネタっぽく言ったほうがいいだろうな
0588デフォルトの名無しさん2011/07/12(火) 15:51:57.18
「相談」ならあのおっさんにしようがここでしようが構わんけど、
バグの「報告」なら実際に開発してる人たちにする他ないでしょ。当然、英語で。
もちろん報告するなら、本当にバグなのかどうか、報告済のバグでないか、最新開発版などでは直ってないか、などを十分に確かめてからだけど。
http://perldoc.perl.org/perlbug.html
0589デフォルトの名無しさん2011/07/12(火) 17:26:28.59
>>584
TOEIC600程度の英語でよければ俺が翻訳するから、ここに書いてみて
0590デフォルトの名無しさん2011/07/12(火) 22:19:07.13
レスありがとう。
一応、内容を書いておきます。
下記を実行すると 「Variable "$_" is not available」の警告が出るのはおかしくないか、ということです。
perldiag を見ても、この挙動が正しいのかバグなのか良くわからないのですが、どうでしょうか?
5.12 では発生しませんでした。
実行環境は Win Vista x64 ActivePerl 5.14.1.1401 x64 です。

use 5.14.0;
use warnings;

sub main { # main() の中でないと発生しない。
given(1){ # given の中でないと発生しない。
default {
func(sub{ my $s='hoge';$s =~ m/./; say $s });
# m// がないと発生しない。その他、s/// や say; でも発生する。
# my $_; するとでなくなる。
# func(sub{ my $_; my $s='hoge';$s =~ m/./; say $s });
}
}
}

sub func {
shift->();
}

main();

>588
英語か…。やはりそうなるのかな。
報告済みのバグというのは rt.cpan.org を調べればよいのでしょうか?
>589
ありがとう。報告するかどうかわからないのですが、それでもよければお願いします。
0591名無しさん@お腹いっぱい。2011/07/12(火) 22:26:16.41
とりあえず日本語で報告しておけば、メンテナの人で
日本語が分かる人が読んでくれるから大丈夫。
英語うんぬんを気にする必要は全くない。
0592デフォルトの名無しさん2011/07/12(火) 22:29:35.56
言わなければ伝わらない
0593デフォルトの名無しさん2011/07/13(水) 07:30:51.21
>>590
とりあえず訳しました。
間違いがあればよろしくです。>皆さん

I wonder if it is not valid to give the warning of 'Variable "$_" is not available' when running the following code.

I can't figure out whether it's a proper warning or just a bug even after reading the perldiag.
Let me know the reason if it is proper.

It doesn't take place on Perl 5.12.
My platform is Win Vista x64 ActivePerl 5.14.1.1401 x64.

use 5.14.0;
use warnings;

sub main { # take place just in main()
given(1){ # take place just in "given"
default {
func(sub{ my $s='hoge';$s =~ m/./; say $s });
# doesn't take place without "m//". Also does with "s///" and "say"
# my $_; doesn't with this declaration
# func(sub{ my $_; my $s='hoge';$s =~ m/./; say $s });
}
}
}

sub func {
shift->();
}

main();
0594デフォルトの名無しさん2011/07/13(水) 09:34:24.89
その位で通じると思うよ。再現用コードとおかしいと思う現象がきっちり
書いてあるんだからそれで十分。
0595デフォルトの名無しさん2011/07/13(水) 13:34:43.20
>>593
翻訳ありがとうございます。
RTを調べてみて同様のものがなかったので先ほど送りました。

報告の仕方を調べているうちに下記のようなスライドを見つけました。
http://www.slideshare.net/charsbar/practical-bug-reporting
次からは自分で送るようにしようと思います。
レスを頂いた方々、ありがとうございました。
0596デフォルトの名無しさん2011/07/13(水) 17:10:30.34
配列の配列を初期化するにはどうしたらよいでしょうか
0597デフォルトの名無しさん2011/07/13(水) 17:18:49.45
>>596
@AoA = (); がしたいのか @{$_} = () for @AoA; がしたいのか
0598デフォルトの名無しさん2011/07/13(水) 17:38:01.19
正規表現のオプションを変数にしたいときはどうしたらいいの?

$a = 'ig' ;
s/unko/chinko/$a ;

ってやると2行目がエラーになんだけど
0599デフォルトの名無しさん2011/07/13(水) 17:59:50.88
eval "s/unko/chinko/$a";
0600デフォルトの名無しさん2011/07/13(水) 18:01:33.14
my $mod = 'ig';
my $global = $mod =~ tr/g//d;
my $pattern = qr/(?$mod)buffalo/;
my $replacement = 'ba-ro-';

$_ = 'Buffalo buffalo Buffalo buffalo';
if ($global) { s/$pattern/$replacement/g; }
else { s/$pattern/$replacement/; }
print;
0601デフォルトの名無しさん2011/07/13(水) 18:08:38.80
$_ ってなんて呼ぶの?
06025982011/07/13(水) 18:18:17.14
>>599
ありがとう!動きましたですよ!すばらしいねeval
0603デフォルトの名無しさん2011/07/13(水) 20:30:01.69
>>610
んだら、あんだ?婆
0604デフォルトの名無しさん2011/07/13(水) 21:14:39.36
610に期待
0605デフォルトの名無しさん2011/07/13(水) 21:19:53.34
>>601
多分、デフォルト変数(default variable)
0606デフォルトの名無しさん2011/07/13(水) 22:03:06.97
公式でdefault variableだ問題ない
http://perldoc.perl.org/perlintro.html
The only one you need to know about for now is $_ which is the "default variable".
06076012011/07/14(木) 01:03:51.36
ありがとう!デフォルト変数かぁ なるほどデフォルトだな
0608デフォルトの名無しさん2011/07/16(土) 17:46:22.62
Perl:DBIを使ったMySQLについて質問です。
SELECTにて一致した条件を表示するのに
while(@row = $sth->fetchrow_array) {

}
を使っているのですが、これだと全件表示されてしまいます。
例えば5件目〜10件目のみ表示するにはどのようにすれば良いのでしょうか
0609デフォルトの名無しさん2011/07/16(土) 18:30:36.54
       ______
      /  \    /\  5件目〜10件目 のみ見る
    /  し (>)  (<)\
    | ∪    (__人__)  J | ________
    \  u   `⌒´   / | |          |
    ノ           \ | |          |


         ____
      /  \    ─\   チラッ
    /  し (>)  (●)\
    | ∪    (__人__)  J | ________
    \  u   `⌒´   / | |          |
    ノ           \ | |          |


         ____
      /::::::─三三─\   全件見えた
    /:::::::: ( ○)三(○)\
    |::::::::::::::::::::(__人__)::::  | ________
     \:::::::::   |r┬-|  / | |          |
    ノ::::::::::::  `ー'´   \ | |          |
0610デフォルトの名無しさん2011/07/16(土) 21:13:03.03
>>608
SQLクエリの時点で弾く(LIMIT)か、
素直に全部読んでから、手作業で必要な部分だけ切り取る
0611デフォルトの名無しさん2011/07/16(土) 23:40:09.46
特定のHTMLタグに囲まれた中身を正規表現で取りたいのですが、できませんでした。
$str =~ m{ <body> ( [^ (?: </body>) ]* ) }xi;
これの問題のあるところは、[ ]に1文字ではなく複数文字を指定している点なのでしょうか?
また正しい正規表現はどのようになりますでしょうか、教えてください。
0612デフォルトの名無しさん2011/07/16(土) 23:45:44.85
(!:
0613デフォルトの名無しさん2011/07/17(日) 01:01:48.47
>>611
$str = 'foo<span>bar<span>baz</span>quux</span>corge';
$str =~ m{<span>(.*?)</span>}is; # $1 = 'bar<span>baz';

http://perldoc.jp/docs/perl/5.10.1/perlfaq6.pod#How32do32I32match32XML44HTML44or32other32nasty44ugly32things32with32a32regex63
http://perldoc.jp/docs/perl/5.10.0/perlreref.pod#SEE32ALSO
http://www.din.or.jp/~ohzaki/regex.htm
0614デフォルトの名無しさん2011/07/17(日) 04:19:26.04
1回しかでてこないなら、普通に<body>(.*)</body>でいいですね。
複数でてくるタグなら再帰的に生成すると。でもその場合はモジュール使おうと思います。

文字列の否定は否定先読みすればよかったんですね。

(!:はperldocみたけど判らなかったです。。。。
0615デフォルトの名無しさん2011/07/20(水) 16:07:36.97
ブラウザのキャッシュデータからhtmlの復元を自動で行いたいです
具体的にはこんな手順のようです
http://blog.livedoor.jp/r_c_3/archives/50694668.html
06166152011/07/20(水) 16:16:31.15
>>615
なんとかperlで自動化できないものでしょうか
0617デフォルトの名無しさん2011/07/20(水) 23:01:31.56
このように配列と変数を渡す場合、
受け取り側ではpopを使って切り取って配列と変数に分けるしかないんでしょうか?

&func(@lines,$aaa);

sub func{
local($aaa2);
local(@lines2);
$aaa2 = $pop(@_);
@lines2 = @_;
}

0618デフォルトの名無しさん2011/07/20(水) 23:07:22.23
だからリファレンスを使えよと
0619デフォルトの名無しさん2011/07/20(水) 23:15:18.27
>>617
http://perldoc.jp/docs/perl/5.10.0/perlsub.pod#Pass32by32Reference
http://perldoc.jp/docs/perl/5.10.0/perlsub.pod#Prototypes
0620デフォルトの名無しさん2011/07/20(水) 23:34:05.05
>>619
それのどこに答えが書いてあるのか分からない
それと字が小さすぎて読みにくい
0621デフォルトの名無しさん2011/07/20(水) 23:49:18.60
local 使うな
& 付きサブルーチン使うな。
10年前からタイムスリップして来たのか?


sub func(\@$){
 my @lines = @{$_[0]} ;
 my $aaa = $_[1] ;
}
func @lines, $aaa ;

何れにせよリファレンス使おうが使うまいが、
func に渡された「リスト」の何らかの解析作業は必須。
=> それだったら普通にpopしてれば?
  リファレンスも覚える気も無いんでしょ?
0622デフォルトの名無しさん2011/07/21(木) 00:00:43.79
フォントサイズぐらい大きく出来るだろw
0623デフォルトの名無しさん2011/07/21(木) 00:16:16.32
>>621
古い参考書しか持ってないから
解析作業は省略して書かなかっただけ
知りたいのは配列と変数を受け取るときにpopして配列と変数に分けるしか方法がないのかってこと
0624デフォルトの名無しさん2011/07/21(木) 00:45:51.17
>>623
my も載ってなくて、&付しかないような参考書しか持ってないなら
悪いことは言わないので最近の書籍を買いなおした方が良い。
自力で検索して学ぼうにも下地となる知識が古すぎて不都合が多いと思う。
0625デフォルトの名無しさん2011/07/21(木) 01:21:53.06
>>617
use strict;
use warnings;

my @array = qw/LOVE LIKE NG GOOD NEW OLD/;
my $scalar = "電子レンジ";

testfunc(\@array, $scalar);


exit(0);


sub testfunc{
  my $array = shift;
  my $scalar = shift;

  print $array->[1];
  print $scalar;
}


#配列のコピーを作りたいなら
#  my $array = shift;
#  my @array = @{$array};
0626デフォルトの名無しさん2011/07/21(木) 03:49:58.07
つーか
スカラー1コと配列1コ渡すだけでいいんなら
スカラー、配列、の順に渡せば済む話だろ
その順に渡せない事情でもあるのか?

あと参考書古すぎるなら新しいの買えは同意だ
0627デフォルトの名無しさん2011/07/21(木) 04:30:20.77
push()と同じインターフェースに揃えたいんじゃねーの
0628 忍法帖【Lv=28,xxxPT】 2011/07/21(木) 04:42:35.72
>>626
おいらもスカラー先に渡せばいいじゃんって思った
0629デフォルトの名無しさん2011/07/21(木) 05:13:42.10
>>627
何のために?
0630デフォルトの名無しさん2011/07/21(木) 05:45:48.55
>>629
さあ…ね、詳しくは本人にしかわからない
push()を自作データ用にちょっと改変したような動作が欲しいのかも

まあ、リスト自体を渡す方法もどっかにズバリの内容が載ってた気がするんだが
0631デフォルトの名無しさん2011/07/21(木) 06:54:02.79
>>623
>解析作業は省略して書かなかっただけ
意味が通じてなかったみたいだな。
local($aaa2);
local(@lines2);
$aaa2 = $pop(@_);
@lines2 = @_;
これのことを「解析作業」と書いたんだ。
俺のコードだと
my @lines = @{$_[0]} ;
my $aaa = $_[1] ;
0632デフォルトの名無しさん2011/07/21(木) 07:28:58.04
>>630
> push()を自作データ用にちょっと改変したような動作が欲しいのかも

エスパー乙
0633デフォルトの名無しさん2011/07/21(木) 08:31:03.49
単に短い記述にしたいだけなら、これでもいいかな?

sub func{
my ($aaa2, @lines2) = (pop, @_);

}
0634デフォルトの名無しさん2011/07/21(木) 11:51:39.73
>>633
なにこれ
0635デフォルトの名無しさん2011/07/21(木) 12:14:36.05
>>634
pop の引数を省略すると @_ が対象になるので、@_ を pop して $aaa2 に代入、@_ の残りが @lines2 に代入される。
0636デフォルトの名無しさん2011/07/21(木) 13:08:19.30
>>626
スカラー、配列の順に渡しても
@_は(スカラー、配列)となってしまうので
$_[0]はスカラー、$_[1]は配列の先頭要素のみになっちゃうだろ?
0637デフォルトの名無しさん2011/07/21(木) 13:28:41.66
>>636
sub func{ ($scalar, @array) = @_ }
func( $s, @a )
ってことが言いたいんだろ
0638デフォルトの名無しさん2011/07/21(木) 13:35:59.91
エスパーだらけで読むのめんどくさいw
0639デフォルトの名無しさん2011/07/21(木) 13:52:12.19
>>633
なんだそりゃ。フツーこうだろ。
sub func {
my ($scalar, @array) = @_;
}
0640デフォルトの名無しさん2011/07/21(木) 16:15:07.29
>>617 だけでずいぶん盛り上がってますなw
0641デフォルトの名無しさん2011/07/21(木) 16:27:36.60
たとえば

配列にスカラを追加したい

こうゆう関数を作った場合は配列を先に渡したいよね
使い易さを考えないボンクラ大杉だろ
0642デフォルトの名無しさん2011/07/21(木) 16:38:30.49
日付関連の関数を作ったときにoreFuncと書く奴らばかり。
これまでのレスを見る限り、そんな感じだ。
0643デフォルトの名無しさん2011/07/21(木) 17:16:53.33
>>617への回答まとめ。
func(@list, $scalar); で呼び出したい >>621
リファレンスを理解したくない >>626 >>637
単に短く書きたい >>633

Perl忍者が引っ掻き回してる予感。
0644デフォルトの名無しさん2011/07/21(木) 17:21:24.49
>>643
Perl忍者はそんな、まじめに質問しないだろ
0645デフォルトの名無しさん2011/07/22(金) 00:27:33.34
"popを使って切り取って配列と変数に分けるしかないんでしょうか? "

sub func{ my ( $aaa2, @lines2 ) = ((splice @_, -1 ), @_ ); }
sub func{ my ( $aaa2, @lines2 ) = @_[-1,0..$#_-1] ; }
既に書いてあるプロトタイプ利用する方法。
etc...
∴ 答 = "いいえ。他の手段で仕分ける方法もありますが?"
0646デフォルトの名無しさん2011/07/22(金) 08:13:45.72
>>643
> リファレンスを理解したくない >>626 >>637

リファレンスを理解したくないんじゃなくて、
リファレンス使うまでもなくこう書けば済むんじゃない、って話をしてるんだ。
理解力の足りん奴だ。
0647デフォルトの名無しさん2011/07/22(金) 08:48:23.60
ぼくの理解力では>>643は
「(>>617が)リファレンスを理解したくない(なら)>>626 >>637」
としか読めない
0648デフォルトの名無しさん2011/07/22(金) 12:44:58.05
TMTOWTDIの精神で
0649デフォルトの名無しさん2011/07/23(土) 13:12:56.00
$str="aaa...bbb...ccc";
$s = "\.\.\.";

@www = split($s,$str);

print"www0=$www[0],$www1=$www[1],www2=$www[2]";
としても配列は何も表示されないけど

$s='\.\.\.';とするとなぜか配列が表示されます
これはどうしてですか?
0650デフォルトの名無しさん2011/07/23(土) 13:17:34.11
//
0651デフォルトの名無しさん2011/07/23(土) 13:52:47.57
>>649
http://perldoc.jp/func/split
http://perldoc.jp/docs/perl/5.12.1/perlop.pod#Quote32and32Quote-like32Operators

ダブルクォート文字列中の \. は . なので $s = '...' と等価。
正規表現 /.../ は「任意の3文字」なので、
split '...', $str は空文字列6つから成るリストを作る。
[]aaa[]...[]bbb[]...[]ccc[]
split は通常末尾に連なる空フィールドを返さないので @www = ();

シングルクォート文字列中では \' と \\ 以外のエスケープは無視されるので $s = '\.\.\.' 。
正規表現 /\.\.\./ は「'.'が3文字」なので、
split '\.\.\.', $str は ('aaa', 'bbb', 'ccc') を返す。
0652デフォルトの名無しさん2011/07/23(土) 18:11:58.38
>>650
//が抜けてたけど結果は同じでした

>>651
なるほどよくわかりました
0653デフォルトの名無しさん2011/07/24(日) 11:37:17.41
テキスト処理はperl
数値計算やグラフ作成はpython

こんな使い分けしてるんですが
全部perlでやってる方もいますか?
統一したほうが良い事もあるのでしょうか
0654デフォルトの名無しさん2011/07/24(日) 11:53:19.20
ssig33一生お勉強(笑)
0655デフォルトの名無しさん2011/07/24(日) 12:03:14.34
617って見れば見るほどPerl忍者だな
0656デフォルトの名無しさん2011/07/24(日) 15:51:08.78
>>654
なにそれ?
ググったけどよくわからなかった
0657デフォルトの名無しさん2011/07/24(日) 17:44:14.71
>>653
好きなように使い分ければええんでないかい
0658デフォルトの名無しさん2011/07/25(月) 17:33:18.05
外部サイトのソースをログに保存する方法ってあります?
0659デフォルトの名無しさん2011/07/25(月) 17:38:44.49
(・∀・)カエレ!
0660デフォルトの名無しさん2011/07/25(月) 18:14:07.12
バイナリファイル A,B を ANDして Cに保存したいんだけど
かっこうよく実装するにはどうしたらいいかな
0661デフォルトの名無しさん2011/07/25(月) 23:03:05.43
>>660
こんな感じでどう?


  |ツ ヾ\{   (⌒\;;;;;;;;,,      ,,,,;;;;;;;;;;:'    //ミっ}
    i 仆、\\_,ゝ、  \__      ____  //!シ /
   { 、{ `r‐-、/´,.\  \ー====f'" ,..r―r-、`゙ソノ レ'i }
    、 Y ゝ、  \   \  \ ̄ {_ `==≠' /⌒)|  ノ    バイナリファイル A,B を
    \| (  \  \  \   \ ゙=====≠   / |/
       、 \  \  丶、 \   =_     /    { /       ANDして Cに保存
      人  \   \  ` ̄`゙    `ー-┘    |/
     ( {::ハ  /\   \                }        実装完了
      ハ!:::\! .:: \                  }ヽ,
      }::::\:::::\  \                /::;ノ
    〈:::::::::ノ/ ̄\                     |::ィ
0662デフォルトの名無しさん2011/07/25(月) 23:28:17.01
>>661
た、たしかにかっけぇ←
0663デフォルトの名無しさん2011/07/26(火) 21:23:38.65
package TEST;
sub make{
  my $self = 'MAKEMOD';
  bless {}, $self;
}
sub func{
  my $self = shift;
  〜
}

-------------------------------------
use TEST;
my $test = TEST->make;
$test->func();


このように new ではなく別名のコンストラクタでオブジェクト作って、
そのオブジェクトからメソッドを呼ぼうとしたら、そんな関数ねぇよって
エラーになりました。
コンストラクタは new でないと駄目なんでしょうか?
0664デフォルトの名無しさん2011/07/26(火) 21:32:51.65
すんません。質問後にテストしたら、そっこーで解決しましたw


package TEST 内なのに、コンストラクタで使う名前が MAKEMOD とか、
存在しないパッケージ名を指定してたのが原因でした。
0665デフォルトの名無しさん2011/07/26(火) 22:40:19.24
どこのサイトで見たのか知らんが、
package 名の決め打ちは引数付きの時にトラぶるから
お勧めしない。

#!/usr/bin/env perl
package TEST;
sub make { my $self = 'TEST' ; bless { dat => shift }, $self }
sub echo {printf "%s\n", shift->{dat} ;}
1;
package TEST2;
sub new { bless { dat => pop }, shift }
sub echo {printf "%s\n", shift->{dat} ;}
1;

package main;
TEST-> make('hoge')->echo; # => 'TEST'
TEST2->new ('hoge')->echo; # => 'hoge'

1;
0666デフォルトの名無しさん2011/07/26(火) 22:53:09.94
実行結果をcのソースファイル形式で出力したいんだけど
どうやったらいいの?
0667デフォルトの名無しさん2011/07/26(火) 23:07:24.32
>>666
その質問はあまりに単純か、あるいはもっと深い意味があるのか分からんな
0668デフォルトの名無しさん2011/07/26(火) 23:54:08.50
>>665
パッケージ名->メソッド
で呼ばれた場合、第1引数にはオブジェクト名が渡るから、それを考慮しろ。
ってことで OK?

0669デフォルトの名無しさん2011/07/27(水) 00:12:38.16
桶
0670デフォルトの名無しさん2011/07/27(水) 00:18:44.21
command1が以下のような出力を返すのですが、
$ command1
Mask Slot7 Valid
Mask Slot3 Valid
Mask Slot11 Valid
$
この出力をperlで処理して、slotの後ろの番号を取り出したいです。
ワンライナーでいろいろ書いてみたのですがうまくいきません。どうやって書けばいいですか?
やりたいのはこんな感じです。
$ command1 | perl XXXX
7
3
11
$
どうかよろしくお願いします。
環境はLinuxです。
0671デフォルトの名無しさん2011/07/27(水) 00:25:55.36
perl -lne ' print $1 if /Slot(\d+)/'
じゃだめか?
0672デフォルトの名無しさん2011/07/27(水) 01:06:09.72
動きました
ありがとうございました。
0673デフォルトの名無しさん2011/07/27(水) 12:07:28.39
command1が以下のような出力を返すのですが、
$ command1
Mask Slot7 Valid
Mask Slot3 Valid
Mask Slot11 Valid
$
この出力をperlで処理して、slotの後ろの番号を取り出したがってる人が
いろいろワンライナーを書いてみたらしいですが、うまくいかなかったそうです。

でも、うまくいかないワンライナーなんて思いつきません。
どんな、ワンライナーを書くとうまくいかないのでしょうか?
06746602011/07/27(水) 12:42:57.67
>>661
出来ればperlでお願いします
0675デフォルトの名無しさん2011/07/27(水) 14:59:57.50
それはPerlの質問じゃなくて哲学の議題か何かか?
0676デフォルトの名無しさん2011/07/27(水) 15:48:52.75
最近の小学校では
バイナリファイル A,B を ANDしてCに保存するPerlスクリプトをかっこうよく書け、
なんて夏休みの宿題に出すんだな。
0677デフォルトの名無しさん2011/07/27(水) 15:52:32.44
Perlじゃ無理
0678デフォルトの名無しさん2011/07/27(水) 16:10:39.79
perlじゃバイナリファイルを扱えないからな。
0679デフォルトの名無しさん2011/07/27(水) 16:48:20.00
Berlの出番だな
0680デフォルトの名無しさん2011/07/27(水) 17:00:18.09
crowbarのようなもの?
0681デフォルトの名無しさん2011/07/27(水) 17:17:21.27
これでいける?

open my $fa, "<", "A" or die $!;
sysread $fa, my $aa, -s $fa;
close $fa;

open my $fb, "<", "B" or die $!;
sysread $fb, my $bb, -s $fb;
close $fb;

open my $fc, ">", "C" or die $!;
binmode $fc;

for my $i ( 0 .. length($aa) - 1 ) {
print {$fc} pack "C", ord(substr $aa, $i, 1) & ord(substr $bb, $i, 1);
}

close $fc;
0682デフォルトの名無しさん2011/07/27(水) 17:26:58.92
use File::Slurp;

my $d1 = read_file('./file1', binmode => ':raw');
my $d2 = read_file('./file2', binmode => ':raw');
write_file('./out', {binmode => ':raw'}, $d1 & $d2);
0683デフォルトの名無しさん2011/07/27(水) 17:58:45.87
読み込むファイルが巨大だったら。。。を思うと while(read($fh, $buf, 64)){}
みたいにぶん回したほうがいいんじゃないのかな?って思うわけです。はい。
0684デフォルトの名無しさん2011/07/27(水) 21:47:47.79
>>683
うん。
0685 忍法帖【Lv=35,xxxPT】 【東電 68.7 %】 2011/07/27(水) 23:12:53.20
かな
0686デフォルトの名無しさん2011/07/28(木) 02:00:48.77
漢字
0687デフォルトの名無しさん2011/07/28(木) 06:20:00.17
変換
0688デフォルトの名無しさん2011/07/28(木) 08:39:38.25
>>683
読むファイルが2つあるときはどう書くのがかっこいいんだろうか。
0689 忍法帖【Lv=7,xxxP】 2011/07/28(木) 11:07:58.73
うわあ!!!
0690Perl忍者2011/07/28(木) 14:58:37.61
今日からPerl戻るからみんな皆さん楽しみにしてください
戻ります

うわああ!!!!!!!
06916602011/07/28(木) 15:11:40.64
意外と難問だったのか。
perlは奥が深いな
0692デフォルトの名無しさん2011/07/28(木) 17:34:05.28
バイナリファイルが読めてAND演算子もあるのに何故難問なのでしょうか?
2つのファイルを同時に読むところ?
0693デフォルトの名無しさん2011/07/28(木) 18:17:51.03
真面目に書くと長くなる以外、問題無いと思うが。一度書いて見れば?

my @fh;
foreach('./file1', './file2'){
open(my $fh, '<:raw', $_) or die $!;
push(@fh, $fh);
}
open(my $wfh, '>:raw', './out') or die $!;

LOOP: while(1){
my $data;
foreach(@fh){
my $length = read($_, my $buf, 8192);
defined $length or die $!;
$length or last LOOP;
$data = (defined $data ? $data & $buf : $buf);
}
print $wfh $data;
}

close($wfh);
foreach(@fh){
close($_);
}
0694デフォルトの名無しさん2011/07/29(金) 09:13:15.79
file1とfile2の長さが違うときは出力がどうなる仕様なのかな?

短い方に合わせるか、長い方に合わせる(後ろは0で補う)の
どっちかにするのが自然だとは思うのだけど。
0695デフォルトの名無しさん2011/07/29(金) 09:32:44.06
長短はスイッチでやりたいよね
それにANDだけとは言わず他の演算もしてみたいよね
2つのファイルと言わず3つ4つのファイルもやってみたくなるのが普通だよね
ついでに汎用性がありそうだからcとかで高速な実装をしてみたくなるよね
06966602011/07/29(金) 10:50:40.85
>>695
ここはperlスレなので、他の言語はナシで
0697デフォルトの名無しさん2011/07/29(金) 11:16:49.18
■□□□■ □■■■□
□■□■□ ■□□□■
□■□■□ ■□□□□
□□■□□ □■■■□
□■□■□ □□□□■
□■□■□ ■□□□■
■□□□■ □■■■□
0698デフォルトの名無しさん2011/07/29(金) 16:19:04.76
>>695
>2つのファイルと言わず3つ4つのファイルもやってみたくなるのが普通だよね
目的がさっぱり見当つかない・・・
んなことして何に使うんだ?
0699デフォルトの名無しさん2011/07/29(金) 16:26:18.78
>>660に聞いてくれ
0700デフォルトの名無しさん2011/07/29(金) 18:39:06.09
どうみてもネタなのに…
0701デフォルトの名無しさん2011/07/30(土) 00:10:40.90
しかもつまんねーネタだ
0702デフォルトの名無しさん2011/07/31(日) 22:26:08.86
文字列の行数を調べるにはどうしたらいいんですか?

例えば$str="AAA\nBBB\nCCC";の場合
$gyousuu = split(/\n/,$str);で(AAA,BBB,CCC)に分解されて3行と出ますが

$str="AAA\n\n\n\n\n";の場合splitしてもAAAにしか分解されないので
6行のはずなのに1行になってしまいます
0703デフォルトの名無しさん2011/07/31(日) 22:42:50.48
>>702
\n の数を数える。
http://perldoc.jp/docs/perl/5.10.1/perlfaq4.pod#How32can32I32count32the32number32of32occurrences32of32a32substring32within32a32string63
0704デフォルトの名無しさん2011/07/31(日) 22:43:53.70
split の第3引数に -1
0705デフォルトの名無しさん2011/08/01(月) 12:30:36.47
データをtextareaに表示するときの質問です

$textarea = "AAA<BR>";の場合
$textarea = ~ s/<BR>/\n/g;で
テキストエリアではAAA改行となりますが

$textarea = "<BR>";の場合
$textarea =~s/<BR>/\n/g;で
テキストエリアの中は改行になっていません(カーソルが1つ下に下がりません)

そこで$textarea =~/<BR>/\r\n/g;にするとテキストエリアの中では改行になっていますが
これだとwindowsの場合だけですよね?
OSに関係なく上手く表示できるようにするにはどうすればいいんですか?

print "<TEXTAREA ROWS=100 COLS=100>$textarea</TEXTAREA>";
0706デフォルトの名無しさん2011/08/01(月) 12:45:57.76
とりあえず HTML 要素の勉強から始めような。
0707デフォルトの名無しさん2011/08/01(月) 12:54:12.65
>>705
Webサイト制作初心者用質問スレ part225
http://hibari.2ch.net/test/read.cgi/hp/1308415898/
(X)HTML/CSS/Dreamweaverの質問に優しく答えるスレ10
http://hibari.2ch.net/test/read.cgi/hp/1311271961/
0708デフォルトの名無しさん2011/08/01(月) 18:15:09.37
>>706

>>705で書いたHTMLのどこがおかしいの?
TEXTAREAにNAMEが設定されてないところか?
これは送信するわけじゃないからNAMEは省略した
0709デフォルトの名無しさん2011/08/01(月) 19:20:31.85
>>705
OSではなくブラウザごとに違う
0710デフォルトの名無しさん2011/08/01(月) 19:41:56.35
>>705
開始タグ直後の改行が無視されるのはHTML(SGML)の仕様。
web制作板の方が詳しい人が居るんじゃないのん。
0711デフォルトの名無しさん2011/08/01(月) 20:23:33.45
>>708
要素の機能に関する問題の以前に書き方を覚えろ。
あほかw
0712 忍法帖【Lv=10,xxxPT】 2011/08/01(月) 21:42:01.14
a
0713デフォルトの名無しさん2011/08/02(火) 09:53:32.30
>>711
アホはお前だろ・・・
0714デフォルトの名無しさん2011/08/03(水) 01:41:51.16
HTML もまともに書けないヤツが perl とかいじるなやw
0715デフォルトの名無しさん2011/08/03(水) 01:48:38.47
おれもよく知らねえや。
つーか、Perlと全然関係ないじゃん。
0716デフォルトの名無しさん2011/08/03(水) 03:23:39.87
ってか、もうこれ役目を終えた言語だろ
0717デフォルトの名無しさん2011/08/03(水) 08:44:10.29
>>716
そう思うなら「Perlについての質問箱」スレなんかわざわざ覗きに来んな。
0718デフォルトの名無しさん2011/08/03(水) 09:07:42.10
<TEXTAREA ROWS=100 COLS=100>$textarea</TEXTAREA>

このHTMLのどこがおかしいのか解らない
0719デフォルトの名無しさん2011/08/03(水) 09:48:36.20
>>714
PerlはCGIのための言語じゃないけどな…
0720デフォルトの名無しさん2011/08/03(水) 09:56:43.54
しかしCGI以外の用途がない
0721デフォルトの名無しさん2011/08/03(水) 09:58:46.84
そりゃ、お前が底辺WebPGだから。
0722デフォルトの名無しさん2011/08/03(水) 11:08:58.94
>>720
むしろいまどきはワンライナー御用達で
CGIに使う方が古いというかアホ扱いだろ
0723デフォルトの名無しさん2011/08/03(水) 11:13:11.65
最近のPerlは本当に重いよな
久しぶりにawksed使うとあまりの速さにビビる
0724デフォルトの名無しさん2011/08/03(水) 11:49:30.01
cron見てみたら半分くらい*plだった…
0725デフォルトの名無しさん2011/08/03(水) 11:50:29.18
掲示板もSNSもperl使ってるところが多い
まだまだperlは現役だろ
0726デフォルトの名無しさん2011/08/03(水) 11:54:57.48
まだまだもなにも消えるわけない。
すくなくても先に俺が消える。
あとの世は知ったこっちゃない。
0727デフォルトの名無しさん2011/08/03(水) 13:35:40.60
>>725
現役だけど、新規案件で使うものじゃない
いや、使ってもいいんだけどメインにすべきじゃない
0728Perl忍者2011/08/03(水) 16:26:57.05
案件で使うわけねーだろ
ばかだなこいつ

ほとんどPHPとかだけど
0729デフォルトの名無しさん2011/08/03(水) 16:34:49.79
アリス・リデル vs mala
黒川かえる vs はまちや
VVS vs ssig33


決戦が始まろうとしている
0730デフォルトの名無しさん2011/08/03(水) 16:38:11.37
黒川かえる

危険度 ★★★★★★★★★★★★★★★★★

日本のクラッカー。別名かえる☆ちゃん。最近2世が誕生しパパになったらしい。

過去においてはNEWS23のコメンテーターとしてテレビ出演、また「コンピュータ悪のマニュアル」の編集を務めている。

近年ではYahooBBの顧客リスト流出事件に関与、首謀者として同じくクラッカーのBEAMZと共に頭角を現す。

YahooBB事件においての被害総額は100億円規模と目され、団体に対して与えたクラッキング事件の被害の大きさでは世界一。その割りに名前が知られていない。
0731デフォルトの名無しさん2011/08/03(水) 17:50:08.06
>>718
そのHTMLを書いたファイルをlintにかけてみれば分かる。
0732デフォルトの名無しさん2011/08/03(水) 19:04:35.98
my $i= 0;
my @b = split(//, $a);
foreach my $w (@b) {
$ar[0][$i++] = $w;
}
これを、もうちょっと簡単にというか
(@ar[0]) = split(//, $a);
みたいな書き方(これはエラーでます)できないでしょうか?
0733デフォルトの名無しさん2011/08/03(水) 19:15:49.63
@ar = [ split //, $a ] ;

特殊変数$aを普通の変数としては(略
0734デフォルトの名無しさん2011/08/03(水) 19:39:43.55
>>733
感謝
でも静的には$ar[1]にも代入できるけど動的には無理なのか
そういや比較かなんかで使ってるんでしたっけ、$aと$b
0735デフォルトの名無しさん2011/08/03(水) 20:05:53.55
>でも静的には$ar[1]にも代入できるけど動的には無理なのか
意味不明
my @dat = map { [ split //, $_ ] } qw ( 123 456 789 );
my @ar ;
for my $i ( 0 .. $#dat ){
$ar[0][$i++] = $dat[$i] ;
}
的な意味?
それとも
@{$ar[0]} = map { [ split //, $_ ] } qw ( 123 456 789 );
的な意味?
0736デフォルトの名無しさん2011/08/03(水) 20:06:49.61
っても両者に違いなんざ無いんだが。
0737デフォルトの名無しさん2011/08/03(水) 20:20:37.13
>>731
COLSとROWSをダブルクオーテーションで囲んでないってことだろ
べつに囲まなくてもちゃんと表示される
0738デフォルトの名無しさん2011/08/03(水) 21:05:55.38
>>737
HTMLのバージョンにもよるが、
属性値が数値のみの場合は必ずしもダブルクォーテーションで囲わなくてもいい。
確かXHTMLでは不可で、HTML 4は可だったかな。
ってスレ違いじゃねーか。フザケンナ。
0739デフォルトの名無しさん2011/08/03(水) 21:17:08.67
スレっつーか鼬
0740デフォルトの名無しさん2011/08/03(水) 22:18:28.15
HTMLごときで文法を守れないヤツがプログラムとかほざくなとwww
0741デフォルトの名無しさん2011/08/03(水) 22:29:25.04
>>732
use strict;
use warnings;

my $abc = 'love-like-ship';
my @ar = ();

push(@{$ar[0]}, split(//, $abc));
print join "\n", @{$ar[0]};


0742デフォルトの名無しさん2011/08/03(水) 22:32:38.94
>>728
どこか哀愁を漂わす漢の背中だ
0743デフォルトの名無しさん2011/08/03(水) 23:04:34.02
バカ忍者はトリップ使ってくれよ
その方が専ブラであぼーんするのに便利だから
0744デフォルトの名無しさん2011/08/03(水) 23:49:01.08
Perl忍者を悪く言うなよ
かわいそうだろ
0745デフォルトの名無しさん2011/08/04(木) 00:34:34.93
まあ忍者は別に悪く言われなくても
存在自体がかわいそうなんだけどね
0746デフォルトの名無しさん2011/08/04(木) 00:49:51.15
日付ってどのモジュール使えばいいの?
0747デフォルトの名無しさん2011/08/04(木) 01:49:14.64
日付をどうしたいか、によって違ってくるんじゃねーの?
0748デフォルトの名無しさん2011/08/04(木) 01:55:23.41
そこんところはどうでもいいよ。
どれ使っても同じことができるのはわかってるから。

もし将来一つに統一されると考えたとき
候補になりそうなのを教えて下さい。

0749デフォルトの名無しさん2011/08/04(木) 02:06:02.56
ならどのモジュールが消えてもいいように
ラッパー自作して挟んどけば?
0750デフォルトの名無しさん2011/08/04(木) 02:06:04.37
>>748
POSIX
DateTime
0751デフォルトの名無しさん2011/08/04(木) 02:27:00.23
>>748
Time::Piece 今のところ標準モジュール
0752デフォルトの名無しさん2011/08/04(木) 03:53:59.14
指定したディレクトリ内で、作成されてから10分以上経過したファイルを削除するソースを教えてください。
0753デフォルトの名無しさん2011/08/04(木) 04:22:57.04
ソース教えたら重要ファイルまで豪快に全滅させる自滅コード走らせる予感しかしない
0754デフォルトの名無しさん2011/08/04(木) 04:29:58.57
>>752
依頼されたツールを誰かが作るスレ
http://hibari.2ch.net/test/read.cgi/php/1078997682/
金出すからスクリプト作ってよvol.1
http://hibari.2ch.net/test/read.cgi/php/1150508106/
0755デフォルトの名無しさん2011/08/04(木) 08:56:27.35
findで-mtimeで-execでrmすれば?
0756デフォルトの名無しさん2011/08/04(木) 11:40:58.29
>>755
ここはperlスレだ。 無理やりにでもperlで解決してやれよ。
0757デフォルトの名無しさん2011/08/04(木) 11:46:56.93
それじゃperlで解決
perl -e 'system "find", ".", "-mtime", "+10m", "-exec", "rm", "{}", "+"'
0758デフォルトの名無しさん2011/08/04(木) 12:09:11.19
それよかtouchが欲しい
0759デフォルトの名無しさん2011/08/04(木) 12:57:59.96
文字列 $q の末尾に/がついていない場合/を付けるのはどのように書けばいいですか
色々やってみたけどうまくいかない
0760デフォルトの名無しさん2011/08/04(木) 13:15:01.44
>>758
'>>' でオープンでいいんじゃないの?
知らんけど
0761デフォルトの名無しさん2011/08/04(木) 13:26:55.28
>>759
if( $q !~ m(^/) ) {
末尾に/がついていない場合の処理;
}
ってこと?
0762デフォルトの名無しさん2011/08/04(木) 13:29:13.52
間違えたw
if( $q !~ m(/$) ) { ... }
0763デフォルトの名無しさん2011/08/04(木) 13:31:21.50
$q .= '/' if $q !~ m|/$|;
じゃだめなの?
0764デフォルトの名無しさん2011/08/04(木) 13:54:04.80
>>723
perlが重いって数千行のデータベースをページ表示毎に
ソートでもしてるのか?
0765デフォルトの名無しさん2011/08/04(木) 14:15:40.46
>>761-763
うまくいきました。ありがとうございます
0766デフォルトの名無しさん2011/08/04(木) 14:16:16.21
>>758
File::Touch
0767デフォルトの名無しさん2011/08/04(木) 14:31:38.16
>>757
センスが無いよな。
0768デフォルトの名無しさん2011/08/04(木) 14:41:23.43
>>767
先生!センスのあるお手本を是非ここでひとつ。
0769デフォルトの名無しさん2011/08/04(木) 15:11:27.19
よほどのことがなければ外部プログラムは呼び出さない方がいいよね
プロセス生成のコストは想像以上に高いわけだし
0770デフォルトの名無しさん2011/08/04(木) 15:51:23.66
>>756
どなたかお願いします。
0771デフォルトの名無しさん2011/08/04(木) 16:02:00.47
>>770
夏休みの宿題は自力でやらなきゃ。
0772デフォルトの名無しさん2011/08/04(木) 17:31:51.66
>>770
試してないけど、これでいける?

my $dir = "/foo/bar";
my $ten_min = 1 / 24 / 60 * 10;

unlink grep +(-C) < $ten_min, glob "$dir/*.*";
0773デフォルトの名無しさん2011/08/04(木) 17:46:25.57
glob はスペースを含むファイル名のファイルがあるとうまく動かないんじゃなかったかな。
0774デフォルトの名無しさん2011/08/04(木) 20:07:28.17
連想配列の{ }中は全角文字は使えるんでしょうか?
$FORM{'データ'}というように
0775デフォルトの名無しさん2011/08/04(木) 20:07:29.90
>>758
utime undef, undef, $file1, $file2;

じゃだめかな。

ついでに
>>759
$q =~ s!(?<!/)\z!/!ms;
とか。
0776デフォルトの名無しさん2011/08/04(木) 20:09:29.87
>>774
使える。
コードをUTF-8で書いて use utf8 した方がいいと思う。
0777デフォルトの名無しさん2011/08/04(木) 23:12:15.64
HTMLを生成するジェネレーター作ろうとplファイルを作ったところ
"とか!とかを文字列で扱うためにエスケープ?しないといけない事を知りました
その作業量が多く大変困っています。簡単にする方法ないでしょうか!

↓いまひたすらこんなかんじ
print $fh " <\!-- コメントアウト(アドビのInstance等・・・) -->\n";
print $fh " <li><a href=\"\" target=\"_blank\"><img src=\"\" class=\"\" /></a></li>\n";
0778デフォルトの名無しさん2011/08/05(金) 00:08:58.48
>>777
プログラム始めて1週間ってことろか。
頑張れよw
0779デフォルトの名無しさん2011/08/05(金) 00:25:07.40
>>778
おう俺やっぱ初心者丸出しなのかな恥ずかしい
0780デフォルトの名無しさん2011/08/05(金) 00:31:39.62
>>777
とりあえず ! はエスケープしなくていい
変数展開やエスケープシーケンス(\nとか)を使う必要がないなら ' を使うか、
HTMLの引用符を ' にするとHTMLでは楽になる

簡単にする方法はあるけどPerlに慣れるまでは使わない方がいい
一応書いておくと
ダブルクォートは qq(<img src="") で、
シングルクォートは q(<img src="") で代用できる
他にもあるけど、クォート風演算子やヒアドキュメントで検索してくれ

>>779
みんな最初は初心者。がんばって
0781デフォルトの名無しさん2011/08/05(金) 00:58:30.48
>>780
便利なやり方が色々あるんですね
そもそもprintって少数行をやるものなのか・・・500行もprintでやってしまったよ・・・ハハ
最初からプロなんていないですよね、がんばりますありがとう〜
0782デフォルトの名無しさん2011/08/05(金) 01:56:41.17
>>781
500行wwww
最初と終わりを指定するだけで楽にできるよ
0783デフォルトの名無しさん2011/08/05(金) 02:05:01.05
print <<"EOM";
 〜HTML〜
EOM
だな
0784デフォルトの名無しさん2011/08/05(金) 14:27:03.41
>>775
だめ
0785デフォルトの名無しさん2011/08/05(金) 15:23:19.54
my $str = <<EOT;
〜〜
EOT

みたいな変数代入もよく使うな。
0786デフォルトの名無しさん2011/08/05(金) 17:13:35.73
>>781
HTML::Templateでググれ
0787デフォルトの名無しさん2011/08/05(金) 20:58:33.49
第40回 Text::MicroTemplate:得意分野なんだからPerlを使えばいいじゃない,という方に
http://gihyo.jp/dev/serial/01/modern-perl/0040
第41回 HTML::Template::Pro:テンプレートに極力コードを書かせたくないときは
http://gihyo.jp/dev/serial/01/modern-perl/0041
第42回 Template Toolkit:Perl製テンプレートエンジンのデファクトスタンダード
http://gihyo.jp/dev/serial/01/modern-perl/0042
第43回 Text::Xslate:永続環境に特化したテンプレートエンジン
http://gihyo.jp/dev/serial/01/modern-perl/0043
0788Perl忍者2011/08/05(金) 21:40:50.03
まだまだカスどもに追いつかれそうにないからPerlやらなくていいや

自分=うさぎ

お前ら=かめ
0789デフォルトの名無しさん2011/08/05(金) 21:52:57.91
天然だなあ
0790デフォルトの名無しさん2011/08/06(土) 05:46:13.56
#!/usr/bin/perl
print "Content-type: text/html; charset=Shift-JIS \n\n";

use Encode;
use LWP::UserAgent;

our $HOME_URL = 'http://www.scollabo.com/banban/jsindex/sample/sample_312.html';
our $USERNAME = 'USERNAME';
our $PASSWORD = 'PASSWORD';
my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla/5.0');
#$ua->agent(qq(Mozilla/4.0 (compatible\; MSIE 8.0\; Windows NT 5.1\; Trident/4.0\; .NET CLR 2.0.50727\; .NET CLR 3.0.04506.30\; .NET CLR 3.0.04506.648)));
my $req = HTTP::Request->new(GET => $HOME_URL);
$req->authorization_basic($USERNAME, $PASSWORD);
$req->referer(qq(http://www.scollabo.com/banban/jsindex/sample/sample_312.html));

my $res = $ua->request($req);
$content = Encode::encode('JIS', $content);
print $res->content;

CGIでBASIC認証を自動化しようと考えています。
そのままいったら拒否されたのでAGENTCODEを変えようと思ったのですが・・・
AGENTCODEが表示されない・・・クマッタ
0791デフォルトの名無しさん2011/08/06(土) 09:53:00.71
http://username:[email protected]
0792デフォルトの名無しさん2011/08/06(土) 10:47:44.97
で、そのAGENTCODEってのは何なんだい?
0793デフォルトの名無しさん2011/08/06(土) 12:12:25.83
ナンダロウ・・・ワカラナイ
0794デフォルトの名無しさん2011/08/06(土) 12:16:12.72
790です 事故解決しました寝ておきたら理由がわかったorz
0795デフォルトの名無しさん2011/08/06(土) 12:40:29.49
urlとかそのまま出しちゃった・・・
レス削除依頼って何処にだせばいいんだろう
0796デフォルトの名無しさん2011/08/06(土) 14:43:07.02
アクセスしてみてないけど、BASIC認証かけてあるなら別にいいじゃん?
心配だったら管理者に言って 〜/sample/ ディレクトリを移動してもらおう

次からは質問する前にまず寝て起きようぜ
0797デフォルトの名無しさん2011/08/06(土) 20:34:03.22

open(IN, "file.txt");
print <IN>;
close(IN);
のようにコード書いてたんですが、openの部分だけをcfopenと書き換えて
cfopenサブルーチン内でファイルの存在を確認した上でファイルを
オープンすることを考えてます。
そこで以下のようなcfopenサブルーチンを書いたのですが、
呼び出し時に、 open(*IN, "file.txt"); とファイルハンドルを
「*IN」と型グロブを使ってサブルーチン渡さないとダメのようですが
できるだけ元のコードを変えたくないので、「IN」のまま渡すような
cfopenを書く方法はないでしょうか?

sub cfopen
{
my $file = $_[1];
if (-e $file) {
open(CFP, $file);
$_[0] = *CFP;
return TRUE;
}
return FALSE;
}
0798デフォルトの名無しさん2011/08/06(土) 21:00:27.59
http://perldoc.perl.org/perlsub.html#Prototypes
0799デフォルトの名無しさん2011/08/06(土) 21:40:16.73
STDIN, STDERR, STDOUT 以外のベアワードのファイルハンドル
使うのとりあえず止めれば?
10年前の記法だぞ。
0800デフォルトの名無しさん2011/08/06(土) 22:02:20.87
>>798-799
回答ありがとうございます。
ググってみたら、いつのまにかグローバル変数ってことで非推奨になってたんですね。
素直に元のコードを書き直します。
0801デフォルトの名無しさん2011/08/07(日) 00:33:23.63
>>797 ってuse strictでも動くんだ、、、 use warningsなら怒られたけど
0802デフォルトの名無しさん2011/08/07(日) 00:52:35.35
作りたいものの規模や変更頻度にもよるかもしれないけど、
>>777はヒアドキュメントに満足することなく、テンプレートをちゃんと覚えたほうがいいよ。
テンプレートがあればエスケープしてくれるし、ヘッダーとか各ページ共通の案内リスト(って言えばいいのか)
も別ファイルとして管理できて、トップページではヘッダーファイルA、ログイン後のメンバーページは
ヘッダーファイルBを使うとか組み合わせも指定できる。
そもそもモジュールの入れ方を知らないのかもしれないけど、今はcpanmがあるから簡単だし、
>>787 のどれか使ってみればいいと思う。

あとhtmlの文字列をprintで直接作成するのも、たぶんダメなんだけど、変更するときに
正規表現とかで書き換えるのはダメだよ。バグ以前に難解になりすぎて目的達成できないだろうし。
HTML文字列ではなくてDOMを操作するモジュール使うべし。
0803デフォルトの名無しさん2011/08/07(日) 12:40:43.10
@lines1にはメインデータ@lines2にはそれの追加データが格納されていて
@lines1と@lines2は上からの行番号で対応できるようになっています。
そこで@lines1の条件にあった@lines2を取り出すには
このようにするしか方法はないんでしょうか?

$lineno = 0;
foreach(@lines){

   @data = split(/<>/,$_);

   if($data[1]>100){
       push($cyuusyutu_lines1,$_);
       push($cyuusyutu_lines2,$lines2[$lineno]);
   }

   $lineno++;
   
}
0804デフォルトの名無しさん2011/08/07(日) 12:44:41.54
訂正:foreach(@lines)じゃなくてforeach(@lines1)です
0805デフォルトの名無しさん2011/08/07(日) 12:48:27.94
また訂正    
push($cyuusyutu_lines1,$_);  →  push(@cyuusyutu_lines1,$_);
push($cyuusyutu_lines2,$lines2[$lineno]);→  push(@cyuusyutu_lines2,$lines2[$lineno]);
0806デフォルトの名無しさん2011/08/07(日) 13:15:08.87
for my $lineno (0 .. $#lines1) {
my @data = split /<>/, $lines1[$lineno];
# ...
}
0807デフォルトの名無しさん2011/08/07(日) 13:18:43.67
BigRatで表された分数を、整数に丸めるにはどうすれば良いんでしょうか。
例えば
use Math::BigRat;
my $x = Math::BigRat->new("1000");
my $y = Math::BigRat->new("3");
$x->bdiv($y);
print "$x\n";
とすると実行結果は1000/3なんですが、333にしたい。
JIS丸め希望(round_modeの'even'がそれ?)
0808デフォルトの名無しさん2011/08/07(日) 13:41:49.25
>>803
全く別のアプローチ
my @ids = grep { ( split /<>/, $lines1[$_] )[1] > 100 } 0 .. $#lines1 ;
my @ cyuusyutu_lines1 = @lines1[@ids] ;
my @ cyuusyutu_lines2 = @lines2[@ids] ;
0809デフォルトの名無しさん2011/08/07(日) 13:57:16.50
>>807
Math::BigRat は恣意的に分数に表示するためのモジュール。
使用目的が明かに違う。そんな風に使うべきじゃない。

どうしてもってんなら
print int eval $x
って手もある。 eval STR なんて非推奨もいいとこだけど。

0810デフォルトの名無しさん2011/08/07(日) 13:59:19.68
浮動小数点誤差に困っているんですが、
固定小数点数型ってないですよね?
0811デフォルトの名無しさん2011/08/07(日) 14:06:03.26
無い
0812デフォルトの名無しさん2011/08/07(日) 14:28:44.79
やっぱりですか。
Perlを始め、変数に型がない言語って
大抵ないですよね。
0813デフォルトの名無しさん2011/08/07(日) 14:50:52.17
Math::BigFloat じゃダメ?
0814デフォルトの名無しさん2011/08/07(日) 15:03:36.35
>>812

Perl => Math::BigFloat
Ruby => BigDecimal
Python => Decimal
0815デフォルトの名無しさん2011/08/07(日) 15:09:30.32
"固定小数点数型"を理解してないなら書き込むなよ。
Math::BigFloat
は固定小数点数型を提供するもんじゃねーぞ。
浮動小数点誤差を防ぐもんでもねーし。
0816デフォルトの名無しさん2011/08/07(日) 15:14:16.12
>>815
固定小数点では無いが、精度をちゃんとすれば浮動小数点誤差は防げるぞ?
浮動小数点誤差に困ってるんだろ?
0817デフォルトの名無しさん2011/08/07(日) 15:46:16.13
>>812
お前、動的型言語をdisりたいだけだろ?
ウザイからこっちでやれよ
http://hibari.2ch.net/test/read.cgi/tech/1293264747
0818デフォルトの名無しさん2011/08/07(日) 15:57:50.53
Math::BigRat->as_int() を知りたかったのか
Math::BigFloat->round_mode('even') で許容範囲なのか
汎用機屋さんが言う(BCDの)固定小数点数が意地でも欲しいのかよくわからない
0819デフォルトの名無しさん2011/08/07(日) 16:27:13.18
>>812
luaはないってサイトに書いてたけど実際のところ知らん
0820デフォルトの名無しさん2011/08/07(日) 21:35:23.55
Term::ReadKeyを使った際の質問です。

プラグラムとしては実装出来て、問題なかったのですが、報告したところリーダーの人から
自動テストが出来ないとダメと言われています。
手動テストでは問題ないことは確認したのですが、自動テストする際に、
ReadKeyが受け取る値をテストのソースコードから操作するにはどうすればよいでしょうか?
0821デフォルトの名無しさん2011/08/07(日) 21:42:57.43
んなもん、ReadKeyをオーバーライドすればいいだろう。
08228072011/08/08(月) 02:02:51.46
>>809
レス�dクス
evalメソッドを有難く使わしてもらおうかと

少なくとも今個人的に直面しているのがBigRatだけではにっちもさっちも行かないケースでして、
つまり整数の階乗じゃなくて有理数の階乗を計算する羽目になったわけで、
ストレートにΓ関数を計算しろというのは曰くごもっともですけども、
どっちにせよ有理数では話が済まないという、
0823デフォルトの名無しさん2011/08/08(月) 10:04:12.79
事情が許すならPerl以外の数値演算向け言語(よく知らないけど)を使ってみては
0824デフォルトの名無しさん2011/08/08(月) 13:11:45.09
>>807
my $x = Math::BigRat->new("1000");
my $y = Math::BigRat->new("3");
$x /= $y;
$x = $x->as_float->ffround(0);
print "$x\n";
0825デフォルトの名無しさん2011/08/08(月) 14:11:48.95
その計算だけ行うプログラムをcppで作ってsystemで呼ぶってゆう手抜きもw
0826デフォルトの名無しさん2011/08/09(火) 20:39:50.56
Cの勉強が終わりつつあるので、次にPerlかPythonを勉強したいんだけど、
どっちがいいですか?
0827デフォルトの名無しさん2011/08/09(火) 21:27:06.01
>>826
Cからなら…Perlかなぁ?
Cには無いワンライナーや、高機能なテキスト処理、
お手軽なリスト&ハッシュ処理の世界を知ってみては

Pythonは良くも悪くも万能言語なので、微妙に被る場面が出てくるかも知れない
でも、Cでやりたいことを取り敢えず速記するのには良いかもね
0828デフォルトの名無しさん2011/08/09(火) 21:29:02.76
あ、待った
Cの勉強が終わり…と言うが、Cに終わりは無いぜ
Cを言語として極めたと思うなら、Cで出来る各専門分野に手を出してみたら?
0829デフォルトの名無しさん2011/08/09(火) 23:13:48.18
ファイルのオープンだけど

open(IN,"<$FILE_PATH");
@lines = <IN>;
close(IN);


↑をページの最初だけファイルを読み読み込んで@linesに格納するのと
各サブフーチンごとに読み込んで@linesに格納するのでは
後者のほうが速度がかなり遅くなりますか?

速度がそれほど遅くならないのなら各サブルーチンごとに@linesに格納したいと思いますが
なるべく変数はローカル化したいので
0830デフォルトの名無しさん2011/08/09(火) 23:30:25.33
何回も開けると少し遅くなりそう
whileとかで1万回くらいループさせてどっちがどのくらい早いか比べてみたら
0831デフォルトの名無しさん2011/08/09(火) 23:36:33.19
開けっ放しで適宜読み込みだと思ったけど
0832デフォルトの名無しさん2011/08/10(水) 00:14:25.27
>>829
ディスクキャッシュにのってしまえば気にならないほどかと
デバッグのことも考えて後者で良いと思う。
0833デフォルトの名無しさん2011/08/10(水) 08:56:18.44
cpanから取ってきたモジュール(DBD::mysql)がMakefile作成まではこぎつけたけど
コンパイル段階で型の不一致エラーを吐いてしまうだす。
x64
ちなみにDBIは通りました。
0834デフォルトの名無しさん2011/08/10(水) 09:16:25.81
>>826
Pythonがいい。
今さら廃れた言語をする必然性はない。
0835デフォルトの名無しさん2011/08/10(水) 09:26:05.34
>>834
そう思ってるならそんな廃れた言語の質問箱スレなんか覗きに来てんじゃねーよw
0836Perl忍者2011/08/10(水) 09:40:52.06
あほしかいませんえっここのスレは
0837デフォルトの名無しさん2011/08/10(水) 10:10:51.42
>>832
逆だろ
何度もクローズするってことは何度もフラッシュするってことだからな
0838デフォルトの名無しさん2011/08/10(水) 11:25:48.18
>>829
私は内容を変数に突っ込むかな。
サブルーチンごとにファイルオープンするとなると、
処理中にファイル内容が変更されることを考えないといけないし、面倒。
0839デフォルトの名無しさん2011/08/10(水) 11:52:32.58
Perlってこれから廃れていく言語なのかい?
それなら学ぶ必要はなさそう・・・
0840デフォルトの名無しさん2011/08/10(水) 12:24:01.91
pythonは日本ではなんであんま人気ないの?
0841デフォルトの名無しさん2011/08/10(水) 12:24:24.53
廃れて行くというより、一時期の盛り上がり方(CGIの頃)が異常だっただけ
今は元の鞘に戻ったという感じだよ
0842デフォルトの名無しさん2011/08/10(水) 12:36:13.29
>>839
ロシア語ってこれから廃れていく言語なのかい?
みたいな話だろそれ
0843デフォルトの名無しさん2011/08/10(水) 17:35:17.67
仕事上やむなく覚えなきゃいけない、とかいうんでないなら
perl、pythonに限らず面白そうと思ったものはひととおりかじってみれば。
0844デフォルトの名無しさん2011/08/10(水) 19:39:02.79
Cからならpythonを先にやった方が良いだろう。
ぐにゃぐにゃした言語ばかり独学でやっていると、変な手癖が直らなくなる。
0845デフォルトの名無しさん2011/08/10(水) 19:48:12.58
おっpy
0846デフォルトの名無しさん2011/08/10(水) 20:14:35.42
こちらへどうぞ。

【Perl,PHP】LLバトルロワイヤル18【Ruby,Python】
http://hibari.2ch.net/test/read.cgi/tech/1310082014/
0847デフォルトの名無しさん2011/08/10(水) 23:05:29.42
>>844
Cってぐにゃぐにゃしてるの?
0848デフォルトの名無しさん2011/08/11(木) 00:09:39.50
とりあえずここはPerlスレなので、Perlのメリットだけ挙げればそれで良くね
Pythonのことは他所にお任せする

ワンライナー、正規表現、文字列処理、リスト(とリスト処理)、ハッシュ(連想配列や辞書とも呼ばれる)辺りがお手軽に使えるのが利点だな
あとはメモリ管理が要らない…とまでは言わないが、Cに比べりゃ雲泥の差でテキトーに出来ることか
0849デフォルトの名無しさん2011/08/11(木) 01:44:23.39
テキトーに書いても動いちゃうから、クソみたいなサンプルが多いんだよね。
サンプルから strict に書き直そうとする意欲が無ければ perl はおすすめ出来ないなぁ
0850デフォルトの名無しさん2011/08/11(木) 01:49:30.58
うちでは、シェルスクリプトだとちょっと面倒な作業くらいに大活躍してくれてる
0851デフォルトの名無しさん2011/08/11(木) 08:40:01.21
Perlの世界のオブジェクト指向って
現在はMoose(Mouse)を使うのが標準なんですか?
0852デフォルトの名無しさん2011/08/11(木) 08:43:25.73
Perlが持つ特徴を挙げればいい?

デフォルト変数、特殊変数、コンテキスト指向、単に名前空間のオブジェクト指向
0853デフォルトの名無しさん2011/08/11(木) 15:48:08.33
>>847
phythonがぐにゃぐにゃしてるんだよ・・・
0854デフォルトの名無しさん2011/08/11(木) 16:12:19.71
> phythonがぐにゃぐにゃしてるんだよ・・・

おっ 新しい言語だな。
0855デフォルトの名無しさん2011/08/11(木) 16:21:11.14
ふぁいそん。
0856デフォルトの名無しさん2011/08/11(木) 16:29:58.38
行末をセミコロンで終われない言語は使いたくない
0857デフォルトの名無しさん2011/08/11(木) 16:32:46.20
ぱいそんもるびーも行末をセミコロンで終わることはできるよ
ほぼ意味はないけど
0858デフォルトの名無しさん2011/08/11(木) 17:43:42.87
逆にperlでもほとんどの場面でセミコロン無しでプログラミングできる
0859デフォルトの名無しさん2011/08/11(木) 17:57:33.51
一部が“出来る”というだけで、全てに於いて回避というわけじゃないだろ



文脈の区切りとしてはセミコロン最高!
0860デフォルトの名無しさん2011/08/11(木) 18:32:00.08
>>859
いや、perlでも全てのセミコロンを回避する方法はあるよ
0861デフォルトの名無しさん2011/08/11(木) 19:13:39.64
それちょっと知りたい
どうやるの
0862デフォルトの名無しさん2011/08/11(木) 19:32:51.59
まさか、Filter::Simple使うとか?
0863デフォルトの名無しさん2011/08/11(木) 19:53:05.48
どうすんのかわからない、とか言っているやつは全員KENT汚染者な。
0864デフォルトの名無しさん2011/08/11(木) 20:44:04.39
まじで分らん。
use strict;
use warnings;
下だよな?もちろん。(<=この時点でKENTとは対極)
0865デフォルトの名無しさん2011/08/11(木) 22:08:17.47
よくわからんがblock使いまくるとかかな?
いずれにしても答は馬鹿馬鹿しそうな予感。
もしくは単なるブラフか。
0866デフォルトの名無しさん2011/08/11(木) 23:02:02.09
無理矢理演算子で繋ぐんじゃね
0867デフォルトの名無しさん2011/08/11(木) 23:42:25.24
全てをブロックで囲んだり、関数の引数の中に入れるとか、そんなんだろ。

>>863 の方がどうかしてると思うよ。
0868デフォルトの名無しさん2011/08/11(木) 23:49:41.68
カンマで繋いで、ブロックの最後のセミコロンを省略に一票。
0869デフォルトの名無しさん2011/08/12(金) 00:16:07.35
@perl5.10
use strict, use warnings 「しなくても」

{ use feature qw(say) and say "hello" } # => x
{ use feature qw(say) , say "hello" } # =>x
{ use feature qw(say) }{ say "hello" } # =>x

pragma系の呼び出し全滅じゃね?
BEGIN{ } あたりで対処も出来ねーし。
0870デフォルトの名無しさん2011/08/12(金) 00:24:22.36
ん、そのへんはこれでいいんじゃ?

BEGIN { require feature and feature->import('say') }
say "hello" and say "goodbye"
0871デフォルトの名無しさん2011/08/12(金) 00:35:59.36
featureに関してはその通りでした、失礼。
0872デフォルトの名無しさん2011/08/12(金) 01:07:18.52
そんなことより、Perlの世界のオブジェクト指向って
現在はMoose(Mouse)を使うのが標準なんですか?
0873デフォルトの名無しさん2011/08/12(金) 01:26:51.98
>>872
そうムキにならなくても。
ハカーさま方はそうおっしゃってる方が多いです。
個人的にもお勧めです。
Moose/Mouseを利用したCPANモジュールも結構あるようです。
でもPerlディストリビューションに付いてくるいわゆる標準モジュールではありません。
0874デフォルトの名無しさん2011/08/12(金) 01:40:35.33
>>873
標準モジュールで似たようなのあるのですか?
0875デフォルトの名無しさん2011/08/12(金) 07:14:57.84
>>874
似たような…というと語弊があるけど、
OO支援という意味では Class::Struct というのがある。
0876デフォルトの名無しさん2011/08/12(金) 11:27:05.96
Lisp風味に書けばセミコロンは要らないかも知れないが、変数が面倒すぎる。

sub factorial {
    if ($_[0] <= 1){
        return $_[1]
    }
    else {
        return factorial($_[0]-1, $_[0]*$_[1])
    }
}

print factorial(10, 1)
0877デフォルトの名無しさん2011/08/12(金) 11:44:06.92
必ず中でreturnする、という条件なら

while (my($x, $y) = @_) {
...
}

とする手があるな。letっぽく。
0878デフォルトの名無しさん2011/08/12(金) 12:36:05.67
>>877
その条件は無くても大丈夫
while(my(...)=@_ or 1){ ... } continue {last}
if(my($x,$y)=@_ or 1) { ... }
for ([my($x,$y)=@_]) { ... } 等。
0879デフォルトの名無しさん2011/08/12(金) 13:53:25.00
givenの事も忘れないであげて

given (my(…) = @_) {…}
0880デフォルトの名無しさん2011/08/12(金) 21:48:53.10
given my chocolate
0881デフォルトの名無しさん2011/08/13(土) 00:36:09.36
階乗計算のプログラムなんですが
my $fact = sub {
my $n = shift;
if (n == 1) {
1;
}
else {
n * $fact->(n-1);
}
};

$fact->(5);

なぜこれは実行できないのでしょうか?
0882デフォルトの名無しさん2011/08/13(土) 00:39:27.24
if ($n == 1) {
でした。申し訳ございません。
0883デフォルトの名無しさん2011/08/13(土) 00:49:24.25
n * $fact->(n-1);
0884デフォルトの名無しさん2011/08/15(月) 00:17:14.75
ARRAY(0x...)やHASH(0x...)という文字列はその実体がある場所を示していて
配列やハッシュにアクセスするための文字列と見て問題ないでしょうか?
0885デフォルトの名無しさん2011/08/15(月) 01:15:41.75
文字列って解釈じゃなくて、実体のある (配列やハッシュの場合は先頭の) アドレス

C みたいにアドレスを意識する必要が無いので、perl の場合は C の様に実体のあるアドレスという
解釈よりもリファレンスのユニーク ID って思った方が分かりやすいかも
0886デフォルトの名無しさん2011/08/15(月) 01:28:08.42
>>884
考え方が逆かな
「実体がある場所」がデータとして入ってて
それを文字列として表現するとそうなる、が正しい

例えば、文字列として出て来た表現をそのまま別の変数に文字列として入れても
その文字列からは元の変数のデータにはアクセス出来ない
0887デフォルトの名無しさん2011/08/15(月) 01:40:24.09
使いどころは eq で同一のリファレンスかどうかを比較するときぐらいのもんかねえ
"" を overload してるクラスのインスタンスだとだめだけど
0888デフォルトの名無しさん2011/08/16(火) 00:57:38.02
>>885-887
データにアクセスできる特別な文字列が入るのではなく、実体がある場所のアドレスが入っていて
それをprintした場合は文字列として表現したものになるってことですか

これってリファレンスに関連したものだったんですね・・・
分かりやすかったです、ありがとうございました
0889デフォルトの名無しさん2011/08/16(火) 02:38:03.25
push (@LIST, [$1, $2]) while (/ (\d+)_(\d+) /g);

みたいな処理をmapを使ってやる方法はないでしょうか?
0890デフォルトの名無しさん2011/08/16(火) 03:48:08.44
>>889
map にする理由がわからん。
無理やり map で書くならこうか?
map{ push (@LIST, [ split /_/ ]) } (/ (\d+_\d+) /g);
0891Perl忍者2011/08/16(火) 10:48:08.10
上級者っぽくマイナーなmapで書きたがるんだよ雑魚だから
0892デフォルトの名無しさん2011/08/16(火) 12:58:50.12
>>889
my @list;
...
@list = (@list, sub{ map{ [splice(@_, 0, 2)] } (1..int(@_ / 2)) }->(/ (\d+)_(\d+) /g));
0893デフォルトの名無しさん2011/08/16(火) 13:20:17.31
リストコンテキストの /.../g がすべてのキャプチャをべたっと平らなリストで
返すからいらない苦労が必要なんだよなぁ。1回のマッチごとに無名配列でまとめて
くれれば便利だったのに。
0894デフォルトの名無しさん2011/08/16(火) 13:34:06.12
リストでの返り値は恩恵のほうが多いと思うけどなあ
それこそ必要なら>>889みたいにスカラーコンテキストでイテレートするという指針で特に困ったことないし
0895デフォルトの名無しさん2011/08/16(火) 15:33:57.20
http://search.cpan.org/~xern/Regexp-Bind-0.05/Bind.pm

Regexp::Bind::global_bind_array()で、一応できるみたい。
ソースを見た感じ、自前で実装してもよさそうだけど。

しかし、$#+という表現は初めて見た。
0896デフォルトの名無しさん2011/08/16(火) 18:08:39.67
>>892
2となってるところを>>895さんの教えてくれた$#+で置き換えるとそのものずばりの処理が完成しました
どうもありがとうございました
0897デフォルトの名無しさん2011/08/16(火) 18:23:41.88
フォームに,(カンマ)を入力して送信すると勝手に‚に変換されるんですけど
これって仕様ですか?勝手に変換されるのはカンマだけですか?
0898デフォルトの名無しさん2011/08/16(火) 18:28:30.35
かなり汚いんですがこれでも動きました
$_="1aA2bB3cC4dD";
@LIST = grep {$_} map {
if ($i++ % $#+ == $#+ -1) { $r=[@prev,$_]; @prev=(); $r }
else { push @prev, $_; undef }
} /(\d)(\C)(\C)/g;
print "[$_->[0], $_->[1], $_->[2]]\n" for @LIST;
0899デフォルトの名無しさん2011/08/16(火) 18:33:32.72
>>897は勝手に&#8218;に変換されるです
0900デフォルトの名無しさん2011/08/16(火) 18:49:47.92
もっと詳しく書くと,(カンマ)を入力して確認送信して
確認画面で$FORM_DATA{'text'} =~s/,/&sbquo;/g;でカンマを&sbquo;に変換して
それで書き込むでも$FORM_DATA{'text'} =~s/,/&sbquo;/g;で
カンマを&sbquo;として書き込もうとしているのですが
実際にファイルに書き込まれているのは‚;とかいうデータになっているんです
0901デフォルトの名無しさん2011/08/16(火) 18:50:41.16
&#8218;とかいうデータになっているんです
0902デフォルトの名無しさん2011/08/16(火) 19:04:48.17
>>1
0903デフォルトの名無しさん2011/08/16(火) 21:01:19.41
Perlはもう終わりなの?
0904デフォルトの名無しさん2011/08/16(火) 21:21:19.73
>>903
本来の役割であるUnix系システムにおけるテキスト処理の用途では
むしろ以前にも増して必須言語なってるかと

「シェルスクリプトやAWKよりPerlで書いたほうが多くのUnix系環境で期待通り動く」
と言っても今や過言ではないと思う
0905デフォルトの名無しさん2011/08/16(火) 21:28:16.17
.crontabを開くと*.plが並んでるというのは、あながち冗談じゃないのか
0906デフォルトの名無しさん2011/08/16(火) 22:59:21.25
crontabは人によるかも知れないが、そこいらのLinuxディストリビューションを
デフォルトインストールしただけでもPerlスクリプトがいくつかインスコされてると思うよ

ちなみにUbuntuでは「perl-base」パッケージを削除しようとすると
「この操作を行うと、システムが不安定になる可能性があります。続行しますか?」
と聞かれるほどにシステムに入り込んでるみたい
0907デフォルトの名無しさん2011/08/16(火) 23:12:26.40
@data=(100,200,300);

foreach $nnn(@data){

$nnn = &henkan($nnn);

}


foreach (@data){

print "data=$_<br>";

}


sub henkan{

my($henkan_data) = $_[0];

$henkan_data = "30000";
return($henkan_data);

}

@dataが全部30000に置き換わっていました。
どうして置き換わってしまうんでしょうか?
$nnnの値を変えると@dataも変わってしまうのですか?
0908デフォルトの名無しさん2011/08/16(火) 23:19:42.38
>>907
その通り。
0909デフォルトの名無しさん2011/08/16(火) 23:57:25.94
何故そうなるか説明出来ないけど、そうなるのが仕様。

まぁそもそもループとなる対象を、そのループ内で書き換えるのはお行儀が良いとはいえないかな。
0910デフォルトの名無しさん2011/08/17(水) 00:12:21.44
perldoc perlsyn

In other words, the
"foreach" loop index variable is an implicit alias for each item in the
list that you're looping over.

言い換えると、forループの帰納変数がループの対象となっているリスト中の
個々のアイテムに対する暗黙のエイリアスである。

帰納変数 => ここでは、$nnn
0911デフォルトの名無しさん2011/08/17(水) 01:28:08.94
>>907のような場合、
どう書き換えるのが正しいの?
0912デフォルトの名無しさん2011/08/17(水) 01:32:13.89
>>907はコードが多すぎる。
henkanは30000を戻しているだけ。
だからこう書き換えられる。

@data=(100,200,300);
foreach $nnn(@data){
  $nnn = 30000;
}

ループの変数は、@dataの中身をコピーしたのではなく、
エイリアス。同じものを指している。
だから書き換わる。
0913デフォルトの名無しさん2011/08/17(水) 01:38:15.82
>>911
foreach $nnn(@data) {
    $mmm = &henkan($nnn);
}

>>912
いや、そこまで省略すると意図が解りにくいと思うぞ。
0914デフォルトの名無しさん2011/08/17(水) 02:24:11.38
>>913
え?
0915デフォルトの名無しさん2011/08/17(水) 02:55:33.72
>>914
henkan($nnn) とわざわざ書いたことで
「元の値を処理した結果を使いたい」って部分が明確になる。
即値を入れちゃうコードにするとその辺がちょっと曖昧になってしまうからね。

確かに意味としては=30000でも通じなくもないんだけど
「コードが多すぎる」って指摘は流石に的外れだと思うのよ。
ひとつ処理を噛ませたことで意味がより明確になってんだから、多すぎるってこたあない。
0916デフォルトの名無しさん2011/08/17(水) 04:10:55.30
henkan関数見てみろよ。

その中で何してようが結局は30000返してるだけだろ。
0917デフォルトの名無しさん2011/08/17(水) 06:17:57.58
>>912のコードの方がいいな。「何をしたいか」どころか「何をしているか」まで明確になってるし。
「コードが多すぎる」はまず sub henkan {} の中の話だな。なにがやりたいんだか意味不明。
0918デフォルトの名無しさん2011/08/17(水) 06:36:08.13
PBPやらのお作法本を一通り読めば、913氏の主張にはなり得ない。

この場合明らかな初期化だから、ループを回す必然性すら無く
素直に、@data = (30000) x @data;あたりのコードにしとけ。
てのは別の話し。
0919デフォルトの名無しさん2011/08/17(水) 13:14:15.10
INPUTタグはhiddenで&lt;&gt;で送ると勝手に<>に変換されるけど
textで&lt;&gt;と入力すると<>になはならいんだな
0920デフォルトの名無しさん2011/08/17(水) 13:21:42.60
バカはいい加減お引き取りください
0921デフォルトの名無しさん2011/08/17(水) 14:01:01.74
>>919
テキストで入力するのは全部変換されるよ
perlにはまったく関係が無い
0922デフォルトの名無しさん2011/08/17(水) 14:24:30.17
>>919
Webサイト制作初心者用質問スレ part225
http://hibari.2ch.net/test/read.cgi/hp/1308415898/
(X)HTML/CSS/Dreamweaverの質問に優しく答えるスレ10
http://hibari.2ch.net/test/read.cgi/hp/1311271961/
【総合】 Webprog板質問雑談スレッド 1
http://hibari.2ch.net/test/read.cgi/php/1131016915/
コレカラWebProgオ勉強シヨウトシテル香具師ガ雑談スルスレ
http://hibari.2ch.net/test/read.cgi/php/1049476765/
0923デフォルトの名無しさん2011/08/17(水) 19:14:03.85
perl-5.13.3 で以下のコードだけを走らせるとどちらのサブルーチンもメモリを解放してないっぽいです(Mac の Activity Monitor で見ている限り)。
明示的に undef すればいいと思ってたんですが、なにが起こっているのでしょうか。
ついでに hoge() より hoge2() の方が二倍のメモリを消費しているようです。
これも意味がわかりません。

なんだか気持ち悪いので、どなたか救って下さい。

hoge();
hoge2()
sleep();

sub hoge {
my $str = "";
$str .= " " for (1..10000000);
undef $str;
1;
}

sub hoge2 {
my $str = " " x 10000000;
undef $str;
1;
}
0924 忍法帖【Lv=23,xxxPT】 2011/08/17(水) 19:54:17.32
tset
0925デフォルトの名無しさん2011/08/17(水) 20:56:22.00
>>923
perlがOSからmallocした領域をfreeせずに持ち続けてるだけで、
perlの変数的には解放されてるんだろう。

関数呼ぶ度にメモリが増えていくとかじゃないだろ?
0926デフォルトの名無しさん2011/08/17(水) 21:30:15.55
>>925
増えるよ
0927デフォルトの名無しさん2011/08/17(水) 21:36:40.25
>>923
Macってユーザーランドに開発版を採用してるの?
http://search.cpan.org/dist/perl/
0928デフォルトの名無しさん2011/08/17(水) 22:51:04.66
何でMacでperlをコンパイル出来ないと思い込んでんの?
0929デフォルトの名無しさん2011/08/17(水) 23:22:59.50
なんで野良ビルドなんか使って気持ち悪いとか言うの
0930デフォルトの名無しさん2011/08/17(水) 23:33:11.54
ぱーるはじっこうちゅうはめもりかいほうはしないよ
あんでふしてもじつめもりはかくほしたまま
0931デフォルトの名無しさん2011/08/17(水) 23:42:26.60
あ、あんでふってー
0932デフォルトの名無しさん2011/08/18(木) 00:02:27.56
てsst
0933デフォルトの名無しさん2011/08/18(木) 00:05:56.76
>>907
foreachよかmap使えmap。
その方が美しく書ける。
一時変数$nnnも無くて済む。

@dataHenkan = map{henkan($_)}@data;

それと一時変数の$nnnをそのループ内で書き換えるのはかなり気持ち悪い。
プログラミングの扇子無し。
0934デフォルトの名無しさん2011/08/18(木) 02:02:16.27
>>933
そういう話じゃねーだろ。
なんで中身読まないでレスしてんだ?
0935デフォルトの名無しさん2011/08/18(木) 02:45:10.85
もだんなひとはあいだのれすなんかよみません!
だからじだいのながれとかかんけいなしにもだんもだんいってるのです

はいはいもだんもだん
0936デフォルトの名無しさん2011/08/18(木) 03:04:36.56
ファイルからデータを読み込み、読み込んだデータの一部を整数とか、数字として扱いたいときに

my $line = <FH>;
chomp $line;
my $integer = int($line);

とするのはバカな行為なんでしょうか?


$line が整数と分かっていた場合、例えば if($line == 5) とやってもいいものなんでしょうか?
0937デフォルトの名無しさん2011/08/18(木) 03:11:47.34
おっけいです
0938デフォルトの名無しさん2011/08/18(木) 10:40:07.95
>>936
数値である限り通るけど
eval したり内容チェックしたりする方が身のためだよねってだけじゃない?
09399232011/08/18(木) 10:56:30.83
>>930
あんでふしてもだめなら、メモリ解放する方法はないってことでしょうか。
リファレンスカウンタの状態まではわかりませんが。
あるいは、そもそもこんなメモリ圧迫コードは常に避けることができるってことでしょうか。
0940デフォルトの名無しさん2011/08/18(木) 11:36:57.36
>>938
外部データはevalしちゃだめよ
もし改変されててrmとかだったらどうすんの
0941デフォルトの名無しさん2011/08/18(木) 14:52:36.37
…ごめんrmでもPerlの文じゃなければ大丈夫か
"`rm -rf /`"みたいな文字列に改変されてたらってことね
0942デフォルトの名無しさん2011/08/18(木) 18:12:07.40
looks_like_numberでおk
0943デフォルトの名無しさん2011/08/18(木) 18:31:23.50
>>939
Cで書きなよ
自分でメモリ管理するってええよ
0944デフォルトの名無しさん2011/08/19(金) 00:20:26.36
>>933
> それと一時変数の$nnnをそのループ内で書き換えるのはかなり気持ち悪い。

Perlでは常套手段。
おまえはもうPerl使うな。
0945デフォルトの名無しさん2011/08/19(金) 00:27:46.65
active perl 5.12.1 で引数与えてスクリプト起動しても @ARGV に入ってくれないんだけど。。。

同じスクリプトを同じ起動の仕方で 5.10.0 で実行させたら @ARGV には入る。。。
0946デフォルトの名無しさん2011/08/19(金) 02:39:04.19
mapを使用する基準って何かね。
書きながら考えてるから最初にmapを書くと、
よっぽど簡単な処理のとき以外は、あとから処理が増えていくから
foreachに書き換えることが多い。
だからforeachで一通り書いて、mapに直せるところは直すって感じでやってるんだけど、


0947デフォルトの名無しさん2011/08/19(金) 02:52:53.96
既存リストから新しいリストを作るときはmapかなあ
0948デフォルトの名無しさん2011/08/19(金) 03:48:10.49
ただね。mapで簡単にかけたからと言って、
速いとは限らないんだよな。
0949デフォルトの名無しさん2011/08/19(金) 05:05:00.96
俺は割と積極的にmap&grepするなあ。
迷う時には確かにforeachでエイヤで書いちゃうほうが楽なんだけどね。
0950 忍法帖【Lv=38,xxxPT】 2011/08/19(金) 06:12:31.65
>>945
省略した書き方で デフォルト変数 @_ に入ってくれない時があったけど同じようなもんかな
0951デフォルトの名無しさん2011/08/19(金) 09:25:27.46
文字通り変換作業なら map で、逐次作業なら foreach では。
あと特に配列がでかいときは foreach のほうが省メモリでよいと言いませんか。
0952デフォルトの名無しさん2011/08/19(金) 12:42:55.11
my $h= {AA => q(aa), BB => q(bb) };
undef($h->{AA});
delete($h->{BB});
print scalar(keys %$h),"\n";

とすると1が返って、 $h は { AA=> undef } というhashになるが、
これが仕様?
undef($h->{AA}) と delete($h->{AA}) は違うのか…


0953デフォルトの名無しさん2011/08/19(金) 13:08:14.58
配列やハッシュの要素削除には delete 使えってどこかに書いてあった
0954デフォルトの名無しさん2011/08/19(金) 13:09:51.57
>>952
http://perldoc.jp/docs/perl/5.6.1/perlfaq4.pod#Whats32the32difference32between32delete32and32undef32with32hashes63
09559522011/08/19(金) 13:14:40.86
FAQ なのか、知らなかった。
どうもありがとう。
0956デフォルトの名無しさん2011/08/19(金) 15:22:27.18
delete された要素が含むであろう配列やハッシュで、
データとして長さゼロの文字列や0を持つ場合は、
exists で存在有無を確認しながらブン回すこと。
09579452011/08/19(金) 16:00:31.28
perl test.pl opt1 opt2

ってやると引数とれた

むぅ・・・
0958デフォルトの名無しさん2011/08/19(金) 16:21:50.43
どうやってこれまでとってた
0959デフォルトの名無しさん2011/08/19(金) 16:37:13.40
5.12.4だが関連付け起動でもちゃんと入るぞ
0960デフォルトの名無しさん2011/08/19(金) 18:02:18.76
&#数字;(数値参照文字)が含まれているかどうかを正規表現で判別するにはどうしたらいいですか?

$str="あああ&#12354;あああ";

if($str =~/&#[0-9]/g){
print "数値参照が含まれています";
}

これで行かないんです><
0961デフォルトの名無しさん2011/08/19(金) 18:43:01.31
>>960
こんなでも動く。
てか、webprog板で質問してる人じゃないのか。

use utf8;

my $str="あああ&#12354;あああ";
if($str =~/&#[0-9]/g){
    print "Numeric character references INCLUDE !!!\n";
}
09629452011/08/19(金) 20:03:43.37
>>958-959
5.6.x (過去の実行環境) とか 5.10.0 (開発環境) の環境だと普通に出来る
でも 5.12.1 (現在の実行環境) だとダメ。

test.pl
print join "\n", @ARGV;

っていうスクリプトさえ 5.12.1 だと表示されない。けど perl test.pl ならいける。

5.12.1 を捨てろって言われればそれまでなんだけどw
0963デフォルトの名無しさん2011/08/19(金) 21:21:19.40
これは strawberry perl だけど945の人の悩み事に似てるような。
http://www.nntp.perl.org/group/perl.win32.vanilla/2011/02/msg284.html

同じように関連付けが path\to\perl.exe "%1" %* になってるべきとこが
path\to\perl.exe "%1" になってたりしないのかな?
09649452011/08/19(金) 23:12:46.91
直った!!
まさか関連付けとは思いもよらなかったorz

thx♪
0965 忍法帖【Lv=39,xxxPT】 2011/08/20(土) 02:11:21.01
なんということでしょう
0966デフォルトの名無しさん2011/08/20(土) 15:52:19.15
>>951
mapがメモリくうのって、
@A = map { $_ + 1 } @A;
みたいに、左辺と右辺で、同じ@Aを使用した場合だけじゃないかな。
0967デフォルトの名無しさん2011/08/20(土) 17:10:16.57
それ、新規に@Bを作った場合に比べ省メモリだぞ(perl5.10)
実際にコード作って動かしてみ?

同様に、
my @dat = 1 .. 10000000;
for( @dat ) {$_ = $_ * 2 } #1
@dat = map { $_ * 2 } @dat #2

#1 と #2 は top で見たかぎりはメモリ使用量に
顕著な差は見られなかったが?
0968デフォルトの名無しさん2011/08/20(土) 17:16:33.48
Perlで3次元の配列を表現するにはどのような方法があるでしょうか?
変数$aにx,y,zの3変数から求まる値を代入したいのです。

$a=val[x][y][z]みたいなイメージなんですが。
0969デフォルトの名無しさん2011/08/20(土) 17:18:15.81
あ、usemymallocしてないから、perlのmallocね。
0970デフォルトの名無しさん2011/08/20(土) 17:22:08.04
Hogeパッケージ内の関数func0から
同じHogeパッケージ内の関数func1を呼ぶには Hoge::func1( ) とする以外にありますか?
0971デフォルトの名無しさん2011/08/20(土) 17:26:37.18
単に func1() でいいんじゃねえの?
09729702011/08/20(土) 17:32:19.69
>>971
すみません大切なこと書いてありませんでした。

実際のプログラムで呼ばれている関数名が exists なので
main::exists との区別をするための呼び出しをする必要があります。
0973デフォルトの名無しさん2011/08/20(土) 17:36:34.26
そんな名前を付けるなよ
09749702011/08/20(土) 18:05:42.18
>>973
それって、パッケージ/モジュールの根幹を否定してません?

今のところ、Hoge::exists( arg ) って呼べば良いってのは分かってる(当たり前ですが)
同じパッケージ内なら別の呼び出し方あるのかなぁ、と思い質問しました。
0975デフォルトの名無しさん2011/08/20(土) 18:17:13.99
>>966
> @A = map { $_ + 1 } @A;
こんな場合は
map $_++, @A;
でよろしい。
0976デフォルトの名無しさん2011/08/20(土) 18:21:32.05
>>969
orz...
これは、697の補足で
>あ、usemymallocしてないから、perlのmallocね。
usemymallocしてないからsystemのmalloc使ってるって事でした。
毎回間違える。

>>968
実際に求めてるのはハッシュかもしれないから
perldoc perllol するか、perllolをググるかして下さい。
09779712011/08/20(土) 19:02:48.38
>>974
それなら &exists( arg )
あと細かいこと言うと、区別しなきゃいけないのは main::exists とじゃなくて CORE::exists な。

ともあれ俺も>>973に同意。
予約語とかぶる名前を使うなんてのは、何の言語だろうとよほどの必要性がない限り避けるべきじゃないかね。
たとえば、同じパッケージ内からしか呼ばないのが前提の関数なら _exists とかにしたほうがいい。
オブジェクト指向モジュールでコア関数と同じ名前のメソッドを持ちたいってことはあるけど、でもそういう場合なら $self->exists で呼ぶだけだから関係ないな。
0978デフォルトの名無しさん2011/08/20(土) 19:12:28.22
>>974
否定してないよ。
functionとモジュールを混同するのよせば?

ちょっと例を挙げると、
perlのfunctionはオーバーライド出来ないものもある。
それに対しユーザーの関数は自由。
ttp://docstore.mik.ua/orelly/perl/cookbook/ch12_12.htm
0979デフォルトの名無しさん2011/08/20(土) 19:15:07.58
先生URLがなんか危険な香りがします
0980デフォルトの名無しさん2011/08/20(土) 19:26:12.52
すまん。怪しい薫りが確かにするわw

つーことで、perldoc perlsub より
>Finally, some built‐ins (e.g. "exists" or "grep") can’t be overridden.
0981デフォルトの名無しさん2011/08/20(土) 20:10:58.80
次スレ立てる人は >>1-3 の確認と修正よろしく。
0982デフォルトの名無しさん2011/08/20(土) 20:18:28.61
ただでさえ面倒な次スレ立てなのにそりゃないだろう
確認修正テンプレ貼っとくから立ててくれってならわかるが
0983デフォルトの名無しさん2011/08/20(土) 20:25:13.57
確認修正して次スレ立てる旅に出ますよ。

ところでこのスレ立てたとき過去スレ要らんぞと言われたけど切ってもよい?
自分でも貼ってて長いよなーと思った。
0984デフォルトの名無しさん2011/08/20(土) 20:32:18.51
確かに過去スレは要らない

0985デフォルトの名無しさん2011/08/20(土) 20:33:55.37
正規表現が無限ループに陥ったのを関知する方法をおしえてください。
0986デフォルトの名無しさん2011/08/20(土) 20:35:06.03
s/www\.(perldoc\.jp)/$1/;

立ててきます。
0987デフォルトの名無しさん2011/08/20(土) 20:37:27.01
はい。

Perlについての質問箱 48箱目
http://hibari.2ch.net/test/read.cgi/tech/1313840197/
0988デフォルトの名無しさん2011/08/20(土) 20:38:31.04
>>985
ムリダナ(・×・)
0989デフォルトの名無しさん2011/08/20(土) 20:41:05.09
たぶん無理なのでalarmでもかけとけば?
0990デフォルトの名無しさん2011/08/20(土) 20:52:05.86
正規表現が無限ループになる前に
ソースコードを読んで無限ループ部分を検出する正規表現を書けばいいジャン!!!
オレって甜菜!
09919852011/08/20(土) 21:06:11.44
みなさん回答ありがとうございます。
alarmを使ってみます。
0992デフォルトの名無しさん2011/08/20(土) 21:41:47.79
無限ループ検出とはちょっと違うが、昔流行った
Smart::Commentsは、ループの進捗が把握出来て
何気に便利

と埋めついでにコメント。
0993デフォルトの名無しさん2011/08/20(土) 22:00:56.10
Perlで条件判定して強制的に終了するようなコマンドってありますか?
cのexit(0)みたいなのです。
0994デフォルトの名無しさん2011/08/20(土) 22:08:35.04
      ,,,,wwWWwwWwWム,,,
    ミミ三ミ川ミミ川三ミ川ミ川ミ
   ミ_川ミ_ミ川ミミミ_ミ_ミ_ミ三ミ_゛ミ
  ミ_川三川三ミ ,.--"゛~~~~''´゛゛゛ミ_
  ミミ川三ミ川ミミ_.         丶
  ミ川ミ_リ川ミミ_川          |
  ミ川ミリ川川ミ川 ‐、_‐rッ,  i、 'ニi.ア,
   川川リ,r' ミミ_川    ̄  .!i ヽ、 |
   川川リ(,(, 6 リ川      ィ.___)) |
   リ川川`ー |川!、    . _.i'I.  |
   川リ川   l)))    -´=ェエ=,` /
    リ川)   川        ̄  /
  /人   ヽ    ゛゛ー,,,,_...,ノ
/       ヽ      入´
0995デフォルトの名無しさん2011/08/20(土) 22:16:38.52
perlでもexit
0996デフォルトの名無しさん2011/08/21(日) 02:28:28.68
          /      / /| : /              i:     ∨/ ノリ  /⌒)
       /イ     : / ⌒ト |    /|  ∧      |:    |、__,彡   {  ⌒)
        |/ . : : :| :/  | l   |/  /⌒ト、:/∨:!:     |/: : : ハ / ̄ ̄
(⌒ヽ       レイ: : : : 〃⌒心八 │ ∨   | :/\| :     | : : : : : |
 ヽ  ヽ、  -、:|: :|: イ{{. i_ノ:.:ハ \|      |/   :|/     厶L:_:」_:リ
  \  `(  }八八ハ. 弋いソ     __   /     ,: : : : : |   はっじまるよー
   /  ⌒ヽ ∨ : : :j(//)  .      ⌒¨¨~ヾ /: :    / :   リ
  〈   ´ ̄)  | : {           _     (//) : :   / : :   |
   '    '⌒) }i| : :丶    「   }   ∠/: :   / : : :   |
   '.  ノ´ {八 : :∧\    __ノ      / : : :  / : : : : 人|
          } \厶:∨::>  _,,,...  ´/: :/| 〃丶:∧: :/
    /〉   ∧ /{:::|「::::::::::::::::: ∧    // /|/::::::::::\|/
0997デフォルトの名無しさん2011/08/21(日) 10:23:13.51
>>967
埋めがてら。自己レスと975への反論レス。
# 当然 malloc に挙動が影響されるスクリプト

sub myps { print `ps ux $$`};
sub map_overwrite { my @dat = 1 .. 5000000 ; @dat = map { $_ + 1 } @dat ;}
sub map_overwrite2 { my @dat = 1 .. 5000000 ; map { $_ ++ } @dat ; }
sub map_new_array { my @dat = 1 .. 5000000 ; my @dat2 = map { $_ + 1 } @dat ; }
sub for_overwrite2 { my @dat = 1 .. 5000000 ; for(@dat) { $_ ++ } ; }
myps ;
CODE:
{
 if ( $ARGV[0] == 1 ){ map_overwrite ; last CODE ; }
 if ( $ARGV[0] == 2 ){ map_overwrite2 ; last CODE ; }
 if ( $ARGV[0] == 3 ){ map_new_array ; last CODE ; }
 if ( $ARGV[0] == 4 ){ for_overwrite2 ; last CODE ; }
}
myps ;
0998デフォルトの名無しさん2011/08/21(日) 10:23:39.52
実行結果
% perl hoge.pl 1
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
HOGE 54445 98.2 31.1 3765716 1303964 s001 R+ 10:08AM 0:03.48 perl hoge.pl 1
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
HOGE 54445 100.0 32.0 3804780 1343036 s001 R+ 10:08AM 0:06.14 perl hoge.pl 1
% perl hoge.pl 2
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
HOGE 54467 100.0 31.1 3765716 1303968 s001 R+ 10:08AM 0:03.49 perl hoge.pl 2
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
HOGE 54467 100.0 34.5 3935852 1447636 s001 R+ 10:08AM 0:05.40 perl hoge.pl 2
% perl hoge.pl 3
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
HOGE 54514 98.8 31.1 3765716 1303968 s001 R+ 10:08AM 0:03.48 perl hoge.pl 3
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
HOGE 54514 99.0 33.0 3843844 1382100 s001 R+ 10:08AM 0:06.30 perl hoge.pl 3
% perl hoge.pl 4
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
HOGE 54548 99.5 31.1 3765716 1303964 s001 R+ 10:08AM 0:03.47 perl hoge.pl 4
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
HOGE 54548 99.3 32.0 3804780 1343036 s001 R+ 10:08AM 0:04.85 perl hoge.pl 4

メモリ使用量(初期キープ分 - 実行後メモリ)は、
@dat = map { $_ + 1 } @dat ;# => 0.9%
map{ $_ ++ } @dat ;# => 3.4%
my @dat2 = map { $_ + 1 } @dat ; # => 1.9%
for(@dat) { $_ ++ } ; # => 0.9%

左辺値の値を利用しないmapがこれだけ無駄なのは
左辺値用の値をどっか無名配列にキープし続けてるからと
考えるべきか…
ま、何れにせよ使うべきでは無いコードだ。
0999デフォルトの名無しさん2011/08/21(日) 10:28:00.96
×メモリ使用量
◯解放されてないメモリ量
1000デフォルトの名無しさん2011/08/21(日) 10:34:09.81
梅ー
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。