1 :デフォルトの名無しさん2011/05/25(水) 23:18:12.33
CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://hibari.2ch.net/php/ )

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

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

http://www.perl.org/get.html
● 2011/05/25 現在の最新版: 5.14.0

▼ 前スレ
Perlについての質問箱 46箱目
http://hibari.2ch.net/test/read.cgi/tech/1297677532/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-7 あたり
8 :デフォルトの名無しさん2011/05/25(水) 23:21:56.41
>>1乙

テンプレなげーよ。
18 :デフォルトの名無しさん2011/05/26(木) 15:11:12.92
>>1 乙

テンプレが長いのは過去スレが多いからだが、過去スレはやめても
いいんじゃない?
他のスレでも、省略しているものが多いみたいだし。
508 :デフォルトの名無しさん2011/07/06(水) 16:20:14.95
>>507
>>1 に良い事書いてあるぞ。
それ、webプログラムや。
509 :デフォルトの名無しさん2011/07/06(水) 16:56:04.34
>>508
ふむ。そうなのですか。
区別ができないほど素人なもので・・・スレ汚しすみませんでした。
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/
534 :デフォルトの名無しさん2011/07/09(土) 16:11:05.91
>>533
できるか否かで答えれば、できる。
それ以上は何が分からないのか分からないから
>>2 の最初のサイトを一通り読めとしか言いようがない。
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 でエンコードする必要があります。
9 :デフォルトの名無しさん2011/05/26(木) 02:10:26.60
JPerl からひさしぶりに Perl な世界でよくわかりませんが >>4 の

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



use encoding "cp932";

でも、いいような気がしるけど、いまいち理解できてないです…
11 :デフォルトの名無しさん2011/05/26(木) 06:36:42.24
>>9
全然ダメ
78 :デフォルトの名無しさん2011/05/31(火) 13:19:05.51
文字が化けちゃうんですけど化けないようにするにはどうしたらいいんでしょうかね?
>>4のやり方で、MechanizeでShift_JISのページを取得してファイルに出力したところ、
???〒が
\x{fffd}@\x{fffd}K\x{fffd}Z〒に
なってました。
10 :デフォルトの名無しさん2011/05/26(木) 02:38:46.95
それは気のせいだよ
12 :デフォルトの名無しさん2011/05/26(木) 12:40:27.81
>>10-11
kwsk
14 :92011/05/26(木) 13:15:44.46
>>12さんどうもです。

とりあえず、最初は

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

こんな感じで、UTF-8形式でソース保存しています。
あ…ファイル名に全角文字だとさらにややこしくなるんですね… orz
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"の挙動が変わるから注意は必要だね。
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";
13 :デフォルトの名無しさん2011/05/26(木) 13:14:43.30
use encoding "cp932"にするとソースもcp932で書かなきゃ
いけなくなるのが余計ってことなんじゃ。
15 :92011/05/26(木) 13:17:59.16
実行環境は、Win7 64bit コマンドプロンプトのローカル環境です。
16 :デフォルトの名無しさん2011/05/26(木) 14:19:17.56
use utf8 するとめんどくさいので、use utf8 は使わないなぁ
ソースを utf8 で保存しれりゃ別にえぇんとちゃうのん?と思う。

文字数を数えたいなら decode してフラグ付けりゃいいだけだしさ。
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
そんなこと聞いてるやつがインジェクション攻撃に
対処できると思わないからタグ自体禁止する。
22 :デフォルトの名無しさん2011/05/26(木) 18:50:12.18
>>19
1.行全部のクォートを"にする
2.タグの中の"を'に変換する
3.SQLなどへのインジェクションで泣きを見る
4.あなたは晴れて失業
5.perl忍者が増える
27 :デフォルトの名無しさん2011/05/26(木) 23:01:20.86
>>19
タグの外ってことは > と < にはさまれてるって考えれば良いかと
28 :デフォルトの名無しさん2011/05/26(木) 23:10:34.54
>>27
<img/>とか<br/>はどうすんの
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;
23 :デフォルトの名無しさん2011/05/26(木) 21:40:54.68
すみません初歩的な質問なのですが
ハッシュ変数wordに$word{"テスト"}="だよ";
のような感じで値を渡しているのですが
いざif文で if ($word{$a} == "だよ")で判別しようとすると
$aがどんな値でも上記の条件式が必ず実行されてしまいます。
意味不明だと思いますがエスパーの方いましたらよろしくお願いします。
24 :デフォルトの名無しさん2011/05/26(木) 22:03:53.54
初歩の初歩だ
文字列比較には==ではなくeqを使え
26 :デフォルトの名無しさん2011/05/26(木) 22:42:03.07
>>24-25
無事解決しました!
なるほど文字列の比較の仕方が間違ってたんですね。
どうもありがとうございました。
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/

お好きな方で。
38 :デフォルトの名無しさん2011/05/27(金) 18:52:12.71
$str="aaa{aaabbbccc}aaa{aaabbbccc}";の
{}の中のaaaをAAAにしたいんですけど
$str=~s/{aaa}/AAA/g;としてもうまくいきません
どうすればうまくいくんでしょうか?
40 :デフォルトの名無しさん2011/05/27(金) 19:23:35.56
>>38
$str="aaa{aaa}aaa{aaa}";
なら $str=~s/{aaa}/AAA/g;でうまくいくよ。
39 :デフォルトの名無しさん2011/05/27(金) 19:03:27.46
Perlはじめようと思ったのですが
やめたほうがいいといわれたのでやめます
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」の読み込みはちゃんとできていたということになるんだけど。
49 :デフォルトの名無しさん2011/05/28(土) 00:00:50.35
print %form

した結果はどうなる?
50 :デフォルトの名無しさん2011/05/28(土) 00:07:35.23
>>49 相変わらず何も出ませんの。
52 :デフォルトの名無しさん2011/05/28(土) 00:19:17.65
cgi-lib.plで使える関数ですってよ?
というか
http://www.tiu.ac.jp/~nakabasa/Internet/CGI/cgi4.html
このページの下のほうを参考にしたんで、負ける気がしない!
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^
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

