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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
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 あたり
2デフォルトの名無しさん: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/
3デフォルトの名無しさん:2011/05/25(水) 23:19:02.02
4デフォルトの名無しさん: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 でエンコードする必要があります。
5デフォルトの名無しさん:2011/05/25(水) 23:19:21.98
6デフォルトの名無しさん:2011/05/25(水) 23:19:28.30
7デフォルトの名無しさん:2011/05/25(水) 23:19:36.28
8デフォルトの名無しさん:2011/05/25(水) 23:21:56.41
>>1

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

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



use encoding "cp932";

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

とりあえず、最初は

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

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

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

テンプレが長いのは過去スレが多いからだが、過去スレはやめても
いいんじゃない?
他のスレでも、省略しているものが多いみたいだし。
19デフォルトの名無しさん: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;というようにするには
どうしたらいいんでしょうか?
20デフォルトの名無しさん:2011/05/26(木) 18:19:43.27
>>19
そんなこと聞いてるやつがインジェクション攻撃に
対処できると思わないからタグ自体禁止する。
21デフォルトの名無しさん:2011/05/26(木) 18:44:50.03
たぶん聞かないなこりゃ<タグ禁止
22デフォルトの名無しさん:2011/05/26(木) 18:50:12.18
>>19
1.行全部のクォートを"にする
2.タグの中の"を'に変換する
3.SQLなどへのインジェクションで泣きを見る
4.あなたは晴れて失業
5.perl忍者が増える
23デフォルトの名無しさん:2011/05/26(木) 21:40:54.68
すみません初歩的な質問なのですが
ハッシュ変数wordに$word{"テスト"}="だよ";
のような感じで値を渡しているのですが
いざif文で if ($word{$a} == "だよ")で判別しようとすると
$aがどんな値でも上記の条件式が必ず実行されてしまいます。
意味不明だと思いますがエスパーの方いましたらよろしくお願いします。
24デフォルトの名無しさん:2011/05/26(木) 22:03:53.54
初歩の初歩だ
文字列比較には==ではなくeqを使え
25デフォルトの名無しさん:2011/05/26(木) 22:33:22.35
== eq
!= ne
常識
26デフォルトの名無しさん:2011/05/26(木) 22:42:03.07
>>24-25
無事解決しました!
なるほど文字列の比較の仕方が間違ってたんですね。
どうもありがとうございました。
27デフォルトの名無しさん:2011/05/26(木) 23:01:20.86
>>19
タグの外ってことは > と < にはさまれてるって考えれば良いかと
28デフォルトの名無しさん:2011/05/26(木) 23:10:34.54
>>27
<img/>とか<br/>はどうすんの
29デフォルトの名無しさん: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
30デフォルトの名無しさん:2011/05/27(金) 03:45:12.00
うーむ、>>14の例がどうしてutf8が優先されるのか分からない。
それは置いといて、encodingを使うと、
binmode STDIN => ":raw :encoding(cp932)";
binmode STDOUT => ":raw :encoding(cp932)";
こうなって、"\n"の挙動が変わるから注意は必要だね。
31デフォルトの名無しさん:2011/05/27(金) 08:24:04.59
単に記述を短くしたいだけなら以下でいいのでは?

use utf8;
use open qw(:encoding(cp932) :std);
32デフォルトの名無しさん: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;
33デフォルトの名無しさん:2011/05/27(金) 13:05:02.52
文字列の #ff4500ff とか 16進数の 0xff4500ff とかを
0 から 1 までの範囲の RGBA の配列に変換してくれるモジュールには
どういったのがあるのでしょうか?
サブルーチンを自分で書いた方が早い気がしますが、
CPAN にあるのならそれを使った方が良いかなあ?と思って
34デフォルトの名無しさん:2011/05/27(金) 13:25:00.08
正規表現で.(ドット)は改行以外の任意の1文字ですが
改行を含む任意の1文字はどう表現すればいいですか?
35デフォルトの名無しさん:2011/05/27(金) 13:39:48.57
>>34
s修飾子を使うか | で並べる

/./s
/.|¥n/

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

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

という指定で大丈夫でしょうか?
37デフォルトの名無しさん:2011/05/27(金) 17:58:40.36
>>36
礼儀正しくやるならそうなるね。
面倒ならSTDINだけ:crlfを追加とか。
binmode STDIN => ":crlf";
38デフォルトの名無しさん:2011/05/27(金) 18:52:12.71
$str="aaa{aaabbbccc}aaa{aaabbbccc}";の
{}の中のaaaをAAAにしたいんですけど
$str=~s/{aaa}/AAA/g;としてもうまくいきません
どうすればうまくいくんでしょうか?
39デフォルトの名無しさん:2011/05/27(金) 19:03:27.46
Perlはじめようと思ったのですが
やめたほうがいいといわれたのでやめます
40デフォルトの名無しさん:2011/05/27(金) 19:23:35.56
>>38
$str="aaa{aaa}aaa{aaa}";
なら $str=~s/{aaa}/AAA/g;でうまくいくよ。
41デフォルトの名無しさん:2011/05/27(金) 22:48:57.57
こえぇ…pmとかでお伺いを立てないで
CPANにUPすると容赦なくdisられるのな…。
42デフォルトの名無しさん: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」の読み込みはちゃんとできていたということになるんだけど。
43デフォルトの名無しさん:2011/05/27(金) 23:24:08.08
$name= $form['name'];
これなに
44デフォルトの名無しさん:2011/05/27(金) 23:27:48.26
連想配列のnameの要素を参照したんだけど。
45デフォルトの名無しさん:2011/05/27(金) 23:37:14.62
$name = $form{'name'};
46デフォルトの名無しさん:2011/05/27(金) 23:49:49.21
[] 配列
{} ハッシュパピー
47デフォルトの名無しさん:2011/05/27(金) 23:56:18.76
あ、そっか。ありがとう!

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

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


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

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

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

use CGI ':cgi-lib';
%form = Vars;
61デフォルトの名無しさん:2011/05/28(土) 12:29:11.06
ご丁寧にありがとうございました。
でもすでに手作業で移行しますた
62デフォルトの名無しさん:2011/05/29(日) 03:13:18.36
>>61
> でもすでに手作業で移行しますた
なってねえな〜「でもすでに」じゃねーだろ
そういう時はウソでも「参考になりました」とか「もっと精進します」とか書いとけよ
63デフォルトの名無しさん:2011/05/29(日) 03:23:49.62
これ以上ゴミコードを増やす意味はないだろ。
64デフォルトの名無しさん:2011/05/29(日) 04:26:29.99
>>63
日本語でおk
65デフォルトの名無しさん: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

なんかこうなるようになっちゃったんですけど
最初からやり直すにはどうしたらいいんざましょ?
66デフォルトの名無しさん: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

で良いんじゃないの?
67デフォルトの名無しさん:2011/05/30(月) 14:15:45.27
cpan> look Gtk2
68デフォルトの名無しさん:2011/05/30(月) 21:53:49.88
while(<>){
}
この<>はなんですか?
69デフォルトの名無しさん:2011/05/30(月) 22:06:24.93
>>68
@ARGVに設定された引数のファイル名の内容を順に1行読むか、引数がない場合は標準入力から読む 、という指定。
I/O Operators in perldoc perlop
70デフォルトの名無しさん:2011/05/30(月) 22:10:13.37
>>68
山カッコ演算子。
ダイヤモンド演算子とも呼ばれる。
71デフォルトの名無しさん:2011/05/30(月) 22:10:56.31
ダイヤモンド演算子
7270:2011/05/30(月) 22:35:16.91
>>71
ん?間違ってる?
73デフォルトの名無しさん:2011/05/30(月) 22:40:02.95
>>69-71
ありがとうございます。検索しても記号だと見つからないようなので助かりました。
74デフォルトの名無しさん:2011/05/30(月) 22:43:00.98
いえいえ、どういたしまして。
75デフォルトの名無しさん: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);
76デフォルトの名無しさん:2011/05/31(火) 10:25:46.36
q{0}
7775:2011/05/31(火) 13:01:56.41
>>76
ありがとうございます。Perlだったか!という感じです。

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

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

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

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

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

考えてみた結果、

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

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

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


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

あれ、関数を再度呼んだらoは初期化されないんですか?
ループの中だけで有効で、スコープ抜けたら初期化される物と勝手に思ってました。
すみません検索してきます。
83デフォルトの名無しさん:2011/05/31(火) 19:44:13.28
>>81
decode('cp932',$cp932_char);
decode('utf8',$utf8_char);
とかやってから処理すればいいんですかね?
なんだかどれがどれと一緒なのかわからなくなっとります
84デフォルトの名無しさん:2011/06/01(水) 15:03:51.07
まだこいつ文字コードのことやってんの
きもちわる
85デフォルトの名無しさん:2011/06/01(水) 15:57:02.30
波ダッシュとか意味わかんないんだもん・・・
86デフォルトの名無しさん:2011/06/01(水) 17:39:27.81
やっと解決したよ!
Mechanizeが悪かったこの野郎!
勝手にデコードしやがって!
寝る
87デフォルトの名無しさん: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'}){〜}

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


new() or die みたいな書き方を書かれてるってことは、new でエラーを返したい場合は undef を返しても OK という事ですよね?
9082:2011/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を初期化させる!」みたいな記述とかないんですか?
91デフォルトの名無しさん:2011/06/02(木) 01:05:24.66
/oの仕様って知ってる?
92デフォルトの名無しさん:2011/06/02(木) 01:14:17.30
>>89
他のモジュールでも参考にして好きにすりゃいいよ
あとreturnはundefじゃなくて引数なしにしとけ
93デフォルトの名無しさん:2011/06/02(木) 01:24:31.62
9490:2011/06/02(木) 01:42:21.43
>>93
ありがとう。
なんとも言いがたいルールでした。
95デフォルトの名無しさん:2011/06/02(木) 02:07:27.26
なるほど
undef を含む配列となる場合があるから return undef じゃなくて return のみ
書くと良い訳ですね。


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

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