で良いんじゃないの?
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
山カッコ演算子。
ダイヤモンド演算子とも呼ばれる。
73 :デフォルトの名無しさん2011/05/30(月) 22:40:02.95
>>69-71
ありがとうございます。検索しても記号だと見つからないようなので助かりました。
71 :デフォルトの名無しさん2011/05/30(月) 22:10:56.31
ダイヤモンド演算子
72 :702011/05/30(月) 22:35:16.91
>>71
ん?間違ってる?
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);
100 :デフォルトの名無しさん2011/06/02(木) 14:14:14.98
>>75
separator やenclosure 自体のエスケープがないのだから、 $enclose$separat$enclose をそのまま並べた文字列がきたらアウトだろ。
CSVの """" や application/x-www-form-urlencoded の %HH のようなエスケープ処理がないと無理。
103 :752011/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); で文字を壊さずに復元できるようです。
(メールは全文字列を受け付けます。問題は想定ミスや記述ミスだと思います)。

ちなみにセパレーターとかを選べるのは、プログラマーが処理が増大しないような文字を勝手に考えて決めろ、って言うことです。
76 :デフォルトの名無しさん2011/05/31(火) 10:25:46.36
q{0}
77 :752011/05/31(火) 13:01:56.41
>>76
ありがとうございます。Perlだったか!という感じです。

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

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

曖昧な記憶ではメールの仕様と同じだったと思うんで、
どんな内容でもデータは壊れないし復元できると信じたい想いなんですが。
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
外部コードは処理する前に内部コードに変換
83 :デフォルトの名無しさん2011/05/31(火) 19:44:13.28
>>81
decode('cp932',$cp932_char);
decode('utf8',$utf8_char);
とかやってから処理すればいいんですかね?
なんだかどれがどれと一緒なのかわからなくなっとります
82 :752011/05/31(火) 15:33:04.61
ありがとうございます。

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

考えてみた結果、

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

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

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


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

あれ、関数を再度呼んだらoは初期化されないんですか?
ループの中だけで有効で、スコープ抜けたら初期化される物と勝手に思ってました。
すみません検索してきます。
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 という事ですよね?
92 :デフォルトの名無しさん2011/06/02(木) 01:14:17.30
>>89
他のモジュールでも参考にして好きにすりゃいいよ
あとreturnはundefじゃなくて引数なしにしとけ
90 :822011/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を初期化させる!」みたいな記述とかないんですか?
93 :デフォルトの名無しさん2011/06/02(木) 01:24:31.62
94 :902011/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 もたしかにいいね
104 :デフォルトの名無しさん2011/06/03(金) 07:04:43.98
>>98 >>99
うまくいきました。ありがとうございます
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 をそのまま並べた文字列
それは存在出来ないのでは
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 と同時に一行で書ける処理があったような気がするんですが、
どうにも思い出せません。
すみませんけど教えてください。
107 :デフォルトの名無しさん2011/06/04(土) 02:27:53.05
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__
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の関係を誰か教えてください。
112 :デフォルトの名無しさん2011/06/04(土) 03:03:25.72
>>111
すみません、mapを使わなくても出来たような記憶があるんです。


テストしてませんが調べてきました。
xはスカラー値に対しては、その回数を繰り返し連結したスカラーを返すようです。
()に対する x は全く別の働きをし、リストとして複製し、リストを返すようです。
まだテストしてませんが、たぶん>>110で大丈夫だと思います。
114 :デフォルトの名無しさん2011/06/04(土) 03:16:11.44
@map = ((1x150)x200);

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

>>114
その記述だともしうまく行っても、Perl特有の暗黙のなんかがあるのだろうけど、
どこでリファレンスが発生するのかよくわからない・・・
115 :デフォルトの名無しさん2011/06/04(土) 03:16:47.89
>リストリファレンスのコピーを5個入れる
まじすみません!
流し読みしてました!
ソレは困ります!
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
でハッシュだと上手くいきません。
121 :デフォルトの名無しさん2011/06/04(土) 09:45:32.31
122 :デフォルトの名無しさん2011/06/04(土) 14:08:27.01
>>121
具体的にって言ってんだろ死ねよボケ
124 :デフォルトの名無しさん2011/06/04(土) 15:13:20.60
>>122
リンク先に具体的にいろいろ書いてあるだろ
隅々までよく読んで勉強せい
129 :1182011/06/04(土) 17:59:25.89
なんかいろいろスミませんでした。
>>121さんを参考に努力してみます。

 (´Д`;) 
   ∨)
   ((
119 :デフォルトの名無しさん2011/06/04(土) 09:13:13.18
{ } でくくる
120 :デフォルトの名無しさん2011/06/04(土) 09:20:05.75
>>119
すいません、わかりません ><
具体的に教えて
125 :デフォルトの名無しさん2011/06/04(土) 15:44:05.76
質問自体がここは10年前か?みたいなのが多いんだよ。
へんな化石みたいなサイトを見てるくせにまっとうなところは見ない。
126 :デフォルトの名無しさん2011/06/04(土) 16:01:16.61
まず perldoc して自分が使ってる perl のドキュメントを読む習慣を付けた方が良いと思う。
128 :デフォルトの名無しさん2011/06/04(土) 17:56:42.16
ありのままに生きたいと願ったアリはずっとアリのままだった
みたいだな
130 :デフォルトの名無しさん2011/06/04(土) 18:37:12.93
今perlがなんていう変数を何個持っててメモリをどのくらい使ってるか
計測するツールはありますか?
133 :デフォルトの名無しさん2011/06/05(日) 09:16:21.08
ファイルの先頭行にメッセージをいれるべく、
`sed -i '1s/^/MESAAGE\n' $file`
って書いたのに、
sed: -e 表現 #1, 文字数 10: 「s」コマンドが終了していません
とか言われるのは何故?
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]";

どうでしょう
147 :デフォルトの名無しさん2011/06/07(火) 00:09:24.33
>>144-145
助かりました、ありがとうございます!
151 :デフォルトの名無しさん2011/06/07(火) 01:01:53.85
>>143
>>144
ちょっとまて
その場合rand(6)じゃなくてrand(5)だろ?
146 :デフォルトの名無しさん2011/06/07(火) 00:09:21.69
初歩的な質問します。

代数の値があまりにも大きいとe+○○という数になります。
これを整数で表示させる方法はないでしょうか。
148 :デフォルトの名無しさん2011/06/07(火) 00:11:43.67
>>146
BigIntを使う
149 :デフォルトの名無しさん2011/06/07(火) 00:15:16.55
>>148
use Math::BigInt; ってのがあったんですね。
ありがとうございました。
153 :デフォルトの名無しさん2011/06/07(火) 22:45:44.96
ざわざわっ
カイジ「ちょっとまてその場合rand(6)じゃなくてrand(5)だろ?」
154 :tokuhirom2011/06/08(水) 00:09:28.93
よかったら僕になんでもきいいてください
なんでもこたえられます
職業Perlプログラマです
157 :tokuhirom2011/06/08(水) 00:21:55.01
こiPhoneのブックマークにいれてますね
ここのスレ毎日チェックしてますね
おもしろいスレですね
2chやってることかくしてましてねえ
小飼弾はしにま
158 :tokuhirom2011/06/08(水) 00:22:30.35
もう寝ますね
ききたいことあったら明日きいてね
ぼくいつでもいるから
159 :tokuhirom2011/06/08(水) 00:23:04.12
明日の当番はotsuneだったね
ぼくのファンのかた残念だたね
おやすみ
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;を使っても、
計算精度も桁数も変わらないんですが、なぜでしょうか?
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;使うといいよ。チョーお勧め。
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
181 :デフォルトの名無しさん2011/06/08(水) 18:50:28.98
>>171
ありがとうございます。

メモ帳以外ならどこかにリダイレクト可能ですか?
182 :デフォルトの名無しさん2011/06/08(水) 18:57:59.87
>>181
Tempフォルダにでもファイルとしてリダイレクトして
その後にメモ帳で開けば良いんでね?
185 :デフォルトの名無しさん2011/06/08(水) 21:10:21.34
>>182
ありがとうございました!
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すべきか迷い中。。。
172 :デフォルトの名無しさん2011/06/08(水) 12:36:11.39
スパゲッティなperl cgiにアクセスログなどを保存するコードを追加できなくて困っています

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

半分ぐらいはネットで拾ったコードなので中身把握してないので非常に困ってます
174 :デフォルトの名無しさん2011/06/08(水) 12:52:03.29
>>172
Webサーバを運用してるのなら Webサーバのアクセスログで良くね?
Webサーバを運用なら何か他の目的で必要としない限りは必要無いだろ
176 :デフォルトの名無しさん2011/06/08(水) 12:57:05.89
自宅サーバーなので
apacheのログだけとれば十分ということでもないようです

FreeBSDのportsで入れた後で少し改造した物などでは
apacheを経由してないものもあるみたいなのです
178 :デフォルトの名無しさん2011/06/08(水) 15:21:38.65
(?i:hoge) の逆を表す方法があればご教示ください。よろしくお願いします。
183 :デフォルトの名無しさん2011/06/08(水) 20:06:42.37
コマンドラインに変数は渡せない?
$a = `nkf -j $b`;
がうまくいかない・・・

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

自己解決。
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
それです。探していたそのものです。
194 :otsune2011/06/09(木) 23:04:27.54
探し物はなんですか?
みつけにくいものですか?
かばんの中も机の中も探したけれど見つからないのにまだまだ探す気ですか?
195 :デフォルトの名無しさん2011/06/10(金) 00:06:43.33
196 :デフォルトの名無しさん2011/06/10(金) 00:30:11.47
>>194
カスラックから許諾とらないとダメですよ。
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 ( 文字列 =~ /^始まりパターン*終わりパターン$/ )
で、引っ掛らないけどアスタリスクってダメなのか
205 :デフォルトの名無しさん2011/06/11(土) 10:37:55.30
>>203
具体的にその引っかからない元文字列と正規表現パターンを示してみい
207 :デフォルトの名無しさん2011/06/12(日) 04:44:44.82
あ、printじゃ表示できなかったです。

warn AAA::BBB::; ってやったら、
AAA:BBBってでるんですが(ry
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 ってなる
理由を聞いているのですが。
214 :デフォルトの名無しさん2011/06/12(日) 19:21:00.35
>>207ではコロンが一個になってるじゃーん
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えお
になるようにしたいのですが。
215 :デフォルトの名無しさん2011/06/12(日) 19:31:20.65
>>213
my $abc2 = sprintf('%02d', $abc);
217 :デフォルトの名無しさん2011/06/12(日) 19:43:00.93
>>215
ありがとうございました
216 :デフォルトの名無しさん2011/06/12(日) 19:40:53.62
pythonのctypesみたいなものはありますか?

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

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_part?.mp4
http://www.youtube.com/watch?v=keSK70uqDJY
A wing of radaniamu part_?.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 固定でいいのかね?
229 :デフォルトの名無しさん2011/06/13(月) 01:27:08.04
>>223-227
全部だめでした;

そこらの掲示板はタグは無効かつ改行は有効が普通ですけど、
結構難しいプログラムなんですかね?
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
226 :デフォルトの名無しさん2011/06/12(日) 23:20:03.25
/s には . が \n がマッチするようになる以外の効果ないと思うけど
228 :デフォルトの名無しさん2011/06/13(月) 01:14:37.89
そうか s オプションは関係なかったか。適当なことを書いてすまんかった。
「改行も無効になって」しまう、の意味がいまひとつわからんかったのだが
単に処理対象テキストの改行コードが "\r\n" ではなく "\r" または "\n" だから、
ってだけの気もするよ。

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

>>しかしそもそもCGIの質問はスレ違いだったか。
これって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先生に聞いてみたら
腐るほどでてきじゃなないか・・・

プログラム全体のサンプルとかスレチ。
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
ぐぐりかたを参考におしえてください
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落ちしてて読めない
266 :uy ◆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
277 :デフォルトの名無しさん2011/06/16(木) 23:35:52.09
>>237
まだ見てるか分からないけど、IMAP 使ったほうが楽じゃない?
239 :デフォルトの名無しさん2011/06/13(月) 17:29:28.97
ググってもいまいち分からなかった
ちなみに英語は完全スルー
241 :デフォルトの名無しさん2011/06/13(月) 18:03:50.84
とりあえずいたらお願いします
最悪ログイン部分だけでもいいので
243 :デフォルトの名無しさん2011/06/13(月) 20:14:25.32
ファイルのロックをするときよくロック用のディレクトリを作って
そのディレクトリがあるかどうかでロックの判断をしている場合が多いけど
ディレクトリの変わりにロック用のファイルにして処理すると問題あるんですか?
(ロック用のファイルが存在していればロックして書き込めないというように)
250 :デフォルトの名無しさん2011/06/13(月) 21:17:31.03
>>243
排他処理はアトミックに行わないとダメ。

> (ロック用のファイルが存在していればロックして書き込めないというように)
「存在する」と「ロックする」の間で、割り込まれる可能性がある。
251 :デフォルトの名無しさん2011/06/13(月) 21:45:44.12
まずテキトーにprintして変数の中身がどうなってるか確認しろよさせろよ
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
逆に使えない文字があったらびっくり。
276 :デフォルトの名無しさん2011/06/16(木) 23:16:06.14
>>257
$;
ハッシュのキーでこの中にある文字は使ってはいけません。
いや、使ってもいいんだけど、変な事が起きても知りません的なことになりかねません。
265 :デフォルトの名無しさん2011/06/16(木) 10:25:35.80
まぁ、使える文字と使える文字数は
別モンの質問だな。
267 :uy ◆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はどうすればいいの?
270 :デフォルトの名無しさん2011/06/16(木) 18:15:00.21
ファイルのロックは書き込みのときだけでいいんでしょうか?
ファイルの読み込みのときはロックしなくても問題ないですか?
273 :デフォルトの名無しさん2011/06/16(木) 18:34:59.20
271 :デフォルトの名無しさん2011/06/16(木) 18:20:39.28
それと連動する2つのファイルに書き込む場合

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

ファイル1がロック中でファイル2がロックじゃないとき
ファイル1には書き込まれなくてファイル2には書き込まれるということになると
連動する場合ファイル1と2でデータがずれる気もしますが
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 が使える
278 :デフォルトの名無しさん2011/06/16(木) 23:51:16.43
2つのファイルをロックするなら
分けてロックするより

ロック
ファイル1の書き込み
ファイル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
その場合、ほぼ同時に二つのプロセスが進入すると、
先に進入したプロセスの結果が消えることがある。
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
あるかないか だけ答えろよ。うっとおしいやつだな。
290 :デフォルトの名無しさん2011/06/18(土) 16:56:02.01
>>288
その言葉から読み取れる脳の思考の意図を読め。
言葉遊びたりともうっとおしいという日本語は存在しない。
296 :デフォルトの名無しさん2011/06/18(土) 20:48:38.03
>>290
> 言葉遊びたりともうっとおしいという日本語は存在しない。

そんな「たりとも」の使い方は少なくとも日本語には存在しない。
こんな日本語不自由な奴に他人の日本語の間違いを指摘する資格はない。
295 :デフォルトの名無しさん2011/06/18(土) 19:05:32.27
http://d.hatena.ne.jp/sugyan/20110616/1308203734

ここに乗ってるの全員フォローしてください
お願いします
よろしくかすども
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"; }
みたいな感じのやつ
305 :デフォルトの名無しさん2011/06/19(日) 01:00:50.88
連想配列って書いてた奴、以前にもいたなあ。古い言い方。
今はハッシュって言うよね。
307 :デフォルトの名無しさん2011/06/19(日) 01:06:56.51
>>305
別に古い言い方ではないよ、同様の要素の総称としてなら現役で使われる用語
ただPerl用語としてはハッシュと呼ぶのが公式だな
308 :デフォルトの名無しさん2011/06/19(日) 01:13:05.32
ほんらい連想配列という機能があって、それを実装する方法の一つがハッシュだから、
連想配列という名前の方が正しい。
312 :デフォルトの名無しさん2011/06/19(日) 13:13:40.90
forとforeachは変わらないって初めてのPerlに書いてあるのに
foreachのほうが処理が速いって言ってるサイトがあるけど、いったいどっちが本当なんだ
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__
320 :デフォルトの名無しさん2011/06/19(日) 17:51:21.96
>>314
なるほど、どっちも正解だったのか
何も考えずforeachで統一することにするよ
ありがとう
321 :デフォルトの名無しさん2011/06/19(日) 18:22:29.89
>>320
どちらかと言えばforに統一のが良いような…
foreachって書くと、あまり三文形式のforに見えないイメージ
一方のforは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.
315 :デフォルトの名無しさん2011/06/19(日) 13:57:09.54
>>313
foreach( $i=0; $i<@array; $++ ) という形式のことを
慣例上 for と言ってるだけ?
316 :Perl忍者2011/06/19(日) 15:07:21.27
まだお前らこんなカスなことやってんだね

いい加減進歩ないね

あほみたいですね

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

あと30年たってもPerlPerlわめいてそうですねwwwwwwwwwwwww
322 :デフォルトの名無しさん2011/06/19(日) 18:57:19.03
自分はforeachしか使わないな。
こだわりがあったわけじゃないけど、そもそも三文形式のforを使う機会がなかった。

324 :デフォルトの名無しさん2011/06/19(日) 19:08:32.57
クックブックは、三文形式でない場合はforeachを使うと英語の文になってわかりやすからとforeachを推奨してるね
326 :デフォルトの名無しさん2011/06/19(日) 19:11:16.51
俺は書き分けてるなあ
3文のほうはfor、変数とリストのほうはforeach
327 :デフォルトの名無しさん2011/06/19(日) 19:20:07.85
326とおんなじルールだけど、ワンライナーとかで後置するときはfor使うね
330 :Perl忍者2011/06/19(日) 19:45:49.06
ワンライナーでかけるとかわめかれてもほとんど津川ねーからメリットのうちにはいらねーよばーかwwwwwwwwwwwwwwwww
331 :デフォルトの名無しさん2011/06/19(日) 20:05:35.15
扱う数が浮動小数点数の範囲を越えてしまって
範囲演算子を使えない場合には 3文形式は便利
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";
339 :デフォルトの名無しさん2011/06/23(木) 09:04:03.75
<> で1行読み込みですが、1行は何文字OKですか?
341 :デフォルトの名無しさん2011/06/23(木) 10:00:08.32
>>339
日本語でも英語でもなんでも
342 :デフォルトの名無しさん2011/06/23(木) 10:39:41.10
>>341
<>で読み出せる1行の最大の大きさは何文字?
358 :デフォルトの名無しさん2011/06/23(木) 21:06:45.32
どうだろうね
アドレス空間の枯渇のほうが先に来るかもしれない

>>339は1文字が1バイトとは限らないという引っ掛けかと思ってた
343 :デフォルトの名無しさん2011/06/23(木) 10:42:21.59
その1 perl -pe '$i++;print$i'
だと各行の先頭に行番号を打てるけど
その2 perl -pe '$i++}{print$i'
だと全体の行数しか出力しない

行数を数えつつ各行も出力もしてほしかったんだけど
なぜその2では各行が表示されなくなってしまったんだ?
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 $_; }
に解釈されるってことか!
348 :3392011/06/23(木) 14:37:28.71
だれもわかりませんか?
349 :デフォルトの名無しさん2011/06/23(木) 15:48:46.66
>>348
しるか!環境依存じゃ。
perlでは制限してない。
350 :3392011/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
エディタがエラーになるまでひたすら一行かけよ。
それがなによりのソースだ。


そもそも何その質問の仕方。
釣りかよ。
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の挑戦に期待。
362 :3392011/06/23(木) 22:57:21.34
>>357
ありがとう
32bitOSなら4G-1までですね
353 :デフォルトの名無しさん2011/06/23(木) 18:42:47.64
やれやれ。
質問箱といいながらちょっと難しい質問になるとまったく答えられる人がいないんですね。
かなりがっかりしました。
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}

のようになります。
364 :デフォルトの名無しさん2011/06/24(金) 01:23:52.48
>>359
utf8 -> cp932 -> hexdata -> cp932 -> utf8
この最後のutf8に変換が抜けてるのでは。
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でも分けて表示できる方法ってありますか?
できればモジュールは使わないでできる方がいいです。
363 :デフォルトの名無しさん2011/06/23(木) 22:58:44.18
365 :デフォルトの名無しさん2011/06/24(金) 02:00:07.67
変換・逆変換が対称になってないしな
367 : 忍法帖【Lv=6,xxxP】  3592011/06/24(金) 03:55:52.91
>>364 >>365
ヒントありがとうございました。
UTF8フラグ付きに戻す作業が必要でしたm(_ _)m
------
use strict;
use utf8;
use Encode;

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

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

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

print decode('shiftjis', $text);
366 :デフォルトの名無しさん2011/06/24(金) 02:29:49.53
mkpath でディレクトリ作ると、読み取り専用の属性がつくっぽいのだが、
エクスプローラのフォルダのプロパティからも、attrib コマンドでも ReadOnly の属性が外れない。。。
368 :デフォルトの名無しさん2011/06/25(土) 15:21:47.21
Perlでfirefoxで表示されているHP情報を取得して
Perl内で編集処理してまたfireofxにて編集した内容を再表示させることって可能ですかね?
可能だったらやり方かもしくはそのようなことを詳しく書いてあるようなサイトを教えてもらえるとありがたいです
374 :デフォルトの名無しさん2011/06/25(土) 21:38:44.17
>>368
可能。
webサーバを用意して、firefoxにperlから
URLとしてブックマークレットを投げて
そこでajaxで中身をサーバに送りつけれ。
375 :デフォルトの名無しさん2011/06/25(土) 21:51:59.57
385 :デフォルトの名無しさん2011/06/26(日) 13:16:36.55
>>374
>>375
どうもありがとうございます
371 :デフォルトの名無しさん2011/06/25(土) 16:20:25.11
JavaScriptでするDOM操作みたいなのをPerlでやりたいってことじゃないのかな?
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
383 : 忍法帖【Lv=7,xxxP】 2011/06/26(日) 03:18:28.29
>>376
Jcode関係外して、アルファベットだけでも送れます?
393 :デフォルトの名無しさん2011/06/26(日) 22:55:58.96
>>376
うちのMTAではそのコードで送信でけましたよ。
送れない原因についてはPBSもそうだろうしSMTP-AUTH必須なのかもしれないし、
OP25B対策されててそのアプリからMTAをつつけてない可能性もありますし、
もしくはあなたが構築したかもしれないMTAが機能してないって可能性もあるし、
原因は山ほど想定されるのでよくわからんという事だと思われます。
394 :3922011/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;付けないのは、やめたほうがいいですよ。
403 :デフォルトの名無しさん2011/06/28(火) 11:50:07.96
>>402 → >>394
406 :デフォルトの名無しさん2011/06/28(火) 23:12:29.39
まあ、本来CGIの話ではないが、少なくとも>>376がその区別がついてないのは
コードから明らかだからな。
わからないことがわからない状態で、他人に質問すべきではない。
377 :デフォルトの名無しさん2011/06/25(土) 22:19:42.21
kentという時点で間違ってる。

あれを参考にしていいのは
中学生まで。
380 :デフォルトの名無しさん2011/06/26(日) 01:30:59.36
>>377-379
解決法がわからないのに糞レスしてるお前らにワロタwwwww
無論俺も知らないがw
384 :デフォルトの名無しさん2011/06/26(日) 10:20:57.95
webいじってりゃメール送信くらい誰でもつけるだろ。

POP before SMTPはせんで良いの?
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
はぁ?じゃねえよカス
395 :デフォルトの名無しさん2011/06/26(日) 23:10:02.91
いや、だからまずPBS用のコードを足してみろって。第一の可能性だ。
396 :デフォルトの名無しさん2011/06/27(月) 00:24:38.13
Perlの質問なんですが
Perl忍者が最近来てません どうしたんですか?
398 :デフォルトの名無しさん2011/06/27(月) 07:33:43.98
>>396
就職できたんだろ
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で登録されているのですが、あとなにか設定が必要なのでしょうか?
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 でコマンドラインに戻れます。
402 :デフォルトの名無しさん2011/06/28(火) 11:49:02.23
さくら鯖ってEmail::Sender使えねーだろ
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
コピペだけして分かった気になっちゃうのは中学生で卒業しとけよ
411 :uy ◆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 ( /^>(.*)/ )
で指定して
>以降の文字を取得してるのですが、この>以降に/が入っているとその行を認識してくれません
対処法が分かる方いましたらお願いします
417 :デフォルトの名無しさん2011/06/29(水) 11:23:48.96
>>414
if(/^(>[^\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
とっくに解決してる。
424 :4222011/06/29(水) 14:24:28.10
>>423
いや、最初から問題無いよ。
425 :デフォルトの名無しさん2011/06/29(水) 17:17:06.38
そう、最初から問題ない。
>>414が何をどう勘違いしていたのか微妙に興味をそそられるな。
416 :デフォルトの名無しさん2011/06/29(水) 11:06:59.77
自己解決してなかった。

見やすいように全角で書きます
(.*)の部分を/が入ってても無視しなくて、スペースがあってもスペースの手前までじゃなくて">"以降のその行全体を取得するにはどうしたらいいでしょうか
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] を . に変えてやって。
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
430 :4282011/06/30(木) 07:31:27.82
>>429 ありがとうございます。
その説明で納得できそうです。
欧米の知識人には常識とか
単に著者がラクダに馴染みの深い地域出身なのかも知れませんね。
すっかりPerlのラクダ本の方に引きずられてしまっていました•••。
それも意図した洒落た表現なのでしょう。
434 :デフォルトの名無しさん2011/06/30(木) 19:12:22.54
若者に話を合わせるために見ているだけだと思う。決して観てはいない。
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区切りなんでしょうか?
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
452 :デフォルトの名無しさん2011/07/04(月) 12:14:43.63
分解前のmultipartはform入力部分のデータとアップロードファイルの中身の区切りはOSに関係なく\r\nなのでしょうか?
454 :デフォルトの名無しさん2011/07/04(月) 12:35:28.69
>>452
そう。じゃないと異なるOS間でやりとりできなくなっちゃうだろ。
詳しくはRFC2046あたり読め。
458 :デフォルトの名無しさん2011/07/04(月) 12:58:26.51
>>452
\r\n でなく \x0D\x0A で、入力をバイナリとして正しく扱っていれば YES
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には
送信機能はありません。
466 :デフォルトの名無しさん2011/07/05(火) 02:42:32.73
じゃあ>>462は間違いというのもおkね
467 :デフォルトの名無しさん2011/07/05(火) 02:49:43.59
>>466
意味がわかららん。

あるライブラリにバグがあって、
それをライブラリ外で修正したからって
ライブラリにバグがあることに変わりはないだろ。
474 :デフォルトの名無しさん2011/07/05(火) 11:29:54.68
>>462って今頃顔真っ赤にしてんだろ。
455 :デフォルトの名無しさん2011/07/04(月) 12:39:29.42
初歩的な質問かもしれませんが、配列の後ろからn番目の要素までを取り出すにはどうしたらいいんでしょうか?
457 :デフォルトの名無しさん2011/07/04(月) 12:55:55.21
459 :デフォルトの名無しさん2011/07/04(月) 16:21:07.36
アスキーで入力されたものは環境に合わせて改行コードは変更される
:rawで読み込めばいいんだけど:rawで開いたファイルに対して$line=<INPUT>で1行をちゃんと取れるかは不明
大丈夫だとは思うけどね。。。
463 :デフォルトの名無しさん2011/07/05(火) 00:17:05.50
MIME::Tools に送信機能が無いなら、送信時に改行コードの変更が行われない。
というお前のコメントも矛盾だぜ?うんこ野郎w o(^-^)o
464 :デフォルトの名無しさん2011/07/05(火) 00:57:38.53
>>463
あまり弱いモノいじめするな。かわいそうだろ
471 :デフォルトの名無しさん2011/07/05(火) 10:37:56.72
引っ込みがつかないんだよ
>>463の時点でひどすぎる
469 :デフォルトの名無しさん2011/07/05(火) 10:11:09.87
なんか会社にもいるよね、こういうの
「おれは間違ってない!」って言い張ってて
矛盾を指摘しても認めない人。
470 :デフォルトの名無しさん2011/07/05(火) 10:29:15.49
そういう依怙地な人は真っ先に首切り対象になるな
つーか自分で言ってることの意味に気付いてないモン、
頭がおかしい
475 :デフォルトの名無しさん2011/07/05(火) 11:41:07.43
speedycgiを使用してみたいと考えています。
これはメモリに常駐させるようなのですが、終了(メモリから消去)させる場合は
どうすればよいのでしょうか?
時間がたてば勝手に終了するのでしょうか?

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

つーかspeedycgiには
常駐機能はありません。
478 :デフォルトの名無しさん2011/07/05(火) 12:10:12.60
>>476
相変わらずお前ってバカだね
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} = '';
}
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;

だな。
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;
488 :4832011/07/05(火) 20:21:10.53
ああ、確かに >>487 の前者が一番しっくり来るな。何やってるか見てすぐわかるし。
485 :デフォルトの名無しさん2011/07/05(火) 19:43:25.52
上のmapの方がperlくさいな。
9とか入ってないし。
486 :デフォルトの名無しさん2011/07/05(火) 19:56:24.07
>>483
あ〜なるほど
代入される側に % が必要なわけか

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



ありがとうございました m(_ _)m
489 :デフォルトの名無しさん2011/07/05(火) 20:25:37.06
ディレクトリの容量を取得するにはどうすればいいんでしょうか?

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

ディレクトリの中のファイル一覧やサブディレクトリ一覧を取得して
それぞれの容量を出して合計するしか方法はないんでしょうか?
493 :デフォルトの名無しさん2011/07/05(火) 21:07:08.16
misu

perl -MFile::Find -le 'find sub { -f and $s += -s }, qw(.); print $s'
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 .

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出力オプションを付けるべきなんだろーね。」

502 :デフォルトの名無しさん2011/07/06(水) 00:04:04.27
いや、こんな適当な訳に突っ込み入れられても(汗
真面目に訳そうかとも思ったけど、そのレベルの文章か?コレ
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
返信ありがとうございます。
何か参考にできるサイトがあったら教えてください。
もしよろしければ、簡単に説明してもらえませんか?
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が入るはずだと思うのですが、うまくいきません
簡単な質問ですみません。どなたか教えてください。
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]`;
522 :デフォルトの名無しさん2011/07/08(金) 11:52:25.76
>>519
アルゴリズムの意味がよく分かりません
なぜ^(11+?)\1+$これで素因数を求められるんでしょう・・・
>>520
factor速すぎます。ソース見てよく勉強しないといけないみたいですね
521 :デフォルトの名無しさん2011/07/08(金) 11:24:57.71
WindowsXP ActivePerl 5.12.4です。

Cwd::getcwd();
でカレントディレクトリを得た場合、帰ってくる文字コードはcp932ではないのでしょうか?
たとえば、カレントディレクトリがC:\成績表やC:\ソナタ
の場合
use Cwd;
print getcwd();
すると
C:/成績・ やC:/・ナタ
となってしまい、うまく得られません。どうしたらちゃんと得られるんでしょうか?
524 :デフォルトの名無しさん2011/07/08(金) 12:35:33.02
>>521
Cwdのバグが原因。2 バイト目が「\」になるWin使うときは要注意

このへんを参考に自分で直せ
http://miau.s9.xrea.com/blog/index.php?itemid=471
523 :デフォルトの名無しさん2011/07/08(金) 12:14:22.18
正規表現の意味、分かりました
素因数の数が3個の場合 ^((11+?)\1+)\2+$
素因数の数が4個の場合 ^(((11+?)\1+)\2+)\3+$
こういう書き方は出来ないんでしょうかね
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 して。
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年前に比べたらすごい違う
なんか、ガンプラの進化を見ているみたいに違う
530 :デフォルトの名無しさん2011/07/08(金) 20:53:03.88
5.10な
532 :デフォルトの名無しさん2011/07/08(金) 21:08:05.34
ぎゃーー、5.10のつもりで書き込んでた、
>>530
指摘thx.
531 :デフォルトの名無しさん2011/07/08(金) 20:54:17.29
おそろしいな
言われるまでそのままperl5.10だと思い込んでた。
いやあ人間の脳ってすばらしい
存在しない情報を勝手に補完して読みやすくしてくれる
脳みそさまさまだ
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

535 :デフォルトの名無しさん2011/07/09(土) 18:38:38.25
open H,"pattern.txt";
$regexp=<H>;
close H;
chomp $regexp;
これでいいんでしょ?
549 :5332011/07/10(日) 09:32:04.17
お返事遅れました

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

534さん、書き方が曖昧だったようですね。文章ヘタですみません。今後気をつけます。
539 :デフォルトの名無しさん2011/07/09(土) 21:20:18.92
if(open(my $fh, '<', 'test.txt')){
 〜
}


って書いた時、ブロックから出たら $fh は勝手に閉じられるんでしょうか?
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 しないほうが一般的だろうし
どうトラップするかどう止めるかみたいなのは状況次第だと思う。
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:$@" ;}

そもそも親関数って何だ?
550 :デフォルトの名無しさん2011/07/10(日) 11:28:55.11
>>548
だからevalでトラップするんだよ。

perl例外処理の基本だろ。
554 :sugyan2011/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
文字列(特に外部要素によって改変される可能性のある文字列)は危ないけどな
ちゃんと用法容量を守ってお使いくださいってことだ
563 :デフォルトの名無しさん2011/07/11(月) 02:03:23.21
>>557
なぜエラートラップするだけのevalに
文字列を入れないといけないのか?
564 :デフォルトの名無しさん2011/07/11(月) 06:25:15.28
>>563
いや、だから、文字列じゃないから大丈夫だろ、って言いたかったんだが…
558 :デフォルトの名無しさん2011/07/10(日) 18:22:02.20
ディレクトリの中のファイル一覧配列とディレクトリ一覧配列を戻り値としてreturnで返したいんですが
returnでは1つの配列しか返せないんでしょうか?
2つの配列を戻り値として返す場合はどうすればいいんでしょうか?
561 :デフォルトの名無しさん2011/07/10(日) 19:02:51.40
562 :デフォルトの名無しさん2011/07/10(日) 20:38:29.61
英語読めない癖に「英語読め」って宣言したり、
perldoc誤読して自慢気に書き込んで指摘されたり、、、
忍者が名無しで書き込んでんのか?
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);
}
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だけど表示された
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を一時対比するだけのもの。
572 :デフォルトの名無しさん2011/07/11(月) 14:06:22.64
表示されたとか書くやつら、use strict と use warnings はちゃんと書いとけよ。
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;
578 :P erl忍者2011/07/11(月) 20:48:59.14
ハッシュのスライスって配列の入れ替えと同じですか
教えてください
579 :デフォルトの名無しさん2011/07/11(月) 21:51:46.19
ハッシュドポテトと
スライスチーズですか?
美味しそうですね。
581 :デフォルトの名無しさん2011/07/12(火) 03:28:49.86
現代的なPerlでは、サブルーチンの呼び出しに&はつけず()にするというのはわりと普及してる事項なんでしょうか?
584 :デフォルトの名無しさん2011/07/12(火) 13:13:44.25
5.14 のバグっぽいの見つけたんだけど日本語で報告できるところってある?
589 :デフォルトの名無しさん2011/07/12(火) 17:26:28.59
>>584
TOEIC600程度の英語でよければ俺が翻訳するから、ここに書いてみて
587 :デフォルトの名無しさん2011/07/12(火) 15:32:38.33
まあ普通に言ってもとりあわなさそうだから
「これってトリビアになりませんかね?」
みたいにネタっぽく言ったほうがいいだろうな
588 :デフォルトの名無しさん2011/07/12(火) 15:51:57.18
「相談」ならあのおっさんにしようがここでしようが構わんけど、
バグの「報告」なら実際に開発してる人たちにする他ないでしょ。当然、英語で。
もちろん報告するなら、本当にバグなのかどうか、報告済のバグでないか、最新開発版などでは直ってないか、などを十分に確かめてからだけど。
http://perldoc.perl.org/perlbug.html
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
ありがとう。報告するかどうかわからないのですが、それでもよければお願いします。
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();
595 :デフォルトの名無しさん2011/07/13(水) 13:34:43.20
>>593
翻訳ありがとうございます。
RTを調べてみて同様のものがなかったので先ほど送りました。

報告の仕方を調べているうちに下記のようなスライドを見つけました。
http://www.slideshare.net/charsbar/practical-bug-reporting
次からは自分で送るようにしようと思います。
レスを頂いた方々、ありがとうございました。
591 :名無しさん@お腹いっぱい。2011/07/12(火) 22:26:16.41
とりあえず日本語で報告しておけば、メンテナの人で
日本語が分かる人が読んでくれるから大丈夫。
英語うんぬんを気にする必要は全くない。
594 :デフォルトの名無しさん2011/07/13(水) 09:34:24.89
その位で通じると思うよ。再現用コードとおかしいと思う現象がきっちり
書いてあるんだからそれで十分。
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";
602 :5982011/07/13(水) 18:18:17.14
>>599
ありがとう!動きましたですよ!すばらしいねeval
601 :デフォルトの名無しさん2011/07/13(水) 18:08:38.80
$_ ってなんて呼ぶの?
605 :デフォルトの名無しさん2011/07/13(水) 21:19:53.34
>>601
多分、デフォルト変数(default variable)
603 :デフォルトの名無しさん2011/07/13(水) 20:30:01.69
>>610
んだら、あんだ?婆
608 :デフォルトの名無しさん2011/07/16(土) 17:46:22.62
Perl:DBIを使ったMySQLについて質問です。
SELECTにて一致した条件を表示するのに
while(@row = $sth->fetchrow_array) {

}
を使っているのですが、これだと全件表示されてしまいます。
例えば5件目〜10件目のみ表示するにはどのようにすれば良いのでしょうか
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文字ではなく複数文字を指定している点なのでしょうか?
また正しい正規表現はどのようになりますでしょうか、教えてください。
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
616 :6152011/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 = @_;
}

619 :デフォルトの名無しさん2011/07/20(水) 23:15:18.27
620 :デフォルトの名無しさん2011/07/20(水) 23:34:05.05
>>619
それのどこに答えが書いてあるのか分からない
それと字が小さすぎて読みにくい
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};
640 :デフォルトの名無しさん2011/07/21(木) 16:15:07.29
>>617 だけでずいぶん盛り上がってますなw
621 :デフォルトの名無しさん2011/07/20(水) 23:49:18.60
local 使うな
& 付きサブルーチン使うな。
10年前からタイムスリップして来たのか?


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

何れにせよリファレンス使おうが使うまいが、
func に渡された「リスト」の何らかの解析作業は必須。
=> それだったら普通にpopしてれば?
  リファレンスも覚える気も無いんでしょ?
623 :デフォルトの名無しさん2011/07/21(木) 00:16:16.32
>>621
古い参考書しか持ってないから
解析作業は省略して書かなかっただけ
知りたいのは配列と変数を受け取るときにpopして配列と変数に分けるしか方法がないのかってこと
624 :デフォルトの名無しさん2011/07/21(木) 00:45:51.17
>>623
my も載ってなくて、&付しかないような参考書しか持ってないなら
悪いことは言わないので最近の書籍を買いなおした方が良い。
自力で検索して学ぼうにも下地となる知識が古すぎて不都合が多いと思う。
631 :デフォルトの名無しさん2011/07/21(木) 06:54:02.79
>>623
>解析作業は省略して書かなかっただけ
意味が通じてなかったみたいだな。
local($aaa2);
local(@lines2);
$aaa2 = $pop(@_);
@lines2 = @_;
これのことを「解析作業」と書いたんだ。
俺のコードだと
my @lines = @{$_[0]} ;
my $aaa = $_[1] ;
626 :デフォルトの名無しさん2011/07/21(木) 03:49:58.07
つーか
スカラー1コと配列1コ渡すだけでいいんなら
スカラー、配列、の順に渡せば済む話だろ
その順に渡せない事情でもあるのか?

あと参考書古すぎるなら新しいの買えは同意だ
628 : 忍法帖【Lv=28,xxxPT】 2011/07/21(木) 04:42:35.72
>>626
おいらもスカラー先に渡せばいいじゃんって思った
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 )
ってことが言いたいんだろ
646 :デフォルトの名無しさん2011/07/22(金) 08:13:45.72
>>643
> リファレンスを理解したくない >>626 >>637

リファレンスを理解したくないんじゃなくて、
リファレンス使うまでもなくこう書けば済むんじゃない、って話をしてるんだ。
理解力の足りん奴だ。
647 :デフォルトの名無しさん2011/07/22(金) 08:48:23.60
ぼくの理解力では>>643は
「(>>617が)リファレンスを理解したくない(なら)>>626 >>637」
としか読めない
627 :デフォルトの名無しさん2011/07/21(木) 04:30:20.77
push()と同じインターフェースに揃えたいんじゃねーの
629 :デフォルトの名無しさん2011/07/21(木) 05:13:42.10
>>627
何のために?
630 :デフォルトの名無しさん2011/07/21(木) 05:45:48.55
>>629
さあ…ね、詳しくは本人にしかわからない
push()を自作データ用にちょっと改変したような動作が欲しいのかも

まあ、リスト自体を渡す方法もどっかにズバリの内容が載ってた気がするんだが
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 に代入される。
639 :デフォルトの名無しさん2011/07/21(木) 13:52:12.19
>>633
なんだそりゃ。フツーこうだろ。
sub func {
my ($scalar, @array) = @_;
}
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忍者はそんな、まじめに質問しないだろ
641 :デフォルトの名無しさん2011/07/21(木) 16:27:36.60
たとえば

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

こうゆう関数を作った場合は配列を先に渡したいよね
使い易さを考えないボンクラ大杉だろ
642 :デフォルトの名無しさん2011/07/21(木) 16:38:30.49
日付関連の関数を作ったときにoreFuncと書く奴らばかり。
これまでのレスを見る限り、そんな感じだ。
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...
∴ 答 = "いいえ。他の手段で仕分ける方法もありますが?"
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='\.\.\.';とするとなぜか配列が表示されます
これはどうしてですか?
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
なるほどよくわかりました
650 :デフォルトの名無しさん2011/07/23(土) 13:17:34.11
//
653 :デフォルトの名無しさん2011/07/24(日) 11:37:17.41
テキスト処理はperl
数値計算やグラフ作成はpython

こんな使い分けしてるんですが
全部perlでやってる方もいますか?
統一したほうが良い事もあるのでしょうか
657 :デフォルトの名無しさん2011/07/24(日) 17:44:14.71
>>653
好きなように使い分ければええんでないかい
654 :デフォルトの名無しさん2011/07/24(日) 11:53:19.20
ssig33一生お勉強(笑)
656 :デフォルトの名無しさん2011/07/24(日) 15:51:08.78
>>654
なにそれ?
ググったけどよくわからなかった
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
た、たしかにかっけぇ←
674 :6602011/07/27(水) 12:42:57.67
>>661
出来ればperlでお願いします
699 :デフォルトの名無しさん2011/07/29(金) 16:26:18.78
>>660に聞いてくれ
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;
668 :デフォルトの名無しさん2011/07/26(火) 23:54:08.50
>>665
パッケージ名->メソッド
で呼ばれた場合、第1引数にはオブジェクト名が渡るから、それを考慮しろ。
ってことで OK?

666 :デフォルトの名無しさん2011/07/26(火) 22:53:09.94
実行結果をcのソースファイル形式で出力したいんだけど
どうやったらいいの?
667 :デフォルトの名無しさん2011/07/26(火) 23:07:24.32
>>666
その質問はあまりに単純か、あるいはもっと深い意味があるのか分からんな
676 :デフォルトの名無しさん2011/07/27(水) 15:48:52.75
最近の小学校では
バイナリファイル A,B を ANDしてCに保存するPerlスクリプトをかっこうよく書け、
なんて夏休みの宿題に出すんだな。
683 :デフォルトの名無しさん2011/07/27(水) 17:58:45.87
読み込むファイルが巨大だったら。。。を思うと while(read($fh, $buf, 64)){}
みたいにぶん回したほうがいいんじゃないのかな?って思うわけです。はい。
684 :デフォルトの名無しさん2011/07/27(水) 21:47:47.79
>>683
うん。
688 :デフォルトの名無しさん2011/07/28(木) 08:39:38.25
>>683
読むファイルが2つあるときはどう書くのがかっこいいんだろうか。
690 :Perl忍者2011/07/28(木) 14:58:37.61
今日から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とかで高速な実装をしてみたくなるよね
696 :6602011/07/29(金) 10:50:40.85
>>695
ここはperlスレなので、他の言語はナシで
698 :デフォルトの名無しさん2011/07/29(金) 16:19:04.76
>>695
>2つのファイルと言わず3つ4つのファイルもやってみたくなるのが普通だよね
目的がさっぱり見当つかない・・・
んなことして何に使うんだ?
697 :デフォルトの名無しさん2011/07/29(金) 11:16:49.18
■□□□■ □■■■□
□■□■□ ■□□□■
□■□■□ ■□□□□
□□■□□ □■■■□
□■□■□ □□□□■
□■□■□ ■□□□■
■□□□■ □■■■□

マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006
マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006