やっぱ undef をちゃんと返したい (^_^;)
96デフォルトの名無しさん:2011/06/02(木) 02:18:51.37
>>95
質問の前に関数一覧ぐらい確認しろ
http://perldoc.jp/index/function
97デフォルトの名無しさん:2011/06/02(木) 07:00:23.29
2011-06-01 の形式で与えられる日付から
前日(2011-05-31)と、一週間前(2011-05-25)を求めたい
丁度いいモジュールか計算方法を教えて下さい
98デフォルトの名無しさん:2011/06/02(木) 07:20:17.60
use Date::Simple;
99デフォルトの名無しさん: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 もたしかにいいね
100デフォルトの名無しさん:2011/06/02(木) 14:14:14.98
>>75
separator やenclosure 自体のエスケープがないのだから、 $enclose$separat$enclose をそのまま並べた文字列がきたらアウトだろ。
CSVの """" や application/x-www-form-urlencoded の %HH のようなエスケープ処理がないと無理。
101デフォルトの名無しさん:2011/06/02(木) 15:35:44.19
必ずしもそうではないんだなそれが。元データに$separatが含まれていたら
$separatを1つ付け加えることで、$enclose$separat$encloseという並びが
付け加える処理を行った後のデータには含まれてないことが保証されるように
するって考えなわけです。$separatは前処理で少なくとも2回以上の繰り返し
になっているはずなので一つだけなら区切りだとわかるわけだな。
102デフォルトの名無しさん:2011/06/03(金) 00:16:40.95
> $enclose$separat$enclose をそのまま並べた文字列
それは存在出来ないのでは
10375:2011/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); で文字を壊さずに復元できるようです。
(メールは全文字列を受け付けます。問題は想定ミスや記述ミスだと思います)。

ちなみにセパレーターとかを選べるのは、プログラマーが処理が増大しないような文字を勝手に考えて決めろ、って言うことです。
104デフォルトの名無しさん:2011/06/03(金) 07:04:43.98
>>98 >>99
うまくいきました。ありがとうございます
105デフォルトの名無しさん: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 と同時に一行で書ける処理があったような気がするんですが、
どうにも思い出せません。
すみませんけど教えてください。
106デフォルトの名無しさん:2011/06/04(土) 02:27:32.10
107デフォルトの名無しさん:2011/06/04(土) 02:27:53.05
108デフォルトの名無しさん:2011/06/04(土) 02:28:23.45
109デフォルトの名無しさん:2011/06/04(土) 02:37:49.06
$map = ([1] x 151) x 200;
でいいのだろうか?

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

ごめんなさい、なんかどうカッコを書けばどうゆうリストが返るのかイマイチ分かってないです。
110デフォルトの名無しさん:2011/06/04(土) 02:46:04.63
([(1) x 151]) x 200
こうのような気がしてきました。一応試してみますけど、
カッコとxの関係を誰か教えてください。
111デフォルトの名無しさん: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__
112デフォルトの名無しさん:2011/06/04(土) 03:03:25.72
>>111
すみません、mapを使わなくても出来たような記憶があるんです。


テストしてませんが調べてきました。
xはスカラー値に対しては、その回数を繰り返し連結したスカラーを返すようです。
()に対する x は全く別の働きをし、リストとして複製し、リストを返すようです。
まだテストしてませんが、たぶん>>110で大丈夫だと思います。
113デフォルトの名無しさん: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"

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

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

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

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

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

my $obj = CGI->new;
とか、書くのが書籍などではオブジェクト思考と言われていますが
普通に require や use して、package::package_sub();
として呼び出すだけじゃだめなんですか?
そもそも、パッケージ化してその都度呼び出すこと自体がオブジェクト指向じゃないんですか?
141デフォルトの名無しさん:2011/06/06(月) 06:08:37.67
>>140
状態を持つオブジェクトを複数同時に扱 うのが楽。
IO::FileのかわりにIO::Stringをサブルーチンに渡すなどの応用が楽。
ただしモジュールを書く側は再利用を考えて設計するので面倒。
142デフォルトの名無しさん:2011/06/06(月) 06:12:13.10
143デフォルトの名無しさん: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の[]の中に乱数をそのまま入れたいんです、お願いします><
144デフォルトの名無しさん:2011/06/06(月) 23:33:56.91
@aiueo = ('a', 'i', 'u', 'e', 'o');
$rand = int(rand(6));
print "$aiueo[$rand]";

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

代数の値があまりにも大きいとe+○○という数になります。
これを整数で表示させる方法はないでしょうか。
147デフォルトの名無しさん:2011/06/07(火) 00:09:24.33
>>144-145
助かりました、ありがとうございます!
148デフォルトの名無しさん:2011/06/07(火) 00:11:43.67
>>146
BigIntを使う
149デフォルトの名無しさん:2011/06/07(火) 00:15:16.55
>>148
use Math::BigInt; ってのがあったんですね。
ありがとうございました。
150デフォルトの名無しさん:2011/06/07(火) 00:21:14.95
割り算しないならuse bigint
151デフォルトの名無しさん:2011/06/07(火) 01:01:53.85
>>143
>>144
ちょっとまて
その場合rand(6)じゃなくてrand(5)だろ?
152デフォルトの名無しさん:2011/06/07(火) 21:54:25.93
$# 使えよ
153デフォルトの名無しさん:2011/06/07(火) 22:45:44.96
ざわざわっ
カイジ「ちょっとまてその場合rand(6)じゃなくてrand(5)だろ?」
154tokuhirom:2011/06/08(水) 00:09:28.93
よかったら僕になんでもきいいてください
なんでもこたえられます
職業Perlプログラマです
155tokuhirom:2011/06/08(水) 00:10:26.81
毎日ここをチェックしてるよ
156tokuhirom:2011/06/08(水) 00:11:06.70
僕 書籍に60万円いじょうお金かけてるからすごいよ
157tokuhirom:2011/06/08(水) 00:21:55.01
こiPhoneのブックマークにいれてますね
ここのスレ毎日チェックしてますね
おもしろいスレですね
2chやってることかくしてましてねえ
小飼弾はしにま
158tokuhirom:2011/06/08(水) 00:22:30.35
もう寝ますね
ききたいことあったら明日きいてね
ぼくいつでもいるから
159tokuhirom:2011/06/08(水) 00:23:04.12
明日の当番はotsuneだったね
ぼくのファンのかた残念だたね
おやすみ
160tokuhirom:2011/06/08(水) 00:24:42.20
寝るところがないから新宿の道路でねてま
161デフォルトの名無しさん: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;を使っても、
計算精度も桁数も変わらないんですが、なぜでしょうか?
162デフォルトの名無しさん:2011/06/08(水) 01:50:12.07
使わなきゃ変わるわけない
163デフォルトの名無しさん:2011/06/08(水) 02:08:47.36
164デフォルトの名無しさん:2011/06/08(水) 02:11:36.89
使っているように見えないが
165デフォルトの名無しさん:2011/06/08(水) 02:26:55.56
どうすればいいですか
166デフォルトの名無しさん: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;使うといいよ。チョーお勧め。
167デフォルトの名無しさん:2011/06/08(水) 03:40:50.41
オブジェクト作る時の最初に new しますが、
new の中から、そのパッケージのメソッドを呼ぶにはどうすれば良いですか?
あるメソッドの内容とコンストラクタの中とで重複する処理があるので、コンストラクタから
メソッドを呼びたいです。


と書いたところでググってたら、コンストラクタからメソッドは呼ぶな!というのがあって、
めんどくさいけど、同じ内容を書こうと思います。
168デフォルトの名無しさん: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) = @_;
...
}
169デフォルトの名無しさん:2011/06/08(水) 04:42:24.92
オブジェクトの中でprintするか、返した文字列をprintすべきか迷い中。。。
170デフォルトの名無しさん:2011/06/08(水) 07:35:45.29
>>166
use bignumを調べてみました
ホントに便利ですねw
貴重な情報ありがとうございました。


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

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

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

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

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

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

自己解決。
185デフォルトの名無しさん:2011/06/08(水) 21:10:21.34
>>182
ありがとうございました!
186Perlインストラクターm.a.l.a:2011/06/08(水) 23:17:49.06
わからないことあったらtokuhiromにきいてね
187Perlインストラクターm.a.l.a:2011/06/08(水) 23:20:27.97
tokuhiromにdiffの件でYappo氏のモジュールいってたときは吹いた
ぜんぜん使い方がちがうのに yappoのString::Diffモジュールだしてて は?wっておもいました
だまってました 明らか文字列じゃなくて  行のくらべなのにString::Diffだしてこけてました
ですが笑いがこらえられませんでした  わざといったのか まじで勘違いしてミスってたのかおもしろかったです
188Perlインストラクターm.a.l.a:2011/06/08(水) 23:21:04.23
tokuhiromをなめんなよ
189デフォルトの名無しさん: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; のみ
とすると、コンソールに何も表示されません。
何故なんだぜ?
190デフォルトの名無しさん: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{〜} # おぶじぇくとに対する処理

こんな感じを考えてます。
191デフォルトの名無しさん:2011/06/09(木) 19:10:22.56
perlスクリプト内でそれを実行しているperl.exeのパスを取得できますか?
Xp SP3, perl 5.10です。
192デフォルトの名無しさん:2011/06/09(木) 19:24:55.25
193デフォルトの名無しさん:2011/06/09(木) 21:32:24.22
>>192
それです。探していたそのものです。
194otsune:2011/06/09(木) 23:04:27.54
探し物はなんですか?
みつけにくいものですか?
かばんの中も机の中も探したけれど見つからないのにまだまだ探す気ですか?
195デフォルトの名無しさん:2011/06/10(金) 00:06:43.33
196デフォルトの名無しさん:2011/06/10(金) 00:30:11.47
>>194
カスラックから許諾とらないとダメですよ。
197otsune:2011/06/10(金) 19:16:47.67
RTオタクって呼んでください
198デフォルトの名無しさん:2011/06/11(土) 00:03:27.02

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

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

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

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

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

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

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

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

warn AAA::BBB:: と書いたら、
AAA::BBB:: ではなく、AAA::BBB ってなる
理由を聞いているのですが。
211デフォルトの名無しさん:2011/06/12(日) 18:17:32.87
$abcという値が5だとします。
それを$abc2という変数で05と表示させたいです。
%02dを使えばできそうですがどのように書けばよいかわかりません。
212デフォルトの名無しさん: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);
213デフォルトの名無しさん:2011/06/12(日) 19:15:25.31
>>212
説明不足ですみません
printf('%02d', $abc); を $abc2で表すにはどうすればよいでしょうか。
(printfを使わずに)

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

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

217デフォルトの名無しさん:2011/06/12(日) 19:43:00.93
>>215
ありがとうございました
218デフォルトの名無しさん: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_partU.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ワールドをご堪能あれ。
219デフォルトの名無しさん:2011/06/12(日) 20:05:36.19
>>218
(苦笑) だけ読んだ
220デフォルトの名無しさん:2011/06/12(日) 20:18:17.63
>>218
著作権法違反ネー
221デフォルトの名無しさん:2011/06/12(日) 20:57:57.23
掲示板で
タグは無効かつ改行は有効にするにはどうしたらいいでしょう。

これだとタグは無効になりますが改行も無効になってします。
$in{'bbs'} =~ s/</</g;
$in{'bbs'} =~ s/>/>/g;
$in{'bbs'} =~ s/\r\n/<br>/g;
222デフォルトの名無しさん: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;
223デフォルトの名無しさん: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;
224デフォルトの名無しさん: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 固定でいいのかね?
225デフォルトの名無しさん:2011/06/12(日) 23:09:36.77
ぷぷぷ
226デフォルトの名無しさん:2011/06/12(日) 23:20:03.25
/s には . が \n がマッチするようになる以外の効果ないと思うけど
227デフォルトの名無しさん:2011/06/12(日) 23:20:41.63
s/が/で/
228デフォルトの名無しさん:2011/06/13(月) 01:14:37.89
そうか s オプションは関係なかったか。適当なことを書いてすまんかった。
「改行も無効になって」しまう、の意味がいまひとつわからんかったのだが
単に処理対象テキストの改行コードが "\r\n" ではなく "\r" または "\n" だから、
ってだけの気もするよ。

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

そこらの掲示板はタグは無効かつ改行は有効が普通ですけど、
結構難しいプログラムなんですかね?
230デフォルトの名無しさん:2011/06/13(月) 01:41:58.86
手前が何をしたいのかを理解するのが難しいね
231デフォルトの名無しさん: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;

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

>>しかしそもそもCGIの質問はスレ違いだったか。
これってPerlの正規表現じゃないんですかね;
233デフォルトの名無しさん: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
234デフォルトの名無しさん:2011/06/13(月) 02:46:23.48
いまさらPerlかよ
235デフォルトの名無しさん: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>
--------------------------------------------------
236デフォルトの名無しさん: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;
みたいな処理をせにゃ。まあ上の例は適当だけど。
237デフォルトの名無しさん:2011/06/13(月) 17:05:13.36
WWW::MechanizeあたりでGmailにログインして新着と件名をチェックするのを組みたいんですけど
同じようなことをやっている人いますかね?
いたらサンプル見せてもらえるとありがたいんですが・・
238デフォルトの名無しさん:2011/06/13(月) 17:25:49.97
>>237
無いのかと思ってgoogle先生に聞いてみたら
腐るほどでてきじゃなないか・・・

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

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


・・・


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

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

↑これでrubyのirbみたいな感じになるんだね。今調べてみてわかった。
257デフォルトの名無しさん:2011/06/15(水) 16:21:15.71
連想配列の{}の中の文字列は使ってはいけない文字とかあるんですか?
ドットとかもいいんでしょうか?
258デフォルトの名無しさん:2011/06/15(水) 16:57:13.54
>>257
逆に使えない文字があったらびっくり。
259デフォルトの名無しさん:2011/06/15(水) 20:53:18.91
好きなだけ好きな文字を使えばいい
260デフォルトの名無しさん:2011/06/15(水) 23:41:27.40
4TB長ぐらいの文字列とか
261デフォルトの名無しさん:2011/06/15(水) 23:46:39.43
使えばいんじゃない
262デフォルトの名無しさん:2011/06/16(木) 00:07:59.06
やれるもんだったらやってみろ
263デフォルトの名無しさん:2011/06/16(木) 00:12:08.45
Out of memory!
264デフォルトの名無しさん:2011/06/16(木) 09:29:23.09
out of 眼中
265デフォルトの名無しさん:2011/06/16(木) 10:25:35.80
まぁ、使える文字と使える文字数は
別モンの質問だな。
266uy ◆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
267uy ◆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

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

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

ファイル1がロック中でファイル2がロックじゃないとき
ファイル1には書き込まれなくてファイル2には書き込まれるということになると
連動する場合ファイル1と2でデータがずれる気もしますが
272デフォルトの名無しさん:2011/06/16(木) 18:34:07.23
うん
273デフォルトの名無しさん:2011/06/16(木) 18:34:59.20
274デフォルトの名無しさん:2011/06/16(木) 18:39:40.17
open してからロックってのが気にくわないんだよね
275デフォルトの名無しさん: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 が使える
276デフォルトの名無しさん:2011/06/16(木) 23:16:06.14
>>257
$;
ハッシュのキーでこの中にある文字は使ってはいけません。
いや、使ってもいいんだけど、変な事が起きても知りません的なことになりかねません。
277デフォルトの名無しさん:2011/06/16(木) 23:35:52.09
>>237
まだ見てるか分からないけど、IMAP 使ったほうが楽じゃない?
278デフォルトの名無しさん:2011/06/16(木) 23:51:16.43
2つのファイルをロックするなら
分けてロックするより

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

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

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


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

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

そんな「たりとも」の使い方は少なくとも日本語には存在しない。
こんな日本語不自由な奴に他人の日本語の間違いを指摘する資格はない。
297デフォルトの名無しさん:2011/06/18(土) 21:20:42.83
YAMLで書いたコンフィグファイル内に環境変数を埋め込んでload側で環境変数を解決したいです。なんかうまい方法ないですか?
298デフォルトの名無しさん:2011/06/18(土) 21:41:04.75
一度テンプレートエンジンを通してから読み込むようにすれば?
299デフォルトの名無しさん:2011/06/18(土) 21:48:24.17
>> 297
なるほど、それやってみます。ありがとでした。
300デフォルトの名無しさん:2011/06/18(土) 21:50:28.09
間違えました。。
>> 298
ありがとでした。
301デフォルトの名無しさん:2011/06/19(日) 00:28:33.12
連想配列 %hash を key=value みたいに出力したいんだけど
どういう書き方が一番短く出来るの?
while( ($key,$value) = each %hash ){ print "$key=$value\n"; }
みたいな感じのやつ
302デフォルトの名無しさん:2011/06/19(日) 00:34:37.67
map {print "$hash{$_}=$_\n"}%hash;
303デフォルトの名無しさん:2011/06/19(日) 00:40:53.89
map {print "$_=$hash{$_}\n"} keys %hash;
304デフォルトの名無しさん:2011/06/19(日) 00:45:38.82
print "$_=$hash{$_}\n" for (keys %hash);
305デフォルトの名無しさん:2011/06/19(日) 01:00:50.88
連想配列って書いてた奴、以前にもいたなあ。古い言い方。
今はハッシュって言うよね。
306デフォルトの名無しさん:2011/06/19(日) 01:01:23.10
すげえなんだこれ
perl使いはすげえ
307デフォルトの名無しさん:2011/06/19(日) 01:06:56.51
>>305
別に古い言い方ではないよ、同様の要素の総称としてなら現役で使われる用語
ただPerl用語としてはハッシュと呼ぶのが公式だな
308デフォルトの名無しさん:2011/06/19(日) 01:13:05.32
ほんらい連想配列という機能があって、それを実装する方法の一つがハッシュだから、
連想配列という名前の方が正しい。
309デフォルトの名無しさん:2011/06/19(日) 06:27:01.10
二分木で実装してる言語もあるらしいからね(C++?)
310デフォルトの名無しさん:2011/06/19(日) 12:23:56.39
forとforeachとeachってどれがいいの?
311デフォルトの名無しさん:2011/06/19(日) 13:08:38.74
eachだけ仲間外れ
312デフォルトの名無しさん:2011/06/19(日) 13:13:40.90
forとforeachは変わらないって初めてのPerlに書いてあるのに
foreachのほうが処理が速いって言ってるサイトがあるけど、いったいどっちが本当なんだ
313デフォルトの名無しさん: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.
314デフォルトの名無しさん: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__
315デフォルトの名無しさん:2011/06/19(日) 13:57:09.54
>>313
foreach( $i=0; $i<@array; $++ ) という形式のことを
慣例上 for と言ってるだけ?
316Perl忍者:2011/06/19(日) 15:07:21.27
まだお前らこんなカスなことやってんだね

いい加減進歩ないね

あほみたいですね

ばっかじゃねーの バーーーカ
317Perl忍者: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
318Perl忍者:2011/06/19(日) 15:09:03.03
おえええええええええええええええ!
こいつら新車wwwwwwwwwwwww
Perl新車だよwwwwwwww「

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

323デフォルトの名無しさん:2011/06/19(日) 18:59:20.47
foreachとしてforを使ってた人は 俺のほかに何人いますか
324デフォルトの名無しさん:2011/06/19(日) 19:08:32.57
クックブックは、三文形式でない場合はforeachを使うと英語の文になってわかりやすからとforeachを推奨してるね
325Perl忍者:2011/06/19(日) 19:09:07.90
foreachのほうがわかりやすいんだけどwwwwwwwwwばかだねおまえら
326デフォルトの名無しさん:2011/06/19(日) 19:11:16.51
俺は書き分けてるなあ
3文のほうはfor、変数とリストのほうはforeach
327デフォルトの名無しさん:2011/06/19(日) 19:20:07.85
326とおんなじルールだけど、ワンライナーとかで後置するときはfor使うね
328デフォルトの名無しさん:2011/06/19(日) 19:40:31.42
3文形式とか使わねーし
329Perl忍者:2011/06/19(日) 19:45:15.12
ワンライナーとかなれてねーくせして無理につかってんじゃねーよw
Perl通気取りwwwwwwwwwwwwwwwwwwwwwwwww
330Perl忍者:2011/06/19(日) 19:45:49.06
ワンライナーでかけるとかわめかれてもほとんど津川ねーからメリットのうちにはいらねーよばーかwwwwwwwwwwwwwwwww
331デフォルトの名無しさん:2011/06/19(日) 20:05:35.15
扱う数が浮動小数点数の範囲を越えてしまって
範囲演算子を使えない場合には 3文形式は便利
332デフォルトの名無しさん:2011/06/19(日) 20:07:00.24
$iが踊るときには便利かな
333デフォルトの名無しさん:2011/06/19(日) 23:39:33.05
元ネタは踊る人形ですね。
わかります。
334デフォルトの名無しさん:2011/06/21(火) 13:22:19.84
$iは踊る、されど進まず
335デフォルトの名無しさん: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でつまずくので、どうしようもありません・・・
いいお知恵がありましたらご教示いただけると幸いです。
336デフォルトの名無しさん:2011/06/21(火) 14:41:24.48
obsolete, use Win32::TieRegistry
337デフォルトの名無しさん: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";
338デフォルトの名無しさん:2011/06/23(木) 02:07:33.68
気がついたらいつのまにか 5.14.1 が出てた。
339デフォルトの名無しさん:2011/06/23(木) 09:04:03.75
<> で1行読み込みですが、1行は何文字OKですか?
340デフォルトの名無しさん:2011/06/23(木) 09:40:27.50
変数の大きさは上限いくつですか?
341デフォルトの名無しさん:2011/06/23(木) 10:00:08.32
>>339
日本語でも英語でもなんでも
342デフォルトの名無しさん:2011/06/23(木) 10:39:41.10
>>341
<>で読み出せる1行の最大の大きさは何文字?
343デフォルトの名無しさん:2011/06/23(木) 10:42:21.59
その1 perl -pe '$i++;print$i'
だと各行の先頭に行番号を打てるけど
その2 perl -pe '$i++}{print$i'
だと全体の行数しか出力しない

行数を数えつつ各行も出力もしてほしかったんだけど
なぜその2では各行が表示されなくなってしまったんだ?
344デフォルトの名無しさん:2011/06/23(木) 12:46:46.30
CAPN Search にある安定版リリースは 27 Feb 2010 の 0.06 なのに
cpan > install Crypt::SaltedHash
で入るバージョンが 0.05 なのはなぜなんだろう?
345デフォルトの名無しさん: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"'
346デフォルトの名無しさん:2011/06/23(木) 13:56:02.47
>>345
ありがとう! 完全に理解した。
while(<>){ $i++ } と { print $i }continue{ print $_; }
に解釈されるってことか!
347デフォルトの名無しさん:2011/06/23(木) 13:57:04.14
perl -pe '$\++}{' なんて書き方に縮まるのか・・・ 恐ろしい・・・
348339:2011/06/23(木) 14:37:28.71
だれもわかりませんか?
349デフォルトの名無しさん:2011/06/23(木) 15:48:46.66
>>348
しるか!環境依存じゃ。
perlでは制限してない。
350339:2011/06/23(木) 16:18:28.98
>>349
環境依存であることのソースを教えてください
本当に制限していないんですか?
環境依存であるとして、オーバーしたら何がおきますか?
エラーが発生しますか? アウトオブメモリーになりますか?
351デフォルトの名無しさん:2011/06/23(木) 17:00:51.80
>>350
疑問を持った君が検証して率先垂範してくれたまえ
352デフォルトの名無しさん:2011/06/23(木) 17:04:21.09
>>350
自分の環境でプログラム止まるまで文字足せよw
エディタがエラーになるまでひたすら一行かけよ。
それがなによりのソースだ。


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

捨て台詞とか小学生っぽいことしたくなるの
そんな次期に良くある衝動ですよ。
心配しなくても多分治ります、大丈夫ですよ。
どうぞperlと人生を楽しんで下さい。
356デフォルトの名無しさん:2011/06/23(木) 19:37:45.90
はい
357デフォルトの名無しさん: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の挑戦に期待。
358デフォルトの名無しさん:2011/06/23(木) 21:06:45.32
どうだろうね
アドレス空間の枯渇のほうが先に来るかもしれない

>>339は1文字が1バイトとは限らないという引っ掛けかと思ってた
359 忍法帖【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}

のようになります。
360デフォルトの名無しさん:2011/06/23(木) 22:12:33.66
文字コードの変換をするライブラリで
一番現実的な意味で完璧なものってなんでしょうか?
日本語以外も含まれます。
361デフォルトの名無しさん: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でも分けて表示できる方法ってありますか?
できればモジュールは使わないでできる方がいいです。
362339:2011/06/23(木) 22:57:21.34
>>357
ありがとう
32bitOSなら4G-1までですね
363デフォルトの名無しさん:2011/06/23(木) 22:58:44.18
364デフォルトの名無しさん:2011/06/24(金) 01:23:52.48
>>359
utf8 -> cp932 -> hexdata -> cp932 -> utf8
この最後のutf8に変換が抜けてるのでは。
365デフォルトの名無しさん:2011/06/24(金) 02:00:07.67
変換・逆変換が対称になってないしな
366デフォルトの名無しさん:2011/06/24(金) 02:29:49.53
mkpath でディレクトリ作ると、読み取り専用の属性がつくっぽいのだが、
エクスプローラのフォルダのプロパティからも、attrib コマンドでも ReadOnly の属性が外れない。。。
367 忍法帖【Lv=6,xxxP】  359:2011/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);
368デフォルトの名無しさん:2011/06/25(土) 15:21:47.21
Perlでfirefoxで表示されているHP情報を取得して
Perl内で編集処理してまたfireofxにて編集した内容を再表示させることって可能ですかね?
可能だったらやり方かもしくはそのようなことを詳しく書いてあるようなサイトを教えてもらえるとありがたいです
369デフォルトの名無しさん:2011/06/25(土) 15:28:58.17
不可能
370デフォルトの名無しさん:2011/06/25(土) 16:05:18.29
スクレイピングってこと?
371デフォルトの名無しさん:2011/06/25(土) 16:20:25.11
JavaScriptでするDOM操作みたいなのをPerlでやりたいってことじゃないのかな?
372デフォルトの名無しさん:2011/06/25(土) 16:44:00.69
いえ、だから不可能です。

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

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

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

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

POP before SMTPはせんで良いの?
385デフォルトの名無しさん:2011/06/26(日) 13:16:36.55
>>374
>>375
どうもありがとうございます
386デフォルトの名無しさん:2011/06/26(日) 15:19:33.68
>>384
しない。対応してる送信ソフトなんて存在しないし。
387デフォルトの名無しさん:2011/06/26(日) 16:34:53.01
>>386
はぁ?
388デフォルトの名無しさん:2011/06/26(日) 17:20:53.37
>>387
何がはぁだよ。具体的反論をしろ。
389デフォルトの名無しさん:2011/06/26(日) 17:29:06.75
>>388
おまえこそ意味不明なこと言ってるんじゃねえよ。
390デフォルトの名無しさん:2011/06/26(日) 21:40:14.38
>>389
はぁ?
391デフォルトの名無しさん:2011/06/26(日) 22:01:38.06
>>390
はぁ?じゃねえよカス
392デフォルトの名無しさん:2011/06/26(日) 22:25:35.74
落ち着こう。
393デフォルトの名無しさん:2011/06/26(日) 22:55:58.96
>>376
うちのMTAではそのコードで送信でけましたよ。
送れない原因についてはPBSもそうだろうしSMTP-AUTH必須なのかもしれないし、
OP25B対策されててそのアプリからMTAをつつけてない可能性もありますし、
もしくはあなたが構築したかもしれないMTAが機能してないって可能性もあるし、
原因は山ほど想定されるのでよくわからんという事だと思われます。
394392:2011/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;付けないのは、やめたほうがいいですよ。
395デフォルトの名無しさん:2011/06/26(日) 23:10:02.91
いや、だからまずPBS用のコードを足してみろって。第一の可能性だ。
396デフォルトの名無しさん:2011/06/27(月) 00:24:38.13
Perlの質問なんですが
Perl忍者が最近来てません どうしたんですか?
397デフォルトの名無しさん: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で登録されているのですが、あとなにか設定が必要なのでしょうか?
398デフォルトの名無しさん:2011/06/27(月) 07:33:43.98
>>396
就職できたんだろ
399デフォルトの名無しさん:2011/06/27(月) 22:37:14.52
うむ
400 忍法帖【Lv=9,xxxP】 :2011/06/28(火) 00:55:36.97
Win7 x64/5.12.4使っています。

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

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

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

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

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

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

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

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

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

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

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

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

#!/usr/bin/perl -w

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

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

さんざんググっても分からず。分かる人がいれば教えてほしいです。
429デフォルトの名無しさん: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
430428:2011/06/30(木) 07:31:27.82
>>429 ありがとうございます。
その説明で納得できそうです。
欧米の知識人には常識とか
単に著者がラクダに馴染みの深い地域出身なのかも知れませんね。
すっかりPerlのラクダ本の方に引きずられてしまっていました•••。
それも意図した洒落た表現なのでしょう。
431デフォルトの名無しさん:2011/06/30(木) 13:08:04.20
camel toe
432デフォルトの名無しさん:2011/06/30(木) 13:24:24.69
camel clutch
433デフォルトの名無しさん:2011/06/30(木) 17:28:46.98
もしかして弾さんはアニオタなの?
434デフォルトの名無しさん:2011/06/30(木) 19:12:22.54
若者に話を合わせるために見ているだけだと思う。決して観てはいない。
435デフォルトの名無しさん:2011/06/30(木) 19:49:05.16
ヒゲサスペンダーさんの趣味はPerlとは関係ないよね。
436デフォルトの名無しさん:2011/06/30(木) 20:26:57.25
あの人の趣味はperlかと思ってた。
437デフォルトの名無しさん:2011/06/30(木) 20:48:14.01
「perlについての質問」じゃないだろ、って話でしょ。
438デフォルトの名無しさん:2011/06/30(木) 21:49:52.96
439デフォルトの名無しさん:2011/07/01(金) 00:17:34.44
小飼アニオタ しね
440デフォルトの名無しさん:2011/07/01(金) 14:43:23.42
''=~('(?{'.('[[).[|`%,,/`[/[@$'^'+)@@/^(@@@@@,@),@').'!"})')

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

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

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

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

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

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

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

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

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


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


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

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

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

はいゴミ死ね
480デフォルトの名無しさん: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;

これだとエラーは出ませんが、初期化できませんでした。
481デフォルトの名無しさん: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} = '';
}
482デフォルトの名無しさん: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.)
483デフォルトの名無しさん: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;

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

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



ありがとうございました m(_ _)m
487デフォルトの名無しさん: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;
488483:2011/07/05(火) 20:21:10.53
ああ、確かに >>487 の前者が一番しっくり来るな。何やってるか見てすぐわかるし。
489デフォルトの名無しさん:2011/07/05(火) 20:25:37.06
ディレクトリの容量を取得するにはどうすればいいんでしょうか?

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

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

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

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

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

498デフォルトの名無しさん:2011/07/05(火) 22:09:20.63
さすがにそこはgrepちゃん使ってあげたら
499デフォルトの名無しさん:2011/07/05(火) 22:18:56.08
TODO FIXME って書いてあるな。
500デフォルトの名無しさん: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出力オプションを付けるべきなんだろーね。」

501デフォルトの名無しさん:2011/07/06(水) 00:01:39.71
RFC 2045 が抜けてる
502デフォルトの名無しさん:2011/07/06(水) 00:04:04.27
いや、こんな適当な訳に突っ込み入れられても(汗
真面目に訳そうかとも思ったけど、そのレベルの文章か?コレ
503デフォルトの名無しさん: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 .

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

perl上でURLにアクセスし、送られてくるcookieを保存して
そのcookieからある一つのcookieのみを返す。
というような動作は再現可能なのでしょうか。
506デフォルトの名無しさん:2011/07/06(水) 14:17:02.34
>>505
可。
可どころか優w
507デフォルトの名無しさん:2011/07/06(水) 15:41:03.88
>>506
返信ありがとうございます。
何か参考にできるサイトがあったら教えてください。
もしよろしければ、簡単に説明してもらえませんか?
508デフォルトの名無しさん:2011/07/06(水) 16:20:14.95
>>507
>>1 に良い事書いてあるぞ。
それ、webプログラムや。
509デフォルトの名無しさん:2011/07/06(水) 16:56:04.34
>>508
ふむ。そうなのですか。
区別ができないほど素人なもので・・・スレ汚しすみませんでした。
510デフォルトの名無しさん:2011/07/06(水) 17:02:40.34
たぶんクライアントサイドだと思うよ。
cookie_jar から /HAP=FOXdayo[0-9a-f]+/ という文字列を集められたら
いいのかなという気がした。なんとなく。
511デフォルトの名無しさん: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が入るはずだと思うのですが、うまくいきません
簡単な質問ですみません。どなたか教えてください。
512デフォルトの名無しさん:2011/07/06(水) 22:48:14.26
すみません自己解決しました…無視してください
513デフォルトの名無しさん:2011/07/06(水) 22:49:41.86
..使えよ

for my $i (0 .. 1) {
for my $ii (1 .. 2) {
push @aiueo, $ii.$i;
}
}
print @aiueo
514デフォルトの名無しさん: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;
と。
515デフォルトの名無しさん: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++}
}
これより早い素因数分解のプログラムってありますか?
516デフォルトの名無しさん:2011/07/07(木) 18:46:57.02
else{$i++}
↓これに訂正します
else{$i!=2 ? $i+=2 : $i++}

ある奇数で割り切れるのかどうか実際に割り算をする以外に調べる方法はないでしょうか?
517デフォルトの名無しさん: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;

これで最後の無駄な割り算をカットできました
これ以上はもう無理です誰か助けてください
518デフォルトの名無しさん:2011/07/07(木) 19:53:00.70
while ($N >= $i**2) {
でイチイチ二乗しているような気がする
519デフォルトの名無しさん: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" ;
}
520デフォルトの名無しさん:2011/07/07(木) 20:10:13.51
print `factor $ARGV[0]`;
521デフォルトの名無しさん:2011/07/08(金) 11:24:57.71
WindowsXP ActivePerl 5.12.4です。

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

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

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

情報thx
528デフォルトの名無しさん:2011/07/08(金) 19:53:08.88
秀丸も単語補完機能とかプロジェクト管理機能とかついたからな
7年前に比べたらすごい違う
なんか、ガンプラの進化を見ているみたいに違う
529デフォルトの名無しさん: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 して。
530デフォルトの名無しさん:2011/07/08(金) 20:53:03.88
5.10な
531デフォルトの名無しさん:2011/07/08(金) 20:54:17.29
おそろしいな
言われるまでそのままperl5.10だと思い込んでた。
いやあ人間の脳ってすばらしい
存在しない情報を勝手に補完して読みやすくしてくれる
脳みそさまさまだ
532デフォルトの名無しさん:2011/07/08(金) 21:08:05.34
ぎゃーー、5.10のつもりで書き込んでた、
>>530
指摘thx.
533デフォルトの名無しさん: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

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


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


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

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

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

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

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

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

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

perl例外処理の基本だろ。
551デフォルトの名無しさん:2011/07/10(日) 14:14:43.68
evalってそんなほいほいつかっていいものなの?
552デフォルトの名無しさん:2011/07/10(日) 14:19:07.52
使っていけない理由がない。
553デフォルトの名無しさん:2011/07/10(日) 14:50:46.72
ブロックならほいほい使って良い
554sugyan:2011/07/10(日) 15:01:50.45
俺のことむかつく人いますか?
555デフォルトの名無しさん:2011/07/10(日) 15:05:22.25
>>554
うぜえ。
556デフォルトの名無しさん:2011/07/10(日) 16:39:32.35
>>554
死ね
557デフォルトの名無しさん:2011/07/10(日) 17:25:03.23
文字列(特に外部要素によって改変される可能性のある文字列)は危ないけどな
ちゃんと用法容量を守ってお使いくださいってことだ
558デフォルトの名無しさん:2011/07/10(日) 18:22:02.20
ディレクトリの中のファイル一覧配列とディレクトリ一覧配列を戻り値としてreturnで返したいんですが
returnでは1つの配列しか返せないんでしょうか?
2つの配列を戻り値として返す場合はどうすればいいんでしょうか?
559デフォルトの名無しさん:2011/07/10(日) 18:54:21.37
配列へのリファレンス
560デフォルトの名無しさん:2011/07/10(日) 19:01:23.05
配列のリファレンスの配列じゃいかんの?
561デフォルトの名無しさん:2011/07/10(日) 19:02:51.40
562デフォルトの名無しさん:2011/07/10(日) 20:38:29.61
英語読めない癖に「英語読め」って宣言したり、
perldoc誤読して自慢気に書き込んで指摘されたり、、、
忍者が名無しで書き込んでんのか?
563デフォルトの名無しさん:2011/07/11(月) 02:03:23.21
>>557
なぜエラートラップするだけのevalに
文字列を入れないといけないのか?
564デフォルトの名無しさん:2011/07/11(月) 06:25:15.28
>>563
いや、だから、文字列じゃないから大丈夫だろ、って言いたかったんだが…
565デフォルトの名無しさん: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);
}
566デフォルトの名無しさん:2011/07/11(月) 09:21:30.16
忍者さん、名無しで質問やめてください
567デフォルトの名無しさん:2011/07/11(月) 10:09:34.13
>>566
荒らしの話はするな
568デフォルトの名無しさん:2011/07/11(月) 11:33:10.89
local される前の @aaa と @bbb はどこに居るんだい?
local は関数内でglobalを一時対比するだけのもの。
569デフォルトの名無しさん:2011/07/11(月) 12:42:16.01
>>565
表示される。
おわり。
570デフォルトの名無しさん:2011/07/11(月) 12:49:37.90
>>565
558と同じ質問じゃねーか。リファレンス使えって答は出てるだろ。

何も出力されないというのはおかしいけどな。改行問題?
571デフォルトの名無しさん:2011/07/11(月) 13:14:53.08
>>565
ActivePerl 5.8.9だけど表示された
572デフォルトの名無しさん:2011/07/11(月) 14:06:22.64
表示されたとか書くやつら、use strict と use warnings はちゃんと書いとけよ。
573デフォルトの名無しさん: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);
}
574デフォルトの名無しさん:2011/07/11(月) 14:16:56.57
糞コテ哀れ(プ
575デフォルトの名無しさん:2011/07/11(月) 18:13:04.16
@www1に全部配列の要素が入って
@www2は空でした
576デフォルトの名無しさん:2011/07/11(月) 19:25:34.21
www
577デフォルトの名無しさん: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;
578P erl忍者:2011/07/11(月) 20:48:59.14
ハッシュのスライスって配列の入れ替えと同じですか
教えてください
579デフォルトの名無しさん:2011/07/11(月) 21:51:46.19
ハッシュドポテトと
スライスチーズですか?
美味しそうですね。
580デフォルトの名無しさん:2011/07/11(月) 23:35:51.96
わろおおおおwwwwwwwwwwwwwwwwwwwwwwwwwwwww
581デフォルトの名無しさん:2011/07/12(火) 03:28:49.86
現代的なPerlでは、サブルーチンの呼び出しに&はつけず()にするというのはわりと普及してる事項なんでしょうか?
582デフォルトの名無しさん:2011/07/12(火) 04:11:54.60
YES
583デフォルトの名無しさん:2011/07/12(火) 04:57:13.57
ありがとうございます。これから気をつけます。
584デフォルトの名無しさん:2011/07/12(火) 13:13:44.25
5.14 のバグっぽいの見つけたんだけど日本語で報告できるところってある?
585デフォルトの名無しさん:2011/07/12(火) 15:19:18.16
例の弾さんにけしかけてみる
586デフォルトの名無しさん:2011/07/12(火) 15:24:21.83
こがいたまさん。
587デフォルトの名無しさん:2011/07/12(火) 15:32:38.33
まあ普通に言ってもとりあわなさそうだから
「これってトリビアになりませんかね?」
みたいにネタっぽく言ったほうがいいだろうな
588デフォルトの名無しさん:2011/07/12(火) 15:51:57.18
「相談」ならあのおっさんにしようがここでしようが構わんけど、
バグの「報告」なら実際に開発してる人たちにする他ないでしょ。当然、英語で。
もちろん報告するなら、本当にバグなのかどうか、報告済のバグでないか、最新開発版などでは直ってないか、などを十分に確かめてからだけど。
http://perldoc.perl.org/perlbug.html
589デフォルトの名無しさん:2011/07/12(火) 17:26:28.59
>>584
TOEIC600程度の英語でよければ俺が翻訳するから、ここに書いてみて
590デフォルトの名無しさん: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
ありがとう。報告するかどうかわからないのですが、それでもよければお願いします。
591名無しさん@お腹いっぱい。:2011/07/12(火) 22:26:16.41
とりあえず日本語で報告しておけば、メンテナの人で
日本語が分かる人が読んでくれるから大丈夫。
英語うんぬんを気にする必要は全くない。
592デフォルトの名無しさん:2011/07/12(火) 22:29:35.56
言わなければ伝わらない
593デフォルトの名無しさん: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();
594デフォルトの名無しさん:2011/07/13(水) 09:34:24.89
その位で通じると思うよ。再現用コードとおかしいと思う現象がきっちり
書いてあるんだからそれで十分。
595デフォルトの名無しさん:2011/07/13(水) 13:34:43.20
>>593
翻訳ありがとうございます。
RTを調べてみて同様のものがなかったので先ほど送りました。

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

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

ってやると2行目がエラーになんだけど
599デフォルトの名無しさん:2011/07/13(水) 17:59:50.88
eval "s/unko/chinko/$a";
600デフォルトの名無しさん: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;
601デフォルトの名無しさん:2011/07/13(水) 18:08:38.80
$_ ってなんて呼ぶの?
602598:2011/07/13(水) 18:18:17.14
>>599
ありがとう!動きましたですよ!すばらしいねeval
603デフォルトの名無しさん:2011/07/13(水) 20:30:01.69
>>610
んだら、あんだ?婆
604デフォルトの名無しさん:2011/07/13(水) 21:14:39.36
610に期待
605デフォルトの名無しさん:2011/07/13(水) 21:19:53.34
>>601
多分、デフォルト変数(default variable)
606デフォルトの名無しさん: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".
607601:2011/07/14(木) 01:03:51.36
ありがとう!デフォルト変数かぁ なるほどデフォルトだな
608デフォルトの名無しさん:2011/07/16(土) 17:46:22.62
Perl:DBIを使ったMySQLについて質問です。
SELECTにて一致した条件を表示するのに
while(@row = $sth->fetchrow_array) {

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


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


         ____
      /::::::─三三─\   全件見えた
    /:::::::: ( ○)三(○)\
    |::::::::::::::::::::(__人__)::::  | ________
     \:::::::::   |r┬-|  / | |          |
    ノ::::::::::::  `ー'´   \ | |          |
610デフォルトの名無しさん:2011/07/16(土) 21:13:03.03
>>608
SQLクエリの時点で弾く(LIMIT)か、
素直に全部読んでから、手作業で必要な部分だけ切り取る
611デフォルトの名無しさん:2011/07/16(土) 23:40:09.46
特定のHTMLタグに囲まれた中身を正規表現で取りたいのですが、できませんでした。
$str =~ m{ <body> ( [^ (?: </body>) ]* ) }xi;
これの問題のあるところは、[ ]に1文字ではなく複数文字を指定している点なのでしょうか?
また正しい正規表現はどのようになりますでしょうか、教えてください。
612デフォルトの名無しさん:2011/07/16(土) 23:45:44.85
(!:
613デフォルトの名無しさん:2011/07/17(日) 01:01:48.47
614デフォルトの名無しさん:2011/07/17(日) 04:19:26.04
1回しかでてこないなら、普通に<body>(.*)</body>でいいですね。
複数でてくるタグなら再帰的に生成すると。でもその場合はモジュール使おうと思います。

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

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

&func(@lines,$aaa);

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

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


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

何れにせよリファレンス使おうが使うまいが、
func に渡された「リスト」の何らかの解析作業は必須。
=> それだったら普通にpopしてれば?
  リファレンスも覚える気も無いんでしょ?
622デフォルトの名無しさん:2011/07/21(木) 00:00:43.79
フォントサイズぐらい大きく出来るだろw
623デフォルトの名無しさん:2011/07/21(木) 00:16:16.32
>>621
古い参考書しか持ってないから
解析作業は省略して書かなかっただけ
知りたいのは配列と変数を受け取るときにpopして配列と変数に分けるしか方法がないのかってこと
624デフォルトの名無しさん:2011/07/21(木) 00:45:51.17
>>623
my も載ってなくて、&付しかないような参考書しか持ってないなら
悪いことは言わないので最近の書籍を買いなおした方が良い。
自力で検索して学ぼうにも下地となる知識が古すぎて不都合が多いと思う。
625デフォルトの名無しさん: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};
626デフォルトの名無しさん:2011/07/21(木) 03:49:58.07
つーか
スカラー1コと配列1コ渡すだけでいいんなら
スカラー、配列、の順に渡せば済む話だろ
その順に渡せない事情でもあるのか?

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

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

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

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

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

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

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

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

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

リファレンスを理解したくないんじゃなくて、
リファレンス使うまでもなくこう書けば済むんじゃない、って話をしてるんだ。
理解力の足りん奴だ。
647デフォルトの名無しさん:2011/07/22(金) 08:48:23.60
ぼくの理解力では>>643
「(>>617が)リファレンスを理解したくない(なら)>>626 >>637
としか読めない
648デフォルトの名無しさん:2011/07/22(金) 12:44:58.05
TMTOWTDIの精神で
649デフォルトの名無しさん: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='\.\.\.';とするとなぜか配列が表示されます
これはどうしてですか?
650デフォルトの名無しさん:2011/07/23(土) 13:17:34.11
//
651デフォルトの名無しさん: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') を返す。
652デフォルトの名無しさん:2011/07/23(土) 18:11:58.38
>>650
//が抜けてたけど結果は同じでした

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

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


  |ツ ヾ\{   (⌒\;;;;;;;;,,      ,,,,;;;;;;;;;;:'    //ミっ}
    i 仆、\\_,ゝ、  \__      ____  //!シ /
   { 、{ `r‐-、/´,.\  \ー====f'" ,..r―r-、`゙ソノ レ'i }
    、 Y ゝ、  \   \  \ ̄ {_ `==≠' /⌒)|  ノ    バイナリファイル A,B を
    \| (  \  \  \   \ ゙=====≠   / |/
       、 \  \  丶、 \   \     /    { /       ANDして Cに保存
      人  \   \  ` ̄`゙    `ー-┘    |/
     ( {::ハ  /\   \                }        実装完了
      ハ!:::\! .:: \                  }ヽ,
      }::::\:::::\  \                /::;ノ
    〈:::::::::ノ/ ̄\                     |::ィ
662デフォルトの名無しさん:2011/07/25(月) 23:28:17.01
>>661
た、たしかにかっけぇ←
663デフォルトの名無しさん: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 でないと駄目なんでしょうか?
664デフォルトの名無しさん:2011/07/26(火) 21:32:51.65
すんません。質問後にテストしたら、そっこーで解決しましたw


package TEST 内なのに、コンストラクタで使う名前が MAKEMOD とか、
存在しないパッケージ名を指定してたのが原因でした。
665デフォルトの名無しさん: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;
666デフォルトの名無しさん:2011/07/26(火) 22:53:09.94
実行結果をcのソースファイル形式で出力したいんだけど
どうやったらいいの?
667デフォルトの名無しさん:2011/07/26(火) 23:07:24.32
>>666
その質問はあまりに単純か、あるいはもっと深い意味があるのか分からんな
668デフォルトの名無しさん:2011/07/26(火) 23:54:08.50
>>665
パッケージ名->メソッド
で呼ばれた場合、第1引数にはオブジェクト名が渡るから、それを考慮しろ。
ってことで OK?

669デフォルトの名無しさん:2011/07/27(水) 00:12:38.16
670デフォルトの名無しさん: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です。
671デフォルトの名無しさん:2011/07/27(水) 00:25:55.36
perl -lne ' print $1 if /Slot(\d+)/'
じゃだめか?
672デフォルトの名無しさん:2011/07/27(水) 01:06:09.72
動きました
ありがとうございました。
673デフォルトの名無しさん:2011/07/27(水) 12:07:28.39
command1が以下のような出力を返すのですが、
$ command1
Mask Slot7 Valid
Mask Slot3 Valid
Mask Slot11 Valid
$
この出力をperlで処理して、slotの後ろの番号を取り出したがってる人が
いろいろワンライナーを書いてみたらしいですが、うまくいかなかったそうです。

でも、うまくいかないワンライナーなんて思いつきません。
どんな、ワンライナーを書くとうまくいかないのでしょうか?
674660:2011/07/27(水) 12:42:57.67
>>661
出来ればperlでお願いします
675デフォルトの名無しさん:2011/07/27(水) 14:59:57.50
それはPerlの質問じゃなくて哲学の議題か何かか?
676デフォルトの名無しさん:2011/07/27(水) 15:48:52.75
最近の小学校では
バイナリファイル A,B を ANDしてCに保存するPerlスクリプトをかっこうよく書け、
なんて夏休みの宿題に出すんだな。
677デフォルトの名無しさん:2011/07/27(水) 15:52:32.44
Perlじゃ無理
678デフォルトの名無しさん:2011/07/27(水) 16:10:39.79
perlじゃバイナリファイルを扱えないからな。
679デフォルトの名無しさん:2011/07/27(水) 16:48:20.00
Berlの出番だな
680デフォルトの名無しさん:2011/07/27(水) 17:00:18.09
crowbarのようなもの?
681デフォルトの名無しさん: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;
682デフォルトの名無しさん: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);
683デフォルトの名無しさん:2011/07/27(水) 17:58:45.87
読み込むファイルが巨大だったら。。。を思うと while(read($fh, $buf, 64)){}
みたいにぶん回したほうがいいんじゃないのかな?って思うわけです。はい。
684デフォルトの名無しさん:2011/07/27(水) 21:47:47.79
>>683
うん。
685 忍法帖【Lv=35,xxxPT】 【東電 68.7 %】 :2011/07/27(水) 23:12:53.20
かな
686デフォルトの名無しさん:2011/07/28(木) 02:00:48.77
漢字
687デフォルトの名無しさん:2011/07/28(木) 06:20:00.17
変換
688デフォルトの名無しさん:2011/07/28(木) 08:39:38.25
>>683
読むファイルが2つあるときはどう書くのがかっこいいんだろうか。
689 忍法帖【Lv=7,xxxP】 :2011/07/28(木) 11:07:58.73
うわあ!!!
690Perl忍者:2011/07/28(木) 14:58:37.61
今日からPerl戻るからみんな皆さん楽しみにしてください
戻ります

うわああ!!!!!!!
691660:2011/07/28(木) 15:11:40.64
意外と難問だったのか。
perlは奥が深いな
692デフォルトの名無しさん:2011/07/28(木) 17:34:05.28
バイナリファイルが読めてAND演算子もあるのに何故難問なのでしょうか?
2つのファイルを同時に読むところ?
693デフォルトの名無しさん: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($_);
}
694デフォルトの名無しさん:2011/07/29(金) 09:13:15.79
file1とfile2の長さが違うときは出力がどうなる仕様なのかな?

短い方に合わせるか、長い方に合わせる(後ろは0で補う)の
どっちかにするのが自然だとは思うのだけど。
695デフォルトの名無しさん:2011/07/29(金) 09:32:44.06
長短はスイッチでやりたいよね
それにANDだけとは言わず他の演算もしてみたいよね
2つのファイルと言わず3つ4つのファイルもやってみたくなるのが普通だよね
ついでに汎用性がありそうだからcとかで高速な実装をしてみたくなるよね
696660:2011/07/29(金) 10:50:40.85
>>695
ここはperlスレなので、他の言語はナシで
697デフォルトの名無しさん:2011/07/29(金) 11:16:49.18
■□□□■ □■■■□
□■□■□ ■□□□■
□■□■□ ■□□□□
□□■□□ □■■■□
□■□■□ □□□□■
□■□■□ ■□□□■
■□□□■ □■■■□
698デフォルトの名無しさん:2011/07/29(金) 16:19:04.76
>>695
>2つのファイルと言わず3つ4つのファイルもやってみたくなるのが普通だよね
目的がさっぱり見当つかない・・・
んなことして何に使うんだ?
699デフォルトの名無しさん:2011/07/29(金) 16:26:18.78
>>660に聞いてくれ
700デフォルトの名無しさん:2011/07/29(金) 18:39:06.09
どうみてもネタなのに…
701デフォルトの名無しさん:2011/07/30(土) 00:10:40.90
しかもつまんねーネタだ
702デフォルトの名無しさん: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行になってしまいます
703デフォルトの名無しさん:2011/07/31(日) 22:42:50.48
704デフォルトの名無しさん:2011/07/31(日) 22:43:53.70
split の第3引数に -1
705デフォルトの名無しさん: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>";
706デフォルトの名無しさん:2011/08/01(月) 12:45:57.76
とりあえず HTML 要素の勉強から始めような。
707デフォルトの名無しさん: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/
708デフォルトの名無しさん:2011/08/01(月) 18:15:09.37
>>706

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

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

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


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

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

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

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

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

YahooBB事件においての被害総額は100億円規模と目され、団体に対して与えたクラッキング事件の被害の大きさでは世界一。その割りに名前が知られていない。
731デフォルトの名無しさん:2011/08/03(水) 17:50:08.06
>>718
そのHTMLを書いたファイルをlintにかけてみれば分かる。
732デフォルトの名無しさん: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);
みたいな書き方(これはエラーでます)できないでしょうか?
733デフォルトの名無しさん:2011/08/03(水) 19:15:49.63
@ar = [ split //, $a ] ;

特殊変数$aを普通の変数としては(略
734デフォルトの名無しさん:2011/08/03(水) 19:39:43.55
>>733
感謝
でも静的には$ar[1]にも代入できるけど動的には無理なのか
そういや比較かなんかで使ってるんでしたっけ、$aと$b
735デフォルトの名無しさん: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 );
的な意味?
736デフォルトの名無しさん:2011/08/03(水) 20:06:49.61
っても両者に違いなんざ無いんだが。
737デフォルトの名無しさん:2011/08/03(水) 20:20:37.13
>>731
COLSとROWSをダブルクオーテーションで囲んでないってことだろ
べつに囲まなくてもちゃんと表示される
738デフォルトの名無しさん:2011/08/03(水) 21:05:55.38
>>737
HTMLのバージョンにもよるが、
属性値が数値のみの場合は必ずしもダブルクォーテーションで囲わなくてもいい。
確かXHTMLでは不可で、HTML 4は可だったかな。
ってスレ違いじゃねーか。フザケンナ。
739デフォルトの名無しさん:2011/08/03(水) 21:17:08.67
スレっつーか鼬
740デフォルトの名無しさん:2011/08/03(水) 22:18:28.15
HTMLごときで文法を守れないヤツがプログラムとかほざくなとwww
741デフォルトの名無しさん: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]};


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

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

749デフォルトの名無しさん:2011/08/04(木) 02:06:02.56
ならどのモジュールが消えてもいいように
ラッパー自作して挟んどけば?
750デフォルトの名無しさん:2011/08/04(木) 02:06:04.37
>>748
POSIX
DateTime
751デフォルトの名無しさん:2011/08/04(木) 02:27:00.23
>>748
Time::Piece 今のところ標準モジュール
752デフォルトの名無しさん:2011/08/04(木) 03:53:59.14
指定したディレクトリ内で、作成されてから10分以上経過したファイルを削除するソースを教えてください。
753デフォルトの名無しさん:2011/08/04(木) 04:22:57.04
ソース教えたら重要ファイルまで豪快に全滅させる自滅コード走らせる予感しかしない
754デフォルトの名無しさん: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/
755デフォルトの名無しさん:2011/08/04(木) 08:56:27.35
findで-mtimeで-execでrmすれば?
756デフォルトの名無しさん:2011/08/04(木) 11:40:58.29
>>755
ここはperlスレだ。 無理やりにでもperlで解決してやれよ。
757デフォルトの名無しさん:2011/08/04(木) 11:46:56.93
それじゃperlで解決
perl -e 'system "find", ".", "-mtime", "+10m", "-exec", "rm", "{}", "+"'
758デフォルトの名無しさん:2011/08/04(木) 12:09:11.19
それよかtouchが欲しい
759デフォルトの名無しさん:2011/08/04(木) 12:57:59.96
文字列 $q の末尾に/がついていない場合/を付けるのはどのように書けばいいですか
色々やってみたけどうまくいかない
760デフォルトの名無しさん:2011/08/04(木) 13:15:01.44
>>758
'>>' でオープンでいいんじゃないの?
知らんけど
761デフォルトの名無しさん:2011/08/04(木) 13:26:55.28
>>759
if( $q !~ m(^/) ) {
末尾に/がついていない場合の処理;
}
ってこと?
762デフォルトの名無しさん:2011/08/04(木) 13:29:13.52
間違えたw
if( $q !~ m(/$) ) { ... }
763デフォルトの名無しさん:2011/08/04(木) 13:31:21.50
$q .= '/' if $q !~ m|/$|;
じゃだめなの?
764デフォルトの名無しさん:2011/08/04(木) 13:54:04.80
>>723
perlが重いって数千行のデータベースをページ表示毎に
ソートでもしてるのか?
765デフォルトの名無しさん:2011/08/04(木) 14:15:40.46
>>761-763
うまくいきました。ありがとうございます
766デフォルトの名無しさん:2011/08/04(木) 14:16:16.21
>>758
File::Touch
767デフォルトの名無しさん:2011/08/04(木) 14:31:38.16
>>757
センスが無いよな。
768デフォルトの名無しさん:2011/08/04(木) 14:41:23.43
>>767
先生!センスのあるお手本を是非ここでひとつ。
769デフォルトの名無しさん:2011/08/04(木) 15:11:27.19
よほどのことがなければ外部プログラムは呼び出さない方がいいよね
プロセス生成のコストは想像以上に高いわけだし
770デフォルトの名無しさん:2011/08/04(木) 15:51:23.66
>>756
どなたかお願いします。
771デフォルトの名無しさん:2011/08/04(木) 16:02:00.47
>>770
夏休みの宿題は自力でやらなきゃ。
772デフォルトの名無しさん: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/*.*";
773デフォルトの名無しさん:2011/08/04(木) 17:46:25.57
glob はスペースを含むファイル名のファイルがあるとうまく動かないんじゃなかったかな。
774デフォルトの名無しさん:2011/08/04(木) 20:07:28.17
連想配列の{ }中は全角文字は使えるんでしょうか?
$FORM{'データ'}というように
775デフォルトの名無しさん:2011/08/04(木) 20:07:29.90
>>758
utime undef, undef, $file1, $file2;

じゃだめかな。

ついでに
>>759
$q =~ s!(?<!/)\z!/!ms;
とか。
776デフォルトの名無しさん:2011/08/04(木) 20:09:29.87
>>774
使える。
コードをUTF-8で書いて use utf8 した方がいいと思う。
777デフォルトの名無しさん: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";
778デフォルトの名無しさん:2011/08/05(金) 00:08:58.48
>>777
プログラム始めて1週間ってことろか。
頑張れよw
779デフォルトの名無しさん:2011/08/05(金) 00:25:07.40
>>778
おう俺やっぱ初心者丸出しなのかな恥ずかしい
780デフォルトの名無しさん:2011/08/05(金) 00:31:39.62
>>777
とりあえず ! はエスケープしなくていい
変数展開やエスケープシーケンス(\nとか)を使う必要がないなら ' を使うか、
HTMLの引用符を ' にするとHTMLでは楽になる

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

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

みたいな変数代入もよく使うな。
786デフォルトの名無しさん:2011/08/05(金) 17:13:35.73
>>781
HTML::Templateでググれ
787デフォルトの名無しさん: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
788Perl忍者:2011/08/05(金) 21:40:50.03
まだまだカスどもに追いつかれそうにないからPerlやらなくていいや

自分=うさぎ

お前ら=かめ
789デフォルトの名無しさん:2011/08/05(金) 21:52:57.91
天然だなあ
790デフォルトの名無しさん: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が表示されない・・・クマッタ
791デフォルトの名無しさん:2011/08/06(土) 09:53:00.71
792デフォルトの名無しさん:2011/08/06(土) 10:47:44.97
で、そのAGENTCODEってのは何なんだい?
793デフォルトの名無しさん:2011/08/06(土) 12:12:25.83
ナンダロウ・・・ワカラナイ
794デフォルトの名無しさん:2011/08/06(土) 12:16:12.72
790です 事故解決しました寝ておきたら理由がわかったorz
795デフォルトの名無しさん:2011/08/06(土) 12:40:29.49
urlとかそのまま出しちゃった・・・
レス削除依頼って何処にだせばいいんだろう
796デフォルトの名無しさん:2011/08/06(土) 14:43:07.02
アクセスしてみてないけど、BASIC認証かけてあるなら別にいいじゃん?
心配だったら管理者に言って 〜/sample/ ディレクトリを移動してもらおう

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

あとhtmlの文字列をprintで直接作成するのも、たぶんダメなんだけど、変更するときに
正規表現とかで書き換えるのはダメだよ。バグ以前に難解になりすぎて目的達成できないだろうし。
HTML文字列ではなくてDOMを操作するモジュール使うべし。
803デフォルトの名無しさん: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++;
   
}
804デフォルトの名無しさん:2011/08/07(日) 12:44:41.54
訂正:foreach(@lines)じゃなくてforeach(@lines1)です
805デフォルトの名無しさん:2011/08/07(日) 12:48:27.94
また訂正    
push($cyuusyutu_lines1,$_);  →  push(@cyuusyutu_lines1,$_);
push($cyuusyutu_lines2,$lines2[$lineno]);→  push(@cyuusyutu_lines2,$lines2[$lineno]);
806デフォルトの名無しさん:2011/08/07(日) 13:15:08.87
for my $lineno (0 .. $#lines1) {
my @data = split /<>/, $lines1[$lineno];
# ...
}
807デフォルトの名無しさん: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'がそれ?)
808デフォルトの名無しさん: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] ;
809デフォルトの名無しさん:2011/08/07(日) 13:57:16.50
>>807
Math::BigRat は恣意的に分数に表示するためのモジュール。
使用目的が明かに違う。そんな風に使うべきじゃない。

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

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

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

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

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

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

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


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

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

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

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

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

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



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

>>863 の方がどうかしてると思うよ。
868デフォルトの名無しさん:2011/08/11(木) 23:49:41.68
カンマで繋いで、ブロックの最後のセミコロンを省略に一票。
869デフォルトの名無しさん: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{ } あたりで対処も出来ねーし。
870デフォルトの名無しさん:2011/08/12(金) 00:24:22.36
ん、そのへんはこれでいいんじゃ?

BEGIN { require feature and feature->import('say') }
say "hello" and say "goodbye"
871デフォルトの名無しさん:2011/08/12(金) 00:35:59.36
featureに関してはその通りでした、失礼。
872デフォルトの名無しさん:2011/08/12(金) 01:07:18.52
そんなことより、Perlの世界のオブジェクト指向って
現在はMoose(Mouse)を使うのが標準なんですか?
873デフォルトの名無しさん:2011/08/12(金) 01:26:51.98
>>872
そうムキにならなくても。
ハカーさま方はそうおっしゃってる方が多いです。
個人的にもお勧めです。
Moose/Mouseを利用したCPANモジュールも結構あるようです。
でもPerlディストリビューションに付いてくるいわゆる標準モジュールではありません。
874デフォルトの名無しさん:2011/08/12(金) 01:40:35.33
>>873
標準モジュールで似たようなのあるのですか?
875デフォルトの名無しさん:2011/08/12(金) 07:14:57.84
>>874
似たような…というと語弊があるけど、
OO支援という意味では Class::Struct というのがある。
876デフォルトの名無しさん: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)
877デフォルトの名無しさん:2011/08/12(金) 11:44:06.92
必ず中でreturnする、という条件なら

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

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

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

$fact->(5);

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

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

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

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

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

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

しかし、$#+という表現は初めて見た。
896デフォルトの名無しさん:2011/08/16(火) 18:08:39.67
>>892
2となってるところを>>895さんの教えてくれた$#+で置き換えるとそのものずばりの処理が完成しました
どうもありがとうございました
897デフォルトの名無しさん:2011/08/16(火) 18:23:41.88
フォームに,(カンマ)を入力して送信すると勝手に‚に変換されるんですけど
これって仕様ですか?勝手に変換されるのはカンマだけですか?
898デフォルトの名無しさん: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;
899デフォルトの名無しさん:2011/08/16(火) 18:33:32.72
>>897は勝手に&#8218;に変換されるです
900デフォルトの名無しさん:2011/08/16(火) 18:49:47.92
もっと詳しく書くと,(カンマ)を入力して確認送信して
確認画面で$FORM_DATA{'text'} =~s/,/&sbquo;/g;でカンマを&sbquo;に変換して
それで書き込むでも$FORM_DATA{'text'} =~s/,/&sbquo;/g;で
カンマを&sbquo;として書き込もうとしているのですが
実際にファイルに書き込まれているのは‚;とかいうデータになっているんです
901デフォルトの名無しさん:2011/08/16(火) 18:50:41.16
&#8218;とかいうデータになっているんです
902デフォルトの名無しさん:2011/08/16(火) 19:04:48.17
>>1
903デフォルトの名無しさん:2011/08/16(火) 21:01:19.41
Perlはもう終わりなの?
904デフォルトの名無しさん:2011/08/16(火) 21:21:19.73
>>903
本来の役割であるUnix系システムにおけるテキスト処理の用途では
むしろ以前にも増して必須言語なってるかと

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

ちなみにUbuntuでは「perl-base」パッケージを削除しようとすると
「この操作を行うと、システムが不安定になる可能性があります。続行しますか?」
と聞かれるほどにシステムに入り込んでるみたい
907デフォルトの名無しさん: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も変わってしまうのですか?
908デフォルトの名無しさん:2011/08/16(火) 23:19:42.38
>>907
その通り。
909デフォルトの名無しさん:2011/08/16(火) 23:57:25.94
何故そうなるか説明出来ないけど、そうなるのが仕様。

まぁそもそもループとなる対象を、そのループ内で書き換えるのはお行儀が良いとはいえないかな。
910デフォルトの名無しさん: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
911デフォルトの名無しさん:2011/08/17(水) 01:28:08.94
>>907のような場合、
どう書き換えるのが正しいの?
912デフォルトの名無しさん:2011/08/17(水) 01:32:13.89
>>907はコードが多すぎる。
henkanは30000を戻しているだけ。
だからこう書き換えられる。

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

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

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

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

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

この場合明らかな初期化だから、ループを回す必然性すら無く
素直に、@data = (30000) x @data;あたりのコードにしとけ。
てのは別の話し。
919デフォルトの名無しさん:2011/08/17(水) 13:14:15.10
INPUTタグはhiddenで&lt;&gt;で送ると勝手に<>に変換されるけど
textで&lt;&gt;と入力すると<>になはならいんだな
920デフォルトの名無しさん:2011/08/17(水) 13:21:42.60
バカはいい加減お引き取りください
921デフォルトの名無しさん:2011/08/17(水) 14:01:01.74
>>919
テキストで入力するのは全部変換されるよ
perlにはまったく関係が無い
922デフォルトの名無しさん: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/
923デフォルトの名無しさん: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;
}
924 忍法帖【Lv=23,xxxPT】 :2011/08/17(水) 19:54:17.32
tset
925デフォルトの名無しさん:2011/08/17(水) 20:56:22.00
>>923
perlがOSからmallocした領域をfreeせずに持ち続けてるだけで、
perlの変数的には解放されてるんだろう。

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

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

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

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

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

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


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

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

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


947デフォルトの名無しさん:2011/08/19(金) 02:52:53.96
既存リストから新しいリストを作るときはmapかなあ
948デフォルトの名無しさん:2011/08/19(金) 03:48:10.49
ただね。mapで簡単にかけたからと言って、
速いとは限らないんだよな。
949デフォルトの名無しさん:2011/08/19(金) 05:05:00.96
俺は割と積極的にmap&grepするなあ。
迷う時には確かにforeachでエイヤで書いちゃうほうが楽なんだけどね。
950 忍法帖【Lv=38,xxxPT】 :2011/08/19(金) 06:12:31.65
>>945
省略した書き方で デフォルト変数 @_ に入ってくれない時があったけど同じようなもんかな
951デフォルトの名無しさん:2011/08/19(金) 09:25:27.46
文字通り変換作業なら map で、逐次作業なら foreach では。
あと特に配列がでかいときは foreach のほうが省メモリでよいと言いませんか。
952デフォルトの名無しさん: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}) は違うのか…


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

ってやると引数とれた

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

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

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

これで行かないんです><
961デフォルトの名無しさん: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";
}
962945:2011/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
963デフォルトの名無しさん: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" になってたりしないのかな?
964945:2011/08/19(金) 23:12:46.91
直った!!
まさか関連付けとは思いもよらなかったorz

thx♪
965 忍法帖【Lv=39,xxxPT】 :2011/08/20(土) 02:11:21.01
なんということでしょう
966デフォルトの名無しさん:2011/08/20(土) 15:52:19.15
>>951
mapがメモリくうのって、
@A = map { $_ + 1 } @A;
みたいに、左辺と右辺で、同じ@Aを使用した場合だけじゃないかな。
967デフォルトの名無しさん: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 で見たかぎりはメモリ使用量に
顕著な差は見られなかったが?
968デフォルトの名無しさん:2011/08/20(土) 17:16:33.48
Perlで3次元の配列を表現するにはどのような方法があるでしょうか?
変数$aにx,y,zの3変数から求まる値を代入したいのです。

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

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

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

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

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

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

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

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

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

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

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

と埋めついでにコメント。
993デフォルトの名無しさん:2011/08/20(土) 22:00:56.10
Perlで条件判定して強制的に終了するようなコマンドってありますか?
cのexit(0)みたいなのです。
994デフォルトの名無しさん:2011/08/20(土) 22:08:35.04
      ,,,,wwWWwwWwWム,,,
    ミミ三ミ川ミミ川三ミ川ミ川ミ
   ミ_川ミ_ミ川ミミミ_ミ_ミ_ミ三ミ_゛ミ
  ミ_川三川三ミ ,.--"゛~~~~''´゛゛゛ミ_
  ミミ川三ミ川ミミ_.         丶
  ミ川ミ_リ川ミミ_川          |
  ミ川ミリ川川ミ川 ‐、_‐rッ,  i、 'ニi.ア,
   川川リ,r' ミミ_川    ̄  .!i ヽ、 |
   川川リ(,(, 6 リ川      ィ.___)) |
   リ川川`ー |川!、    . _.i'I.  |
   川リ川   l)))    -´=ェエ=,` /
    リ川)   川        ̄  /
  /人   ヽ    ゛゛ー,,,,_...,ノ
/       ヽ      入´
995デフォルトの名無しさん:2011/08/20(土) 22:16:38.52
perlでもexit
996デフォルトの名無しさん:2011/08/21(日) 02:28:28.68
          /      / /| : /              i:     ∨/ ノリ  /⌒)
       /イ     : / ⌒ト |    /|  ∧      |:    |、__,彡   {  ⌒)
        |/ . : : :| :/  | l   |/  /⌒ト、:/∨:!:     |/: : : ハ / ̄ ̄
(⌒ヽ       レイ: : : : 〃⌒心八 │ ∨   | :/\| :     | : : : : : |
 ヽ  ヽ、  -、:|: :|: イ{{. i_ノ:.:ハ \|      |/   :|/     厶L:_:」_:リ
  \  `(  }八八ハ. 弋いソ     __   /     ,: : : : : |   はっじまるよー
   /  ⌒ヽ ∨ : : :j(//)  .      ⌒¨¨~ヾ /: :    / :   リ
  〈   ´ ̄)  | : {           _     (//) : :   / : :   |
   '    '⌒) }i| : :丶    「   }   ∠/: :   / : : :   |
   '.  ノ´ {八 : :∧\    __ノ      / : : :  / : : : : 人|
          } \厶:∨::>  _,,,...  ´/: :/| 〃丶:∧: :/
    /〉   ∧ /{:::|「::::::::::::::::: ∧    // /|/::::::::::\|/
997デフォルトの名無しさん: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 ;
998デフォルトの名無しさん: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がこれだけ無駄なのは
左辺値用の値をどっか無名配列にキープし続けてるからと
考えるべきか…
ま、何れにせよ使うべきでは無いコードだ。
999デフォルトの名無しさん:2011/08/21(日) 10:28:00.96
×メモリ使用量
◯解放されてないメモリ量
1000デフォルトの名無しさん:2011/08/21(日) 10:34:09.81
梅ー
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。