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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

http://www.perl.org/get.html
● 2006/09/10現在の最新版: 5.8.8
● 2006/09/10現在の開発版: 5.9.3

前スレ
Perlについての質問箱 26箱目
http://pc8.2ch.net/test/read.cgi/tech/1153412251/

リンク集は>>2-3
過去スレは>>4
2デフォルトの名無しさん:2006/09/10(日) 16:51:01
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/

[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/

[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.8/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
3デフォルトの名無しさん:2006/09/10(日) 16:52:29
4デフォルトの名無しさん:2006/09/10(日) 16:53:14
5番組の途中ですが名無しです:2006/09/10(日) 17:19:24 BE:397980195-BRZ(1002)
なんという良スレ・・・
スレタイを見ただけでほすほすしてしまった
このスレは間違いなく伸びる

  ( ´∀`)    
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄
6デフォルトの名無しさん:2006/09/10(日) 22:02:11
I think of Perl, therefore I exist.
7デフォルトの名無しさん:2006/09/10(日) 23:49:39
I eat Perl, therefore I erupt of poopoo.
8デフォルトの名無しさん:2006/09/10(日) 23:52:59
$time = 06:59 ;
となっていて、1足すと
07:00になってくれたら時刻の計算が便利なんだけど
perlではこういうのモジュールとかありますか?
9デフォルトの名無しさん:2006/09/11(月) 00:24:13
> $time = 06:59 ;
これの意味がわかりません
実行可能なのですか?
10デフォルトの名無しさん:2006/09/11(月) 00:24:48
>>8
うるう秒の存在を考えたことはあるか?
11デフォルトの名無しさん:2006/09/11(月) 00:34:59
>>8
Date::Timeとか?
12デフォルトの名無しさん:2006/09/11(月) 00:46:54
$time = Data->parse("6:59");
$time += 1;
print $time; ==> 7:00

みたいな感じ?確かに便利そうだなぁ。ちゃんと演算子のオーバーロードもやってもらわんとね。
13デフォルトの名無しさん:2006/09/11(月) 03:33:50
>>8-12
つ Time::Piece
14デフォルトの名無しさん:2006/09/11(月) 04:08:03
何でもあるなwCPANはww
15デフォルトの名無しさん:2006/09/11(月) 11:05:50
汎用性もクソもない一発ネタのマイナーモジュール使いまくって
コードを Readonly 化しようぜ
16デフォルトの名無しさん:2006/09/11(月) 11:19:44
> 汎用性もクソもない一発ネタのマイナーモジュール
まさかTime::Pieceのことじゃないよね?
17デフォルトの名無しさん:2006/09/11(月) 11:37:07
時間は12進法か24進法、分と杪は60進法っていうのを考えれば
初心者向けの練習問題になるんじゃないの?
18デフォルトの名無しさん:2006/09/11(月) 14:10:26
XSモジュールはコンパイルしたgccのバージョンが違うと
動かなかったりしますが具体的にはどういった内容で動かないのでしょうか?
19デフォルトの名無しさん:2006/09/11(月) 15:25:49
改行コードで区切られた外部のデータを配列に入れるいい方法はありませんか?

外部データの例(gaibu.dat)
aaa
bbbb
cc
…(続く)

openで開いて入れると,配列としては入りませんよね?
20デフォルトの名無しさん:2006/09/11(月) 15:30:12
<>
21デフォルトの名無しさん:2006/09/11(月) 15:39:31
open(IN, 'gaibu.dat');
while(<IN>){
chomp;
push(@arr, $_);
}
close(IN);
22デフォルトの名無しさん:2006/09/11(月) 15:55:46
open my $in, "unko.txt";
my @a = map {$_ =~/(.*)$/} <$in>
23デフォルトの名無しさん:2006/09/11(月) 16:02:13
open(IN, 'gaibu.dat');
@gaibu = <IN>;
close(IN);
24デフォルトの名無しさん:2006/09/11(月) 16:24:35
>>19
use File::Slurp;

my @lines = read_file('gaibu.dat');

2519:2006/09/11(月) 16:47:37
>>21
ありがとうございました。
その方法で無事解決しました。
色々調べて,関数はないだろうという結論でしたが,
最後の判定をどうするかでいい方法が思い浮かびませんでした。
while(<IN>){
こういう判定の仕方がどうにも慣れないというか思いつかないというか・・・。
ちなみに,23の方法は最初自分が試した方法なんですが,
これだとデータファイルがそのまま放り込まれてしまって,
配列1つずつに入れるということにならなくて困っていました。

アドバイスくれた方々,ありがとうございました。
26デフォルトの名無しさん:2006/09/11(月) 21:12:18
でおくれた。
open(IN, 'gaibu.dat');
@array = map{ chomp; $_} <IN>;
27デフォルトの名無しさん:2006/09/11(月) 22:30:40
chomp @array
一回で配列の中身全部処理してくれるよ
28デフォルトの名無しさん:2006/09/12(火) 09:39:24
うちでも\\\\は\\になるな....なんでだろ



995 :デフォルトの名無しさん :2006/09/10(日) 15:47:32
独習perlで勉強してる。

-----------------------------------------------
$ cat print.pl
print '\\\\';
-----------------------------------------------

上記のたった一行のスクリプトを実行すると、

$ perl print.pl
\\

となってしまう。
独習perlには「シングルクォート間にある文字列はエスケープシーケンスを無視する」
と書いてあるのに、なんでこんな結果になるんだろう。

FreeBSD6.1、Cygwin環境下両方で試したけど同じ。



996 :デフォルトの名無しさん :2006/09/10(日) 15:55:24
「初めてのperl」を見たら、2.3.1節に、

シングルクォートの間に置かれたすべての文字(ただしシングルクォートと逆スラッシュは除く)が、
そのまま文字列の内容になります。

って書いてあるよ。
29デフォルトの名無しさん:2006/09/12(火) 14:47:35
>>28
シングルクォートと逆スラッシュは例外。
30デフォルトの名無しさん:2006/09/12(火) 15:11:10
>>28は何をしたかったんだろうか
31デフォルトの名無しさん:2006/09/12(火) 15:41:35
バックスラッシュに¥記号を割り当てたやつ氏ね!まぎらわしいだろ、ボケ!

と、言いたかったのだろう。
32デフォルトの名無しさん:2006/09/12(火) 16:10:14
ttp://www.ragnarokonline.jp/news/information/notice/item/7732
Perlでどうやってツール作るんだろう。
パケット監視する方法とかあるんですか?
33デフォルトの名無しさん:2006/09/12(火) 17:21:08
OSの力を借りれば。
34デフォルトの名無しさん:2006/09/12(火) 19:55:03
>通常一般のパソコンでの利用よりもサーバー上や
>データ処理用のパソコン等で使用される事が多い「Perl(プログラム
>言語)」プログラムが、

個人のPerl使い=希少種
35デフォルトの名無しさん:2006/09/12(火) 21:06:24
そんなわきゃーない。大学でも教えてるし。
36デフォルトの名無しさん:2006/09/12(火) 21:41:48
個人用ツールをCで書いてるやつがいたらお目にかかりたい。
37デフォルトの名無しさん:2006/09/12(火) 22:17:04
38デフォルトの名無しさん:2006/09/12(火) 22:33:39
>>37
マゾだな…。せめてC++ならわかるが。
39デフォルトの名無しさん:2006/09/12(火) 23:00:40
ひょっとするとPOPFileとかSpamAssasinとか入れてると起動しなくなるのかな?
Perlが駄目ならRubyとかで作るとかpugsで動かしちゃうとかいろいろ出来るようなきもするけど。
40デフォルトの名無しさん:2006/09/12(火) 23:04:38
>>39
/.参照。dllを監視しているらしい。まぁ、ROやらない俺には全く関係ないがなー。
41デフォルトの名無しさん:2006/09/13(水) 00:20:40
こないだperlスクリプトをexeファイル化してくれって奴居たろ。メールアドレス晒して。
あれがそう。
42デフォルトの名無しさん:2006/09/13(水) 07:09:11
>>32
よくわからんけど、ここで質問に答えてるような連中には、
良い小遣い稼ぎのネタがあるってことか。
でもゲーム嫌いだからなあ。
43デフォルトの名無しさん:2006/09/13(水) 08:40:23
>>42
そういう汚いお金を稼ごうと思う人はレベルの高い人にはあまりいないと思われ。
いてもスクリプトキディレベルの人かな。
44デフォルトの名無しさん:2006/09/13(水) 09:03:51
>>43
運営会社は「不正」だと言ってるが、倫理的に何が悪いのかおれにはわからない。

あー、でもくだらない質問でスレが埋まるのはいやだから、
「他人がいやがる用途に関する質問はお断り」とでもしといたほうがいいのかな?
45デフォルトの名無しさん:2006/09/13(水) 09:27:48
>>42
> よくわからんけど、ここで質問に答えてるような連中には、
> 良い小遣い稼ぎのネタがあるってことか。

莫大な財産を築けるネタじゃねえの?
4643:2006/09/13(水) 09:33:30
>>44
たしかに、悪いとは言い切れないね。賛否両論あるだろうが。
「汚いお金」とは言いすぎだった。

スパムメールで稼ぐことなどの迷惑行為を連想してしまっていたようだ。
スレ違いの内容失礼。
47デフォルトの名無しさん:2006/09/13(水) 19:29:34
増子をスクリプトキディ呼ばわりできるハカーって日本に何人いるんだろうな
48デフォルトの名無しさん:2006/09/14(木) 09:01:34
そのゲームの利用規約で禁止されてることでお金を稼ぐのは不正行為。
ただし法律では禁止されてないからアカウントBANで終わる。
詳しい話は ttp://blog.livedoor.jp/botbokumetu/ とかで。
49デフォルトの名無しさん:2006/09/14(木) 09:37:42
Teratermっていうwindowsのターミナルソフトあるでしょう。
あれに「バイナリファイルの送信」っていう機能があって、
目的の装置にtelnetしてから、よく任意のバイナリファイル(バイナリエディタで作ったファイル)
を送信している。

これをperlでやるにはどうしたらいいのだろう。っていうかshellの機能の話しになるんだろうかこれ。
50デフォルトの名無しさん:2006/09/14(木) 10:44:13
>>49
「これ」って具体的になによ? ファイル送信の方法なら山ほどあるぜ。
51デフォルトの名無しさん:2006/09/14(木) 12:26:33
>>49
telnetのプロトコルでperlを使ってファイル転送に意義を感じないけど
上の条件で縛るならNet::Telnetがあるべ
http://search.cpan.org/~jrogers/Net-Telnet-3.03/lib/Net/Telnet.pm

telnetにこだわらないならFTPやSSHなども
http://search.cpan.org/~gbarr/libnet-1.19/Net/FTP.pm
http://search.cpan.org/~ivan/Net-SSH-0.08/SSH.pm
http://search.cpan.org/~dbrobins/Net-SSH2-0.08/lib/Net/SSH2.pm

つか質問する前にCPANとかでモジュールないかぐらい調べる癖つけれ
52デフォルトの名無しさん:2006/09/15(金) 00:45:15


$b = sprintf("%04d",$a);

上記のようにすると、
$a = 1 なら $b = 0001 となりますが、
$a = -1 だと $b = -001となってしまいます。

$b = -0001とするには、どのようにすれば、
よろしいでしょうか?

条件分岐で、マイナスなら、%05dとかでしょうか、
もっとスマートな方法はありませんでしょうか?

ご教授下さい。
お願いします。
53デフォルトの名無しさん:2006/09/15(金) 00:56:19
もともとフィールド長の調節のための機能だからなぁ。条件分岐しかないとオモ。
54デフォルトの名無しさん:2006/09/15(金) 01:25:16
スマートとは言いがたいけど。

$a =~ s/^(-)//;    # +記号も対応するなら ([-+])
$b = $1 . sprintf("%04d",$a);
55デフォルトの名無しさん:2006/09/15(金) 01:30:05
かっこわるいけど
$b = sprintf(($a > 0 ? "%04d" : "%05d"), $a);
5652:2006/09/15(金) 01:59:09

いろいろとレス
ありがとうございます。
条件分岐でいきます。

57デフォルトの名無しさん:2006/09/15(金) 02:07:46
%.4d

>>53-55
m9(^Д^)プギャー
58デフォルトの名無しさん:2006/09/15(金) 02:57:57
質問はともかく回答者のレベルが低すぎてお話にならないよ
初心者は回答しないでくれるかな?
59デフォルトの名無しさん:2006/09/15(金) 03:10:56
>>58
寒いね
60デフォルトの名無しさん:2006/09/15(金) 03:19:35
>>57-58
うん、すまない。
61デフォルトの名無しさん:2006/09/15(金) 05:23:25
>>52
perldoc -f sprintf

質問者やここの住人の大半はドキュメント読んだり
CPANでモジュール無いか調べたり出来んのか?
62デフォルトの名無しさん:2006/09/15(金) 06:21:55
ほら、コンパクトを筆頭にWebProg板に隔離されるべき人間が紛れ込むようになったからだよ。
63デフォルトの名無しさん:2006/09/15(金) 07:23:49
ドキュメント読んだら負けかなって思ってる
64デフォルトの名無しさん:2006/09/15(金) 15:49:49
馬鹿なのに何かに勝てると思ってるのが
そもそもの間違いだろうな。
65デフォルトの名無しさん:2006/09/15(金) 16:28:16
と、リアル負け組が申しております。
66デフォルトの名無しさん:2006/09/15(金) 16:47:16
明らかなネタにいちいちふっかけてくる理由が分からん…。
リアルでストレス溜まってるんだろうな。
67デフォルトの名無しさん:2006/09/15(金) 17:25:51
fooというフォルダ配下に
abc_DATA
def_DATA
GHI_DATA
zyx_DATA
というフォルダがあります、これらのフォルダ名を
abc_Win2k
def_Win2k
GHI_Win2k
zyx_Win2k
とリネームしたいのですが、どうしたら良いでしょう?
$foo = *. '_DATA';
$bar = *. '_Win2k';
print "[$foo]を[$bar]に変換します。\n";
rename $foo, $bar;
これじゃぁできないのですが・・・・
68番組の途中ですが名無しです:2006/09/15(金) 17:34:20 BE:495264487-BRZ(3000)
system("rename *_DATA *_Win2k");
69番組の途中ですが名無しです:2006/09/15(金) 18:19:37 BE:123816072-BRZ(3000)
馬鹿な僕にはこんなコードしか思いつきませんでした

map { $x = $_; $x =~ s/DATA$/Win2k/; rename($_, $x); } glob("*_DATA");
70デフォルトの名無しさん:2006/09/15(金) 18:32:44
>>69
サンクス
天才です
71デフォルトの名無しさん:2006/09/15(金) 19:39:45
えーと、

1: CGIで自サイト内のHTMLを検索するプログラムを作りますた。
2: ところが、ディレクトリとかファイルとか全部調べるととっても時間がかかって問題となりますた。
3: と言うことで、1回調べたディレクトリやファイルのパスは、txtファイルに保存して次回からそれを読み込むことにしました。
4: ところが、新規でファイルやディレクトリを増やすと、プログラムがそれに気付かない罠に陥りました。
  (僕のプログラムは頭が弱いのでtxtに書いてあるパスが全てだと信じきっている。)
5: しょうがないので、毎回ディレクトリやファイルの構造をチェックしてみました。
6: そうすると、振り出しに戻った上、txtファイルが何の意味もない事件に陥りました。

7: どうすればいいですか?(サクサク大量のディレクトリやファイルを検索できれば問題解決です)。
72デフォルトの名無しさん:2006/09/15(金) 19:48:33
ttp://homepage3.nifty.com/cinema1987/data/howto.htm
ここらへんのをダウンロードして中身を見てみればいいんじゃないかな
俺は見てないからほんとに解決するかは知らないけど
73デフォルトの名無しさん:2006/09/15(金) 20:28:07
定期的にディレクトリ構造をtxtにするプログラムをcronで走らせるとか
そもそもHTMLを直にアップロードするのをやめてCMSを使うとか
いっそのことGoogle先生に頼ってみるとか
74デフォルトの名無しさん:2006/09/15(金) 20:49:17
時間がかかるって、ひょっとしてファイル内の文字列も検索してるのか?
75デフォルトの名無しさん:2006/09/15(金) 21:21:45
>>72
検索CGIの紹介文ですね。
せっかくなんで、全部ベンチ取ってみよう。

>>73
えーー。
なんかもっとこのスレっぽい回答ほしいです。

>>74
ファイル内の文字も検索してるけど、これもこれでとっても時間かかるます。
と言うか、自分のマシンじゃないからアレなんだけど、きっとCPUが低いんだよ。たしか800MHzって言ってた気がする。
CGIってあれじゃん、検索ボタン押して3秒以上経過するとアレじゃん。ヤじゃん。

--------------------------

と言うかファイルのアップなんてそんな頻繁にやってないのに、毎回ディレクトリ構造チェックするのヤなんだよ。
だからと言って、ファイルやディレクトリを増やした時に即座に反映されないのもヤなんだよ。
そして、この仕様(希望)を満たすプログラムを作りたいんだよ。
書いてて思ったけどなんか無理っぽい要求ですね。コレ。

しょうがないので、たぶんどっかで妥協したりします。
超妥協したらGoogle先生呼び出します。
てか今思ったけどGoogle先生早くね??なにアレ。
76デフォルトの名無しさん:2006/09/15(金) 21:40:09
350個のファイル(全部で5M程度)をperlで全文検索してみたら5秒とかかかったけど
grepでやったら1秒とかからずに終わった件
マルチスレッドでも使ってるのかこれ?
77デフォルトの名無しさん:2006/09/15(金) 21:44:04
つーか、ディレクトリ構造保存したってそんなに高速化にはならないでしょ。
「構造テキスト読み込み+解析+記録されてるパスをそれぞれ検索」と
「ディレクトリ列挙+ファイル列挙しつつ検索」では、あんまかわらないような。試してはないけど。

検索部分(ファイルの読み込み+検索)のアルゴリズムを見直したほうが良いと思うよ。
検索の助けになるようなインデックスファイルを作るとかね。
78デフォルトの名無しさん:2006/09/15(金) 21:49:46
>>75
ファイルアップロード時にインデックスをキャッシュするアップローダーを書いてみてはいかが。
79デフォルトの名無しさん:2006/09/15(金) 22:02:20
msearchやらnamazuやらEstraierやらの出来合いの全文検索エンジン使った方が早いよ
80デフォルトの名無しさん:2006/09/15(金) 22:58:10
>つーか、ディレクトリ構造保存したってそんなに高速化にはならないでしょ。
構造っていうか、HTML一つにつきPathを一つ作りますた。上から順番に開いていくだけです。

>検索の助けになるようなインデックスファイルを作るとかね。
インデックスファイルってなんですか。どのような装置ですか。

>ファイルアップロード時にインデックスをキャッシュするアップローダーを書いてみてはいかが。
よくわからんけど、ようするに、FTPくそくらえ!検索プログラムに暗黙でファイルをいじるな!ってコトですね!
81デフォルトの名無しさん:2006/09/15(金) 22:59:13
>検索部分(ファイルの読み込み+検索)のアルゴリズムを見直したほうが良いと思うよ。
プログラム部は書き間違えがなければこんな感じです。数年この状態のまま使ってます。
再帰してるけど、再帰のほうがあとでなんかあったとき、いじりやすそうだったからです。
個別に処理をしてるのも同じ理由です。あとは、見た目が綺麗とかそんな理由。


BEGIN {
    #▼なんかディレクトリからファイルを返す関数
    sub file_list (&$;$) {

        my ($code, $dir_name, $mode) = ($_[0], $_[1], $_[2]);

        my $path;
        {
            $path = $dir_name . q[./], last if(qq[\l$mode] eq q[p] or !$mode);
            $path = "", last if(qq[\l$mode] eq q[f]);
            return();    #モードが変なのは処理しない。
        }
        opendir DIR, $dir_name or return ();
         my @file_list = grep{ $_ = $path . $_; &$code; } (readdir DIR);
        closedir DIR;
        foreach my $file (@file_list){ 1 while($file =~ s[/\./][/]g) }

        return(@file_list);

    }
}


82デフォルトの名無しさん:2006/09/15(金) 23:00:26

INIT {
    #▼対象ディレクトリ全取得みたいな。
    $::routine{'ディレクトリ取得'} = sub {

        my @read_dir = @_ or return( undef, '読み込むべきDirPath が入力されていません。' );
        my @return_dir;    #返す値

        &{ my $sub; $sub = sub{
            foreach my $dir ( @{ shift; } ){
                my @list = map {$_ . '/'} file_list { -d and !(m/[\/\.]+$/) } $dir;
                push @return_dir, @list;
                $sub->( [@list] ) if(@list);        #ディレクトリがまだあったら再帰
            }
        }}( [@read_dir] );
        return(@return_dir);
    };
}


#▼Path取得
{
    my @all_dir;
    #▽Dir
    @all_dir = $::routine{'ディレクトリ取得'}->($::info{'path'});
    defined($all_dir[0]) or error($all_dir[1]);    #エラー処理しと
    #▽html
    foreach my $dir_path (@all_dir){
        $::all_path{"$dir_path"} = [ file_list {-f and (m/\.html$/ or m/\.htm$/) } $dir_path ];
    }
}
83デフォルトの名無しさん:2006/09/15(金) 23:03:45
検索の部分はごちゃごちゃしてるので書きませぬ。
と言うか直す余地が満載なので直します。
84デフォルトの名無しさん:2006/09/15(金) 23:28:24
ディレクトリの更新日時を覚えておけば未更新のディレクトリ以下は触らずにすむよな
85デフォルトの名無しさん:2006/09/15(金) 23:38:33
>>80
とりあえず「全文検索」で検索すればインデックスの件を含め色々出てくる。
ていうかそのキモいコーディング直すだけで保守性も速度も上がりそう。
86デフォルトの名無しさん:2006/09/16(土) 00:35:24
昔どっかのスレで紹介されてた、UNIXなんとかっていう雑誌に載ってたらしい方法。
確かこんな感じだった。

普通、インデックスを使った検索ってのは辞書が必要になる。
でも辞書とか形態素解析とかは面倒くさい!><
そこで、辞書に登録された単語毎にファイルを引けるようにするのではなく、
nバイト毎のハッシュを単語代わりに使う。検索するときも、検索ワードのハッシュを取って、インデックスから引けば
実際に開いてマッチングする必要のあるファイルや部分は大幅に減る。

これならPerlなら簡単に書けそうだし、イイと思うよ。
87デフォルトの名無しさん:2006/09/16(土) 00:42:09
>>86はデタラメだからみんな忘れてね。
88デフォルトの名無しさん:2006/09/16(土) 00:46:22
ああウゼェ
レスすんなカス
8963:2006/09/16(土) 04:54:43
>>64
あぁ だめだなぁ。それでいくなら「いや 勝ってないから」のたった一文で、
ぱすーんと決まるのに。おしいなぁ。
90デフォルトの名無しさん:2006/09/16(土) 06:08:41
>>86 の内容は忘れるが、俺は君の事をわるれれない。
91デフォルトの名無しさん:2006/09/16(土) 10:07:27
で、何がデタラメだと?
元ネタと多少違ってたとしても、この方法でいけるじゃん。
まさかハッシュをPerlの連想配列とでも勘違い(ry
92デフォルトの名無しさん:2006/09/16(土) 10:13:00
作ればわかる。
93デフォルトの名無しさん:2006/09/16(土) 10:32:33
こんなの自分で書きたがるなんてバカだと思うが、
もしそうしたいならざっとこんな感じか。

・File::Findでサブディレクトリを含むエントリをスキャンする
・ファイルが見つかったらstatで更新日時を調べる
・キャッシュに対象ファイルのエントリがあるか調べる。キャッシュした時刻がファイルより古ければ無視する。
・キャッシュを利用できる場合はそうする。
・利用できない場合、よくわからんが好きなようにファイルから検索する。
・検索結果をキャッシュに記録する。最終検索日時も記録しておく。


キャッシュの構造や 具体的にどんな検索をしたいのかとかは知らんが
何らかのデータベースシステムを使った方が明らかに速いだろうな。
94デフォルトの名無しさん:2006/09/16(土) 11:05:43
>>84
既存ファイルの更新方法による。
95デフォルトの名無しさん:2006/09/16(土) 11:42:35
>>92
中身の無い批判してんなよ。何が目的なんだ?
96デフォルトの名無しさん:2006/09/16(土) 13:23:59
>>89
そういう亀レスが一番「効いてます」って証だけどね。
97デフォルトの名無しさん:2006/09/16(土) 21:29:29
と、リアル負け組が申しております。
98デフォルトの名無しさん:2006/09/16(土) 21:30:12
>>89
泣くな。
99デフォルトの名無しさん:2006/09/17(日) 06:53:21
と、泣きながら申しております。
100デフォルトの名無しさん:2006/09/17(日) 10:44:36
環境:windows
This is perl, v5.8.8 built for MSWin32-x86-multi-thread

こんにちは。
LWPモジュールを用い、htmlソースを取得したいのですが、amazon.co.jpの商品のページから取得ができません。


#! /usr/bin/perl
use LWP::Simple;

my $url = "http://www.amazon.co.jp";
my $content = get($url);
print $content;
exit(0);

上のプラグラムだと正常に取得してくるのですが、
http://www.amazon.co.jp/gp/offer-listing/4757410549/ref=dp_olp_2/503-3784903-9803115?ie=UTF8
だと取得できないです。
どうか、わかる方お願いします。
101デフォルトの名無しさん:2006/09/17(日) 11:21:28
User-Agentで弾かれてるみたい。

#!/usr/bin/perl
use LWP::Simple qw(:DEFAULT $ua);
$ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

my $url = "http://www.amazon.co.jp/gp/offer-listing/4757410549/ref=dp_olp_2/503-3784903-9803115?ie=UTF8";
my $content = get($url);
print $content;
102デフォルトの名無しさん:2006/09/17(日) 11:23:06
UserAgentで弾かれてるんでしょ。

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;

my $url = "http://www.amazon.co.jp/gp/offer-listing/4757410549/ref=dp_olp_2/503-3784903-9803115?ie=UTF8";
my $ua = LWP::UserAgent->new;
$ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
my $res = $ua->get($url);
print $res->content if $res->is_success;
103番組の途中ですが名無しです:2006/09/17(日) 15:40:29 BE:88440252-BRZ(3000)
strict厨、warnings厨、my厨、死ね
104デフォルトの名無しさん:2006/09/17(日) 16:13:12
105デフォルトの名無しさん:2006/09/17(日) 16:28:19
my変数の方が速度面でも保守面でも有利。
ourやlocalを使うのはそうする必要がある場合だけ。
106デフォルトの名無しさん:2006/09/17(日) 17:46:27 BE:4574276-BRZ(6667)
>>103
くすくす
107デフォルトの名無しさん:2006/09/17(日) 18:06:30
>>104 >>106
釣れた釣れたw
俺の完全勝利wwwwっwww

このレスに反応したらさらに俺に加点なwwwwww
でもお前らは悔しすぎて自分を抑えられずこのレスに反応するww
もう勝ちすぎてこわいwwっwwwwwwwwwっwww
108デフォルトの名無しさん:2006/09/17(日) 18:14:35
IO::Allのせいで頭が腐ってきた
109番組の途中ですが名無しです:2006/09/17(日) 18:48:32 BE:159192836-BRZ(3000)
使い捨てのスクリプトまでstrict/warnings/myやる奴の気が知れん
110デフォルトの名無しさん:2006/09/17(日) 18:52:15
そういう人は別に知る必要ないっしょ
111デフォルトの名無しさん:2006/09/17(日) 19:07:34
>>109
それを先に言ってほしかった。

「使い捨てのスクリプトまでstrict/warnings/myやる奴の気が知れん」
          ↓
「いや、use strictはどんなスクリプトでも使うべき。付けないやつはアフォ」
          ↓
「うっせぇ!!strict厨、warnings厨、my厨、死ね」


これなら納得。
112デフォルトの名無しさん:2006/09/17(日) 19:13:55
102のコードが
「いや、use strictはどんなスクリプトでも使うべき。付けないやつはアフォ」
と言ってるのに相当するわけだが
113デフォルトの名無しさん:2006/09/17(日) 19:19:35
Perl6では常時 use strict になるわけだが。
114デフォルトの名無しさん:2006/09/17(日) 19:27:27
じゃあわざわざつける必要ないね
115デフォルトの名無しさん:2006/09/17(日) 19:29:24
use strict初めて見ました
116デフォルトの名無しさん:2006/09/17(日) 19:33:11
サンプルコードに対する添削にまで付け足すのは既に偏執的というレベルを超えていて
もはや原理主義と言ってもいい
危険だから下手に触らない方がいいよ
117デフォルトの名無しさん:2006/09/17(日) 20:27:52
正直strictとwarningsは空気。#!perlとセット。
118100:2006/09/17(日) 20:30:48
回答ありがとうございます!!!
119デフォルトの名無しさん:2006/09/17(日) 21:34:47
120デフォルトの名無しさん:2006/09/17(日) 21:56:49
use strictしなくても宣言する時にmyは書いちゃうよ。なんていうか、もう癖。
てか、書き捨ての時と普通に書くときで、書き方変えられる人は器用だと思う。素直に感心。
121デフォルトの名無しさん:2006/09/17(日) 22:13:03
僕の場合、strict と warnings を書かないのはワンライナーくらいです。
ファイルに起こす程の分量になると僕には複雑すぎるので、それらなしでは混乱して発作を起こしてしまうから。
122デフォルトの名無しさん:2006/09/17(日) 22:46:03
もれもワンライナー以外のときはstrictとwarningsはつけてるな。
共同作業とか職場が一緒でなければつけてない人を見かけても無視だけど
>>112,>>116みたいなのは真性のアフォを見ちまったと思って胸糞悪くなる。
123デフォルトの名無しさん:2006/09/17(日) 22:50:45
どっちでも書けるんだから好きにしていいのよ。
自分の考えを押し付けるヤツがアホってだけで。
124デフォルトの名無しさん:2006/09/17(日) 23:15:14
同感。
使い捨てなんだから自分の書きやすいように書けばいい話。
125デフォルトの名無しさん:2006/09/17(日) 23:23:23
馬鹿は何が自分に優しいスタイルなのかさえ見つけられないから、
「ほっとけ、それがそいつにとって良い書き方なんだろう」っていう捨て置き方が
常に問題なく成り立つとは限らないんだよね。

でも、そういう馬鹿に限って「より良い何かに変わろうとする力と意志」がないもんだから、
ちょっと意見をぶつけられただけですぐ「押し付けられたヨ〜」っていう電波被害届出すし。
126デフォルトの名無しさん:2006/09/17(日) 23:52:28
俺真性のアフォだから
strictとwarningを付け足すことが>>100の質問内容とどんな関係があるのかさっぱりわかんないんだよね
誰か偉い人教えてくれ
127デフォルトの名無しさん:2006/09/18(月) 00:00:45
真性のアフォに教えようって奴はいないと思うよ。
アフォに物を教えるのってものすごーく面倒だから。

だからまともな頭の持ち主は「アフォな俺に教えて」という言い方はしない。
それがどれだけ傲慢で無駄なオネガイががわかるからね。
これを言ってしまうのは、それすらわからない本当にアフォな奴だけ。
そしてそれがバレちゃったらもう、誰もまともには答えてくれない。

残念だったね。まずは自力でアフォじゃない人間になりなさい。
128デフォルトの名無しさん:2006/09/18(月) 00:07:53
真性のアフォ相手ではどんなに説明しても無駄だけど
普段書いているコーディングスタイルでサンプルを提示しただけのを
何か特別な意味があると勘違いしているのが真性のアフォのゆえんなんだろうな
129デフォルトの名無しさん:2006/09/18(月) 00:18:07
やっぱstrict厨が涌くと荒れるなw
130デフォルトの名無しさん:2006/09/18(月) 00:18:24
アフォとstrictな構文書けなくて挫折し劣等感にまみれた
アンチな奴らには何言っても無駄よ。
サンプルを提示されただけでこう書けと押し付けられたわけでもないのに
アレルギー反応を示してるだけよ。
うざいけど、可哀想な奴らなので生あたたかく見守ってあげて下さい。
131デフォルトの名無しさん:2006/09/18(月) 00:20:40
こういう場で示すサンプルは、実質的な部分だけにしぼって
自分のスタイルとか必要ない部分は極力減らすべきじゃないのか?
132デフォルトの名無しさん:2006/09/18(月) 00:22:58
↑何言っても無駄で無限ループに入るだけなので無視の方向で
133デフォルトの名無しさん:2006/09/18(月) 00:23:26
だから原理主義者に何言っても無駄だってのw
134デフォルトの名無しさん:2006/09/18(月) 00:28:52
wではごまかせない根源的なわかってなさが痛い。
135デフォルトの名無しさん:2006/09/18(月) 00:29:19
なんで素直に、質問の趣旨とは無関係だしコードとしての作用もない無用なゴミだけど
宗教的な理由でどんな状況でも書かずにはいられませんごめんなさい
って言えないんだろ
136デフォルトの名無しさん:2006/09/18(月) 00:31:25
なんで煽らずにはいられないんだろ
137デフォルトの名無しさん:2006/09/18(月) 00:35:20
”作用もない無用なゴミ”
処置なしだな。。。
138デフォルトの名無しさん:2006/09/18(月) 00:35:23
>>136
文字通り「アフォ」だからだと思うよ。
まぁ、他人に歯軋りさせてナンボなはずの煽りで
他ならぬ自分の歯軋りを聞かせちゃってるザマじゃ、まるでダメだけどね。
139デフォルトの名無しさん:2006/09/18(月) 00:39:02
ぶっちゃけstrictやwarningsをつねに使うなら他の言語のほうがいいじゃん。
Perlなんだから可変変数やグロブ使いまくって変態コード書くのが楽しいんじゃん。
もちろん俺はそんなことしないよ☆
140デフォルトの名無しさん:2006/09/18(月) 00:42:14
なんか一気にスレが進んでるなと思ってみてみたら,ただ荒れているだけなのね orz
流れを見ると100の質問に101と102が回答して
102のコードにstrictが入ってることにアンチstrictな人が反応して
strictいらねぇだろと102の書き方にケチをつけたのが事の発端ですよね。
とりあえずアンチstrict厨な方々はもちつかれてはいかがでしょうか。
コードの書き方は人それぞれなのですから気に入らなければ流せばいいではないですか。
それができないからアフォ呼ばわりされるのでは?
141デフォルトの名無しさん:2006/09/18(月) 00:43:30
おまいら他所でやれ。

回答は本質部分を分かりやすく書くのが基本。
必ずしも実装時の理想的な記述がよいわけではない。
(例はラクダ本等を参照)

本質でないところでごちゃごちゃ騒ぐな。
142デフォルトの名無しさん:2006/09/18(月) 00:46:03
そもそも>>101-102の解答ではコード例を示す必要すらないな
143デフォルトの名無しさん:2006/09/18(月) 00:46:56
最新の版のラクダ本をちゃんと読んでないんだな…。
144デフォルトの名無しさん:2006/09/18(月) 00:48:46
>>143
本質でないところでごちゃごちゃ騒ぐな。
145デフォルトの名無しさん:2006/09/18(月) 00:49:22
俺はテストコードでもstrictとwarnings付けてmod_perl上でイッパイ走らせる。
146デフォルトの名無しさん:2006/09/18(月) 00:49:56
ここはインターネットですね。
147デフォルトの名無しさん:2006/09/18(月) 00:52:55
>>144
有名どころの本の名前を出して自分の主張を押し通そうとしたのに
通らないと逆切れですか。
さすがはアフォだ。
148デフォルトの名無しさん:2006/09/18(月) 01:46:57
黙れ初心者ども
149デフォルトの名無しさん:2006/09/18(月) 03:19:35
cygwin perl v5.8.7でPARをインストールしようとしたんですが、test時に
30-current_exec.t の43行目の生成したexeファイル実行時で
cygwin1.dllがみつからないと怒られてtest失敗しちゃいます。
ぐぐりまくったけど、よくわからんです。どうすりゃいいですか?
ちなみにshell scriptに組み込んでperl使いたいのでactive perlは抜きで
おながいします。
150番組の途中ですが名無しです:2006/09/18(月) 11:55:09
strict厨必死杉w
151デフォルトの名無しさん:2006/09/18(月) 13:34:57
>>150
もしかして、わざわざ名前入力してるの? それなんて初心者?
152デフォルトの名無しさん:2006/09/18(月) 13:50:34
普通にstrictを使ってるだけで使えと強要されたと被害妄想に駆られて
人のコードにケチをつけ原理主義呼ばわりしてスレを荒らす
アンチの馬鹿っぷりがおもしれぇ
153デフォルトの名無しさん:2006/09/18(月) 15:16:04
>>151
節穴にビビってるニュー速厨は放置
154デフォルトの名無しさん:2006/09/18(月) 15:53:55
このスレはいつからこんなにうんkくさくなったんですか。
もしかして、最近プロではない人がどんどん流れ込んできてるんですか。
web板のCGI始めちゃったー♪ってノリと同じですか。
155デフォルトの名無しさん:2006/09/18(月) 16:47:37
頭がうんこじゃない限りは2秒でわかることだから
誰もちゃんと答えてくれないと思うよ。
既出だけど、アフォは相手にされない。
156デフォルトの名無しさん:2006/09/18(月) 16:52:57
>>149
> ぐぐりまくったけど、よくわからんです。どうすりゃいいですか?

目的、環境、制限条件、行った事、実行したコマンド、それらの結果、そして特にエラーメッセージを正確に述べる能力を身に付けることから始めよう。
157デフォルトの名無しさん:2006/09/18(月) 20:05:37
下記のコーディングで、キーボードから、tを入力すると
t
t
master.txt
と表示されるのですが、どこが不味いのでしょうか?

<コーディング>
print "ファイルのタイプは m/t ?";
$type=<>;
print $type;
if ($type=="m" ) {
print $type;
$price_file="pricem.txt";
$mt_file="master.txt";
}
else{
$price_file="pricet.txt";
$mt_file="tran.txt";
}
print $mt_file;
158157:2006/09/18(月) 20:09:01
蛇足:
キーボードから入力したtの表示は、別にあります。
画面上では、tは3つあります(入力分1つ+出力分2つ)
159デフォルトの名無しさん:2006/09/18(月) 20:10:25
>>157
chomp($type=<>);
if ($type eq "m") { ... } # 文字列比較はeq
160デフォルトの名無しさん:2006/09/18(月) 20:53:16
>>155
その釣ってもいないのに釣ら(ry
161デフォルトの名無しさん:2006/09/18(月) 20:57:54
無い頭で無理して言い返さなくても・・・
(ryから先が「まだこの世に無い」のが丸わかりで痛い・・・
162デフォルトの名無しさん:2006/09/18(月) 21:04:20
あー、俺はそもそも質問者じゃないし。意味ないレスが増えたって言っただけだよ。
まぁ通じてないからどうでもいいわ。
163デフォルトの名無しさん:2006/09/18(月) 21:43:02
    /\___/ヽ
   /''''''strict'''''':::::::\
  . |(●),   、(●)、.:| ふたりともやめて
  |   ,,ノ(、_, )ヽ、,, .::::|
.   |   `-=ニ=- ' .:::::::|   これ以上わたしのために争わないで
   \  `ニニ´  .:::::/
   /`ー‐--‐‐―´\
164デフォルトの名無しさん:2006/09/19(火) 00:52:35
>>156
なんか、てめーのちんこねじ切りたくなるような、お返事サンクス。
自力でがんばってみるんでいいっす。
165デフォルトの名無しさん:2006/09/19(火) 03:18:50
KENT WebでCGIの勉強をしました。
あと橋本和明の本でPerlを身につけました。
166デフォルトの名無しさん:2006/09/19(火) 05:13:49
橋本和明って誰?って思ったら、
巷では結構有名な人みたいね。
マイナス方向に。
167157:2006/09/19(火) 08:42:56
>>159
どうも、ありがとうございました。
もう一つ教えて下さい。

$a = "山田(株)";
$a =~ s/(株)//;

の結果($a)が、山田() になります。
()も削除するには、どうすれば、良いのでしょうか。
168デフォルトの名無しさん:2006/09/19(火) 08:55:10
\( \)
169デフォルトの名無しさん:2006/09/19(火) 11:55:19

test.pl

という、ある実行ファイルがある。

test.pl "TEST 2CH VIP"

という引数を付けて実行する。
"TEST 2CH VIP"は12文字だ。すなわち12bytes。
12を16進数で表記すると0Cになるだろ。

引数の文字列のバイト数をカウントし、かつそれを16進数に変換して取り出すことは可能だろうか。
170デフォルトの名無しさん:2006/09/19(火) 12:22:51
可能
171デフォルトの名無しさん:2006/09/19(火) 12:22:52
>>169
もちろん可能。
printf "%02X\n", length (shift @ARGV);
172デフォルトの名無しさん:2006/09/19(火) 12:25:26
教えて君にマジレスすんな
173デフォルトの名無しさん:2006/09/19(火) 13:26:50
教えて君は教える側よりも偉いんだよ
174171:2006/09/19(火) 13:50:44
もう子ねえから。
175デフォルトの名無しさん:2006/09/19(火) 16:32:28
Template::Plugin::TruncateJp で ああああああああああああ 見たいな連続するもじれつでもじばけするんだけど、どうしたらいい?
176デフォルトの名無しさん:2006/09/19(火) 17:14:30
こんな感じでやってもうちじゃ化けないのできちんと再現できる条件を出せ。

]% cat foo.tt
[% USE TruncateJp %]

[% FILTER truncate_jp('10') -%]
あああああああああああああああ
[%- END %]
% tpage foo.tt


あああ...
177デフォルトの名無しさん:2006/09/19(火) 17:15:24
化けないよ

use Template;
Template->new->process(\*DATA);
__END__
[% USE TruncateJp %]
[% 'あああああああああああ' | truncate_jp('8') %]
178デフォルトの名無しさん:2006/09/19(火) 17:16:08
あう被った
179175 :2006/09/19(火) 17:22:00
自己解決したです
jfoldがEUCで返してくるんですね、、
UTF8なテンプレートで使ってたのが原因でした。
180175:2006/09/19(火) 17:24:54
とか思ってたら、だめでした。出直してきます。

やはり原因はUTF8あたりらしい。
181デフォルトの名無しさん:2006/09/19(火) 17:38:10
Jcodeの問題かもしれない、、、

[%
USE Jcode;
USE Dumper;
aaa = 'あああああああ';   # 本来は200文字ぐらい
bbb = aaa.jcode.jfold(100);
Dumper.dump(aaa);
Dumper.dump(bbb);
%]

こんな感じ。 テンプレートはUTF-8、データも当然UTF-8。困った…。

$VAR1 = 'あああああああ  (略) ああ';

$VAR1 = [
          '??????????????????????????????????????????????????',
          '??????????????????????????????????????????????????',
          '??????????????????????????????????????????????????',
          '??????????????????????????????????????????????????',
          '??????????????????????????????????????????????????',
          '??????????????????????????????????????????????????',
          '??????????????????????????????????????????????????',
          '??????????????????????????????????????????????????',
          '??????????????????????????????????????????????????',
          '??????????????????????????????????????????????????',
          '??????????????????????????????????????????????????',
          '??'
        ];
182デフォルトの名無しさん:2006/09/19(火) 17:40:26
Jcodeのjfoldはそのままだとなんとなくeucを返すが、
正式な使い方はさらに希望の文字コードで ->eucとか
->utf8とかしないとだめなんじゃ。そうじゃないと
どのコードで返していいかわかんないだろ。
183デフォルトの名無しさん:2006/09/19(火) 17:51:51
確認してるのがコンソールだかブラウザだかわかんないけど
そっちのロケールとか文字コードは確認したの?
184175:2006/09/19(火) 17:58:24
HTTPレスポンスヘッダー情報 -
Date: Tue, 19 Sep 2006 08:54:45 GMT
Server: Apache/1.3.34 (Unix)  (Gentoo) mod_perl/1.29
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked

200 OK

確認はブラウザにて。
truncate_jp使わないで、truncate使うと正常に表示(当然、全角文字は文字数によって切れる)なので、Template::Plugin::TruncateJpとかTemplate::Plugin::TruncateJpの中身のJcode.pmとかが怪しいという感じで調べてみたんだけど、手詰まりというか。
まぁ、全角文字がぶった切れない指定文字数で切れれば、他の方法でも構わないんだけど、ちょっと不可解な感じです。
185デフォルトの名無しさん:2006/09/19(火) 18:12:33
>>184
Template::Plugin::TruncateJpはeuc決め打ちっぽいので全部EUCに直すか
自分でなんとかしろ。

utf8決め打ちでよければ

my ($line) = jcode($str)->jfold($len-length($suf));



my ($line) = jcode($str)->jfold($len-length($suf))->utf8;

に改造する程度でいけるかもしれないが試してないので自己責任で。

$sufがascii範囲に収まってないとさらにlengthまわりもいじらないとだめそう。
186175:2006/09/19(火) 18:44:03
>>185
アリガトン

結局、Template::Plugin::TruncateJpをいじくってみたけど、
特定の場合(同じ文字列が大量に続くときだけ化ける)は治らなかったです。
他に原因があるのかもしれません。
今はテストデータぐらいしか化けないので、他の方法で対応を考えます。
お騒がせしました。
187デフォルトの名無しさん:2006/09/19(火) 20:03:07
utf8の「あ」×偶数個をJcodeに食わせると誤判定されるので、
utf8と決まっているのなら自動判定に頼らずにcode($str)を
jcode($str,'utf8')にしてみるといいと思われる。
188デフォルトの名無しさん:2006/09/19(火) 20:36:57
$buff = "ほげほげ<フヒヒ>ふがふが";

という文字列の < から > までを削除して

ほげほげふがふが

という文字列にするにはどうすればいいでしょうか。
189デフォルトの名無しさん:2006/09/19(火) 20:53:49
$buff = "ほげほげ<フヒヒ>ふがふが";
$buff =~ s/<[^>]+>//;
190デフォルトの名無しさん:2006/09/19(火) 21:42:43
>>189
なるほど、ありがとうございました。
191156:2006/09/19(火) 22:51:43
>>164
がんばれ。
192デフォルトの名無しさん:2006/09/20(水) 01:18:59
あいうえおあいうえおあいうえおあいうえお
の中に何回あが含まれているか調べるにはどうすればいいですか?
193192:2006/09/20(水) 01:36:38
あ は実際は文字列です。

$str= "僕の名前はホゲです。昨日はホゲしました。明日もホゲでホゲ。";

〜ほげな処理〜

print $str;で4が表示されるようにしたいです。
194デフォルトの名無しさん:2006/09/20(水) 02:29:39
性器表現で出来そうです。
自己解決しました。
195デフォルトの名無しさん:2006/09/20(水) 02:35:59
性器表現ってなんですか?
気になって夜も眠れません
196デフォルトの名無しさん:2006/09/20(水) 03:52:34
大人のプログラムだよ。
197デフォルトの名無しさん:2006/09/20(水) 06:44:32
性器を写実的に描写することだろ
198 ◆TWARamEjuA :2006/09/20(水) 07:10:09 BE:1525627-BRZ(6667)
s/ほげ/ほげ/g
199デフォルトの名無しさん:2006/09/20(水) 17:18:36
5 :デフォルトの名無しさん :2006/09/20(水) 09:52:54
制御系の貴殿らにperlスクリプト検定試験をプレゼントだ。
【ether⇔com1変換装置がある。この変換装置にtelnetしてconnect com1を
実行すれば、あたかもモデムなどのシリアル接続機器が自分のPCに
ローカルで接続しているかのような状態になる。ぜひとも"ATZ"などの
コマンドをモデムに送り込みたい。
以下のスクリプトをどう修正すればいいだろうか答えなさい。】

変換機のIPを192.168.1.1
変換機にログイン後、モデムに接続するコマンドをconnect com1とする
use strict;
use warnings;
use Net::Telnet ();
my($t,$pass,$host,$user);
$host = '192.168.1.1';
$user = 'admin';
$pass = 'admin';
$t = new Net::Telnet (-host => "$host");
$t->open("$host");
$t->waitfor('/login:/');
$t->print("$user");
$t->waitfor('/Password:/');
$t->print("$pass");
$t->waitfor('/#/');
$t->print("connect com1");
$t->waitfor('/com1 connected!/');
$t->print("ATZ");
200デフォルトの名無しさん:2006/09/20(水) 17:27:57
答は「これはPerlスクリプトの試験になっていない」だな。
201デフォルトの名無しさん:2006/09/20(水) 17:59:19
変換装置へのログイン手順、リクエスト、レスポンスが
設問に含まれてないんだから問題に問題がある。
202デフォルトの名無しさん:2006/09/20(水) 18:00:26
つーかExpect使えって感じだな
203デフォルトの名無しさん:2006/09/20(水) 18:12:25
つーかそもそもバイナリの送信なんてprintでできんのか
204デフォルトの名無しさん:2006/09/20(水) 21:48:37
なんかズレてるやつがいる。>>203とか。
205デフォルトの名無しさん:2006/09/20(水) 22:41:04
perlを使って画像ファイルのアップロードを実現したいんですけど、
でもcgi-lib.plやcgi.pmを使わないで自前で処理したいのです。

色々検索してはみたのですが、基本的にモジュールありきなので、
どこかに自前処理を紹介しているサイトなどありませんでしょうか?

#リクエストされたバイナリを文字列処理してbinmodeで吐き出せばできるかなと思って試してもアウトでした。
#根本的に理解できていないかもです。

板違いだったらごめんなさい。
206デフォルトの名無しさん:2006/09/20(水) 22:56:06
205です。
お!ちょっと待って!出来た!
そもそもSTDINをbinmodeにしなければいけなかったのですね!

自己解決しました!久々にヒットした!
207デフォルトの名無しさん:2006/09/20(水) 22:58:05
CPANに沢山教科書があるじゃないか
208デフォルトの名無しさん:2006/09/20(水) 23:11:57
ビックリした
自前でPerlスクリプトから画像をアップロードしようとしてるのかと思った。
209デフォルトの名無しさん:2006/09/20(水) 23:27:05
>>207-208
説明ベタですんませんでした。(ちょっとビール呑んでperlだったもので)
CPANって英語なんすね。
でもレスありがとうございました。良い人達で良かったす。

今回は一応cgi-lib.pl見てて、あっ!と思ったという結論でした。
未熟ですんませんした。精進します。
久々にテンション上がったんでビール買ってきます。
210167:2006/09/21(木) 18:38:51
>>168
どうもありがとうございました。
これからは、良く調べてから質問します。反省してます。
211デフォルトの名無しさん:2006/09/21(木) 19:16:43
ライブドア元CTOの小飼弾っているよね。
TVによく出てるひげ面の人。

あのひと、何の実績があって何が凄いの?
jcode.pl書きました、とか、
オレの知っている範囲ではショボい実績しかないけど。

くわしいひと、おしえて!。
212デフォルトの名無しさん:2006/09/21(木) 19:47:09
Encodeの中の人だろ
213デフォルトの名無しさん:2006/09/21(木) 19:55:48
本人のブログに聞きにいけば? あんた一体なにしたの?って。
214デフォルトの名無しさん:2006/09/21(木) 20:30:52
jcode.plを開発したのは、歌代和正。
小飼弾は、jcode.plを元にJcode.pmを作っただけ。
その後、Encode.pmを開発。

最終学歴はカリフォルニア大学バークレー校中退。
215デフォルトの名無しさん:2006/09/21(木) 20:54:00
>>211
英語がぺらぺらでYAPCとか大きなイベントでリアルタイム通訳とか
もできる人。

ラリーウォールとか海外のPerlコミュニティーとの
橋渡しとかそういう業績が大きいんじゃないかな
しいて言えば、海外から見た日本のPerl界の顔役みたいな人ではないかと

モジュールの実装については・・
EncodeをPerlの標準にするんだったら
文字コード自動判別機能を盛り込みやがれぐらいはいいたいな・・

216デフォルトの名無しさん:2006/09/21(木) 21:08:08
Guess何とかってやつがあったような。
217デフォルトの名無しさん:2006/09/21(木) 21:10:21
>>211
Encode系って大変なんだぞ・・・
218215:2006/09/21(木) 21:32:07
>>216
あまり信用しないほうがいいよ。
guess、つかった時に判定失敗を食らった経験があって
経験上あまりあてにならない。
趣味ならともかく仕事で「たまに間違えるかも♪」
とかいう判定なら怖くて使えない。
けど「事前にエンコード文字列はPGがしっててしかるべき」
ちうスタンスらしいからあまり期待は・・・
219デフォルトの名無しさん:2006/09/21(木) 22:43:37
いい加減文字コードの変換なんつー石器時代みたいな発想はやめて
UTF-8でもUTF-16でも何でもいいから統一すりゃいいのにな。ばかばかしい。
220sage:2006/09/21(木) 22:59:47
自分のファイルがあるパスを得るにはどうすればよいですか?
/home/user/testprogram/bin/pg1 を実行したときに、このプログラムがある場所
/home/user/testprogram/binを取得するにはどうすれば良いでしょうか?

/home/user/testprogram/bin/pg1から
/home/user/testprogram/conf/test.conf というファイルをOpenしたいのです。

pg1を
#/usr/bin/perl
open(FP,"../conf/test.conf");
@data=<FP>;
close(FP);
print @data[0];

とした場合、
$ cd /home/user/testprogram/bin
$ ./pg1
PARM=DATA1

の様にtest.confの1行目を表示することができるのですが、

$ cd /home/user/testprogram
$ bin/pg1
では何も表示されません。
多分、
open(FP,"../conf/test.conf");
が「コマンドを実行した際のカレントディレクトリの相対パス」になっているのだと思います。

そこで、(1)「pg1があるディレクトリからの相対パス」を指定するか、(2)絶対パスで指定するようにしたいと考えています。
(1)はどうもむりっぽい。 諦めモード。
(2)は絶対パスをハードコーティングするのは不味いので、プログラムの中で取得する方法を探しています。
221デフォルトの名無しさん:2006/09/21(木) 23:00:25
もう全部うにこでいいよ、と思うも、
なんか、日本の役場のファイルとかシフトJIS指定指定なんよね。しかもスペースすらも全部全角。
死ねばいいと思うよ。
222デフォルトの名無しさん:2006/09/21(木) 23:03:46
>>220
use FindBin qw($Bin);
print $Bin;
223sage:2006/09/21(木) 23:07:14
>>222
すげー 一発回答。
しかも、すぐできた。
ありがとう!!
224デフォルトの名無しさん:2006/09/21(木) 23:15:29
>>215
Encode::Detectはどう?
225デフォルトの名無しさん:2006/09/21(木) 23:55:02
>>214
Encode.pm のオリジネイターは Nick たんなの。忘れちゃイヤン。
226デフォルトの名無しさん:2006/09/22(金) 00:05:37
>>218
それはちゃんと使ってないだけじゃないかな?
100%正確に識別することはできないし。
ちゃんと使えば他の自動判別と同程度には識別できるよ。
227sage:2006/09/22(金) 01:58:50
2つのパッケージに同じファイルをrequireすることはできますか? その1

sample ===============================================
#!/usr/bin/perl
../lib/sampleclass.lib
my $obj1 = new CLS1; my $obj2 = new CLS2; ← $obj1,$obj2というオブジェクトを作る。

../lib/sampleclass.lib ===============================
{
package CLS1;
sub new {
my $class=shift; my $ref={}; $obj=bless $ref,$class;
return $obj;
}
sub testprint{print "TEST";}
}

{
package CLS2;
sub new {
my $class=shift; my $ref={}; $obj=bless $ref,$class;
return $obj;
}
sub testprint{print "TEST";}
}

とまあ、こんなかんじで、CLS1とCLS2という、名前が違うだけで中身は全く同じというクラスを作り、それぞれ$obj1,$obj2というオブジェクトを作っています。
よく見ると、CLS1にもCLS2にもtestprintという同じ関数があります。
このような同じ関数は今後も増える予定なので、testprint.libというファイルにしてしまおうと思います。
228sage:2006/09/22(金) 02:00:12
2つのパッケージに同じファイルをrequireすることはできますか? その2
testprint.lib ======================================
sub testprint{print "TEST \n";}

../lib/sampleclass.lib ===============================
{
package CLS1;
sub new {
my $class=shift; my $ref={}; $obj=bless $ref,$class;
$opj->testprint(); ← 試しに実行してみます。
return $obj;
}
require "../lib/testprint.lib" ← testprint()を外に出した。
}

{
package CLS2;
sub new {
my $class=shift; my $ref={}; $obj=bless $ref,$class;
$opj->testprint(); ← 試しに実行してみます。
return $obj;
}
require "../lib/testprint.lib" ← testprint()を外に出した。
}

この状態でsampleを実行してみると
$ ./sample
Undefined subroutine &CLS2::testprint called at /home/Administrator/DGSCRIPT/bin/../lib/sampleclass.lib line 18.
TEST ← CLS1のtestprintは成功

となり、CLS1のtestprintは成功し、CLS2のtestprintは失敗します。
requireの仕方がおかしいのでしょうか?
229デフォルトの名無しさん:2006/09/22(金) 02:38:24
>>215
ちゃんと判定機能ついてるよ。
おまえがドキュメント読んでないだけだろ。

>>218
文字コード判定を絶対に間違えないライブラリなんてものが存在するなら
お目にかかりたいんですが、是非教えていただけませんでしょうか?
230デフォルトの名無しさん:2006/09/22(金) 02:46:03
まぁ言うは易しだよ。
他の言語で似たような機構のメンテナンスしてるけど大変…。

あと、絶対に間違えない文字コード判定なんて不可能。

>>215 は知ったかぶり。
231デフォルトの名無しさん:2006/09/22(金) 03:32:02
>>211
JcodeやEncodeがしょぼいと思ってるなら
これだけ多くの人に使われるモジュールを自分で作ってみ。
そして長期にわたってメンテナンスを継続してみ。
そうすればおまえが以下にあさはかな人間かが分かるよ。
232デフォルトの名無しさん:2006/09/22(金) 08:46:13
客から「なんでこんな簡単なことができないの?」と言われるのが仕事のうちみたいなもんだしね。
文句を言うのは壁の向こう側の「お客さん」。

・・と書いてて、文字コード判定処理の改善方法を思いついたよ。
233デフォルトの名無しさん:2006/09/22(金) 09:10:33
>>227
なんで継承しないの?

234デフォルトの名無しさん:2006/09/22(金) 09:47:55
>>227
・CLS1 と CLS2 の中身が同一で、それぞれ異なる状態を保持したい。
→同一クラスとして実装し、必要に応じてインスタンスを生成してください。

・CLS1 と CLS2 が良く似ているが、それぞれに異なる機能を持たせたい。
→共通の機能をベースクラスに持たせ、CLS1、CLS2 をその派生クラスとし、機能などを継承してください。

・面倒くさい事はいいからとっとと動く方法教えろやボケ。
→require を do に書き換えてかわいそうな子扱いされてください。

これは require が %INC を参照し、自動で同一ファイルのロードを避けるため生じる現象です。
235227:2006/09/22(金) 10:01:47
>233
>234
ほんと なんも知らなくてすんません

>・CLS1 と CLS2 が良く似ているが、それぞれに異なる機能を持たせたい。
やりたいのはこれです。
なので、
>共通の機能をベースクラスに持たせ、CLS1、CLS2 をその派生クラスとし、機能などを継承してください。
これをやろうと思います。 ありがとうございました。
236227:2006/09/22(金) 10:42:38
と思ったら、継承のやり方がわかりません。
ttp://www.rfs.jp/sb/perl/04/01.html
ttp://www.rfs.jp/sb/perl/04/02.html
ttp://www.rfs.jp/sb/perl/04/03.html
を読んで見て、どうやらモジュールなるものを作らないといけないらしい
ということがわかりました。
上記のサイトを参考に
testprint.pmというファイルを作って
CLS1の中で
use testprint;
として実行してみたところ
Can't locate testprint.pm
となります。 testprint.pmを置く場所がまずいのでしょうか?
237デフォルトの名無しさん:2006/09/22(金) 10:59:33
ナイス!
238デフォルトの名無しさん:2006/09/22(金) 11:56:05
>>236
そのとおり。
@INCで示されたパス以外の場所にモジュールをおく場合は
use lib qw(/path/to);
って感じで自作モジュールを置く場所を利用する側のスクリプトで指定する。
239227:2006/09/22(金) 12:47:29
>238
でけた!! ありがとう!!
240デフォルトの名無しさん:2006/09/22(金) 13:10:12
227じゃないけど勉強になりますた。
241デフォルトの名無しさん:2006/09/22(金) 14:40:33
環境:Windows XP
MeCabのバージョン:mecab-0.93.exe
MeCabの辞書:mecab-ipadic-0.91-utf8
Perlのバージョン:v5.8.8 built for MSWin32-x86-multi-thread

MeCabを使って形態素解析を行おうとしたのですが、付属のtest.plを実行した
ときに次のようなエラーが出ます。
Can't call method "parse" without a package or object reference at test.pl line 3.
このエラーを出なくするためにはどうしたらよいのでしょう。
ちなみに
use MeCab;
としても別段エラーは発生しません。

test.plの中身↓
use MeCab;
$m = new MeCab::Tagger ("-Ochasen");
print $m->parse ("今日もしないとね");
242デフォルトの名無しさん:2006/09/22(金) 14:43:05 BE:154547472-BRZ(1020)
めかぶ単体で動くの?
243デフォルトの名無しさん:2006/09/22(金) 14:54:08
>>242
はい。確認済みです。
244デフォルトの名無しさん:2006/09/22(金) 15:00:24
MeCabのperlバインディングを使いたいってことだよね?
READMEは読んだ?
245デフォルトの名無しさん:2006/09/22(金) 15:05:42
perlでオブジェクト指向をはじめて勉強しようと思っています。

これはC++などの他のオブジェクト指向言語の理解にも役立ちますか?
246241:2006/09/22(金) 15:17:23
>>244
READMEの通りにMakefile.plを実行すると
'mecab-config' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とのエラーがでるので、以下のサイトの手順を踏んでバインディングを行いました。
http://namazu.asablo.jp/blog/2006/03/12/286404
MeCabのモジュールはどうやら正常に呼び出せているようなのですがメソッドの実行が
上手くいきません。MeCab.pmを見てみると、以下の部分が呼び出すメソッドのようです。

package MeCab::Tagger;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( MeCab );
%OWNER = ();
%ITERATORS = ();
*parse = *MeCabc::Tagger_parse;
*parseToNode = *MeCabc::Tagger_parseToNode;
*parseNBest = *MeCabc::Tagger_parseNBest;
*parseNBestInit = *MeCabc::Tagger_parseNBestInit;
*nextNode = *MeCabc::Tagger_nextNode;
*next = *MeCabc::Tagger_next;
*formatNode = *MeCabc::Tagger_formatNode;
*what = *MeCabc::Tagger_what;
247デフォルトの名無しさん:2006/09/22(金) 15:25:10
XSのロードでこけてるんでしょ。
newの返り値がundefineじゃない?
248デフォルトの名無しさん:2006/09/22(金) 15:28:04
make && make testでこけなかった?
test.plがこけるならmake testでエラーでてるはずだと思うんだけど
249デフォルトの名無しさん:2006/09/22(金) 15:33:41
>>245
自転車の乗り方を覚えるために、曲乗りから始めるようなもんです。
250241:2006/09/22(金) 15:50:57
>>247
以下で実行してみると、okと出力されます。何らかの定義はされていると思うのですが……。
しかしprintしても何も表示されない。
use MeCab;
$m = new MeCab::Tagger ("-Ochasen");
print "ok" if (defined($m));
>>248
make testはどのディレクトリで行えばよいのでしょうか?
251デフォルトの名無しさん:2006/09/22(金) 15:59:26
>>245
役立ちません
25224:2006/09/22(金) 16:02:54
253デフォルトの名無しさん:2006/09/22(金) 16:17:26
>>245
普通に役立ちますよ。
「アルゴリズム」がそうであるように、
「オブジェクト指向」の基本的な概念は言語を問いませんから。
254デフォルトの名無しさん:2006/09/22(金) 16:18:50
@a = split (/!!|\?|。/, $hoge);
の|\?|はどういう意味ですか?
255241:2006/09/22(金) 16:27:37
>>254
?という文字自身のことです。
Perlの正規表現では?は「直前の文字が0個または1個」というように扱われます。
たとえば/test?/は"test"または"tes"にマッチします。
しかし/test\?/という場合は"test"にも"tes"にもマッチせず、"test?"にマッチします。
以上より/!!|\?|。/というのは"!!","?","。"のいずれかにマッチします。

>>241が未だにできません……
256245:2006/09/22(金) 16:32:03
>249
>251
>253
ありがとう。

いいほうに受け取って役立つと思っていきます。

「役立つ」という言葉が曖昧でした。
ここでいう役立つは、
オブジェクト指向とはどういうものかが、
実際にコードで表現でき、そして他のオブジェクト指向
言語を使う人と、理解を共有することができるという意味です。
257デフォルトの名無しさん:2006/09/22(金) 16:39:38
>>255
なるほど
"|\?|"で何か意味を持つものかと思っていました。
"|"は区切り文字というか又はの意味だったんですね。
分かりやすい説明ありがとうございました。
258253:2006/09/22(金) 17:29:26
>>256
ちょっと補足です。たしかにPerlでは>>249が抽象的に指摘しているように、

1. 「オブジェクト指向」を使う前にリファレンスやパッケージ
 というPerlの機能を理解する必要がある。
2. また、クラス名を引数で受け取るなどちょっと特殊な
 ところがある。
3. ネット上で個人が公開しているようなCGIスクリプト等では
 「オブジェクト指向」はそれほど使われていない。

と、「オブジェクト指向」に到達するまでに少々ステップが必要なので、
解説書なりを読んでPerlでのオブジェクト指向が
理解しにくいと感じたら、ためらわずに他の言語も試されるのがよいかと。
259デフォルトの名無しさん:2006/09/22(金) 17:50:01
rubyへゴー
260デフォルトの名無しさん:2006/09/22(金) 17:57:32
>>256
正直、Perlで勉強するのはおすすめしない。
Perlから入って、他のOOPの人と理解を共有するのは困難。
まだPHP5の方がマシ。
できればRubyかPythonでどうぞ。
261デフォルトの名無しさん:2006/09/22(金) 17:59:40
RubyかPythonにいったらPerlに戻ってくることは無いだろうがな。
262デフォルトの名無しさん:2006/09/22(金) 17:59:42
本当に純粋に概念だけを捉えられればいいんだけど、
Perlでやる場合、言語仕様に惑わされる可能性大だぬぁ。
263デフォルトの名無しさん:2006/09/22(金) 18:16:21
OOP的にはこんな風に作るんだけど、
Perlだとできないから、なんちゃってな方法で回避、
というのが多過ぎ。

既にOOPについて理解してる人が書くなら、どうにでもなるけど。
うまくPerl用にデフォルメするだろうし。
264256:2006/09/22(金) 18:27:29
>258
>260
>261
>262
ありがとう御座います。

うーん、そうなんですか〜。

私の周りは、VBとかVC++
などのMS系言語(?)を使う人が多くて、
オブジェクト指向(クラス等)を使いこなしています。

わたしは、独自路線でperlをまあ、趣味でやっていますが
オブジェクト指向も知っておきたいなあと思っています。
(解らないとくやしいし)

オブジェクト指向を純粋に学ぶには
遠回りかもしれませんが、perl自体気に入ってるので
続けていこうと思います。
265ニュース速報+:2006/09/22(金) 19:05:11

【ネット】 ひろゆき氏失踪で、2ちゃんねる閉鎖?…本人は「やっぱ、失踪してんじゃね?」とレス★4
http://news19.2ch.net/test/read.cgi/newsplus/1158916178/l50

【2ch】“ひろゆき”こと西村博之氏失踪…最悪の場合「掲示板閉鎖」も(夕刊フジ)★2
http://news18.2ch.net/test/read.cgi/mnewsplus/1158915579/

2ちゃんねるの「ひろゆき」失踪…掲示板閉鎖も

 インターネットの巨大匿名掲示板「2ちゃんねる」の管理運営者「ひろゆき」こと、
西村博之氏(29)が失踪状態にあることが22日までにわかった。
同掲示板は西村氏個人が管理している。当局が不適切な書き込みの削除や
投稿者の情報を求めようにも行方知れずで放置され、
裁判所からの呼び出しにも応じていない。
ネット社会の象徴的な存在でもある「2ちゃんねる」は、最悪の場合、
「掲示板閉鎖」という事態まであり得る情勢だ。

 「西村氏は8月中旬から携帯電話に出ないし、メールを出しても返事がない。
債権者が破産申し立てする動きもある」
266デフォルトの名無しさん:2006/09/22(金) 19:11:33
何でこんなところに貼ってんだよ。
267デフォルトの名無しさん:2006/09/22(金) 19:58:39
LWPのマニュアルを読んだのですが、よく解りませんので、
どうか教えて下さい。

リファラを http://pc8.2ch.net/tech/index.html とし、
http://img.2ch.net/img/tech_a.gif のファイルを
c:\download というディレクトリにダウンロードするには、
どうすればよろしいでしょうか?
268デフォルトの名無しさん:2006/09/22(金) 20:20:22
use LWP::UserAgent;
$folder = 'c:/download/';
$ref = 'http://pc8.2ch.net/tech/index.html';
$url = 'http://img.2ch.net/img/tech_a.gif';
$filename = $1 if ($url =~ m{([^\/]+)$});

$ua = LWP::UserAgent->new;
$req = HTTP::Request->new('GET', $url);
$req->referer($ref);
$ua->simple_request($req, $folder . $filename);
269267:2006/09/22(金) 20:38:26
>>268 さん
できました。有り難うございました。
270デフォルトの名無しさん:2006/09/22(金) 21:52:01
csvファイルをリファレンスで2次元配列にしてるんだけど
excelみたいに
行、列ごとの計算、操作をしようとすると
その都度、行列転置しなければならないのか???
ほかにらくにできる方法はないの?
271デフォルトの名無しさん:2006/09/22(金) 23:07:08
なんか気に障る口調だが。

# 列ごとに操作
sub rows(&\@$) {
 my($p, $mtx, $i) = @_;
 for my $E (@$mtx) {
  local $_ = $E->[$i];
  $E->[$i] = &$p;
 }
}

こんな感じの操作用のプロシージャを作っておいて、利用する。

my @a=(
["A","B","C"],
["a","b","c"],
["1","2","3"]);

rows {"($_)"} @a, 1;
結果 ==> (
["A","(B)","C"],
["a","(b)","c"],
["1","(2)","3"])
272デフォルトの名無しさん:2006/09/23(土) 01:02:00
>>260
そうか?
俺はPerlでOOPを覚えたけど、他の言語で書くときも問題なかったよ。
PHPは言語仕様が腐ってるので(PHP5も含む)できれば触りたくないなぁ。

とはいえ、OOPを覚えるならRubyのほうがいいと思うよん。


273デフォルトの名無しさん:2006/09/23(土) 13:59:12
PerlのOOPって妥協案だから
Perlだけで覚えても、OOPの考え方や組み方は身に付かないよ。
他の言語触った時に、public, protected, privateやinterfaceを
どう使っていいか分からない、なんてことになりかねない。
274デフォルトの名無しさん:2006/09/23(土) 14:28:19
SQLを自前で書ける場合に、Class::DBIを使う意味ってありますか?
set_sqlの山になるくらいなら、自分でSQLを発行した方が効率が良いような気がするんですが。
275デフォルトの名無しさん:2006/09/23(土) 15:35:45
O/Rマッパーのいいところは
SQLをかけない奴でもRDBMSにアクセスできることじゃないぞ。
それが理解できないのであれば
どんなに説明しても話は平行線のままなので
お好みのままにスクリプトファイルに直接SQLをガシガシ書くがよかと。
276デフォルトの名無しさん:2006/09/23(土) 17:15:43
>>275
レスどうもです。
平行線になるかどうかわかりませんが、
O/Rマッピングするクラスを(SQLを書いて)自前で用意するのと、
Class::DBIを継承して作るのとだと、どっちが効率がいいのかわかんなくなったので。
Class::DBIだとどうも無駄にメモリを消費するような気がするんですが、
これは使い方が悪いだけなんでしょうか。
277275:2006/09/23(土) 17:52:43
>>276
あぁ、そういう意味っすね。
すんません、勝手に話を平行線にしようとしてたのは私でした m(_ _)m

そういう話になると好き好きでいいと思います。
むしろClass::DBI, DBIx::Class, Rose::DBなんかよりいい
O/Rマッパーモジュールを作ってください。
自分はO/Rマッパーを自作しないのはめんどくさいのと
共同作業者に使い方を覚えさせる強制が発生するのが良くないと思うので
大体の人が使い方分かってるClass::DBIを使い続けています
278デフォルトの名無しさん:2006/09/23(土) 18:20:30
>>277
こちらこそ言葉足らずで失礼しました。

ケースバイケースということでしょうか。
集団での作業だと、やっぱりClass::DBIの方が良いのかな・・・
引き続き精進したいと思います。
ありがとうございました。
279デフォルトの名無しさん:2006/09/23(土) 18:52:30
入力されたデータが数値かどうか調べる方法と
配列を数値順にソートしたいのですけど、
どのようにすればよいのでしょうか?
280デフォルトの名無しさん:2006/09/23(土) 19:23:23
>>279
前者は /^\d+$/;
後者は sort
281デフォルトの名無しさん:2006/09/23(土) 20:42:28
>>279
横から蛇足な説明かもしれないけど
sort関数はデフォルトはcmpで文字列整列だから
数値整列の場合は<=>を明示するの忘れると痛い目にあうよ。

4〜5年前にunix timestampが桁上がりして時間で整列という処理にて
sortを間違って使い方したシステムをまかされててえらい目にあった。
282デフォルトの名無しさん:2006/09/23(土) 21:31:24
$hoge = <STDIN>;
だと、何か文字列を入力してEnterを押すと続行となるようですが、
キーボードの入力(例えば Kが押された など)を判定するにはどうすればいいのでしょうか?
押されたキーによって処理を変える、といったことがしたいのです。
283デフォルトの名無しさん:2006/09/23(土) 21:32:49
OS依存
284デフォルトの名無しさん:2006/09/23(土) 21:50:48
>>280
sortは
sort {$a <=> $b} @array
とかしないとまずくね?>数値順
285デフォルトの名無しさん:2006/09/23(土) 22:00:34
PBPのChepter17、Version Numbersで

use version; our $VERSION = qv('1.0.3');

って例があるんだけど、これどうして1行で書いてあるの?
なにか2行で書いちゃダメな理由ってある?
286デフォルトの名無しさん:2006/09/23(土) 22:02:49
>>285
パッケージプログラム(ExtUtils::*の類)がモジュールのバージョンを調べる際に、$VERSIONが含まれる行をeval()するのだが、
qv()はversion.pmの中で定義されているため、use version;しないとバージョン値を取得できないのだ。
287285:2006/09/23(土) 22:11:28
>>286
ああ、そういうことか。ありがとう。
288デフォルトの名無しさん:2006/09/23(土) 22:23:07
>>283
OS依存というのは、OSによって方法が異なるということでしょうか?
WindowsXP と ActivePerlを使っています。
289デフォルトの名無しさん:2006/09/23(土) 22:47:58
>>284 >>281さんが既に説明済みだよ
290デフォルトの名無しさん:2006/09/24(日) 00:12:47
>>282
>キーボードの入力(例えば Kが押された など)を判定するにはどうすればいいのでしょうか?

つまり、ターミナルからエンタキー無しの、1文字入力したいって
事ですか?
Term::ReadKey を使ってくみてださい。
291デフォルトの名無しさん:2006/09/24(日) 00:32:43
>>290
ActivePerlでは使えなかったはず。
292290:2006/09/24(日) 00:38:19
>>291
教えてくれてありがとう。
スマンカッタ>>282
293デフォルトの名無しさん:2006/09/24(日) 01:06:27
>>291 いまWinXP+ActivePerlで試したけど、使えやよ?
294デフォルトの名無しさん:2006/09/24(日) 02:36:51
>>293
日本語でお願い
295デフォルトの名無しさん:2006/09/24(日) 03:48:34
脳内補完機能の欠如乙。来世ではパッチあててもらえよ。
296デフォルトの名無しさん:2006/09/24(日) 03:56:48
>>293
キータイピングは正確に。
297デフォルトの名無しさん:2006/09/24(日) 07:41:58
>>293
おや、いつの間にか使えるようになってたんか。以前は使えなかったと思うんだが。
で、代わりにTerm::Getchなんてものもあったんだが。(しかも微妙に使い勝手が悪い。)
Term::ReadPasswordが使えなかったのは確かなんだが。
Term周りはActivePerlはほかとはかなり違うから正直うんざり。
298デフォルトの名無しさん:2006/09/24(日) 10:43:58
>>290
期待していた動作をしました。
ありがとうございました。
299デフォルトの名無しさん:2006/09/24(日) 13:16:07
WindowsXP + ActivePerl の環境で、
例えば
print "hoge";
などでコマンドプロンプトに表示された文字群を
一旦全て消す、といったことがしたいのですが、
どうすれば良いでしょうか?(そもそも可能でしょうか?)
300デフォルトの名無しさん:2006/09/24(日) 13:27:37
system('cls');

とかじゃなくて?
301デフォルトの名無しさん:2006/09/24(日) 14:03:03
> print "hoge";
つまり「ESCシーケンス」のことを言いたいんじゃない?

ActivePerl の環境は弄ったことないけれど、おそらく
print "¥x1B[2J";
他は「エスケープ・シーケンス」でググって。
302デフォルトの名無しさん:2006/09/24(日) 14:25:28
>>282
>キーボードの入力(例えば Kが押された など)を判定するにはどうすればいいのでしょうか?
>押されたキーによって処理を変える、といったことがしたいのです。

getc を使うんじゃないの?
オレは使ったことないからよく知らんけど。
303302:2006/09/24(日) 14:26:51
解決済みだったか。スレ汚しすまそ
304デフォルトの名無しさん:2006/09/24(日) 14:31:05
>>301
残念ながら、WinNT系では32bitプログラムはエスケープシーケンスが使えない。
Win9xまでなら使えたんだが。
どうしてもやるのなら、Win32::Consoleあたりを使うことになる。
305デフォルトの名無しさん:2006/09/24(日) 16:02:20
>>299
半分冗談だが
print "\n"x50;
306デフォルトの名無しさん:2006/09/24(日) 16:37:56
最近のディスプレイは解像度がでかくなってるからもっとでかくなきゃダメw
307デフォルトの名無しさん:2006/09/24(日) 17:05:16
$=
308デフォルトの名無しさん:2006/09/24(日) 18:19:56
>>299
改行していないなら、
print "\r" . " "x80 . "\r"
とか。
改行ありならかなり面倒になると思う。

>>304
の言うとおり、NT系のコマンドプロンプトではエスケープシーケンスが使えない。
以前文字の色を変えようとした時に、うまくいかなくて気が付いた。
309ヽ(´ー`)ノ ◆.ogCuANUcE :2006/09/24(日) 21:45:10
Win32::Console::ANSI 使えば?
どの程度キチンと動くか知らんが。
310デフォルトの名無しさん:2006/09/24(日) 23:22:04
XPだけどそれ動いたよ、昔。
Themeサービス切ってたからかも知れないけど。
311デフォルトの名無しさん:2006/09/25(月) 01:13:42
>>309
Win32::Console を使えばいいのかもしれないけど、
自分で使うスクリプトだったし、面倒だったので逃げた w

単にずらずらと出力するスクリプトだし、出力に色をつけたら見やすいかな、程度だったし。
とりあえず、"\a" のベルが使えるのは助かった。

>>310
XPで動いたっていうのは、Win32::Console を使った方?
それとも、ANSIエスケープ・シーケンスの方?
もし後者なら興味深いけど。
312デフォルトの名無しさん:2006/09/25(月) 01:24:36
自分で使うスクリプトで面倒だからこそCPANを使う。
それが生粋のPerl Mongers。

逆に配布用スクリプトの時の方が、依存モジュールに気を使うなぁ。
313デフォルトの名無しさん:2006/09/25(月) 02:08:07
>>300
とりあえずコレ使いました
ありがとうございます
314デフォルトの名無しさん:2006/09/25(月) 21:31:03
print for @INC;

for (@INC) { print;}
は、同じ結果が表示されます。
後者は意味が理解できるのですが
前者はなぜそうなるのかわかりません
printしているのは一体何(どの変数?)なんでしょうか
文法的に解説してもらえるとありがたいです
315デフォルトの名無しさん:2006/09/25(月) 21:37:51
>>314
こんな流れで @INCの中身が表示されてる感じ。
print ← for ← @INC;

forが@INCの中身を引っ張る
それが$_に入る
print に$_が渡る
316デフォルトの名無しさん:2006/09/25(月) 21:45:52
>>315
早速回答ありがとうございます
$_ に入った値を print しているということは
print は $_ に値が入る度に(つまり@INCの中身の個数分)
毎回呼び出されてるということでしょうか?

それはちょっと文法的におかしいようにも思えるのですが
そういうものなんでしょうか?
317デフォルトの名無しさん:2006/09/25(月) 21:50:51
>>316
毎回 print は呼び出されてる。
試しに
print $_, "¥n" for @INC;
を実行すると分かる。
そういうものです。
318デフォルトの名無しさん:2006/09/25(月) 21:51:52
文の後ろに for や if などを書くのは文修飾という、れっきとした Perl の文法だよ。

print "ABC" if (/abc/);
print for (@INC);
sleep 1 while (!terminated);
319デフォルトの名無しさん:2006/09/25(月) 21:57:48
>>317
>>318
なるほど、ifやwhileが後ろにつくのと同じように
forも後ろにつくと考えればいいんですね
(ifやwhileは違和感なく受け入れていたのですが)

モヤモヤとしてたので、聞いてよかったです
ありがとうございました
320デフォルトの名無しさん:2006/09/25(月) 22:01:24
へぇ〜、いいこと知った。
321デフォルトの名無しさん:2006/09/25(月) 22:31:15
LWP::Simpleのgetってキャッシュ機能発動してますか?
していないはずなのに動作がおかしい。
322デフォルトの名無しさん:2006/09/25(月) 22:35:27
use LWP::Simple;
my $content;
while(1) {
sleep(30);
$content = get('xxx');
#正規表現でいろいろ処理して更新差分だけを表示
}

みたいにやっているのだけど$contentの内容をチェックしてみたけど更新が反映されていない。
自前でやるしかないのかな。
323デフォルトの名無しさん:2006/09/25(月) 23:38:59
……(;゚Д゚)
324デフォルトの名無しさん:2006/09/26(火) 00:12:08
参考になる情報が上のソースだけでは憶測でしかものが言えないぞ。

アクセス数が多いサイトはリバースプロキシかまして
間にキャッシュサーバが入ってたりしてるばあいもあるけど
自前でWEBサーバ立ち上げてネットワーク上に
キャッシュが入らないようにテストして確認済み?

正規表現が間違っているとかの他の間違えの要素は排除済み?
古いほうのデータと新しいほうのデータをeqで比較しても同じなの?
ソース見る限り$contentには常に新しいのしか残ってないけど
どうやって古いのと比較してるの?
325322:2006/09/26(火) 01:08:11
すみません。コードです。

use strict;
use LWP::Simple;
my ($old,$content,$output,$fh);

while (1) {
sleep(30);
open $fh, '<', 'out.txt' or die "$!";
$old = <$fh>;

$content = get('');


($output) = $content =~ /<dl class="bookmarklist" id="(.*?)">/;

if ($output eq $old) { next; }

open $fh, '>', 'out.txt' or die "$!";
print $fh $content;print "$output\n";
}

はてなブックマークの自サイトの新着ブックマークを報告するためのスクリプトなんですが、
ブラウザで更新したらすでに新しいものが追加されているのに、
そのスクリプトを実行していても、それが検出されないのです。で、一回スクリプトを終了して
再度実行するとうまく検出されます。どうもループ中でキャッシュが働いているとしか思えないのですが。
326デフォルトの名無しさん:2006/09/26(火) 01:15:26
>>325
>$old = <$fh>;
古い方は先頭の1行しか取って来てないけど、いいの?
327デフォルトの名無しさん:2006/09/26(火) 01:21:00
というか
if ($output eq $old) { next; }
で比較してるのは、現在のソースの中の ($output) 部分と 30秒前のソースの 1行目だよね。
なんで等しくなることがあるのか俺には理解できないんだが・・・。
328322:2006/09/26(火) 01:27:17
>>326
ありがとうございます。ええ、それでいいのです。そこに書き込まれているのは必ず
正規表現/<dl class="bookmarklist" id="(.*?)">/で抜き出されたカッコの中の部分なので
329322:2006/09/26(火) 01:28:33
>>328
すみません。それでいいのです。スクリプトはa.plで、out.txtとは別です。
330デフォルトの名無しさん:2006/09/26(火) 01:33:54
>>328
でも古い方は改行コード入ってるよ。
新しい方には無いけど。
331デフォルトの名無しさん:2006/09/26(火) 01:42:36

質問者じゃないけど

現行で不便に感じるorz
ローカルでブラウズする際に単にLWP::Simpleでmirrorsだとキャッ
シュだけしてくれても見辛い。
wgetでmirrorしてる感じ(´・ω・`)

低レベルですまそ。高レベル?上級者?perlmongerなら

更新分に対し強調をしたり、目印を付けたり

つまり採ってきて見やすく加工する処理をして、吐きなおし。新し
い部分がすぐ判るようにする

そんな便利なのを見た。そんでそんな処理したいけど出来ないorz
前回と今回の比較で今回の部分を黄色で塗りつぶすみたいな

出来たら便利だと思うんだけど...凄腕のperlmongerにhackして便
利にして欲しいです...
332デフォルトの名無しさん:2006/09/26(火) 01:53:06
>>331
何言ってるかわからん
根本的に何を不便に感じてるんだ?
333331:2006/09/26(火) 02:23:02
>>332
ttp://cachu.xrea.jp/perl/html_update_check.html
みたいな事...をミラーついでにしてほしい。

これは本人がいつ更新したか忘れるから判り易いようとあるけど
更新部分がすぐ判るように出来ればと
334デフォルトの名無しさん:2006/09/26(火) 07:33:09
やりたいことがわかってるならそのまま書けばいいだけじゃないか
335デフォルトの名無しさん:2006/09/26(火) 09:07:10
引っぱってきて差分チェックするぐらいで高レベルとか言われても。
これぐらい自分でやれよ…。
336デフォルトの名無しさん:2006/09/26(火) 09:30:18
しかも差分チェックはdiffコマンド任せじゃないか
337デフォルトの名無しさん:2006/09/26(火) 10:57:39
my $a = 1;
my $b = $a + ($a++) + ($a++) + ($a++);

がperlで$b=8になるんだけど(;´Д`)なんでよ?
338デフォルトの名無しさん:2006/09/26(火) 11:23:47
最初の$aが2になってるっぽいが、そんな計算をさせることがあるのかとか、
答えがどうなるのが正しいのか気になる。
339デフォルトの名無しさん:2006/09/26(火) 11:26:09
GD::Graphを使って折線グラフを作成しており、通常はY軸とX軸が
左下でくっつく形のグラフになると思うのですが、これを左上で
くっつく形のグラフにする事は可能なのでしょうか?
左上でくっつく場合は、Y軸の目盛を逆転させて、上から下に向かって
数値が増えていくグラフにしたいと考えております。

色々と探してみたのですが、どうしても見付からなくて・・・。
340デフォルトの名無しさん:2006/09/26(火) 13:56:29
>325
>はてなブックマークの自サイトの新着ブックマークを報告するためのスクリプトなんですが、
スクレイプしなくても
ttp://b.hatena.ne.jp/entrylist?mode=rss&url=http%3A%2F%2Fb.hatena.ne.jp%2Fentry%2Fhttp%3A%2F%2Fwww.example.com%2F%2A&sort=eid&threshold=1
のRSSを巡回すれば済むよ。
example.comは自分のサイトにかえてね。
341デフォルトの名無しさん:2006/09/26(火) 13:58:12
あ、ごめん。 http%3A%2F%2Fb.hatena.ne.jp%2Fentry%2F が余分だった。
342デフォルトの名無しさん:2006/09/26(火) 17:17:45
>>337
先頭から評価していって、()付きの場合は先に評価するからじゃないの?

$a + ($a++)で、()付きの方を先に処理して $a + 1。そして、$aに1加算されて$a = 2。
この時点で()無しの方が確定して、2 + 1 = 3。次に3 + ($a++)で、$a = 2なので、
3 + 2。$aに1加算されて$a = 3。最終的には 2 + 1 + 2 + 3 = 8。

でも、こういう評価順序って、OSやVersionによって不定なんじゃなかったっけ?
343デフォルトの名無しさん:2006/09/26(火) 17:46:36
わかりにくいねー。
式だけじゃ 8 になるなんて考えなきゃわからんし、合ってるかどうかも不安だw
344デフォルトの名無しさん:2006/09/26(火) 22:50:11
ちょっと込み入った行の場合 ++ は、単独行にしちゃうけどねぇ。
可読性も含め、バグの原因にもなるし。
345デフォルトの名無しさん:2006/09/26(火) 23:20:28
単独行の場合って $i++ と ++$i のどっちがいいんだっけ?
346デフォルトの名無しさん:2006/09/26(火) 23:57:11
(+ +);
347デフォルトの名無しさん:2006/09/27(水) 00:27:32
$i += 1
348デフォルトの名無しさん:2006/09/27(水) 00:34:48
>>345
void contextの場合は最適化されるからどっちも同じ。
値を使う場合は、++$iの方がちょびっとだけ効率がいいが、ほとんど変わらん。
349デフォルトの名無しさん:2006/09/27(水) 11:09:49
Linux使ってます。
open関数で(ファイル名が)マルチバイトのファイルを開けますか?
文字コードとかは全てutf8で統一しています。
open ( IN , "cat (日本語ファイル名) |" ); の様な方法でもなんでもokです。
というか、中身が読み込めればどんな方法でも良いのですが。
350デフォルトの名無しさん:2006/09/27(水) 11:43:10
>>349
試してみれば良いのでは
351デフォルトの名無しさん:2006/09/27(水) 11:54:23
>>350
マルチバイトのファイル名だと、cat : (ファイル名) : そのようなファイルやディレクトリはありません
となります。英数字及び空白文字のファイル名なら問題ないのですが、、
352349:2006/09/27(水) 12:30:41
自己解決です。
Perlは正常に機能していました。
自分のミスです。申し訳ないっす... ...o.rz..
353デフォルトの名無しさん:2006/09/27(水) 14:51:23
以下のような、UNIXのシェル(cat,grep)に依存するような形をやめにしたい。
perl単体で可能だろうか。
"マッチ演算子"というのがどうやら関係していそうなんだが、
具体的な書き方がわからない・・・・

----
$srcip = <STDIN>;
chomp($srcip);
exec "cat nsfw.log | grep 'src=$srcip'";
354デフォルトの名無しさん:2006/09/27(水) 14:59:40
chomp(my $srcip = <STDIN>);

my $log = "nsfw.log";
open(FH, $log) or die "$log : $!¥n";
while (<FH>) {
 print if /src=$srcip/;
}
close(FH);
355デフォルトの名無しさん:2006/09/27(水) 15:48:40
>285
> use version; our $VERSION = qv('1.0.3');
> って例があるんだけど、これどうして1行で書いてあるの?

便乗質問です。
CPAN.pmとかにある
----------
package CPAN;
$VERSION = '1.87';
$VERSION = eval $VERSION;
----------
の、$VERSION = eval $VERSION;は一体何をやってるの?
356デフォルトの名無しさん:2006/09/27(水) 16:20:49
Nick Ing-Simmonsさんが心臓発作で亡くなられたそうです
ナムナム(-人-)
357デフォルトの名無しさん:2006/09/27(水) 16:46:00
これは言葉を失いますな
358デフォルトの名無しさん:2006/09/27(水) 16:54:34
359デフォルトの名無しさん:2006/09/27(水) 17:07:17
誰だよw
んな奴べつに死んだっていい
360デフォルトの名無しさん:2006/09/27(水) 17:23:48
↑オマエのほうが死んだってどうでもいい奴なんだよボケ。
Nick Ing-Simmonsさん ご冥福をお祈りします。
361デフォルトの名無しさん:2006/09/27(水) 17:26:40
>>359
ネタで言ってるんだよね?
362デフォルトの名無しさん:2006/09/27(水) 17:27:51
誰なの?
363デフォルトの名無しさん:2006/09/27(水) 17:51:01
>>359, >>362
ネタ?つか、お前、>>215 だろ。
お前が死ねはよかったのに。氏ねじゃなくて死ね。
364デフォルトの名無しさん:2006/09/27(水) 17:52:40
誰?
まじで分からない。
365デフォルトの名無しさん:2006/09/27(水) 17:54:04
誰なのかくらい書いておけよ。
366デフォルトの名無しさん:2006/09/27(水) 17:54:54
>>360 とか >>363 とか、最悪。
367デフォルトの名無しさん:2006/09/27(水) 17:58:19
システムパッケージの*.pmをgrepしてみると、いくつかのファイルに名前が
出てくるね。
まあ、オープンソースなんだから、だれか死んでも支障なく車輪は回り続ける
んでしょう? 特に気にすることないんでは?
368デフォルトの名無しさん:2006/09/27(水) 18:13:17
俺たちはみんな、誰かの作った車輪の上で生きてるんだ
その誰かが亡くなったことを悲しむのが、そんなに不思議か?

合掌
369デフォルトの名無しさん:2006/09/27(水) 18:13:32
>>354
ありがとう。うまくいった。
精進する。
370デフォルトの名無しさん:2006/09/27(水) 18:26:45
ひ、非情な世界や……
371デフォルトの名無しさん:2006/09/27(水) 18:39:35
>>367
先人の業績を利用してあぐらかいてるくせに
敬うことを知らない恥知らずはどっかいけ
372デフォルトの名無しさん:2006/09/27(水) 18:43:40
どなたかは存じませんがご冥福をお祈りします。
373デフォルトの名無しさん:2006/09/27(水) 18:44:29
優れた功績を残した人を素直に敬うことができない奴なんてほっとけ。
そんな奴らは死に際、死した後に
家族・友達・知人だーれもが集まらない寂しい奴なんだよ。
妬んで死者に暴言はいてるわけだから、相手にするだけ無駄。
374デフォルトの名無しさん:2006/09/27(水) 18:55:37
>>371
業績を残した先人の死を利用して人を罵倒している人がいますね。
375デフォルトの名無しさん:2006/09/27(水) 19:01:02
ぼくは誹謗と中傷の嵐の中でNick Ing-Simmonsという名前を知った。
人の死の知らせのただ中で、他人に「死ね」と叫ぶ者がいる。そして、
他人の死後について、呪いの言葉を吐く者がいる。

今後この名を見るたびに、Perlに巣食ったこの変質者たちのことを
思い出して不快な思いをすることになるだろう。
376デフォルトの名無しさん:2006/09/27(水) 19:08:24
まじで誰よwwwwwww
377デフォルトの名無しさん:2006/09/27(水) 19:12:34
なるほどね。
>>374-375のような友達いない奴は屈折した曲解して
屁理屈こねて素直に過ちを認めることが出来ず
人との摩擦がおきたときに我を押し通して友人を失ってくのか。
変人の心理の一端を見れてとても参考になりました。
378デフォルトの名無しさん:2006/09/27(水) 19:13:42
作詞:>>375
作曲:>>380
379デフォルトの名無しさん:2006/09/27(水) 19:16:45
> Nick Ing-Simmonsさん ご冥福をお祈りします。

の一行前に

> ↑オマエのほうが死んだってどうでもいい奴なんだよボケ。

と書ける心って……

380デフォルトの名無しさん:2006/09/27(水) 19:20:22 BE:463642867-BRZ(1020)
ナムナム
381デフォルトの名無しさん:2006/09/27(水) 19:21:31
Perl厨って最悪の存在やwww
382デフォルトの名無しさん:2006/09/27(水) 19:26:36
Perl厨って人の死を冒涜する最悪な存在なんですね
383デフォルトの名無しさん:2006/09/27(水) 19:35:48
Perl/Tk の人?
384デフォルトの名無しさん:2006/09/27(水) 19:49:23
Encode とか作った人で合ってる?

心臓発作とは・・・。まだ若いのだろうにもったいないねぇ。
ご冥福を・・・ (´-ω-)っ† Amen
385デフォルトの名無しさん:2006/09/27(水) 19:53:16
訃報をここに書くなよ
こうなることくらい予測しる

386デフォルトの名無しさん:2006/09/27(水) 19:55:29
perl/lib の中で検索しただけでいかなるひとか垣間見えるw
彼の作った車輪とその精神は、彼の死後も脈々と受け継がれていくんだろうなあ。
387デフォルトの名無しさん:2006/09/27(水) 19:57:47
ちょ、Encodeはdan kogai(子飼 弾)よw

ライブドアねたの番組にゲストで呼ばれて
髭面の濃い顔と相反して甲高い声ですげーギャップのある人ね。
番組の進行役に意見もとめられたとき
予想として求められている言葉とぜんぜん違うことを
独特の世界観で語りだすからまわりと全く噛み合ってなくて
視聴者層には「何言ってんだこいつ?」として見られている。
388デフォルトの名無しさん:2006/09/27(水) 19:59:09
死んだとか生まれたとかは、Perlのコミュニティでやればいいだろ。
389デフォルトの名無しさん:2006/09/27(水) 20:03:27
そうだね。質問箱がパンクしちゃう
390デフォルトの名無しさん:2006/09/27(水) 20:03:53
>>387
えー、Encode.pm の中に
This project was originated by Nick Ing-Simmons and later maintained by Dan Kogai E
って書いてあるお?( ・з・)

面白そうな人だったんですね。(笑
391デフォルトの名無しさん:2006/09/27(水) 20:08:50
Nick Ing-Simmonsが作ってdan kogaiがメンテナンスしてるんだな
392デフォルトの名無しさん:2006/09/27(水) 20:53:14
つうか最初にここで伝えた、またはその近辺の奴。 正確に伝えんかい。
○○でご尽力なさった○○氏が〜 ってよ。
それが誰しもが知ってる丹波哲朗だっても同じだ。
なに片手間で適当に報じとんねん。一番失礼だっつうの。
393デフォルトの名無しさん:2006/09/27(水) 22:02:46
その人が偉業を残してようが残してまいが、お悔やみを申し上げます。
今日亡くなった他の人たちも含め、ご冥福をお祈りします。
394デフォルトの名無しさん:2006/09/28(木) 00:45:10
>>392
いや、その理論はおかしい。
395デフォルトの名無しさん:2006/09/28(木) 01:33:58
いや、そのレスはおかしい。
396デフォルトの名無しさん:2006/09/28(木) 01:35:02
>>394
詳しく...
397デフォルトの名無しさん:2006/09/28(木) 05:56:22
>>379
「善人ぶるために人の死を利用している」としか思えないよね。

「今この理由に乗っかる限り、正義の側に立ったまま堂々と他人を罵倒できる!
どんなに口汚く罵ってもすべては悪を懲らしめる行為になる! すげー! さっそく参加だ!」
という感じなんだろうね。
398デフォルトの名無しさん:2006/09/28(木) 07:55:30
自分が正義の側にいることはいまさら確かめるまでもないことだが
399392:2006/09/28(木) 09:37:37
>>394
どうおかしいのか説明してくれるかな。パソオタくん。
400デフォルトの名無しさん:2006/09/28(木) 10:41:35
死人に口なし。
401デフォルトの名無しさん:2006/09/28(木) 12:12:50
>394 死んだの?!
402デフォルトの名無しさん:2006/09/28(木) 12:22:07
>>394じゃないが、
「○○でご尽力なさった、って書け」ってことが引っかかるんかなぁ。
尽力した実績が無いとご冥福を祈れないのかよ?みたいなことを言いたいんじゃないのかな。
403デフォルトの名無しさん:2006/09/28(木) 12:57:23
>>402
冥福を祈れない ってどこに書いてるの?
404デフォルトの名無しさん:2006/09/28(木) 13:13:19
>>403
想像して言っただけだよ。気にするな。
405デフォルトの名無しさん:2006/09/28(木) 13:49:49
Perlについての質問箱というスレの趣旨と異なる口論・議論は
口論・議論板でやってくれ。
406デフォルトの名無しさん:2006/09/28(木) 18:00:52
「だれそれさんが死去されました」 っていうだけでそのひとに一番失礼ってのがわけわからん。
407デフォルトの名無しさん:2006/09/28(木) 18:07:01
Perlについての質問箱というスレの趣旨と異なる口論・議論は
口論・議論板でやってくれ。
408デフォルトの名無しさん:2006/09/28(木) 18:15:02
日本語読めない人、理解できない人はこのスレに来る前にやることがあるだろ
409デフォルトの名無しさん:2006/09/28(木) 18:26:16
James Hendrickさんが心臓発作で亡くなられたそうです
ナムナム(-人-)
410デフォルトの名無しさん:2006/09/28(木) 18:53:40
>>406
それ以前におまえの抜粋の仕方がわけわからんが。
411デフォルトの名無しさん:2006/09/28(木) 19:02:37
細田平八郎さんが心臓発作で亡くなられたそうです。
ナムナム(-人-)
412デフォルトの名無しさん:2006/09/28(木) 19:12:04
誰やねん
413デフォルトの名無しさん:2006/09/28(木) 19:14:10
盛りあがるスレを見て、Nick Ing-Simmons氏も
お喜びになっている事でしょう。
414デフォルトの名無しさん:2006/09/28(木) 19:19:12
三田うめさんが心臓発作で亡くなられたそうです
ナムナム(-人-)

415デフォルトの名無しさん:2006/09/28(木) 19:52:02
もう飽きた
416デフォルトの名無しさん:2006/09/28(木) 20:14:48
キラ様の裁きが再開された模様です
417デフォルトの名無しさん:2006/09/28(木) 20:26:54
Perlで『○○さん以外にも今日死んだ人かわいそう!! 』なんてセリフを言ってくれる
スクリプトあったらカッコイイのになあ
418デフォルトの名無しさん:2006/09/28(木) 21:01:16
>>355のことも忘れないでやってください・・・
419デフォルトの名無しさん:2006/09/28(木) 21:02:33
誰かが亡くなって可哀想なのは残された者たちだ。
420デフォルトの名無しさん:2006/09/28(木) 21:42:14
Perlもこの世から消滅して可哀想
421デフォルトの名無しさん:2006/09/28(木) 23:27:41
>>355
以下は調べた上での僕の理解です。参考になれば。

> $VERSION = '1.87';
# ExtUtils::MakeMaker に食わせるバージョン文字列

> $VERSION = eval $VERSION;
# $VERSION を数値化 (警告回避のため)

our を使っていないのは、これらのモジュールが後方互換性を必要としているからだと思います
422デフォルトの名無しさん:2006/09/28(木) 23:29:22
すいません、テキストファイルに
aaabbbccc
aaabbbccc
aaabbbccc
......
と適当なデータが入っているファイルから
3行ごとに(絶対に3の倍数にはなっています)
ahoaho0.txt
ahoaho1.txt
ahoaho2.txt
.....
というような連続したファイルを出力したいのですが
どのように書けばできますでしょうか・・・
今現在ファイル名が連続で作成できず参っています・・・
423デフォルトの名無しさん:2006/09/28(木) 23:55:33
>>422
my $base = 'ahoaho';
my $num = 0;
として、
$filename = "$base$num.txt"
したりとか$num++したりとか。
424デフォルトの名無しさん:2006/09/29(金) 08:05:25
>>422
「3行ごと」の意味を読み違えてるかも知れんけど

#!/usr/bin/perl -w
use strict;

my $in_file = './in.txt';
my $format = './ahoaho%d.txt';
my $lines = 3;

open my $in_fh, '<', $in_file or die $!;
my $out_file = '';
my $out_fh;
{
  local $_;
  while (<$in_fh>) {
    my $current = sprintf $format, ($. - 1) / $lines;
    $current eq $out_file
      or open $out_fh, '>', $out_file = $current or die $!;
    print $out_fh $_;
  }
}
__END__
425デフォルトの名無しさん:2006/09/29(金) 09:36:00
print 1つで、複数のデバイス(FILE, STDOUT等)へ同時出力することは可能でしょうか?
426デフォルトの名無しさん:2006/09/29(金) 10:17:20
>>425
そういうタイファイルハンドルを作ればできそうだな。やったことはないが。
427デフォルトの名無しさん:2006/09/29(金) 11:01:14
>425
IO::Teeが使えるかもしれない。
ttp://search.cpan.org/~kenshan/IO-Tee/
428デフォルトの名無しさん:2006/09/29(金) 14:44:01
またstrict厨か
ゴテゴテした完成品スクリプトで無駄に行数使うのはリクに答えるスレの方でやってくれよ
429デフォルトの名無しさん:2006/09/29(金) 15:19:47
また自治厨か。
430デフォルトの名無しさん:2006/09/29(金) 15:48:57
>>424
$_をlocalizeするときはlocal *_にしないと危険だそうだ(perlsub参照)

431デフォルトの名無しさん:2006/09/29(金) 17:00:32
Plaggerを使いたいんですが、perlが分からないせいで
どうにもならなくて困っています。perlの実力は、
Perlプログラミング講座 http://www.site-cooler.com/kwl/perl/
の内容なら大体知っている程度で、CPANだとかモジュールだとかは
よく分かっていない感じです。

Plaggerのソースを読んで自分でいろいろできるレベルに
なりたいのですが、どんな本(OR サイト)を読めば
いいでしょうか。やっぱりオライリー?
432デフォルトの名無しさん:2006/09/29(金) 17:07:43
>>431
Plaggerは別にperlが分からなくても使えるだろ。
433デフォルトの名無しさん:2006/09/29(金) 17:40:16
>>431
> Plaggerのソースを読んで自分でいろいろできるレベルに
> なりたいのですが、どんな本(OR サイト)を読めば
> いいでしょうか。やっぱりオライリー?

添付ドキュメント
434デフォルトの名無しさん:2006/09/29(金) 18:02:01
一応podを読み読み頑張ってはいるんですが、個別のプラグインの使い方は
分かってもPlaggerで何ができるのかよく分からなくて、ウェブ上の情報も
perl使える人向けに書かれているのが多かったんでやっぱりソース嫁って
ことなのかなとか思ったりしたんですが…
もうちょっとあさってみます。
435デフォルトの名無しさん:2006/09/29(金) 18:37:34
ん? Perlの添付ドキュメントって言ってるんだろ。
436デフォルトの名無しさん:2006/09/29(金) 18:57:05
そっちの方ですか。了解です、読んでみます。
437デフォルトの名無しさん:2006/09/29(金) 19:00:06
今日感動したこと。

DBIは楽だなー。
PostgreSQL にサクッと接続できてあっさり select できて感動した。
438デフォルトの名無しさん:2006/09/29(金) 22:38:01
>>437
すみません、今までどうやって接続してたんですか?
他言語?
439デフォルトの名無しさん:2006/09/30(土) 00:14:23
Pgとかじゃね?
440デフォルトの名無しさん:2006/09/30(土) 01:21:55
>>438
今まで Perl 使わずにCとかで Oracle とか昔の Informix とか使ってましたが、
ブランクが何年もあります。
441デフォルトの名無しさん:2006/09/30(土) 04:35:52
どこか、perlで書かれたソースを大量に読めるところないでしょうか。
最近勉強を始めて、お手本となるソースを探してます。
442デフォルトの名無しさん:2006/09/30(土) 04:42:55
>>441
/usr/lib/perl5 ディレクトリ以下。
443デフォルトの名無しさん:2006/09/30(土) 05:57:39
>>390
そっか、Encode.pmってNick Ing-Simmonsが作ったのか。勉強になった。
444デフォルトの名無しさん:2006/09/30(土) 09:06:26
>>441
CPAN
445デフォルトの名無しさん:2006/09/30(土) 10:53:41
koders.com
446デフォルトの名無しさん:2006/09/30(土) 12:53:19
>>441
> どこか、perlで書かれたソースを大量に読めるところないでしょうか。
> 最近勉強を始めて、お手本となるソースを探してます。

Perlの配布パッケージ
447デフォルトの名無しさん:2006/09/30(土) 20:50:05
Catalystとか。最近のCPANモジュール事情がわかっていいかも。
448425:2006/09/30(土) 20:59:46
>>426-427
スゴス! IO::Teeでできました! 誠にありがとうございました。
449デフォルトの名無しさん:2006/09/30(土) 22:39:13
>>448
> スゴス! IO::Teeでできました! 誠にありがとうございました。

礼はIO::Teeの作者に。
450425:2006/10/01(日) 01:31:49
IO::Teeの作者さんありがとうございました。
451デフォルトの名無しさん:2006/10/01(日) 02:08:53
>>440
そらCで叩くのに比べればめちゃくちゃ楽だわな。
気が向いたらDBIx::Classとかに手を出すのもいいかもね。
452デフォルトの名無しさん:2006/10/01(日) 18:44:29
perlでCGIの勉強をしているのですが、
やっと一つ目のCGIができたのでローカル鯖立ててCGI試そうとおもったんですが
何回インストールしなおしてもエラーが出て困ってます。
どなたかCGI試すのに最適な方法知らないでしょうか

スレ違いだと思いますが、ここで聞いたほうがいいかと思ったので。
453デフォルトの名無しさん:2006/10/01(日) 18:48:49
他のスレ行ったとしも

> 何回インストールしなおしてもエラーが出て困ってます

とだけ書いてるようじゃ相手にされないだろうから出直してこい
454デフォルトの名無しさん:2006/10/01(日) 19:38:30
>>452
PHP板に行った方がいいと思うよ。
455デフォルトの名無しさん:2006/10/01(日) 19:40:33
>>452
KENTでよければ

自宅マシンWWWサーバ化計画
http://www.kent-web.com/www/
456デフォルトの名無しさん:2006/10/01(日) 19:52:12

>perlでCGIの勉強をしているのですが

おしい。
「CGIでPerlの勉強をしているのですが」
って書けばせめて二行目あたりまでは読んでもらえたのに。

457デフォルトの名無しさん:2006/10/01(日) 19:55:46
>>452
1) perlやCGIがどうこうよりまずは、>>1の書き込みをよく読み、理解しろ。
2) おまえは「車が壊れました」だけでどこが壊れたのか分かるのか?
  エスパーじゃない限り他人はおまえが伝えなければ
  何を使って、どういう手順で行い、結果がどうなり、どんなエラーメッセージが出た
  かなんてわからないんだぞ
458デフォルトの名無しさん:2006/10/01(日) 20:01:15
あれ、この板にはエスパーレスのスレないの?
459デフォルトの名無しさん:2006/10/01(日) 20:13:24
                             |
                             |
      ∩___∩             |
      | ノ  _,  ,_ ヽ        ((  | プラプラ
     /  ●   ● |         (=)
     |    ( _●_)  ミ _ (⌒)   J  ))
    彡、   |∪|  ノ
⊂⌒ヽ /    ヽノ  ヽ /⌒つ
  \ ヽ  /         ヽ /
   \_,,ノ      |、_ノ
460デフォルトの名無しさん:2006/10/01(日) 20:25:22
すいませんエラーの原因を聞いてるんじゃなくて
他の方法はないかと聞いたんですが・・・
461デフォルトの名無しさん:2006/10/01(日) 20:26:53
サーバの問題なのかperlコードの問題なのかわからんね。
動くかどうかわからんコードなら、winならコマンドプロンプトから 「perl hogehoge.cgi」 とかで試してみれば?
462デフォルトの名無しさん:2006/10/01(日) 20:39:43
>スレ違いだと思いますが、ここで聞いたほうがいいかと思ったので。
せめて「ここで聞いたほうがいいかと思った」理由を書けば良いのに…
463デフォルトの名無しさん:2006/10/01(日) 20:43:15
>>460
>他の方法はないかと聞いたんですが・・・
ってことは、「ローカルで鯖立てる以外にCGIを試す方法」を聞いてるわけ?
464デフォルトの名無しさん:2006/10/01(日) 20:48:21
>>1
>CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
>CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
>(WEBプログラミング板 http://pc8.2ch.net/php/ )

1 を読めばここで質問するのが全く妥当ではないことだけは判るはず。
465デフォルトの名無しさん:2006/10/01(日) 21:24:40
C:\> perl hogehoge.cgi > hogehoge.html

ってして、hogehoge.html をブラウザで開くとか。
466デフォルトの名無しさん:2006/10/01(日) 21:36:07
>>460
他の方法でCGIを試す方法はないかという話であれば
ますますperlスレと関係ないよね
467デフォルトの名無しさん:2006/10/02(月) 14:31:38
まともに日本語を解釈出来ない馬鹿が露わになってワロタ
468デフォルトの名無しさん:2006/10/02(月) 15:07:39
まともに漢字を使えないのが顕になっててワラタ
469デフォルトの名無しさん:2006/10/02(月) 16:08:54
異常な質問者は放置しろよ。
470デフォルトの名無しさん:2006/10/02(月) 17:10:05
回答者が異常なんだからしょうがないだろ
471デフォルトの名無しさん:2006/10/02(月) 17:23:55
正規表現に入れる文字列中の / などを演算子とされないよう
適切にクォートしてくれる関数はありますか?
472デフォルトの名無しさん:2006/10/02(月) 17:29:56
メタ文字は演算子だったのかー
473デフォルトの名無しさん:2006/10/02(月) 17:43:07
>>471
quotemeta
もしくは/\Q$unko\E/
474471:2006/10/02(月) 19:55:31
>>473
ありがとうございます。うまくいきました!
475デフォルトの名無しさん:2006/10/02(月) 21:06:38
>>421
> >>355
> 以下は調べた上での僕の理解です。参考になれば。
> > $VERSION = '1.87';
> # ExtUtils::MakeMaker に食わせるバージョン文字列
> > $VERSION = eval $VERSION;
> # $VERSION を数値化 (警告回避のため)
> our を使っていないのは、これらのモジュールが後方互換性を必要としているからだと思います
回答ありがとうございます。

・警告なんて出ます?
とか、
・最初から$VERSION = 1.87;じゃだめなの?
とか疑問が湧いてきますです。。。
476421:2006/10/02(月) 22:20:29
>>475
perldoc perlmodstyle にちょろちょろと関連情報が。

> ・最初から$VERSION = 1.87;じゃだめなの?

$VERSION = 5.8.8; # bareword になる。なので、
$VERSION = '5.9.3'; # とする必要がある。従ってどちらに転んでも、

> ・警告なんて出ます?

出ちゃうんです。
477デフォルトの名無しさん:2006/10/02(月) 23:01:27
>>476
1.87は浮動小数点数(つまり"1.87"の近似値)だから、じゃないのか。
478デフォルトの名無しさん:2006/10/02(月) 23:13:30
しかし eval しちゃ同じじゃね
479デフォルトの名無しさん:2006/10/03(火) 00:50:00
>>475
なんで疑問に思ったなら自分で確認しないの?
他人に何でもかんでもやってもらわないとダメなの?
480デフォルトの名無しさん:2006/10/03(火) 09:27:20
最初の行は、バージョンを返す式を書くところ。今回はもろにばっちりな
数字で書いてあるけど、cvsが埋め込むバージョン文字列から適当に
拾い出すプログラムが書いてあるのとかある。

で次の行のevalでそれが実行される。こうしておけばなんかうまくいかな
かったときもバージョンが設定されないぐらいで一応動くので便利。

よく見かけるのでそういうテンプレなんじゃないか?
481デフォルトの名無しさん:2006/10/03(火) 19:35:43
perlで文字列の処理などしてみたいのですが
サイトでのコピペなど適等につくってttest.plを名前を付けて保存しました。
ttest.plをクリックすると一瞬だけDOSウィンドウが出て消えてしまいます。
何が出力されたのかよくわからないのですが、もっとじっくり出力内容を
プレビューするにはどうしたらよいのでしょうか?

ActivePerlとhtttpは入れてローカルで掲示板などは動かしています。
ttest.pl実行時はhtttpは起動してませんでした。
個人的にはperlで実行したいのですが
cgiにしてローカルサーバーから見たほうがいいのでしょうか
よろしくおねがいします。

これはttest.plのソースです。
#!/usr/bin/perl
$name = "1";
print "$name test\n";
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<P>htmlのタグあああああ</P>\n";
print "</HTML>\n";
exit(0);
482デフォルトの名無しさん:2006/10/03(火) 19:40:09
`pause`;
exit(0);
483デフォルトの名無しさん:2006/10/03(火) 21:09:39
sleep 100;
484デフォルトの名無しさん:2006/10/03(火) 21:34:48
表示された瞬間にprintscreen
485デフォルトの名無しさん:2006/10/03(火) 21:44:14
ザ・ワールド
486デフォルトの名無しさん:2006/10/03(火) 22:24:20
処理結果を適当なテキストファイルにでも出力したら?
487デフォルトの名無しさん:2006/10/03(火) 22:30:39
コンソールから実行しろ、でいいじゃん。嫌がらせするくらいなら何も書かないほうがマシ。
488デフォルトの名無しさん:2006/10/03(火) 22:43:27
unixから実行しろ
489デフォルトの名無しさん:2006/10/03(火) 23:20:43
C:\>perl ttest.pl
490デフォルトの名無しさん:2006/10/03(火) 23:29:38
ttest.bat を作る。
中身は↓

perl ttest.pl
pause
491デフォルトの名無しさん:2006/10/04(水) 00:08:51
私はこんなのを使ってエディタから直接呼べるようにしてる。
---perl.bat---
@echo off
"C:\Perl\bin\perl" %1
echo; & echo ---perl end---
pause>nul
492デフォルトの名無しさん:2006/10/04(水) 07:21:49
おはようございます
>>482 ウィンドウがすぐ消えず表示できました
>>483 こっちは482みたいにenter押しても消えないしばつボタンを押すと警告が出ました。

これら482や483の機能を望んでいました。

>>484 何回か試しましたが難しかったです上2つで良かったです
>>485 Exactly(そのとおりでございます)
>>486 いずれやってみたいことですがよくわからないので当分は`pause`;とsleep 100;を併用してみようと思います。
>>487 コンソールとかわからないです。とりあえず動いてるところがみたかったです
>>488 Windows上からやりたいです。
>>489 DOSプロンプトでC:\>WINDOWSからC:\>perlにするやり方がよくわからなくて質問してしまいました
>>490 やってみました。同名で作り続けるなら便利で、複数起動したい時batファイルつかえそう。知識的に役に立ちました。
>>491 batファイルでしょうか。perlエディタから同じ要領でデバックが見れたらとっても助かりますね。

初心者すぎて相手されないと思ってたらたくさんレスがついて質問回答以外にもいろいろ勉強になりました。
レスくれた方々、ありがとうございました
493デフォルトの名無しさん:2006/10/04(水) 09:32:34
Perlの最強IDE教えて
494デフォルトの名無しさん:2006/10/04(水) 10:54:34
** コマンドプロンプトを起動する
スタートメニューのプログラム-アクセサリ-コマンドプロンプト。
よく使うならアイコンをDnDしてクイック起動ツールバーにでもコピーしとく。

** カレントワーキングディレクトリを変更する
「cd /d 」と打って、次にスクリプトのあるフォルダをコマンドプロンプトの窓にDnDする。
フォルダのパスが行の続きに書かれるから、そこでEnterを押す。

** スクリプトを起動する
「perl なんとか.pl」と打って、スクリプトを起動する。
出力が多すぎて読めないときはパイプやリダイレクトを活用する。
詳しくは「コマンドプロンプト」でぐぐれ。
495デフォルトの名無しさん:2006/10/04(水) 14:04:11
>>493
vi
496デフォルトの名無しさん:2006/10/04(水) 14:23:50
497デフォルトの名無しさん:2006/10/04(水) 15:07:55
>>496
スクショ見る限り、よくできてまんなー
498デフォルトの名無しさん:2006/10/04(水) 20:01:29
モジュールの命名規則を教えてください。
HTML::Selector::XPathとか、
ありえないくらい頭悪い名前なんですが、
Perlではこういうのが普通なんですか?
499デフォルトの名無しさん:2006/10/04(水) 20:56:09
>>498
あれってやっぱり変なの?
なんでこの機能にこの名前? と困惑してたんだが。

ほかに、WWWとWebServiceとかもごっちゃだね。
500デフォルトの名無しさん:2006/10/04(水) 21:06:17
モジュールの命名って作者が自由にするみたいだから、規則なんてあるのかな?
Acme にジョークモジュールとか、そういう慣習はあるみたいだけど。
501デフォルトの名無しさん:2006/10/04(水) 21:12:51
規則有るよ。
Perl Best Practice参照。
502デフォルトの名無しさん:2006/10/04(水) 21:35:16
命名規則は確かに無茶苦茶だと思う。
503デフォルトの名無しさん:2006/10/04(水) 22:11:23
>>499
> ほかに、WWWとWebServiceとかもごっちゃだね。
WebServiceはAPI(WebService)が用意されているのを利用している感じ。
WWWはHTMLをゴリゴリparseしている感じ。
504デフォルトの名無しさん:2006/10/04(水) 22:20:19
>>499は無知ゆえの無理解だな。文句言う前に勉強しろ。
505デフォルトの名無しさん:2006/10/04(水) 22:27:49
>>476
> perldoc perlmodstyle にちょろちょろと関連情報が。
お〜、ありがとうございます!
> > ・警告なんて出ます?
> 出ちゃうんです。
それが出ないんです。
% cat test.pl
use strict;
use warnings;
our $VERSION = 5.8.8;
print $VERSION;
% perl -cw test.pl
test.pl syntax OK
ただし、$VERSIONはNVではなくてPVMG(v-string)になりました。
% perl test.pl | dump
00000000 0508 08 ...
------------------------------
our $VERSION = 5.8.8;
としたときと、
our $VERSION = '5.8.8';
$VERSION = eval $VERSION;
としたときの$VERSIONの内部構造を比較すると、”全く同じ”でした。
------------------------------
やっぱり
> ・最初から$VERSION = 1.87;じゃだめなの?
という疑問は消えません。。。

>>477, >>480
そうかもしれない。

などとと思っていたのですが、perldoc perlmodstyleを読んでいて本当の理由がわかりました。
NVとPVの両方を設定させるのがミソだったようです。続く↓
506デフォルトの名無しさん:2006/10/04(水) 22:32:40
「VERSION XX 以上」などという指定をする時
507デフォルトの名無しさん:2006/10/04(水) 22:35:48
本当の理由は、警告抑止でもなく、浮動小数点を避けるためでもなく、プログラムがどうこうでもありませんでした。
αバージョンの扱いに問題があるからのようです。
Perlでは元々言語仕様として、数値に_(アンダースコア)を入れることが出来ます。
要するに、Numeric Versionsでαバージョンを示す場合、
1.12_01
のように書きますが、数値として書いてしまうと
1.1201
と”全く同じ意味”になります。
ですので、1.012.001のつもりで1.12_01と書いても、1.120と解釈されてしまい、
αバージョンの情報が欠けてしまいます。末尾にその様子を記載しておきます。
すっきりしました。ありがとうございました。

our $VERSION = 1.12_01;
print Dump($VERSION);
# SV = NV(0x68b3a0) at 0x67ee50
# REFCNT = 1
# FLAGS = (NOK,pNOK)
# NV = 1.1201

our $VERSION = '1.12_01';
$VERSION = eval $VERSION;
print Dump($VERSION);

# SV = PVNV(0x664910) at 0x67ee50
# REFCNT = 1
# FLAGS = (NOK,pNOK)
# IV = 0
# NV = 1.1201
# PV = 0x675b00 "1.12_01"\0
# CUR = 7
# LEN = 8
508デフォルトの名無しさん:2006/10/04(水) 22:38:00
>>502
> 命名規則は確かに無茶苦茶だと思う。
歴史的理由ってやつでむちゃくちゃな部分と、
規則とか知ったこっちゃないってんで自分勝手にやっててむちゃくちゃな部分と、
規則を作って、それに沿ってやろうとしている一部の人たち、
って感じ。
509421:2006/10/04(水) 22:54:19
>>505
> お〜、ありがとうございます!

どういたしまして。

> ただし、$VERSIONはNVではなくてPVMG(v-string)になりました。

v-string なら数値扱いすると警告出るじゃないですか。w

>>507
それは CPAN.pm にそのモジュールなりを最新版として扱わせないようにする記法ざんすね。
510デフォルトの名無しさん:2006/10/04(水) 23:23:27
>>509
> > ただし、$VERSIONはNVではなくてPVMG(v-string)になりました。
> v-string なら数値扱いすると警告出るじゃないですか。w
アッー!↓こういうことですね!
% perl -Mwarnings -e '$VERSION=5.8.8; 5.8 < $VERSION'
Useless use of numeric lt (<) in void context at -e line 1.
Argument "^E^H^H" isn't numeric in numeric lt (<) at -e line 1.

すみません。うっかり比較のことを忘れてました(_ _(--;(_ _(--; ペコペコ
511デフォルトの名無しさん:2006/10/05(木) 00:33:46
$VERSIONはもう全部version.pmのqv()でいいよ
512デフォルトの名無しさん:2006/10/07(土) 10:57:58
同じネットワークの他のPCのMACアドレスを
IPアドレスから調べるのにはどうしたら良いでしょうか。
nbnameだと取得出来る確率が低く今は対象IPにpingして
arpテーブルにキャッシュされた値を取得するという力業でやってます。
外部コマンドを使わずに実現できればと思います。
513デフォルトの名無しさん:2006/10/07(土) 12:09:20
>>512
目的は知らないけど、そのやり方でまずい理由も見当たらない。
どうして外部コマンドを使いたくないのかもわからない。
しかしその用途なら Net::ARP とかその辺でどうにかならんか?
514デフォルトの名無しさん:2006/10/07(土) 16:52:07
>>512
レスありがとうございます。
forkのコストとあまり美しくないと感じたからです。

で、仰るとおりNet::ARPで解決しました。
Net::ARP::arp_lookup(br0 => $ip, $mac_address);
書き込む前にもNet::ARPは試していたのですがpodに書いてある例
Net::ARP::arp_lookup($dev,"192.168.1.1",$mac);
の$devって何だよ・・・ってナチュラルスルーしていましたーー)
515デフォルトの名無しさん:2006/10/08(日) 12:02:24
あるフォルダ配下のファイル名を大文字→小文字にしたくてこうしたのですが
エラーは出ないのですが、期待する動作をしません(変化なし)(^^;
教えてください、オナガイシマス
map { $x = $_ ; $x = lc $x ; rename($_, $x);} glob;
516デフォルトの名無しさん:2006/10/08(日) 12:04:09
>>515
Windowsではファイルの大文字小文字は区別されない。
敢えてやりたいならテンポラリファイルを使うしかないとオモ。
517デフォルトの名無しさん:2006/10/08(日) 12:10:26
一旦tempとかかぶらなくて適当な名前にリネームしてから、小文字でリネームしなおすとかどう?
518デフォルトの名無しさん:2006/10/08(日) 12:30:07
>>515
>>516
どうもです
具体的なコード教えて頂けないでしょうか
_(--)_
519デフォルトの名無しさん:2006/10/08(日) 13:17:46
>>515
windowsはよく知らないがrenameの戻り値みてないんだからエラーになりようがないんじゃないか。
520デフォルトの名無しさん:2006/10/08(日) 14:32:00
map {$x = lc $_; rename($_, $x);} glob("*");
これでうまく行ったぞ?
これでうまく行かないならファイルの指定の仕方が間違ってる可能性も

あと俺が使ってるファイラだと更新ボタンがうまく働いてなくてちょっとはまったorz
リネームされたかどうかの確認はdirコマンドとか使うのをお勧めする
521デフォルトの名無しさん:2006/10/08(日) 15:12:49
初心者です
参考書とか参考サイトを見ると
「サブルーチンは指定した返り値を返す」
「指定を省略した場合は最後に定義した値が返り値」とのことです。

では、途中で代入した変数は無かったことになるんでしょうか?
以下のスクリプトの場合、$dy[($dyg+3)] = $dicenumber;だけが
返り値になって、$dfaceや$shuは無視されるんでしょうか?


sub dicego {
$dquan = $dn[($dng+1)];
$dface = $dn[($dng+2)];
$syu = $dn[($dng+3)];
&dice;
$dy[($dyg+3)] = $dicenumber;
}

522デフォルトの名無しさん:2006/10/08(日) 15:28:57
>>521
君はまずサブルーチンの値と変数の違いを理解するところからはじめたほうがいい。
523デフォルトの名無しさん:2006/10/08(日) 15:32:53
524デフォルトの名無しさん:2006/10/08(日) 15:38:57
>>520
サンクス
っていうか、漏れもそれ試してたんだけど
ファイル名が変わっていないかと思ってた、出来てたんだアハハ

525デフォルトの名無しさん:2006/10/08(日) 15:46:37
サブルーチンの値って何だ??
526デフォルトの名無しさん:2006/10/08(日) 16:10:41
perlは省略したがるからな
527デフォルトの名無しさん:2006/10/08(日) 16:14:31
>>526の発言が省略されすぎて意味不明です。
528デフォルトの名無しさん:2006/10/08(日) 18:26:12
特定の単語が一行の中に含まれているか否か判定する方法があれば
教えて頂けないでしょうか。
@target_name = {"A HREF", "a href", "IMAGE", "image"};
行中に単語の有無を判別したいのですが・・・・
宜しくオナガイシマス。
529デフォルトの名無しさん:2006/10/08(日) 19:00:57
>>528
> @target_name = {"A HREF", "a href", "IMAGE", "image"};

@target_name = ("A HREF", "a href", "IMAGE", "image"); # 上の行はこうだと仮定して

foreach my $word (@target_name) {
  $line =~ /\Q$word\E/;
}
530デフォルトの名無しさん:2006/10/08(日) 19:03:04
>>529
何も生み出しませんね。
531529:2006/10/08(日) 19:04:26
>>530
はい。要件になかったもので。
532デフォルトの名無しさん:2006/10/08(日) 19:13:49
Jpegファイルの破損を検出できるモジュールって何かありますか?
533デフォルトの名無しさん:2006/10/08(日) 19:17:38
>>532
っ search.cpan.org
534デフォルトの名無しさん:2006/10/08(日) 20:14:33
どうも
>>152です
>>529さんサンクスです
お蔭様でやりたい事が少し進みました
参考に↓の様に書いたのですが問題があります
やりたいことは、ファイルを開いて@target_nameの単語が出たら同じファイルの
その行を全て小文字に変換したいのですが、書込み処理が巧くいきません
なにとぞ書込み方法を教えてください。

それからもう一つ、↓のファイルはfoo.htmを開いていますが
これを、あるフォルダ配下の全てのファイルに同じ処理をしたいのですが
どうしたら出来ますでしょうか?
欲を言えばそのフォルダ、配下のフォルダ配下のファイルにも再帰的に全て
同じ処理が出来れば最高なのですが。
@target_name = ("A HREF", "a href", "IMAGE", "image");
open ( FH , " +< foo.htm" );
while(<FH>)
{
foreach my $word (@target_name)
{
$find = index ($_, $word);
if($find > -1)
{
print FH lc $_; #ここが巧くいかない(^^;
}
}
}
close (FH) ;
535デフォルトの名無しさん:2006/10/08(日) 20:25:23
>>534
tell seek
536528:2006/10/08(日) 21:08:25
>>535さん
探したんだけどね
分かんないお(^^;
537デフォルトの名無しさん:2006/10/08(日) 22:47:38
opendir D, $dir and closedir D or mkdir $dir or croak "can't makedir $dir: $!";

昔自分で書いたコード。いくらなんでもこれはあんまりだと思った。
538デフォルトの名無しさん:2006/10/09(月) 01:41:25
>>534
>その行を全て小文字に変換したいのですが
それだと、アルト属性やアドレスとかファイル名が含まれていた場合ムチャクチャになっちゃわない?
取りあえず、"A HREF" と "IMAGE" が含まれていたら、それだけを小文字に変換してみるテスト。
後は、引数から個別にファイルに書き出す部分を追加してくれ。
foreach (<>) {
    s/A¥ HREF/a¥ hrer/ig;
    s/IMAGE/image/ig;
    print;
}
539デフォルトの名無しさん:2006/10/09(月) 01:54:09
>>538
>それだと、アルト属性や

オルト
540デフォルトの名無しさん:2006/10/09(月) 02:25:45
そしてこの論争は、最終的にカタカナで正確な発音を表記するのは無理だというオチに
541デフォルトの名無しさん:2006/10/09(月) 02:35:36
>>538
>それだと、アルト属性や

オルタ

542538:2006/10/09(月) 02:43:46
どれでもいいよ!不毛な論争はしたくないしw
でも、間違いを指摘してるって事は
アルトでも意味が通じてるって事で
よかですね?
543デフォルトの名無しさん:2006/10/09(月) 02:48:26
>>542
アホか。
544デフォルトの名無しさん:2006/10/09(月) 02:55:30
>>542
一生そう思ってろ
545デフォルトの名無しさん:2006/10/09(月) 03:14:34
altと書けよ
546デフォルトの名無しさん:2006/10/09(月) 03:23:47
このスレには低俗な釣り師が常駐してるってことだけ理解した。
547デフォルトの名無しさん:2006/10/09(月) 04:00:00
>>538
アルト属性がなんたらかんたらは置いといてw
その仕様だったら、もうワンライナーでいいんじゃね?
perl -p -i.bak -e "s/A¥ HREF/a¥ href/ig; s/IMAGE/image/ig" *.html

>>534の希望に叶うかどうか知らんが。
548デフォルトの名無しさん:2006/10/09(月) 05:10:05
( ゚д゚)

(つд⊂)ゴシゴシ

(;゚д゚)

(つд⊂)ゴシゴシ
  _, ._
(;゚ Д゚) アルト…?!
549デフォルトの名無しさん:2006/10/09(月) 07:14:04
おっ、なんだか安い釣り師が来てたようだな。
たしかにアルト属性プッ だがな。
どう見ても>>542は、擬似餌(>>538の騙り)だろ。
藻前ら、堪え性ないな。

>>547
それで十分だと思われ。
デレクトリィを再帰的に処理する必要があるか
疑問だ。場合によれば別のコマンドかませてもいいし。
よく判らんのが、アルト君の指摘した
>その行を全て小文字に変換したいのですが
だけだな。ほんとに全部小文字にしていいの?
550528:2006/10/09(月) 07:41:22
>>538>>547サンクスです
>>それだと、アルト属性やアドレスとかファイル名が含まれていた場合ムチャクチャになっちゃわない?
。゜゜(´□`。)°゜。ワーン!! 説明不足でした勘違いされてしまったお

むしろ属性やアドレス、ファイル名を小文字に変換することが目的なのです。


<p><img border="0" src="image/AM_A01-1.GIF"></p>

<p><img border="0" src="image/am_a01-1.gif"></p>

<a href="15F_A_E1.HTM#01">問題へ</A>

<a href="15f_a_e1.htm#01">問題へ</A>
こんな風に変換したいのですが・・・・・・


実はとある出版社から販売されている受験参考書の付録のCDに
年度毎の過去問題集及び解答がhtm形式で納められています、そのファイルの内容
ファイル名が出版社の意図することかどうかは分からないのですが?
htmファイルの中では、属性やアドレス、ファイル名を大文字小文字混在で記載して
実際のファイル名は大文字で記述していますPCからそのCDを開くことは全然問題ないのですが、
何処にいても携帯で見えるように、自鯖に転送したのですが上記の問題で
リンクが巧く取れて見えません、
そこでファイル名は全て小文字に変換して
ファイル内でA HREF", "a href", "IMAGE", "image"が含まれる行があったら
その行を全て小文字に変換してしまい、するとおのずと
オルト属性やアドレス、ファイル名も小文字に変換できます、それが目的なのです、
しかもそのファイル数が数百個もあります・・・・・・
551デフォルトの名無しさん:2006/10/09(月) 07:49:27
>>550
目的がそれなら、HTML書き換えるよりmod_rewriteでto_lower使った方が楽かも。
自鯖だし。
552528:2006/10/09(月) 08:04:13
>>551さん
サンクスです
>>mod_rewriteでto_lower使った方が楽かも。
そうなりますとapacheのことになりスレ違いになので控えさせていただきたく思います
perlの威力で解決できないものでしょうか?
宜しくお願いいたします。
553デフォルトの名無しさん:2006/10/09(月) 08:37:32
じゃあ、
foreach (<>) {
    $hoge = $_;
    if ( grep( /A¥ HREF|IMAGE/i, $hoge ) ) {
        $hoge =~ s/([A-Z])/¥l$1/ig;
    }
    print $hoge;
}

これを、てけとーなスクリプトファイルして
find でれくとりぃ -iname *.html -print | てけとーなスクリプトファイル
すりゃいいじゃね?
試してないから保証無し。
554デフォルトの名無しさん:2006/10/09(月) 08:42:11
てけとーなスクリプトファイルの先頭に
#!/usr/bin/perl -i.bak
としていて。
555デフォルトの名無しさん:2006/10/09(月) 08:46:59
しかしファイルはSJISだったので大変なことに... とかならなければいいがな
556デフォルトの名無しさん:2006/10/09(月) 09:22:04
HTMLをParseして分解して必要なエレメントを書き換えてHTMLに再構成したら?
557デフォルトの名無しさん:2006/10/09(月) 09:24:35
HTML::Filterってのが
558528:2006/10/09(月) 09:28:18
>>553サンクスです
とりあえず
perl hoge.pl -iname *.html -print |
これだとコマンドの構文が誤っていますとなったので
perl hoge.pl -iname foo.html -print
としたら
コンソール画面に出力されますが(巧く変換できてるっぽい?)、ファイルに書込みできてないのですが・・・・・
というかfoo.htmlの中身は空にナリマスタ
559デフォルトの名無しさん:2006/10/09(月) 10:02:17
ごめん動作確認してないから(^^;
#!/usr/bin/perl -pi.bak
if ( grep( /A¥ HREF|IMAGE/i, $_ ) ) {
$_ =~ s/([A-Z])/¥l$1/ig;
}
これを適当なスクリプト名で保存

find ~/html -iname *.html -print | xargs 適当なスクリプト名

~/html <ーこれは、処理したいフォルダ名を指定
この場合ユーザーホーム直下のhtmlデレクトリィってことね。
適当なスクリプト名は、実行権限を与える事。
560デフォルトの名無しさん:2006/10/09(月) 10:38:59
find ~/html -iname *.html -print | xargs 適当なスクリプト名
上記の *.html -> "*.html" クォートした方がよさげだね
561デフォルトの名無しさん:2006/10/09(月) 10:44:13
次スレ建てました。


[アルト]Perlについての質問箱 28箱目[Alt]
http://pc8.2ch.net/test/read.cgi/tech/1157874614

562デフォルトの名無しさん:2006/10/09(月) 10:56:09
>>555
>しかしファイルはSJISだったので大変なことに... とかならなければいいがな

あるあるー
563デフォルトの名無しさん:2006/10/09(月) 11:12:32
答えるレベルにない奴が答えてる様だな。

仕様後出しでやる気なくなった。
564デフォルトの名無しさん:2006/10/09(月) 11:18:53
>>563
お前は答えてないだろw
565デフォルトの名無しさん:2006/10/09(月) 11:21:31
>>550
>年度毎の過去問題集及び解答が
sjisの確率高いね。wktk

566デフォルトの名無しさん:2006/10/09(月) 11:23:02
iconvもnkfもあるでしょうて。
567デフォルトの名無しさん:2006/10/09(月) 11:26:08
iconvの使い方がわかりません
教えてください。

>>567市ね
568デフォルトの名無しさん:2006/10/09(月) 11:27:29
>>567
自分を大切にしろ。
569ヽ(´ー`)ノ ◆.ogCuANUcE :2006/10/09(月) 12:03:21
print -nep '$_ = lc $_ if /a href|image/i; $_' HTMLFILES...

もしくは

use strict;
use warnings;

use HTML::Parser;

sub start_h
{
my ($tagname, $attr) = @_;

$_ = lc $_ for values(%$attr);

print "<$tagname";
while (my ($k, $v) = each(%$attr)) { print " $k=\"$v\"" }
print ">";
}

my $p = HTML::Parser->new(handlers => {default => [sub {print $_[0]}, 'text'],
start => [\&start_h, 'tagname, attr']});

$p->parse_file($_) for @HTMLFILES;
570528:2006/10/09(月) 12:25:24
>>569
二つも書いてくれてありがd

'image'は、内部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません

Global symbol "@HTMLFILES" requires explicit package name at foo.pl line 20
Excution of foo.pl aborted due to complation erroes.
両方だめデスタ

ファイルハンドルを読書き両方出来るように設定して↓の様にしてみたが
元ファイル×2倍になってしまう(^^;
後半のファイルは大文字小文字の変換は巧く行っているのだが、
ファイルが2倍っていうのはいかがなものか・・・・・・・・

open (FH, '+<foo.html')or die $!;
foreach (<FH>)
{
if ( grep( /A\ HREF|IMAGE/i, $_ ) )
{
$_ =~ s/([A-Z])/\l$1/ig;
}
print FH $_;
}
close FH;
571デフォルトの名無しさん:2006/10/09(月) 12:37:45
>>570
…。
572デフォルトの名無しさん:2006/10/09(月) 12:45:52
>>567
氏ぬの?
573528:2006/10/09(月) 13:44:07
皆さん色々ありがd
遂に変換、書込みまでデキマスタ
ちょっと照れくさいけどコードを書きます
ところで、これを再帰的(再帰的でなくても同じ階層のフォルダ内)だけでも
まとめて変換するにはどうしたらよいでしょうか?
open (FH, '<aa.htm')or die $!;
@foo = ();
#my @hoge = <FH>;
while(<FH>)
{
  if ( grep( /A\ HREF|IMAGE/i, $_ ) )
  {
    $_ =~ s/([A-Z])/\l$1/ig;
  }
  push @foo, "$_";
}
close FH;

open (OUT, '>aa.htm')or die $!;
print OUT @foo;
close OUT;
574デフォルトの名無しさん:2006/10/09(月) 13:45:50
#! /bin/sh

for i in `find . -name '*'`;do
hoge.pl $i
fone
575デフォルトの名無しさん:2006/10/09(月) 13:58:55
perlでやろうぜ・・・
map{`perl hoge.pl "$_"` if(-f $_);} glob("*");

あれ?別ファイルにする意味なくね?って思ったけどどうでもいいや
576デフォルトの名無しさん:2006/10/09(月) 14:07:39
>>573のスクリプトの中で find すればいいですやん。
なんか問題あるの?
577デフォルトの名無しさん:2006/10/09(月) 14:09:52
シェルスクリプトとも連携できるポータビリティの高いスクリプトにした方が便利だと思っただけ。
578528:2006/10/09(月) 14:12:00
>>574さん
サンクスですそれってシェルスクリプトってやつですか、外していたらごめんなさい
使い方がよく分からないっす(^^;

>>575さん
どうもです、mapで同じファイルの中で書こうとしてたら、おぞましい
コードになりかけてました(^^;
頭がよくないので二つに分けたほうが、分かりやすいです
ところで
map{`perl hoge.pl "$_"` if(-f $_);} glob("*");
この場合変換したいファイル名は*で渡しているんですよね?
だとしたら>>573のコードの
open (FH, '<aa.htm')or die $!;
open (OUT, '>aa.htm')or die $!;
の部分を書直さないといけないですよね?

>>576さん
どうもです、findの使い方余りよく分からないんです、すみません。
579デフォルトの名無しさん:2006/10/09(月) 14:39:08
#!/usr/bin/perl
$mydir = $ARGV[0];#適当に
open(FIND ,"find $mydir -iname ¥"*.html¥" -print|");# || 氏ね;
@html = <FIND>;
chop(@html);
close FIND;

foreach (@html) {
$infile = $_;

open (FH, "<$infile")or die $!;
@foo = ();
while(<FH>) {
if ( grep( /A¥ HREF|IMAGE/i, $_ ) ) {
$_ =~ s/([A-Z])/¥l$1/ig;
}
push @foo, "$_";
}
close FH;

open (OUT, ">$infile")or die $!;#書出すのにinfile
print OUT @foo;
close OUT;
}

exit;
#hoge.pl ~/myhtml
580デフォルトの名無しさん:2006/10/09(月) 14:53:12
File::Find
581528:2006/10/09(月) 15:26:19
>>579さん
サンクスです
$mydir = $ARGV[0];#適当に
$mydirはデレクトリの階層の深さを設定する変数なのでしょうか?

#!/usr/bin/perl
use File::Find;
$mydir = $ARGV[0];
以下同様として実行したら

ファイル名が見つかりません - -INAME
ファイル名が見つかりません - -PRINT
こうなってしまうのですが・・・・・・・・・・
582デフォルトの名無しさん:2006/10/09(月) 15:48:48
お前なにも自分で考えてないだろ。File::Findのマニュアルぐらい読め。
583528:2006/10/09(月) 15:51:57
皆様どうも色々頭の悪い漏れに教えてくれて、本当にありがd
つ・・ついに完成シマスタ
U\(●~▽~●)Уイェーイ!
しかしperlって変数の扱いとか実にいい加減なようでも文字処理とかは
やはり強烈なパワーを持ってる事を再確認シマスタ
はじめCで同じことやろうとしたけど、ファイル名の取得の部分であきらめて
perlにしがみついてましたアハハ
最後に一応コード載せときますね(^^;恥ずかしい
@htm = glob("./*.htm");
foreach (@htm)
{
 $infile = $_;
 open (FH, "<$infile")or die $!;
 @foo = ();
 while(<FH>)
 {
  if ( grep( /A\ HREF|IMAGE/i, $_ ) )
  {
   $_ =~ s/([A-Z])/\l$1/ig;
  }
  push @foo, "$_";
 }
 close FH;
 open (OUT, ">$infile")or die $!;
 print OUT @foo;
 close OUT;
}
exit;
584デフォルトの名無しさん:2006/10/09(月) 17:38:32
>>583
変な見栄を張るのはやめたほうがいいよ。
585デフォルトの名無しさん:2006/10/09(月) 18:44:41
小汚いコードもやめたほうがいいな。
586デフォルトの名無しさん:2006/10/09(月) 18:51:02

なんか知らんが偉い遅れて出てきて必死だな。
587デフォルトの名無しさん:2006/10/09(月) 18:53:25
別に必死には見えないけどなぁ。むしろ君のほうが・・・。
588ヽ(´ー`)ノ ◆.ogCuANUcE :2006/10/09(月) 19:09:17
面倒臭そうな奴だったから答えまで書いたのに、
回答を理解できない上に、後付けで再帰的にしたい、
とまで言い出すとは思わなかった。
589デフォルトの名無しさん:2006/10/09(月) 19:10:51
「ところで」って言ってるから、いちおう名目上は別の質問なんだろう。
回答する側の心情的にはクるけどなw
590sage:2006/10/09(月) 22:01:06
1行目に
#!/usr/bin/perl -w
といれて、terminalから
/aaa/bbb/ccc/test.pl
のように実行するスクリプトの名前を
フルパスで取得する方法はございますか?

print "$ARG[1]¥n"とやってみましたが、
うまくいきませんでした。

使用環境は、OSX10.4.8 + 付属の標準perlです。

591デフォルトの名無しさん:2006/10/09(月) 22:05:25
>>590
自分自身を知りたいのかどうか判別つかんが
ご希望は $0 か __FILE__ の事?
592デフォルトの名無しさん:2006/10/09(月) 22:06:58
ああ、フルパスだからちゃうか…。
593デフォルトの名無しさん:2006/10/09(月) 22:07:32
$0でいいんじゃん?
594デフォルトの名無しさん:2006/10/09(月) 22:09:12
FindBinモジュール使え。
595sage:2006/10/09(月) 22:15:12
皆様、素早く適切なご助言を感謝します。
$0でうまくいきました。

perl歴20年なのですが、Googleで検索しても
正解の$0まで独力ではたどり着きませんでした。
今まで一度も$0を使ったことななかったわけです。
596デフォルトの名無しさん:2006/10/09(月) 22:26:34
>>595
変な見栄を張るのはやめたほうがいいよ。
597デフォルトの名無しさん:2006/10/09(月) 22:29:43
perlって20年も続いてたのか。
598デフォルトの名無しさん:2006/10/09(月) 22:30:06
>>595
>Larry Wall began work on Perl in 1987, while working as a programmer at Unisys,[4]
>and released version 1.0 to the comp.sources.misc newsgroup on December 18, 1987.
未来人乙。
599デフォルトの名無しさん:2006/10/09(月) 22:33:21
>>595
釣りでないのなら今すぐ perldoc perlhist と打鍵した上でご自分の Perl 歴を確認してください。
その上で 20 年と判断されたなら僕に Perl を教えてください。>Larry
600sage:2006/10/09(月) 22:51:37
>>598, 599
重ね重ね、正確なご指摘をありがとうございます。
記憶違いでした。私がperlを始めたのは1990年頃で、
秋葉原のコンピュータ店の洋書売り場でO'Reillyの本を
買ったのが始まりでした。16年後もperlで仕事が
続けられるとうれしいです。
601デフォルトの名無しさん:2006/10/09(月) 23:02:21
perl歴16年で$0を知らないのもどうかと思うが、さらに調べられもしないとは
お前はいったい何をやっていたのだ...
602デフォルトの名無しさん:2006/10/09(月) 23:10:21
ある種の精神異常なんでしょ。放置放置。
603デフォルトの名無しさん:2006/10/09(月) 23:29:27
>>600 自身の$0には何が収められているんだろうか。
604デフォルトの名無しさん:2006/10/09(月) 23:36:21
こーいうの調べとかなきゃ気がすまない性質なんで
ラクダ本発売日
- english 1991/1月
- 日本語版 1993/2/28
ソース
ttp://en.wikipedia.org/wiki/Programming_Perl
ttp://examples.oreilly.com/cjkvinfo/doc/jp-trans.catalog
605デフォルトの名無しさん:2006/10/09(月) 23:40:05
>>604
「1990年頃」の「洋書売り場」ということなので辛うじて true かな。w
606デフォルトの名無しさん:2006/10/10(火) 01:38:14
こいつは16年間何をしてたんだ…
607デフォルトの名無しさん:2006/10/10(火) 02:38:43
日本でインターネット接続サービスが始まったのって1990年だったね確か。
別にPerlにインターネットは必須じゃないけどさ。
608デフォルトの名無しさん:2006/10/10(火) 03:44:19
Internet黎明期にPerlの存在を知りソースを入手。
当時のPerlにWindows版バイナリなんてなく、
BSDとかでソースからのコンパイルも一苦労。
当時のPerlの完成度とハードウェアスペックではPerlは重くて
そうそう使われる代物ではなかった。
上記のハードルを乗り越えて当時から使っていたのであれば
かなりの情報収集力/運用力があるはず、
なのに$0を知らない。
ありえねぇ。。。
609デフォルトの名無しさん:2006/10/10(火) 05:22:06
精神と時の部屋みたいな色のMac使ってるみたいだからあり得そう。
610デフォルトの名無しさん:2006/10/10(火) 05:51:29
古い人が来ましたよ

>>608
当時のPerl文化圏は、インターネット/NetNews/JUNETとUNIX Magazineあたりに
存在した。
その時期に大学に進んだ年代で、理工系の上のレベルの大学に入った人なら、
比較的普通に触れられた環境だっただろう。
ちなみに、オライリーの本が出る前に、非常に上質な日本語マニュアルが存在
していた。

当時、コンパイル過程は延々質問に答えていくというものだった。
面倒だというだけ。
もっとも、大学等のワークステーションが主戦場だったので、ほとんどの利用者に
とっては、ソフトウェアというものは、しばしば得体の知れない技巧を持った、
畏怖すべき「管理者」氏が勝手に入れておいてくれるものであっただろう。

当時Perlの完成度については不満を持った記憶はない。現在とは異なる作法が
要求されたけどね。CPU速度もメモリサイズも現在の100分の1程度とかいう、
そういうオーダーだったころかな?
611デフォルトの名無しさん:2006/10/10(火) 06:11:44
ちなみに、かの人の言動を怪しむ向きには反対しない。以前、
インターネット歴36年を自称するキテガイが暴れたのを見たことがある。
「70年代にはメインフレームが主流で、ディスクはギガバイト単位だったのに」
とワークステーションの性能の低さを嘆く某二流大学工学部教授なんてのもいたし。
虚言と記憶改竄恐るべしである。

しかし、一方で、目の前にずっとニンジンがぶら下がっているのに、
10年もそのことに気づかないような人間も散見してきたのだよ。

だからとりあえず、質問箱は質問箱に戻りましょう。
612デフォルトの名無しさん:2006/10/10(火) 17:39:00
今日感動したこと。

QRCode が GD::Barcode::QRcode でいとも簡単に作れてしまったこと。
素晴らしい。
613デフォルトの名無しさん:2006/10/10(火) 17:42:17
>>612
検証もしないで素朴な疑問だけどSwetake氏のとどっちがいいんだろね。
614デフォルトの名無しさん:2006/10/10(火) 18:55:23
そんなもんまであるのか
615デフォルトの名無しさん:2006/10/10(火) 21:34:48
教師をしております。マークシートのテストをperlスクリプトで
採点しています。正解を次のような形で@ans1の中に入れています。

(1) my @ans1 = (4,4,2,1,4,3,1,4,6,1,3,3,3,6,5,3,8,4,2,4,1,3,5,5,4);


毎回、25問の正解をテンキーから入力していますが、数字の間に入れる","
の入力が面倒で ","を省略した(2)のような入力形式を考えています。

(2) 4421431461333653842413554

(2)の数字を分解して、@ans1に入れる方法はございますでしょうか?
616デフォルトの名無しさん:2006/10/10(火) 21:37:34
my $ten = 222333 ;
split //, $ten

@ans1 = qw( 2 2 3 4 5 ) ;
617デフォルトの名無しさん:2006/10/10(火) 21:48:21
>>615
無理せずExcelでも使ったほうが良いのでは…。
618デフォルトの名無しさん:2006/10/10(火) 22:01:34
>>616
分かりやすい実例をありがとうございます。ご指摘いただいた
実例を参考にして、明日、職場で次のようなスクリプトを試し
てみます。
my $ten = "4421431461333653842413554";
my @ans1 = split //, $ten

>>617
>無理せずExcelでも使ったほうが良いのでは…。
Excelはインストールはしていますが、Visual Basic(?)の使い方が
分からないので、採点作業はできない状況です。

Perlの便利なところは、CSV形式の生徒200人分の解答データを
読み込み、全体の平均点、得点分布、クラス別平均点を出力し、
生徒の個別の採点結果もファイルに出力する作業が一気にでき
る点です。Excel+Visual Basicでも同じことができるのでしょ
うが、Visual Basicの勉強が大変そうなので、躊躇しています。
619デフォルトの名無しさん:2006/10/10(火) 22:23:03
>Visual Basic(?)
VBSな
620デフォルトの名無しさん:2006/10/10(火) 23:43:38
>>607
>別にPerlにインターネットは必須じゃないけどさ。

て言うかかなり関係ない。
621デフォルトの名無しさん:2006/10/10(火) 23:44:18
>>618
Excel VBAとPerlありゃいいや。
622デフォルトの名無しさん:2006/10/11(水) 00:45:12
crypt で生成した暗号化文字列に含まれる文字種を教えてくれませんか。
623デフォルトの名無しさん:2006/10/11(水) 02:06:17
a-zA-Z0-9./
624デフォルトの名無しさん:2006/10/11(水) 05:11:47
625デフォルトの名無しさん:2006/10/11(水) 09:33:51
>>613
どうなんだろう? CPANの検索で qrcode で川合氏の GD::Barcode::QRcode
が出てきたからそっちしか試してない。
626デフォルトの名無しさん:2006/10/11(水) 14:50:38
とつぜんですが、ぜひ教えて下さい。
PERL(CGI)でコーディングしたプログラムをバイナリー化して中身のコードを読まれない方法
はありますか?

ショッピングカートを作成したのですが、そのプログラムをお客に渡すと中身が読まれて
しまうので、読まれない形で渡したいのです。
どなたか良い方法を教えていただけないでしょうか?
宜しくお願いいたします。

色々調べたのですが、中々有効な情報が無くて・・・。
627デフォルトの名無しさん:2006/10/11(水) 14:55:30
perlcc?
628デフォルトの名無しさん:2006/10/11(水) 14:58:21
おれも perlcc しか無いような気がする。
他にやり方有ったら知りたい。
別式だとASP方式取るとか。
629デフォルトの名無しさん:2006/10/11(水) 14:58:58
>>626
完璧な方法はない。
手軽なのは難読化。
バイトコードにしてから渡すというのも、もしかしたら有効かも。
630デフォルトの名無しさん:2006/10/11(水) 15:06:27
早速のレスありがとうございます。
PERLCCでバイナリ化するには、どのようにコマンド入力すればよいのでしょうか?

なかなか上手くいかないので、例をあげていただけると助かります。
631デフォルトの名無しさん:2006/10/11(水) 15:47:42
$ cat test.pl
print "hello\n";
exit;
$ perlcc -o test test.pl
$ ./test
hello
632デフォルトの名無しさん:2006/10/11(水) 16:59:58
ソフトウェアの自由はどこにいった
633デフォルトの名無しさん:2006/10/11(水) 17:10:45
最初からCあたりで書けばいいものを・・・
634デフォルトの名無しさん:2006/10/11(水) 17:18:26
自分のテクニックは客に知られたくないが自分の為のテクニックは只でくれ、って
何さまのつもりだよ
635デフォルトの名無しさん:2006/10/11(水) 17:20:35
汚すぎて見せられないんじゃ...
636デフォルトの名無しさん:2006/10/11(水) 17:31:36
というか中身のコードを読めなければ実行できないんじゃね?
まさかバイナリなコードなら人間が理解できないとか思ってるのか?
637デフォルトの名無しさん:2006/10/11(水) 18:07:38
問題があるコードなのがばれると困るんじゃねーの? セキュリティがやばいとか
どっかのパクリとか...
638デフォルトの名無しさん:2006/10/11(水) 18:11:50
客相手にプログラムを作ってしまってから、隠す必要に気づくってのがすごいな
プログラム自体にもとんでもないエラーがありそうだ
639デフォルトの名無しさん:2006/10/11(水) 19:37:19
PHPだと暗号化ツールとかあったりするから、その手のヤバいレベルの請負が
のさばってたりするんだろうなぁ。
640622:2006/10/11(水) 19:54:39
>>623
ありがとうございました。Seedに使える文字種と一緒なんですね。
641デフォルトの名無しさん:2006/10/11(水) 21:10:38
>>626
大きなお世話なんでしょうが…、
あなたはその商売に向いていないので展望を再検討されることをお勧めします。
そのまま続けても、搾取されて捨てられてから、潰しが利かなくなってしまった自分に気が付く事になるでしょう。
よほどぼろい客でもつかんだなら、しばらくはその客頼みで食えるかもしれませんが、それだけのことです。
がんばってください。
642デフォルトの名無しさん:2006/10/11(水) 21:38:30
>>626
自分の技術力を金で売ってるのに難読化して非公開し
他人には無料で技術を公開し手取り足取りで教えろとは
とても厚顔無恥ですね。
643デフォルトの名無しさん:2006/10/11(水) 21:59:19
> どっかのパクリ

これだと思うが。
644デフォルトの名無しさん:2006/10/11(水) 22:28:47
>>642
知らないならややこしいから取りあえず黙ってくれや
645デフォルトの名無しさん:2006/10/11(水) 22:55:54
perlccというキーワードを教えてもらいながら
googleやperldocでperlccの使い方を調べられない奴が
いっちょまえに文句言うな
647デフォルトの名無しさん:2006/10/12(木) 00:40:34
>>646
644 == 645
648デフォルトの名無しさん:2006/10/12(木) 02:17:54
Artistic Licenseはソースを公開することを強いてないんだから
ソースを隠蔽することは当然の権利だよ。
現状じゃチープな難読化ツールとバイトコードにするぐらいしか手段がないけど
Perl6のFAQでここら辺のことに言及していた気がする。
649デフォルトの名無しさん:2006/10/12(木) 03:45:36
Perlインタプリタのライセンスと
Perlインタプリタの上で動くスクリプトの話を
ごっちゃにされてもねぇ (´゚c_,゚` )
650デフォルトの名無しさん:2006/10/12(木) 10:50:28
隠したいってのに対してなんでキレてる人が多いんかわからん
書き始めの頃ってなんか恥ずかしいじゃん、見られるの。
でも見られて困るようなものを売るべきではないよな

>>645には同意
651デフォルトの名無しさん:2006/10/12(木) 11:07:19
恥ずかしくて見せられないほどヘボいコードは
難読化しようがバイナリ化しようがやはりヘボいコードであって
そんなものは誰の役にも立たないんだから
どうせ隠すならソースだけではなく存在自体をなかったことにするほうが合理的
652デフォルトの名無しさん:2006/10/12(木) 11:15:45
>>650
隠したいってだけでキレてる人はいないと思う。
ギブ&テイクの精神のなさや、ただでテイクしたもので商売しようとする態度でキレてるんだろう
653デフォルトの名無しさん:2006/10/12(木) 11:16:57
あらやだ、レスアンカーは>>648です
654デフォルトの名無しさん:2006/10/12(木) 12:23:29
>>650
この人の書き込みを見てあなたはどう思う?
俺はこの人が商用のショッピングカートを開発できる人とは思えないわけよ。
そんな人がソースを隠したい理由って何だろうね。
655デフォルトの名無しさん:2006/10/12(木) 12:32:43
perlccでコンパイルしたHello World
と素のCで書いたHello Worldだと
びっくりするほどバイナリサイズが違う罠(前者>>後者)
656デフォルトの名無しさん:2006/10/12(木) 12:59:49
>>655
yep. その代わり、大作か!? と思わせる効果がある。
657デフォルトの名無しさん:2006/10/12(木) 14:16:49
>>654
最初はそうなんじゃないの?ってこと
経験不足なのがクライアントにバレるのが嫌だとか
それでも食っていかなくちゃいけないとか色々あるでしょ
いやあるいはすごい技術がつまってて(ry
658デフォルトの名無しさん:2006/10/12(木) 14:55:59
>>657
> 最初はそうなんじゃないの?ってこと

普通、最初は人に見せまくりですが。

初期段階で人に見てもらわないと言うのは、異常な育ち方です。
659デフォルトの名無しさん:2006/10/12(木) 15:09:19
まぁたしかにそうだ
660デフォルトの名無しさん:2006/10/12(木) 15:15:15
で、それに対して何故キレ気味なんだw
661デフォルトの名無しさん:2006/10/12(木) 15:31:34
>経験不足なのがクライアントにバレるのが嫌だとか
そういうヤバい人こそソースを見られている意識を持ってほしい。
今ならいくらでも良い書籍があるんだし、達人のソースも読めるんだし。

別にそういう人が商売するのは勝手だけど、2chスレで教えてくんすりゃ批判
されるだろうな。
662デフォルトの名無しさん:2006/10/12(木) 15:46:56
>>658
孤立した状態にいる独学の人だと、最初は人に見せないんじゃないかな。
まあ、だからといって、ほかの人たちが一般的に最初はそうなん
じゃないかと想定するのは変だけど。
663デフォルトの名無しさん:2006/10/12(木) 15:56:53
オープンソースであるPerlを利用しているだけの一般人が
それを利用するプログラムを作ってソースを公開したくないという人に向かって
「公開しない精神は腐ってる」という方がよっぽど不愉快だ。
664デフォルトの名無しさん:2006/10/12(木) 16:04:40
自分と反対の考え方を許容すればそれで済むんじゃないかと。
665デフォルトの名無しさん:2006/10/12(木) 16:30:21
べつに公開しないことを批難してんじゃなくて、すぐに素直にperlccと教えて
もらったのに、それを調べようともしない態度を批難してんじゃねーの。
666デフォルトの名無しさん:2006/10/12(木) 16:54:59
>>664
> 自分と反対の考え方を許容すればそれで済むんじゃないかと。

キモオタに交際求められて断った女の子が、キモオタにそれを言われて
わがままだと批判されたと言ってた。
667デフォルトの名無しさん:2006/10/12(木) 16:55:37
>>663
あきらかに事実誤認
668デフォルトの名無しさん:2006/10/12(木) 17:03:08
いや、俺は逆に人に見せながらスルのが好きだ
669デフォルトの名無しさん:2006/10/12(木) 17:48:32
>>668
通報しました
670デフォルトの名無しさん:2006/10/12(木) 21:46:25
質問です。

文字列$strにひらがな以外の文字が含まれているか否かの判断は、どうすればできるのでしょう。

ひらがなが一文字でも含まれている場合の判断は
http://www.din.or.jp/~ohzaki/perl.htm#Character
を参考に
if ($str =~ /(?:\xA4[\xA1-\xF3])/)
で、できたのですが、ひらがな以外が一文字でも含まれる場合はどうすれば良いかわかりません。
671 ◆TWARamEjuA :2006/10/12(木) 21:59:26 BE:3921449-BRZ(6667)
以前に投稿者の記録をまったく関係のないサーバに送信していた掲示板スクリプトがあったような。
あとはやっぱりパクリものかな(著作表示を消しているとかとか)
672 ◆TWARamEjuA :2006/10/12(木) 22:05:36 BE:8821499-BRZ(6667)
「ひらがな以外が一文字でも含まれる」

「ひらがなが連続していない」
と解釈して良いかと。
673デフォルトの名無しさん:2006/10/12(木) 22:09:38
>>670
そういう場合は、「本当にやりたいこと」を書いたほうがいいよ。
なんとなく「ひらがな以外が一文字でも含まれる場合」は直接は関係ない感がひしひしと。

$str !~ /^(?:\xA4[\xA1-\xF3])+$/
# ひらがなのみが1文字以上含まれる、の否定
# =ひらがな以外が含まれる、または空文字

とかでいいんじゃね?
674670:2006/10/12(木) 22:17:48
>>672
>>673
レスありがとうございます。

コマンドラインからIMEの辞書ファイルを作成するスクリプトを作ろうとしていたのですが、
読みにはひらがな、全角英数、一部の全角記号しか使えないので、それ以外が入力されたときは弾くようにしたいのです。
そこで、ひらがなの場合はどうすれば良いかを聞いて、他の文字の場合に応用するつもりでした。
675デフォルトの名無しさん:2006/10/12(木) 22:49:48
>>657
色々あるが、盗作を隠すためなら問題だろう。

>>660
子供じゃないなら一部を全部と捉えるのはやめたほうがいい。
676デフォルトの名無しさん:2006/10/13(金) 05:24:41
>>670
文字コードによって変わるけど
677デフォルトの名無しさん:2006/10/13(金) 05:54:53
>>670
ひらがなしかない = 最初から最後までひらがなだけがぎっしり詰まっている
678デフォルトの名無しさん:2006/10/13(金) 09:19:32
続・はじめてのperlが改訂されましたね。

皆さんは、この本(改訂前)を読みましたか?

リャマ->ラクダに行こうとしたのですが、
ちょっと無理でした。断念しました。
続をやってからにしようと思っています。
679デフォルトの名無しさん:2006/10/13(金) 11:35:22
>>675
一部とか全部とか妄想に浸りすぎですよ・・・
680デフォルトの名無しさん:2006/10/13(金) 12:47:00
ラクダ本ってそんなに難しいかなぁ・・・
これで入門したんだけど・・・
681デフォルトの名無しさん:2006/10/13(金) 13:03:03
ラクダ本買うくらいならperldocで十分だろ。。。
682デフォルトの名無しさん:2006/10/13(金) 13:40:59
perldoc は、さっとひくリファレンスとしては便利だけど
じっくり読みたい時とか流し読みしたい時は本(ていうか紙)が便利。
perldoc だけで済んでるんなら、いいと思うけどね。
683681:2006/10/13(金) 13:54:30
ディスプレイで見るか紙で見るかの
媒体の違いでラクダ推奨なら好みの問題ですね。
納得。
684デフォルトの名無しさん:2006/10/13(金) 17:15:00
英語なのが最大の問題。
685デフォルトの名無しさん:2006/10/13(金) 17:27:23
英語漬けとかNHKの語学番組とか利用して英語力うっぷしといたほうがいいぞ。
perlに限らず英語の技術系ドキュメント読めたほうがなにかと得。
686デフォルトの名無しさん:2006/10/13(金) 17:45:51
o my god
687デフォルトの名無しさん:2006/10/13(金) 19:11:01
得というか読めないと話にならんな
688デフォルトの名無しさん:2006/10/14(土) 05:54:58
i hate english
689デフォルトの名無しさん:2006/10/14(土) 08:59:56
>>675
「一部」がそんな電波妄想で返しても無意味。
690デフォルトの名無しさん:2006/10/14(土) 09:16:27
どうがんばっても一人の意見は一人の意見でしかないのですから、
それを皆の意見、その集団全てがそうだとだとみなすのは傲慢なのですよ。
691デフォルトの名無しさん:2006/10/14(土) 09:32:44
で、パクリコードを隠蔽したい奴は無事難読化できたのか?
692デフォルトの名無しさん:2006/10/14(土) 09:55:33
>>690
同意ですね。
ただ問題は、そんなことをしている人間がこの会話の参加者にいないことです。
693デフォルトの名無しさん:2006/10/14(土) 10:02:05
いわゆる韓流ってやつだろう。前提からして既に捏造な切り口を持ち込むのは。
694デフォルトの名無しさん:2006/10/14(土) 13:07:35
>>692
>>675
>>689

このへんにいるよ。
695デフォルトの名無しさん:2006/10/14(土) 15:44:59
ActivePerlの5.8.7.813以降のバージョンで、
PARでexe化出来なくなったという問題はまだ直らんのか。
696デフォルトの名無しさん:2006/10/14(土) 17:57:32
>>670

if ($str =~ /^(?:\xA4[\xA1-\xF3])+$/)
でいいと思うが、文字コード依存というのは感心しないね。utf8に変換して、
if (/^[\p{InHiragana}\x{30fc}]+$/)   # [ぁ-ん゛゜ゝゞー]+
の方がずっと読みやすいだろう。
697デフォルトの名無しさん:2006/10/14(土) 19:00:19
Perl/tkの質問はここで良かったでしょうか?

フォルダ選択用のウィジェットって無いでしょうか?
getOpenFile()のフォルダ版のような感じの。

データの保存用フォルダを指定する用の入力とかに使いたいんですが、
getOpenFileだと絶対ファイル名を指定しないといけないので、
空のディレクトリを指定することが出来なくて困っています。
仕方なく手動で入力してますが、フルパスなのでバリめんどいです。
誰かご存じの方がいらっしゃいましたら、よろしくお願いします。
698デフォルトの名無しさん:2006/10/14(土) 20:06:21
>>697
Tk::chooseDirectory() # if $Tk::VERSION >= 804;
699697:2006/10/14(土) 22:02:41
>>698
おおお!ありがとうございます!まさにこれです!!

Tk勉強し始めたばかりなんですが、
こういうウィジェットの一覧が画像でのってるサイトってどっかに無いでしょうか?
本でもいいんですが。
700698:2006/10/14(土) 22:29:38
>>699
> こういうウィジェットの一覧が画像でのってるサイトってどっかに無いでしょうか?

作って公開してここで晒して♪
701デフォルトの名無しさん:2006/10/15(日) 05:30:15
702デフォルトの名無しさん:2006/10/15(日) 06:46:11
ActivePerl 5.6の@INCにはめられたよぅorz
703デフォルトの名無しさん:2006/10/15(日) 08:20:58
>>703
オマエばかじゃねえの?
704デフォルトの名無しさん:2006/10/15(日) 08:36:39
よく分かっている>703が居るスレ
705デフォルトの名無しさん:2006/10/15(日) 08:41:00
Perl/Tk使ったことないけど面白そうだな。
でも、どうせならPythonでも学んだほうが・・・・ってのは禁句か。
706デフォルトの名無しさん:2006/10/15(日) 09:54:49
Pythonはインデントで構造あらwすのが嫌い。インデントつけるのは嫌いではなくて当たり前なんだが、
インデントのみで構造を表しているのでちょっとプログラムの構造をいじるのに{と}を追加してインデント
ぐちゃぐちゃになったのをperltidyで整形みたいなことが本質的にできないのが不便なのです。
707デフォルトの名無しさん:2006/10/15(日) 10:44:25
>>705
> でも、どうせならPythonでも学んだほうが・・・・ってのは禁句か。
っていうか、ここで言ってもしょうがない
708デフォルトの名無しさん:2006/10/15(日) 10:45:18
>>706
> Pythonはインデントで構造あらwすのが嫌い。インデントつけるのは嫌いではなくて当たり前なんだが、

文章だと思うんだ!!
709デフォルトの名無しさん:2006/10/15(日) 11:05:10
ぐちゃぐちゃに書いてから整形する=Perl
最初からきれいに書く=Python

って事ですよね^^
710デフォルトの名無しさん:2006/10/15(日) 13:24:14
いや、

ぐちゃぐちゃに書いてから整形する予定だったが面倒くさいから後回しでいいやと思い結局そのまま=Perl
711デフォルトの名無しさん:2006/10/15(日) 13:38:52
perltidy通せばいいから整形なんてしなくていいよ。
712デフォルトの名無しさん:2006/10/15(日) 13:56:59
整形は遺伝子詐欺!!
713デフォルトの名無しさん:2006/10/15(日) 13:58:10
perlccすればいいからインデントなんていらないよ
714デフォルトの名無しさん:2006/10/15(日) 14:00:39
    / ̄ ̄ ̄ ̄\
   (  人____)
   |ミ/  ー◎-◎-)
   (6     (_ _) )
   | ∴ ノ  3 ノ
    \_____ノ

 マル・パク・リー [Mal Pak Lee]
   (1989〜2006没 韓国)
715デフォルトの名無しさん:2006/10/15(日) 14:10:27
パクって著作権表記書き換えればいいからコードなんて書かなくていいよ
716デフォルトの名無しさん:2006/10/15(日) 15:08:16
パクり元のコード探すのもめんどいから、人間やめるよ!
717デフォルトの名無しさん:2006/10/16(月) 12:59:40
すいません
くだスレでは返答がいただけないのでこちらに書き込ませていただきます。

CGI_Liteを使用したいためcpanを入れて
cpan> install CGI_Lite
とやってみたところ
--------------------------------
Welcome to the installation of CGI_Lite 1.8...

WARNING: MAN3PODS takes a hash reference not a string/number.
Please inform the author.
Checking if your kit is complete...
Looks good
Can't use string (" ") as a HASH ref while "strict refs" in use at /usr/lib/perl5/5.8.6/ExtUtils/MM_Unix.pm line 510.
Running make test
Make had some problems, maybe interrupted? Won't test
Running make install
Make had some problems, maybe interrupted? Won't install
--------------------------------
と出てうまくインストール出来ません。
どのようにしたらCGI_Liteがインストール出来るのでしょうか?
ご助力をいただけますと幸いです。

ちなみにcpan> install CGI::Liteでは
cp Lite.pm blib/lib/CGI/Lite.pm
Manifying blib/man3/CGI::Lite.3pm
とうまくインストールできた模様なので
サーバーの設定がまずいというわけではないと思っております。
718デフォルトの名無しさん:2006/10/16(月) 13:25:05
>>717
CGI_Lite 1.8はCGI::Liteのものすごく古いバージョン(2.0になった
ときに名前がかわった)。1997年のものだからさすがに古すぎる
んじゃないか。

どうしてもインスコしたければPerlを古いのにするか、自分で問題
がある部分を書き直すかだろうね。
719デフォルトの名無しさん:2006/10/16(月) 16:04:21
今まで価値観の違いから、いろいろなことで喧嘩が絶えず、
そのたびに私は「離婚したい」などと言っていました。
でも主人はいつもそれには応じず、聞き流していたのですが、
先日の喧嘩でついに主人の方から「離婚したほうがいい」と
言われてしまいました。
自業自得なのかもしれませんが、離婚したくありません。
私は本当に離婚する気などなく、ただ主人の気持ちを
確かめるためだけに離婚という言葉を使って来たように思います。
でも話し合いの中で、他に好きな人がいるわけではないけど
彼の私に対する愛情はもうないこと、自分はマイペースだから
そのリズムを壊されるのが我慢できないこと、
今後私がどんなに変わる努力をしても今の気持ちは変わらないだろう
というようなことを言われました。
私は主人のことはまだ好きで、どうしても離婚したくありません。
元に戻れるならどんなことでもしたいです。
でもここまで離れてしまった主人の気持ちはもう元にはもどらないでしょうか。
720デフォルトの名無しさん:2006/10/16(月) 16:52:56
>>719
「なんでここで聞くんだよw」などの反応を期待されての書き込みだとは思いますが、
残念ながらまったく面白くありません。
721デフォルトの名無しさん:2006/10/16(月) 18:08:39
簡単な質問でスイマセン。

aaa
ccc
というまとまりと
bbb
ccc
というまとまりが10000行ほどファイルとして存在するとします。

このとき、cccの部分だけ抽出したいのですが、
aaaの場合のcccとbbbの場合のcccを分けたいので、

if(/aaa\n(ccc)/){
print $1;
}
とやったのですが、out of memoryと表示されました。

他にいいやり方を教えてください。
722デフォルトの名無しさん:2006/10/16(月) 18:15:39
ファイルから1行ずつ読み込むループ内で、現在位置が偶数行目なのか
奇数行目なのかを判断して、2通りの処理をすればいいかと。
723デフォルトの名無しさん:2006/10/16(月) 19:02:49
メモリを増やせばいいかと。
724デフォルトの名無しさん:2006/10/16(月) 19:17:05
my $flag = 0;
while(<>){
if($flag){
$flag = 0;
if(/^(ccc)/){
print $1;
}
}
$flag = 1 if(/aaa$/);
}
こんなんでどうよ?
725デフォルトの名無しさん:2006/10/16(月) 19:28:23
$flg;
while(<>){
if ($_ =~ /aaa/){$flg=1; next;}
if ($_ =~ /bbb/){$flg=2; next;}

if ($_ =~ /ccc/){
print "a $_" if $flg==1;
print "b $_" if $flg==2;
}
$flg=0;
}

こんなのしか思いつかない・・・orz
726デフォルトの名無しさん:2006/10/16(月) 19:29:41
while ( <> ){
 if ( /^aaa/ .. /^(ccc)/ ){ print $1 if $1 ; }
}
727デフォルトの名無しさん:2006/10/16(月) 20:34:32
こういうときにスイッチ使うのね(´・ω・)
728デフォルトの名無しさん:2006/10/16(月) 20:39:55
Perlはかなり長いこと使ってるけど、スイッチは使ったことないなぁ
729デフォルトの名無しさん:2006/10/16(月) 20:59:16
誰か哀れな初心者に>>726氏の内容を解説してください…
検索したけどよく分からんです。
730デフォルトの名無しさん:2006/10/16(月) 21:12:27
731デフォルトの名無しさん:2006/10/16(月) 21:19:28
フリップフロップ演算子でぐぐれ
732デフォルトの名無しさん:2006/10/16(月) 22:24:19
False..Trueのつもりで print scalar(0..1) for 1..5 とやったら、
偽が返るかと思ったのに真が返ってくるので嵌った嵌った。

定数表現になってるもんだから行番号との比較になった上に、
一行も読み込んでないから$. == 0のために真が返ってるのね。
733デフォルトの名無しさん:2006/10/16(月) 22:43:26
>>730-731
めちゃめちゃありがとうございます!
734デフォルトの名無しさん:2006/10/16(月) 22:54:37
perldoc.jp には「いったん左が真になると、右が真であるあいだ真を返す」とあるんだが

for (qw{a b c a c c}) {
    print $_ if (/a/ .. /c/);
}

このコードの出力が "aacc" ではなく "abcac" になるのが謎だった
が、いま原文読んでわかった

> Once the left operand is true, the range operator stays true until the right operand is true
「右が真になるまで真を返す」じゃねーかクソが
735デフォルトの名無しさん:2006/10/16(月) 23:27:41
英語もPerlも理解してないとこうなります、という典型だな。
736デフォルトの名無しさん:2006/10/16(月) 23:32:31
英語やPerl以前にアホが作ったawkでさえ理解していないじゃねーの?
737デフォルトの名無しさん:2006/10/16(月) 23:45:16
>>734
ワロスwww
perler が until 間違えちゃいかんよなあw
738デフォルトの名無しさん:2006/10/16(月) 23:53:15
Perlで実行形式のプログラムを作れるって本当ですか?
ここに書いてあったので見た時はびっくりしました。
http://allabout.co.jp/internet/cgiperl/closeup/CU20040421A/index2.htm
どうすれば作れるんでしょうか。
お時間がある方、どうか教えてください。
739デフォルトの名無しさん:2006/10/17(火) 00:14:53
まずはこのスレ読み直そうか。
740デフォルトの名無しさん:2006/10/17(火) 01:18:50
>>732 から学んだ事
for の後置文使ってるから if 文をコピペミスしたのではないと思うのだが、
まあ、そこはおいとくとして。

1. scalar したからといってリスト全体が scalar コンテキストで判断されるわけではない。
  perl -le 'print scalar ( 0 , 3)'
単に最後の要素をプリントしてるだけ。
perldoc -f scalar に注意書きがなされている現象。scalar は単項演算子だから〜のくだり。

2. 拡大解釈してやりたいことが以下の様な事だったとして、
perl -le 'for ( 1 .. 5) { print "hoge" if 0..1 }'
これの 0 .. 1 は、732 の解説通りたまたま左辺が $. == 0 で成立し(#) print
perl -le ' $. = 1 ; for ( 1 .. 5) { print "hoge" if 0..1 }'
は、print されないと。
# 実際には undef == 0 というのが成立する。ちょっと違和感。

スカラーコンテキストで範囲演算子に指定された数字が $. を見に行くっての忘れそうだな、、、
741デフォルトの名無しさん:2006/10/17(火) 17:24:58
>>740
scalar LIST は、リスト全体をスカラーコンテキストで評価するよ。
例えば、$a=(0,3); と $a= scalar(0,3); は同じ値になる。
スカラーコンテキストで配列は要素数を返し、リストは最後の要素を返す違い。

それと、732のコードに手を入れて
perl -e "$.=$_,print $.,':',scalar(0..1),qq/\n/ for (1..5)"
とした場合や、範囲を変えて
perl -e "$.=$_,print $.,':',scalar(0..1),qq/\n/ for (0,0,1,1,1,0,0,0,1,1)"
とした場合も見てみるといいよ。
732は 0..1 を false..true のつもりで使ったと書いているから、実際の $_ は
false か true が入るループだったという考えでね。
742デフォルトの名無しさん:2006/10/17(火) 17:47:18
>>741
スマソ、「必ずしも」が抜けてました。
perldoc -f scalar してください。きちんと注意がきは載ってます。

後半はまあ、どうでもいいです。
743デフォルトの名無しさん:2006/10/17(火) 18:02:10
>>741
実行できない例をだすなよw
>perl -e "$.=$_,print $.,':', scalar(0..1),qq/\n/ for (1..5)"
>Can't modify constant item in predecrement (--) at -e line 1, near "color="
>syntax error at -e line 1, near "qq/\n/ for "
>Execution of -e aborted due to compilation errors.

リスト中でプリントするなよw
下を実行してみ?
$ perl -le 'print 0, print 0, $a = 'b' , 1'
同一リスト内で代入と print なんて狂気の沙汰だw
744デフォルトの名無しさん:2006/10/17(火) 18:12:44
すまん。自分で実行できない例(つーか実行出来てしまったんだが)を書いた
b をシングルでくくってなんでエラーになんないんだよ orz...
745デフォルトの名無しさん:2006/10/17(火) 20:44:50
>>743
B::Deparseしたくて色々試したら実行出来たよ意味不明だけど
おそらくbash/zshだけ
$ perl -e 'print "$.¥n" '
$ perl -MO=Deparse -e "$.=$_,print $.,':',scalar(0..1),qq/¥n/ for (1..5)"
foreach $_ (1 .. 5) {
$. = print($., print($., ':', scalar(0 .. 1), "¥n"));
}
-e syntax OK
746741:2006/10/17(火) 22:29:14
>>742
リストに含まれる全要素数が欲しい場合は単にリストにscalarを適用するのではなく、
一時配列を作れって部分だよね。
これとリスト全体が…がどうにも繋がらなくて悩んだのだけど、もしかして
リスト全体をスカラー評価=リストに含まれる全要素数を取得って事でしたか。
失礼しました。


>>743 >>745
それは申し訳無い。
駄目な理由は $ をシェルが展開するからなので、適当にクォート($→\$)して下さい。
シングルクォートで
perl -e '$.=$_,print $.,q/:/,scalar(0..1),qq/\n/ for(1..5);'
と書けば良いんだけど、そうすると今度はwin系で通らなくなる気がする。

リスト中のプリントって、 printの左にあるコンマ演算子の事だよね。
そのコンマ演算子ならリストとは無関係です。
747743:2006/10/17(火) 23:10:31
>>746
> 駄目な理由は $ をシェルが展開するからなので、適当にクォート($→¥$)して下さい。
うわあ、、、大恥(汗)
>そのコンマ演算子ならリストとは無関係です。
745 の Deparse 結果を読んで理解してて、それがお前が意図したものなら何もいわんが…
まあいいや、元気でやってくれ。
748デフォルトの名無しさん:2006/10/17(火) 23:19:11
>>747
745の結果もなんかおかしいよ?""の影響じゃね?
749デフォルトの名無しさん:2006/10/17(火) 23:28:05
perl -e '$.=$_,print $.,":",scalar(0..1),qq/¥n/ for (0,0,1,1,1,0,0,0,1,1)'
0:1
0:2
1:3E0
1:
1:
0:1
0:2
0:3
1:4E0
1:
この結果を誰か解説してくれ、俺には理解できん。
750デフォルトの名無しさん:2006/10/17(火) 23:49:54
>>749
> この演算子は、偽なら空文字列を返し、真なら(1から始まる)通し番号を返す。
> この通し番号は、新たな範囲がスタートするごとにリセットされる。
> 範囲の終了点では、通し番号の後ろに文字列“E0”を付けたものを返す。
> この“E0”は値を数値として解釈する際には何の影響も与えないが、
> 範囲の終了点を除外するための目印とすることができる。
「プログラミング Perl VOLUME1」第三版 p121 より引用
751デフォルトの名無しさん:2006/10/18(水) 00:09:54
>>750
thx. 範囲演算子の方の機能なのね>E0
752デフォルトの名無しさん:2006/10/18(水) 17:39:50
えっと、Net::FTP でサーバー間転送させているときに
Ctrl-Cとかで終了したときに abort を呼ばないといけないんだけど

%SIG{'INT'} = abortFTP;
ftp_dest->pasv_wait(ftp_src);

ってやっても、タイムアウトするまで abortFTP が呼ばれないんです。
ちゃんと abortFTP が呼ばれるようになるにはどうすれば
いいのか教えてください。
753デフォルトの名無しさん:2006/10/18(水) 17:55:25
% ?
754デフォルトの名無しさん:2006/10/18(水) 18:08:46
ごめん、$SIG{'INT'}でした。
755デフォルトの名無しさん:2006/10/18(水) 18:11:02
Net::FTPのソース読んでないので適当な回答だけど
タイムアウト処理のためにNet::FTP側で$SIG{ALARM}を仕掛けているだろうから
アラームの時間を1secとかに書き換えればすぐにタイムアウトするのでは?
756デフォルトの名無しさん:2006/10/18(水) 18:16:56
>>755
>>754で解決したんだと思われ
757デフォルトの名無しさん:2006/10/18(水) 18:24:58
>755
タイムアウト処理は pasv_wait の中の responce の中の getline の中の select でやってるみたいです。

あと、「転送開始→すぐに中断」が目的じゃなくて、
あくまで Ctrl-C を押したときに abort することが目的なので
alarm(1);
ftp_dest->pasv_wait(ftp_src);
は目的とは違うと考えて試していません。

abortFTPのなかで alarm(1) すればいいんじゃないの?ということならば、
そもそもタイムアウトまで print すら呼ばれない状態なので
意味がないかなとか思います。

そもそも、$SIG{'INT'} を設定しないときはデフォルトの
ハンドラが即座に走るのに、
設定するとなんでタイムアウトまでブロックされるのが疑問です。

>756
いえ、解決していません。投稿時に間違えただけです。
758デフォルトの名無しさん:2006/10/18(水) 18:51:35
selectやシグナルはけっこうOS依存で微妙に違うことがあるので、
その辺の条件も出すと何かわかる人がいるかもしれない。

とりあえずシステムコールトレースでもしてみてはどうか。
759デフォルトの名無しさん:2006/10/18(水) 20:04:12
最近は

$SIG{'INT'} = \&abortFTP;

と書かなくていいのか、へえ。
760デフォルトの名無しさん:2006/10/18(水) 22:07:04
>>755
$SIG{'INT'} = sub {
print "abortFTP\n";
abortFTP();
};
としたら、^C で "abortFTP\n" は表示される?
というか、環境書けや。まさかwin32ってオチじゃねーだろな。
761デフォルトの名無しさん:2006/10/18(水) 22:08:32
ごめ。安価まちがい。>>760 =~ s/755/752/;
762デフォルトの名無しさん:2006/10/18(水) 22:35:32
>>760
window環境で作ってる奴なんか、ふつーにいるんじゃねぇの?
何がまさかなんだ?
763デフォルトの名無しさん:2006/10/18(水) 22:57:21
PerlはUNIX/UNIXクローン上で動くこと前提で
WinではOSの設計の差異からいろいろと問題がある。
質問をする奴らは環境ぐらい書け。
764デフォルトの名無しさん:2006/10/19(木) 00:15:25
ニュースサイトから、リンクや記事を抜き出すスクリプトを作ってんだけど、
正規表現で抜き出すのに限界を感じたんで、HTML::Parser使おうと思ってるんですが、
ドキュメントだけだとイマイチ使いかたが判らんのです。
HTML::Parserの使いかたが判り易く載ってるサイトってないですかね?
HTML::TreeやHTML::TokeParserも似たようなもんなのかな?
765デフォルトの名無しさん:2006/10/19(木) 00:32:43
HTML::Parserを使っているモジュールのソース読めば理解できるっしょ。
TokeParserはHTML::ParserをラッピングしてI/Fを直感的にしたもの。
漏れは使ったことないけど。
最近出てきたHTML::Selector::XPathはどうよ?
http://blog.bulknews.net/mt/archives/002072.html
766デフォルトの名無しさん:2006/10/19(木) 01:12:39
>>762
DOSとunixだと^Cの効くタイミングがぜんぜん違うじゃん
767752=757:2006/10/19(木) 10:30:08
>759
その書き方は知りませんでした。正確には
$SIG{'INT'} = 'abortFTP';
とやってました。

>760
>としたら、^C で "abortFTP\n" は表示される?
タイムアウトまで表示されません。

>環境書けや。
環境はWindowsXP で ActiveState の Perl 5.8.8です。
768デフォルトの名無しさん:2006/10/19(木) 10:58:00
ActivePerlでSIGINTはやろうとして悩んでるのはたまに
見かけるが解決したのを見たことがない。(ぐぐってみれば
わかる)

別の方法を考えることをお勧めする。
769752:2006/10/19(木) 12:43:56
cygwin の perl で試してみるとうまくいきました。

うまい回避策も見つからなかったので
ActivePerl を使わない方向で進めることにします。

ありがとうです。
770デフォルトの名無しさん:2006/10/20(金) 01:26:27
my $j = new Jcode($_, $self->{in_char});
$_ = $j->$self->{out_char};

こんなコードなんですが、Jcodeのメソッドがないと怒られます。
$self->{out_char}に'euc'が入っているんですがうまく変数展開できない。
$self->{in_char}は問題なし(あたりまえか)。
${self}->{out_char}とか${self->{out_char}}とかやっても駄目でした。
一旦、$out_char = $self->{out_char}と代入すれば上手くいくので、
お茶を濁してるんだけどスマートな書き方ありませんか?
後、$mode = 'out'; $self->{${mode}_char}みたいなのも駄目ですよね?
こういう考え方が間違ってるのかな…
771デフォルトの名無しさん:2006/10/20(金) 01:28:27
質問させて下さい

$aaa=&sub1();
print $$aaa;

sub sub1
{
    my $bbb;
    $bbb="ABCD";
    return \$bbb;
}

my宣言されたレキシカル変数の値に対して、リファレンスでスコープ外から
参照出来ますが、この場合のsub1における$bbbの値がいつまで保持されるのかが
分かりません
メモリ空間的に$bbbの値はプログラムが終わるまで保持され、安全だと思っても
良いのでしょうか?
772ヽ(´ー`)ノ ◆.ogCuANUcE :2006/10/20(金) 02:05:53
>>770
その syntax は、一度変数に代入して $j->$out_char とするしかない。
一次変数を用意するのが面倒な時は can() を使うとか。

  $_ = $j->$self->{out_char};
    ↓
  $_ = $j->can($self->{out_char})->();

うーん、イマイチ。
蛇足だが、$j を使い回さないなら、あえて convert() とか。

Jcode::convert(\$_, $self->{out_char}, $self->{in_char});

>>771
Perl の変数は参照カウンタを持っているので、参照されている限り保持される。
プログラムが終わるまで使われていれば終わるまで保持されているだろうし、
使われなくなった場合は GC が走ったタイミングでメモリから消える可能性が
あるが、使われてないんだからそもそも関係ない。

要は、変数がメモリ空間にあるか考えてコードを書く必要はないってこった。
773デフォルトの名無しさん:2006/10/20(金) 02:10:55
>>770
いったん別の変数に代入するのが一番明示的でいいと思うんだけど
あなたの言う「スマート」とは例えばどんなコード?

後半部分については、そもそもハッシュのキーは文字列なので
$self->{"${mode}_char"} と引用符で囲うか、 $self->{$mode . "_char"} とすればできます。
774デフォルトの名無しさん:2006/10/20(金) 02:54:29
$_ = $j->${ \$self->{out_char} };
無名変数つかってるだけで実質明示的に別変数に入れるのと変らん罠
775764:2006/10/20(金) 07:40:13
>HTML::Parserを使っているモジュールのソース読めば理解できるっしょ。
こう言われると「ぐう」の音も出ませんw
TokeParserの方が直感的で判り易いのと希望の動作が出来たんでTokeParser使います。
776771:2006/10/20(金) 12:32:52
>>772
ご回答ありがとうございます
777デフォルトの名無しさん:2006/10/20(金) 15:30:47
use strict;
while (my ($key,$value) = each %ENV) {
print "$key=$value\n";
}
は大丈夫で、

use strict;
print "$key=$value\n" while (my ($key,$value) = each %ENV)

はどうしてダメなのでしょうか?

Global symbol "$key" requires explicit package name at -e line 1.
Global symbol "$value" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.

と言われてしまいます。
778デフォルトの名無しさん:2006/10/20(金) 16:47:24
print がブロックの外にあるからでは?
779デフォルトの名無しさん:2006/10/20(金) 20:14:50
ソース冒頭でサブルーチン プロトタイプを宣言した場合、
呼び出し時の引数過不足はチェックされますが、
プロトタイプを別ファイルにしてインクルード(require)すると
エラーチェックされません(perl, v5.6.1)
これをエラーチェックさせるような方法はないのでしょうか。

use strict 'vars' / use vars... などもインクルードすると
無効になり、非常に使い勝手悪いです。。。
780デフォルトの名無しさん:2006/10/20(金) 20:59:01
むしろ他のソースで use strict して require すると、strict モードが有効になったらやだなぁ・・・
781デフォルトの名無しさん:2006/10/20(金) 21:15:22
>>779
BEGINブロックの中でrequire
requireはそのままだと実行時に評価されてしまうので、
プロトタイプのチェックが行われる解釈段階には効果を及ぼせない
782デフォルトの名無しさん:2006/10/20(金) 21:22:40
>>779
requireじゃなくモジュール化してuseにする。
783デフォルトの名無しさん:2006/10/20(金) 21:29:47
やったあああああ!
ありがとう>781
784デフォルトの名無しさん:2006/10/20(金) 22:08:25
質問です。
AAA
BBB
CCC
というファイルがあります。
一行目がAAAであるときのAAAとCCCを
AAA CCCというならびで抽出したい場合

foreach(<STDIN>){
if(/(AAA)/){
print "$1";
foreach(<STDIN>){
if(/(CCC)/){
print " $1\n";
     last; 
}
}
}
}
で上手くいきません。
ご教授お願いします。

785770:2006/10/20(金) 23:21:34
>>772
ありがとう。代入するしかないんですね。
convert()使用でも無問題なんで、こっちの方がすっきりしますね。
convert()にします。

>>773
「スマート」なんて人それぞれなんで変ないいかたしました。
個人的には、可読性がおちなければ、より少ない変数、少ない行数って事ですね。
今回は、$self->{out_char}で意味は通じてるので、わざわざ同じ意味の$out_charに
代入するのが??と思ったからです。
それと、$out_charをやってしまうと、統一感で意味で$in_charも作らないと駄目ですよね。
ものぐさな者なんで、引用符とかで逃げれないかなと思ったもんで。
後半部はあっさり出来ました、ありがとうございます。
786デフォルトの名無しさん:2006/10/20(金) 23:45:50
>>777
myで宣言した変数はその宣言が含まれた文が終わるまでは
見えない。
787デフォルトの名無しさん:2006/10/21(土) 00:58:30
>>784

$count = 0;
$str_a = "";
$str_c = "";

foreach (<STDIN>) {
if (!$count++ && /(AAA)/) {
$str_a = $1;
next;
}
if ($str_a && /(CCC)/) {
$str_c = $1;
last;
}
if ($count && !$str_a) {
last;
}
}

print $a, $c, "\n";


でどうかな。
788デフォルトの名無しさん:2006/10/21(土) 01:23:09
>>787
ありがとうございます。
AAA
BBB
CCC
の塊がが複数行続くんですが、どう処理させたらいいんでしょうか?
789デフォルトの名無しさん:2006/10/21(土) 01:33:12
790デフォルトの名無しさん:2006/10/21(土) 03:15:20
Tkについてです。

1:
マウスアクションって不可能なんでしょうか。
例えば、ノートブックのタブをダブルクリックしたらそれを閉じたり、
タブを掴んで画面の外まで持っていくと新しい画面にするとか、
そうゆう風に動かしたいんですけど無理でしょうか。

2:
あと、エクスプローラーのフォルダの画面で「詳細表示」にしたみたいな画面は作れないんでしょうか。
(上にファイル名とかファイルサイズとかの項目があって、好きに並び替えたり、左右の広さを調節できたりする)。

3:
ちなみに、2のような画面形態のことをなんていいますか?w
791デフォルトの名無しさん:2006/10/21(土) 05:09:02
792デフォルトの名無しさん:2006/10/21(土) 10:46:32
>>791 その話題がこのスレと何の関係があるの?
793デフォルトの名無しさん:2006/10/21(土) 11:57:34
いわゆる単なるコピペあらし
794デフォルトの名無しさん:2006/10/22(日) 01:48:51
質問です

http://203.111.199.131:8080/test.m3u  ←を拾ったとき、test.m3uまで含めたいのですが 8080の後ろで切れてしまい
それを$outputの中に入れてしまいます。
test.m3uまで含めた状態で$outputに入れたいです。
どうすればいいでしょうか?
                                            ↓ここの表記に問題がありますか?
while ($data=~ m/(((?:$site_m)[\:\d\w\-\.\/\=\?\!\-\%\&\_\#]+\:[\d]+)|h?ttp:\/\/(?:[\w\/\.\?\-\%\&\=]*$site\/[\w\/\.\?\-\%\&\=]*|[\w\/\.\?\-\%\&\=]*\.$ext[\w\/\.\%\&\-\?\=]*))/g) {
$output = $1;
795デフォルトの名無しさん:2006/10/22(日) 02:05:06
796デフォルトの名無しさん:2006/10/22(日) 02:07:07
>>795
すみません。回答がつきませんでした
797デフォルトの名無しさん:2006/10/22(日) 03:48:41
マルチは死んでください
798デフォルトの名無しさん:2006/10/22(日) 04:33:13
回答が付かなかったからってマルチしていい理由にはならないんだよね。
799デフォルトの名無しさん:2006/10/22(日) 04:44:04
>>798
じゃあ、どうすればいいんだよ
800デフォルトの名無しさん:2006/10/22(日) 04:44:40
しねよ
801794:2006/10/22(日) 05:26:37
すみません。しねませんでした
802デフォルトの名無しさん:2006/10/22(日) 07:45:59
>>801
お前の頭の悪さじゃ一生わかんねぇだろうなwwwwww

もっかい死んでこい
803デフォルトの名無しさん:2006/10/22(日) 08:28:30
>>794
> どうすればいいでしょうか?

同じようなことをやっているプログラムを探して、
どうやっているのか調べると良いです。
804デフォルトの名無しさん:2006/10/22(日) 08:41:25
>>803

>>801で死ねないって言ってるくらいアフォだから放置しろ
805デフォルトの名無しさん:2006/10/22(日) 09:10:10
マジレスするとurlを書いて「xxでも質問したのですが、答えが無かったので」と書けば。
>794
806デフォルトの名無しさん:2006/10/22(日) 10:06:53
>>805
しねよ 
オメーなんかには聞いてない
807デフォルトの名無しさん:2006/10/22(日) 11:28:33
>>806
キモメガネ調子のんなよ
808デフォルトの名無しさん:2006/10/22(日) 11:29:40
マルチしてもいいじゃん
逆にマルチしちゃいけない理由を言えよwwwwwwwwwwwwwwwwwwwwwwwwwwwww
809デフォルトの名無しさん:2006/10/22(日) 12:07:26
>>808
おまえもしねよ
810デフォルトの名無しさん:2006/10/22(日) 12:28:17
すみません、質問です。

ppmでモジュールをインストールしたいです。

モジュールはSOAP::Liteです。
>search SOAP::Lite
から調べていくと、以下まで達しました。

ppm> search ResourcePool-Resource-SOAP-L
Using cached search result set 7.
1. ResourcePool-Resource-SOAP-~ [1.0101] SOAP::Lite bindings for ResourcePool
2. ResourcePool-Resource-SOAP-~ [1.0101] ResourcePool-Resource-SOAP-Lite


ここで、正式名称が分からないので、インストール/確認ができない状態です。
チルダで省略されている部分を参照するにはどうすれば良いでしょうか?

宜しくお願いします。
811デフォルトの名無しさん:2006/10/22(日) 14:26:04

if ( @list1[2] eq @list2[3] ){

とやってて、@list1[2]と@list2[3]にはそれぞれ"00001"が入っているのですが、
条件に一致しません。

if ( @list1[2] == @list2[3] ){

とすると一致します。

この例では値が"00001"ですが、実際は文字の場合もあるので、eq をつかいたいのですが、
どうしたらよいでしょうか?

Perlは文字とか数値とかあんまり意識せずに使えると思ってましたが、こういう場合は
別なんでしょうか?
812デフォルトの名無しさん:2006/10/22(日) 14:39:45
つっこみどころが満載でもう何ていったらいいか…
813デフォルトの名無しさん:2006/10/22(日) 15:08:38
>>810
ActiveState のリポジトリには SOAP-Lite 自体は無いので、
Winnipeg をリポジトリに加えて最優先にした上で
ppm> upgrade -install -precious SOAP-Lite
http://www.ss.iij4u.or.jp/~somali/web/_ppm.html#rep_about
http://theoryx5.uwinnipeg.ca/cgi-bin/ppmserver?urn:/PPMServer58

>>811
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#what_is_the_difference_between__array_1__and__array_1_
814デフォルトの名無しさん:2006/10/22(日) 15:25:53
>>811
とりあえず配列じゃないので試してみたらどうかね?
815619:2006/10/22(日) 19:08:02
>813

有難う御座います。
自己レスになってしまうのですが、


ppm> search SOAP::lite
Searching in Active Repositories
1. ResourcePool-Resour~ [1.0101] SOAP::Lite bindings for ResourcePool
2. SOAP-Lite-InstanceE~ [0.02]
3. SOAP-Lite-SmartProxy [0.11] URI Redirection and Forwarding for SOAP-Lit~
4. SOAP-Lite-Utility [0.01] Utilities for SOAP::Lite client programs


ppm> describe 3  <----------------コレ
====================
Package 3:
Name: SOAP-Lite-SmartProxy
Version: 0.11
<略>
====================

上記のように、正式名が分かりました。



816619:2006/10/22(日) 19:08:37
続き

また、
C:\myPerl>perldoc -l SOAP::lite
C:\Perl\site\lib\SOAP\lite.pm
から、SOAP::liteは、V5.8.6には入っているようです。

追加質問
http://theoryx5.uwinnipeg.ca/cgi-bin/ppmserver?urn:/PPMServer58
が、値を返さない?ようなのですが、何か間違っていますでしょうか?
817619:2006/10/22(日) 21:17:42
続き

>816
自己解決しました。

リポジトリに追加するわけですね。
納得しました。

すみませんが、再度追加質問です。

Time::JuliasDay のモジュールはどこで手に入ります
でしょうか?
active stateやこのwininpeg

には無いようでした。
すみませんが、宜しくお願いします。
818デフォルトの名無しさん:2006/10/22(日) 21:39:16
Time::JulianDayじゃないの?
ppmにあるのかしらんけど
819816:2006/10/22(日) 22:06:25
>818
そうです。

間違えました。Cpanに有るのは確認しました。
http://search.cpan.org/~muir/Time-modules-2006.0814/lib/Time/JulianDay.pm

だけど、インストールで
makeしろってあるのですが、windowsなので手詰まりです。。。
820デフォルトの名無しさん:2006/10/22(日) 22:17:39 BE:110391252-BRZ(3636)
pure perlだからmake必要なす
821816:2006/10/22(日) 22:28:17
>820
そうなんですか。

Cpanからダウンロードして、解凍すると
libの下にtime と t というフォルダがあります。
libはいいとして、tは何か必要なのですか?

宜しくお願いします。
822デフォルトの名無しさん:2006/10/22(日) 23:21:47
Windows でも make はできる。nmake とか cygwin とか。
てっとりばやいのは nmake なので、検索してダウンロードしてパスが通ったとこにおいて
コマンドプロンプト開いて、ソースのフォルダに cd して、nmake して nmake test して nmake install。
823816:2006/10/23(月) 01:45:47
>822
有難う御座います。

nmake test
で、エラーが発生しました。

ですが、
構わず、nmake install
をしました。

一応インストールはできたと思うので、
確認してみます。
824デフォルトの名無しさん:2006/10/23(月) 16:05:09
>>821
tはテスト用ディレクトリだと思った。
825デフォルトの名無しさん:2006/10/23(月) 17:03:30
826デフォルトの名無しさん:2006/10/23(月) 22:04:53
cryptの戻り値がどんな文字から構成されるかって
どこみれば書いてありますかね?
体験的には英数字 . / のようなんですけど
, とか=なんかデリミッターで使いそうな文字返されると
やばいんで。。
827デフォルトの名無しさん:2006/10/23(月) 22:08:09
>>826
どうせCのライブラリ呼んでるだけなんでこのへんで。

ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/crypt.3.html
828デフォルトの名無しさん:2006/10/23(月) 22:25:03
perldoc -f crytpの方が適切だな
829デフォルトの名無しさん:2006/10/23(月) 22:35:44
>>826
> どこみれば書いてありますかね?

>>622-623
830826:2006/10/23(月) 22:49:46
ありゃ外出でしたかorz
でも、827-828どっちみても今ひとつ確信がもてない。。。
827には、「13 の印字可能な ASCII 文字からなる」なんて書いてあるし
828での具体的な説明はsaltだし、
うちのCライブラリには、cryptもどきしかいないし
831デフォルトの名無しさん:2006/10/23(月) 23:07:54
>>830
他人が信用できないならソース読むとか。
サーブルさんのとこにpure perlなのがあったと思う。
832デフォルトの名無しさん:2006/10/23(月) 23:12:03
>>830
うちでは5.8.8を入れているが、perldoc -f perlfunc のこの部分にしっかり
書いてあるだろ。

Traditionally the result is a string of 13 bytes: two first
bytes of the salt, followed by 11 bytes from the set
"[./0-9A-Za-z]", and only the first eight bytes of the digest
string mattered, but alternative hashing schemes (like MD5),
higher level security schemes (like C2), and implementations on
non-UNIX platforms may produce different strings.
833デフォルトの名無しさん:2006/10/23(月) 23:14:09
>>826
cryptがどうなってるか調べるより、デリミタでやばい文字を含む場合の
エスケープを実装しとけば今後何があっても安心だ。
834デフォルトの名無しさん:2006/10/23(月) 23:26:36
よしんば crypt() の返り値にデリミタっぽいモノが混入してたとして、不具合が生じるような用途って思いつかないんだけれど…。
僕が知らないだけで色々あんのかな。
835826:2006/10/23(月) 23:33:24
>>832
おっと、うちのperlが古かったんだ(v5.6.1)。 そんなdocは出てこなかったです。

>>833
そのエスケープするロジックは、もう入ってるんすよ。
んで、[a-zA-Z0-9./]が保証されるんなら、無駄なロジックだから捨てようかと

今10万回ループさせてみたけど、何故か '0' だけ返ってこない
836デフォルトの名無しさん:2006/10/23(月) 23:40:45
じゃあ 0 は除外すりゃいいだろ。
好きにしてくれ。
837826:2006/10/23(月) 23:47:47
まあまあ、そう怒らずに。。。
>>832 参考になりました。 感謝です。
838デフォルトの名無しさん:2006/10/24(火) 18:04:50
しつもん!perlからSQLファイルをキックすることって出来ますかね?
既に.sqlファイルはあるんですが、それをperlで動かすことになってしまって・・
839デフォルトの名無しさん:2006/10/24(火) 18:07:59
ちなみにpostgreです。バカ長いSQLウンコー!(゚∀゚)!
840デフォルトの名無しさん:2006/10/24(火) 18:35:11
perldocの日本語版ください
841デフォルトの名無しさん:2006/10/24(火) 18:42:46
842デフォルトの名無しさん:2006/10/24(火) 20:55:00
perl入力された値がすべて英文字、数字、英文字と数字まじだ 判断方法を教えてくれ

843デフォルトの名無しさん:2006/10/24(火) 20:56:03
日本語でおk
844デフォルトの名無しさん:2006/10/24(火) 21:37:51
よし、無理やり脳内補完すると、
「perlに入力された値が
1. すべて英文字
2. すべて数字
3. 英文字と数字まじり
判断方法を教えてくれ」

\wとか\dでパターンマッチさせればいいんでない?
845デフォルトの名無しさん:2006/10/24(火) 21:42:44
\w って初心者だと思って馬鹿にしないでください。
846デフォルトの名無しさん:2006/10/24(火) 21:50:39
純粋なアルファメリックを一発で指定できないのはつらいよね
847デフォルトの名無しさん:2006/10/24(火) 22:18:13
>>846
m/\p{alpha}/
でマッチするんじゃなかったっけ?
848デフォルトの名無しさん:2006/10/24(火) 22:25:18
>>838
ええと、定石だけれど、DBI を使うといいんじゃないかな。
849デフォルトの名無しさん:2006/10/24(火) 22:50:28
ええと、定石だけれど、DBIC を使うといいんじゃないかな。
850デフォルトの名無しさん:2006/10/25(水) 03:20:54
849の優しさに溜飲
851デフォルトの名無しさん:2006/10/25(水) 09:20:11
>>849
テキストファイルにSQLが書いてあるのをperl経由で流したいって話だから
O/Rマッパーはいらないんじゃね?
852デフォルトの名無しさん:2006/10/25(水) 09:52:35
これから>>849でオナります
853デフォルトの名無しさん:2006/10/25(水) 13:31:19
>>848-852
thx!

ただDBIを使ってSQL文を一文づつ実行してるプログラムは書いたことがあるのですが、
テキストファイルのSQLを流すサンプルが見つからなくてイマ混乱中ですた。
一生懸命探してみます。こんな教えて厨みたいな質問にかまってくれてありがとうございました!
854デフォルトの名無しさん:2006/10/25(水) 13:34:14
悩むのがいやならsystemでpsqlに食わす手もあるがな。
855デフォルトの名無しさん:2006/10/25(水) 16:58:32
>854
うーむ・・わからん漏れは厨房ネ申
不可能じゃないと分かっただけで収穫だ。
(;; @u@)ノシ おはようビームっ!!
856デフォルトの名無しさん:2006/10/25(水) 17:49:36
マッチングで右辺を変数にしたいのですが・・・

if ( $hoge =~ /^abc/ ) {

のつもりで

$str = 'abc';
if ( $hoge =~ /^$str/ ) {

としたのですが、うまくいきません。/^\$str/としてもやっぱりだめ。
右辺を変数にするにはどうしたらいいのでしょう?
857デフォルトの名無しさん:2006/10/25(水) 18:20:20
>>856
それで間違っていない。何かのミスだと思うので再確認汁。

これだけじゃなんなので幾つかアドバイス
$strに入るのが正規表現じゃなくて単なる文字列なら/^\Q$str\E/としてエスケープしてやると吉。
逆に正規表現が入るならqr//を使うといいかもしれない。詳細はperlopをqrで検索。
858デフォルトの名無しさん:2006/10/25(水) 18:23:47
859デフォルトの名無しさん:2006/10/25(水) 18:44:21
あ、あの
テキストファイルの中身を書き換えたり
せ、正規表現というか、そういう物の具体例か定石がたくさんあるサイトか安い本紹介して欲しいんですけど
860デフォルトの名無しさん:2006/10/25(水) 18:48:26
けどなに
861デフォルトの名無しさん:2006/10/25(水) 19:00:19
>>857
そうですか
確認してみます〜ありがとん

ヒントもありがとうです。
862デフォルトの名無しさん:2006/10/25(水) 19:41:16
>>859

【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
863デフォルトの名無しさん:2006/10/25(水) 20:22:40
>>859
自分はこの本しか持っていなけど、一応、重宝している。

正規表現ケーススタディブック
http://www.amazon.co.jp/gp/product/4839913870/
864デフォルトの名無しさん:2006/10/25(水) 20:29:06
while ( 1 ) {
print "入力してください";
my $line = <STDIN>;
chomp($line);
makearray($line);
print $#a;

}
sub makearray {
my $number = shift;
print $number, "個作成します\n";
my @a;
for ( 1.. $number ) {
push @a, "k";
}
@a = ();
}
上のような配列を作成するスクリプトを書いたのですが
ループを抜けてもプログラムのメモリを開放してくれません。
OSはwindowsXP SP2なのですがどのようにしてメモリを開放させれば
いいのでしょうか?
865デフォルトの名無しさん:2006/10/25(水) 21:01:02
>>864
なんでmakearrayの外で配列を参照しようとしてるの?
メモリが開放されてるかどうかはどうやって確かめたの?
866デフォルトの名無しさん:2006/10/25(水) 21:04:28
>>862
サンクス、いろいろ覗いてみるよ
>>863
ありがとう、
探してた本とピッタリっぽいから、注文してみる
867デフォルトの名無しさん:2006/10/25(水) 21:06:41
>なんでmakearrayの外で配列を参照しようとしてるの?
これは特に意味が無いです。検証用に書いたのを消し忘れました。
>メモリが開放されてるかどうかはどうやって確かめたの?

ウィンドウズ付属のタスクマネージャーで
仮想メモリとメモリ使用量の項目で確かめました。
又、ProcessWalkerというソフトでも同じ結果になりました。
868デフォルトの名無しさん:2006/10/25(水) 21:21:04
こんなのでもメモリ確保&開放されてるの普通に確認できたよ?

while(1){
&a;
print "Enterを押すと次のループに入ります";
my $in = <STDIN>;
}
sub a{
my @a = ();
my $text = "";
print "Enterを押すと256*20000byte(5Mbyte)の配列を確保します";
my $in = <STDIN>;
$text .= chr($_) for(0..255);
push(@a , $text) for(1..20000);
print "Enterを押すとブロックを抜けてメモリが開放されるはずです";
$in = <STDIN>;
}
869デフォルトの名無しさん:2006/10/25(水) 21:53:44
ちょっと疑問に思ったんだが、MovableTypeとかPerlで書かれてるソフトあるけど、あれってソース公開しなくていいのかな?
絶対GPLのライブラリとか使ってると思うんだが…
870デフォルトの名無しさん:2006/10/25(水) 22:29:29
>>869
?
だめでしょ。
871デフォルトの名無しさん:2006/10/25(水) 22:46:14
>>869
Perl言語に詳しい人に質問スレに回答しておいたよー
872デフォルトの名無しさん:2006/10/25(水) 23:45:40
プギャー
873デフォルトの名無しさん:2006/10/26(木) 00:34:57
質問なのですが
テキストを1行ずつ読み、合致する文章があれば
置換するというプログラムを書いているのですが
うまくいかず困っております・・・

@ARRAY = ("01 100 200", "02 100 300") ;
@ARRAY_REP = ("01 100 200 300", "02 100 300 400");・

テキストを1行ずつ読み
配列ARRAYの中身と比較し、その文章があれば
その1行をARRAY_REPのの中の要素に置換したいのです。

例えばテキストの中身1行が
01 100 200 700 800
という行であった場合
ARRAY[0]の要素と合致するのでARRAY_REP[0]の中身で
01 100 200 300 800
というように置換したいのですがうまくいかず困っております・・・
どなたか分かるお方いらっしゃいましたらご教授お願いします。
874デフォルトの名無しさん:2006/10/26(木) 00:42:58
ハッシュを使って、
$HASH{"01 100 200"} = "01 100 200 300"
$HASH{"02 100 300"} = "02 100 300 400"
・・・
というのを作っておく。
テキストがハッシュのキーにあれば、そのハッシュの値で置き換えればいい。
875デフォルトの名無しさん:2006/10/26(木) 00:47:36
俺もハッシュ使った方がいいと思うが。
もしこの配列でやるならこんな感じ?
必要ならchompして。

open IN, "テキスト";
while (<IN>) {
    s/$ARRAY[$_]/$ARRAY_REP[$_]/ for (0 .. $#ARRAY);
}
close IN;
876デフォルトの名無しさん:2006/10/26(木) 00:51:27
>>874 875
ありがとうございます!
ハッシュは難しそうだと断念しておりましたが
また勉強がてらやってみます。

回答どうもありがとうございました
877デフォルトの名無しさん:2006/10/26(木) 01:02:38
>>869
わかんねーな。
GPLのライブラリ(CGIモジュールとか)使ってるならソース公開必須じゃね?
878デフォルトの名無しさん:2006/10/26(木) 01:21:06
難しい問題だね。誰か詳しい香具師いないのかな?
879デフォルトの名無しさん:2006/10/26(木) 01:31:38
答える気は無いが、とりあえずCGIモジュールはGPL一本じゃないとだけ言っておく。
| This library is free software; you can redistribute it and/or modify
| it under the same terms as Perl itself.
terms as Perl itselfとはGPLとArtistic Licenseのデュアルライセンスのことだ
880デフォルトの名無しさん:2006/10/26(木) 01:36:12
っていうか、意味不明。
881デフォルトの名無しさん:2006/10/26(木) 02:48:11
ソース公開しているじゃん
882デフォルトの名無しさん:2006/10/26(木) 03:58:01
>>1の意味が解かりません
883デフォルトの名無しさん:2006/10/26(木) 04:07:51
ゆとり教育の弊害か
884デフォルトの名無しさん:2006/10/26(木) 04:10:26
まぁその言い回しも偏差値低い系のそれだけどね
885デフォルトの名無しさん:2006/10/26(木) 05:37:08
○○系って日常会話では久々に聞いたな
886デフォルトの名無しさん:2006/10/26(木) 05:59:58
日常会話w
887デフォルトの名無しさん:2006/10/26(木) 07:15:13
これperlでやるとどうなるんだ

213 :名無しさん@お腹いっぱい。:2006/10/25(水) 16:35:32
第一フィールドがmm/dd/yyyy
第二フィールドがhh:mm:ss
第三フィールドが""で囲まれたアカウント名

となっている。
「アカウント名が重複しているものは、その最新日付のみを残して、
他の重複行はすべて削除」
という具合にしたい。
uniqを使えばいいのかもわからないが、やっぱりわからない。
どうすればいいだろう。

08/11/2006 14:29:50 "yamamoto"
03/03/2006 06:40:53 "yamada"
05/17/2005 07:45:07 "yamada"
07/13/2005 04:18:04 "yamada"
07/13/2005 13:17:56 "yamada"
08/04/2005 11:03:05 "yamada"
08/11/2005 05:54:56 "yamada"
08/11/2004 07:58:53 "yamada"
12/07/2005 13:54:19 "yamada"
12/22/2005 00:26:49 "yamada"
08/05/2005 02:48:41 "kinosita"
08/05/2005 11:49:58 "kinosita"
08/05/2004 11:51:45 "kinosita"
08/06/2005 04:55:50 "kinosita"
02/21/2005 16:34:40 "akie"
02/21/2005 17:47:14 "akie"
888デフォルトの名無しさん:2006/10/26(木) 07:50:28
行がランダムだとするならDate::Manipあたりで日付と時間をパースして
比較する必要がありそうだが、例のデータをみるとユーザ別に古い
ものから順にソートされているようにも見える。ソートされてるなら
いちいち日付と時間を見る必要はない。その辺の条件はどうよ。
889デフォルトの名無しさん:2006/10/26(木) 09:12:48
>>887
use Date::Manip;

my %e;
while (<>) {
my ($ymd, $hms, $u) = split;

my $t = ParseDate("$ymd $hms");

if (!exists $e{$u} || $t > $e{$u}->{t}) {
$e{$u} = { t => $t, lno => $., s => $_ };
}
}

for (sort { $e{$a}->{lno} <=> $e{$b}->{lno} } keys %e) {
print $e{$_}->{s};
}

ParseDate使わなくても6つの数字を取り出して並べ替えれば
比較できるからモジュール使うの嫌いな人はがんばれ。
890デフォルトの名無しさん:2006/10/26(木) 10:15:06
入力時点でデータの先頭に余分な0をつけて入力する人がいます 例:01など
これを01〜09の範囲で取り除く方法を教えてください。

Googleで Perl 0 取り除く等で検索しましたが、わかりませんでした・・
891デフォルトの名無しさん:2006/10/26(木) 10:27:18
s/^0//
892デフォルトの名無しさん:2006/10/26(木) 10:46:11
*1
893デフォルトの名無しさん:2006/10/26(木) 13:57:37
>>887
雲丹板のシェルスクリプトスレで
答え出てんじゃねーかYO!!
894デフォルトの名無しさん:2006/10/26(木) 14:45:51
あっちはシェルだからperlで書いたらどうなるって疑問は
あってもいいのではないか。
895デフォルトの名無しさん:2006/10/26(木) 17:37:53
昔、何かの言語で "printn"だか"println" とかいう関数で
print文の最後を改行してくれるやつがあったと思うのですが
perlで実現するには、どうすればいいですか?

使い捨てのスクリプトを書いてるときいちいち改行を最後に付け足すのが面倒です。
896デフォルトの名無しさん:2006/10/26(木) 17:45:06
#!/usr/local/bin/perl -l
use strict;
use warnings;

print "HOGE";
897デフォルトの名無しさん:2006/10/26(木) 17:59:09
-lはprintで改行つけるだけじゃない(こともある)ので、マニュアル読んで
理解してから使えよ。
898デフォルトの名無しさん:2006/10/26(木) 18:13:08
-lの原文: enable line ending processing, specifies line terminator
899デフォルトの名無しさん:2006/10/26(木) 19:18:54
$_ = "feel like dance
globe
I BELIVE";

m/dance$.*^I/ms and print "1\n";
m/dance\$.*^I/ms and print "2\n";
m/dance\n.*^I/ms and print "3\n";


を実行すると、3 としか表示されないのですが、正規表現の `$' は正規表現の
最後でしか許されないのでしょうか?

perl-5.8.7 を使用しています。
よろしくお願いします。
900デフォルトの名無しさん:2006/10/26(木) 19:28:00
>>899
qr/dance$.*^I/ms
qr/dance\$.*^I/ms
qr/dance\n.*^I/ms
をそれぞれprintして見比べて見れ。
901895:2006/10/26(木) 20:21:56
>>896-898 レス thx!

あーーーでも"-l"だと多分使い捨てスクリプト中の全てのprintに影響
しチャ運ですよね。改行したくない場合もあるし。

alias みたいにちょこっとだけ動作を加えた関数を作れんもんかと思って
聴いてみたんですが、自分ではサブルーチン作るぐらいしか思いつかないし。
902デフォルトの名無しさん:2006/10/26(木) 20:35:38
Smart::Commentsでも使うといいんじゃないか?
903デフォルトの名無しさん:2006/10/26(木) 21:37:30
つPerl6::Say
904デフォルトの名無しさん:2006/10/26(木) 21:47:05
.NETのDESCryptoServiceProviderで暗号化されたパスワードを
Perlで復号化しなくちゃならなくなったんだけど、Crypt::DESじゃ
復号できないっす。鍵と初期化ベクタはわかっています。
何か良い方法知ってる人はいませんか?
905895:2006/10/26(木) 22:08:17
>>903
まさにこれです!
Perl6からは use しなくていいんですね。辛抱します。

>>902
こんなのが存在するのを知りませんでした。
スクリプトの書き方自体が変わりそうです。

ありがとうございました。
906デフォルトの名無しさん:2006/10/26(木) 22:14:35
$\="\n";
じゃ駄目なん?
907デフォルトの名無しさん:2006/10/26(木) 22:35:31
a b(cd ef) g(hij) k(lm no pq) r s(tu)
のような入力がある時、
括弧内の空白文字だけアンダースコアに変換する
スクリプトの書き方を教えてください。

ちなみに上の例だと
a b(cd_ef) g(hij) k(lm_no_pq) r s(tu)
となって欲しいんです。

お願いします。
908デフォルトの名無しさん:2006/10/26(木) 22:45:39
こんなのしか思いつかないや
s{\(.*?\)}{$_ = $&; tr/ /_/; $_}ge
909907:2006/10/26(木) 22:59:40
>908
ありがとうございます!
置換の中でeオプションを使うのがコツなんですね。

今日数時間考えてもわからなかったのに10分程度で解答をもらえるとは…。

精進します。
910デフォルトの名無しさん:2006/10/26(木) 23:10:32
-wスイッチとuse warningsの違いが分からないんですが
わかりやすく解説しているところがあれば教えてもらえないでしょうか?
どちらを使うべきなんでしょうね…
911デフォルトの名無しさん:2006/10/26(木) 23:33:05 BE:66235223-BRZ(3800)
>>910
perldoc perllexwarn
912デフォルトの名無しさん:2006/10/26(木) 23:49:03
で、perlって何ができるの?
913デフォルトの名無しさん:2006/10/26(木) 23:58:43
Perlでスクリプトを書けますよ^^
914デフォルトの名無しさん:2006/10/27(金) 00:13:34
書けないんだもんっ
915デフォルトの名無しさん:2006/10/27(金) 01:39:49
>>911
回答ありがとうございます。
ドキュメントの解読と自分が理解するための検証に時間がかかりました… orz

概ね、-wは全体に、use warningsは部分的に効くという感じでOKでしょうか?
結局みなさんはどちらを使ってますか?
916デフォルトの名無しさん:2006/10/27(金) 09:27:59 BE:132470126-BRZ(3800)
他人が書いたモジュールの心配もしたいなら-w
そうでなければwarnings
もちろん5.6以降でだけど
917デフォルトの名無しさん:2006/10/27(金) 12:34:17
>>900
(?ms-xi:dance*^I)
(?ms-xi:dance\$.*^I)
(?ms-xi:dance\n.*^I)
となりました。perlop と perlre を読んでみましたが、よくわからないです…。
もうちょっと、ヒントもらえませんでしょうか?
918デフォルトの名無しさん:2006/10/27(金) 13:54:25
>>917
それはあんまり関係なくて、$.と続けて書くと変数$.が埋め込まれるから
期待しない動作になっていると思われる。$(?:).として変数に解釈されない
ようにするか、m'...'の形にして変数展開を抑制するとよい。
919デフォルトの名無しさん:2006/10/27(金) 14:08:40
配列名を直接書いてサブルーチンに引き渡す時、サブルーチン側で配列の
中身を直接書き換えることができるってことは、配列のコピーを渡すので
はなく、各要素へのポインタを渡しているって理解でOkですか?

&func (@array)をCで書けば、
func (&array[0],&array[1],&array[2],,,,);
920デフォルトの名無しさん:2006/10/27(金) 14:25:57
while (<>) { print }

とすると、$_ にコマンド入力した文字が入っているようなのですが、

<>;
print ;

としても入っていないのは何故ですか?
921デフォルトの名無しさん:2006/10/27(金) 14:32:10
>>920
while () や for (;;) の条件に書いたときだけ特別扱い。
詳しくはperldoc perlopのI/O Operators参照。
922デフォルトの名無しさん:2006/10/27(金) 14:45:03
>>921
サンクス
923デフォルトの名無しさん:2006/10/27(金) 19:25:49
>>918
| only-once rule of "?PATTERN?" applies. If "'" is the delim-
| iter, no interpolation is performed on the PATTERN.
知りませんでしたー。ありがとうございました。
924デフォルトの名無しさん:2006/10/27(金) 20:51:38
list.txtの中に次のように一行だけの文字列がはいっています

1\n2\n3\n4\n5\n

-----------------------------------------
次に、下のようにlist.txtを読み込んで


open(OPEN,"<list.txt");
read(OPEN,$list,-s OPEN);
close(OPEN);
$list =~ s/\\n/\n/g;
print $list;

としても

下のように表示されません。、
読み込んだ時点で\nを文字列として認識してるみたいですが
改行として出力したいです


1
2
3
4
5
925デフォルトの名無しさん:2006/10/27(金) 21:32:22
>>924
readしたあとs///で置換する前の$listの値ぐらいは確認しろよ。
926デフォルトの名無しさん:2006/10/28(土) 02:12:58
>>916
遅くなりましたがありがとうございました。
自分の場合は自作ライブラリ全部にwarningsプラグマを書いてるのと
人が作った物の面倒は見たくないのでuse warningsで行こうと思います。
すっきりしますた〜
927デフォルトの名無しさん:2006/10/28(土) 10:26:03
speedyCGIはモジュールインストール時に既にシステムにインストールされているPerlを内包するのでしょうか。
それと/usr/bin/perlが15KB少々ですがperl自体のサイズってこんなもので
配布サイズのほとんどが標準モジュールとmanが占めていると考えて宜しいのでしょうか。
928デフォルトの名無しさん:2006/10/28(土) 17:47:28
>>927
perl の「本体」は lib/perl5/5.x.x/*/CORE/ 辺りに
置かれている libperl.so や bin/perl5x.dll だ。
929890:2006/10/29(日) 14:22:26
>>891
レス遅くなりましたが、ありがとう
930デフォルトの名無しさん:2006/10/29(日) 14:56:26
最近,Perlを使ったCGIで特定IPを拒否するルーチン入れてあり,
そのリストにあるIPにも関わらず書き込みをされるのですが,どんな原因が考えられますか?
例えば,自分のIPが200.10.10.10の場合,正規表現で指定して(200.*.*.*)もきちんと自分は拒否されます。
それなのに,いくつかすり抜けてくる迷惑書き込みは,一体どのようにしてるのでしょうか?
当然,直接そのIPを指定しても,効果がありません。(上の場合なら,200.10.10.10)

考えられるのは,@Perlが取得するIPアドレスの関数が偽装される。←可能なんでしょうか??
A違うCGIで直接ログファイルに書き込まれている。
というくらいしか思いつきません。
@はともかく,Aに関しては,プロバイダがHi-HOなので,こちらで細かいパーミッションの指定ができません。(たぶん)
他にも原因や対策がありますか?
931デフォルトの名無しさん:2006/10/29(日) 15:07:57
どなたかエスパーはおられませんかぁ〜
932デフォルトの名無しさん:2006/10/29(日) 15:30:22
>>930
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
933930:2006/10/29(日) 15:57:47
そちらのどこに書き込もうか迷ってこちらに・・・。
WebProg板のどこかで聞いてみます。
934デフォルトの名無しさん:2006/10/30(月) 13:02:49
質問です。
eachを用いて処理する時に途中で(if が真になり)
やめた場合、次にeach(%xxx)) を呼び出した時に全部処理されませんよね?
$xxx{'t'} = "t"
$xxx{'b'} = "b"
二回目の時は真にならないのですがそういう仕様なのでしょうか?

while (($key, $value) = each(%xxx)) {
 if ($key eq "t") {
  return $value;
 }
}
935デフォルトの名無しさん:2006/10/30(月) 13:11:12
CGIで巨大ファイルを読みながら出力するプログラムを書いてるのですが
これって相手が低速の場合、読み終わるまでの時間は変化しますか?
10MBぐらいで相手が10分かかる場合とか

936デフォルトの名無しさん:2006/10/30(月) 13:26:44
スレ違いだけど、サーバー側の処理は相手の速度には関係ないでしょう
937デフォルトの名無しさん:2006/10/30(月) 13:38:59
>>934
そういう仕様。

eachの繰り返しを途中でやめてまた最初からやりたければリセットが必要。
リセットするには(voidコンテキストで)keys %xxxしろということになっている。

詳しくはperldoc -f eachやperldoc -f keysをよく読め


938935:2006/10/30(月) 14:31:57
>>936
ありがとうこざいました。
939デフォルトの名無しさん:2006/10/30(月) 14:47:44
>>937
そうでしたか
使いにくいですね
940デフォルトの名無しさん:2006/10/30(月) 16:10:15
>>934のようなマヌケなコードを書く人間に、
使いやすいか使いにくいかを判定する能力はない。
941デフォルトの名無しさん:2006/10/30(月) 16:11:29
grepとか使えるんですか?
keyとvalueが一緒ってことですか?
942デフォルトの名無しさん:2006/10/30(月) 16:14:54
誰か exists を教えてやろうぜw
つか each の仕様で困ったことないなあ……。
943デフォルトの名無しさん:2006/10/30(月) 18:32:58
return map { $_->[0]->new }
         sort { $b->[1] <=> $a->[1] }
         map  { [ $_, $priority{$_} // 10 ] }
         _plugins;

return map  { $_->new }
         sort { ( $priority{$b} // 10 ) <=> ( $priority{$a} // 10 ) }
         _plugins;

上の二つだったらどっちがいいと思う?ベンチマーク結果じゃなく読みやすさ優先で。
_pluginsはプラグインのリストを返す関数で、%priorityに優先度が入ってる。
$x // $y はdefined $x ? $x : $yになるようにソースフィルタを書いてある。
944デフォルトの名無しさん:2006/10/30(月) 20:02:45
for(my $count = 0; $count < 10; $count = $count + 1);

 my $socket = IO::Socket::INET->new(PeerAddr => 'localhost', PeerPort => 6544, Proto => 'tcp');
 
 my $live : shared = 1;
 my $t2 = undef;
 die "接続できませんでした。\n" if ( ! $socket );
 {
  print "connect\n";
  
  #### K (Kill) を受信したら、action 処理を中断させるスレッドを立てる
  $t2 = threads->create(sub {
   while(<$socket>)
   {
    print "受信: $_";
    
    last if (!defined($live));
    
    if ($_ =~ /^[kK]/){ \&abort_action(); }
   }
945944:2006/10/30(月) 20:03:47
   
   $socket->close(); # これが動いてくれない。でもスレッドは終了しちゃう。
  });
 }
 
 \&action(); # スレッドから終了させたい。
 
 $live = undef;
}

ActivePerlでこんなかんじの処理を書きました。
サーバーからのKill信号を受信して、長時間かかる処理を中断させるという処理です。
で、処理の中断まではちゃんと動くのですが、$socket->close を呼んでも $socket が閉じてくれません。
$socketをちゃんと閉じるにはどうすればいいのでしょうか?おしえてください。
946デフォルトの名無しさん:2006/10/30(月) 21:01:59
>>942
だよねぇ。 根本的にeachの用途を間違ってるよね。
947デフォルトの名無しさん:2006/10/30(月) 21:43:44
>>943
プラグインが1万個あるんじゃなければ後者でいいや。なんとなく無駄
っぽいけど添え字で見難いよりはややましな気がする。

自分なら、はじめから優先度順にならべたプラグインの配列をつくるか、
プラグイン->priority で優先度取れるようにするかな。
948デフォルトの名無しさん:2006/10/31(火) 05:29:00
>>936
>スレ違いだけど、サーバー側の処理は相手の速度には関係ないでしょう
スレ違いだけど、クライアント側が遅いとサーバ側も引きずられるでしょ。
949デフォルトの名無しさん:2006/10/31(火) 08:04:27
>>943
シュワルツ変換になれてるヒトだったら前者。

それよりも
> $x // $y はdefined $x ? $x : $yになるようにソースフィルタを書いてある。
sort { ( $priority{$b} || 10 ) <=> ( $priority{$a} || 10 ) }
|| 適用しないの?
950デフォルトの名無しさん:2006/10/31(火) 09:18:49
>>949
priorityが0のことがあるんじゃないの?
951デフォルトの名無しさん:2006/10/31(火) 10:42:25
>>948
バカなの?

CGIが全部データを書き出してからクライアントに送信されるだろ?
だからファイル全部読み込んだらCGIプロセスはおわるだろ?
952デフォルトの名無しさん:2006/10/31(火) 11:14:33
……
953デフォルトの名無しさん:2006/10/31(火) 11:19:55
あれ間違ってた?
954デフォルトの名無しさん:2006/10/31(火) 11:38:06
……
955デフォルトの名無しさん:2006/10/31(火) 12:19:34
>>950
あそういうことか
956デフォルトの名無しさん:2006/10/31(火) 12:48:52
957デフォルトの名無しさん:2006/10/31(火) 13:05:46
元ネタは>>935

>>948はとりあえずおかしい
送信までのプロセスや回線速度、戻ってきたものの処理(表示とか)
に時間はかかるかもしれないが、そのせいでサーバ側の処理が遅れることはない
サーバ側がレスポンスを待つようなら別だけど。
で、合ってますか?


>>951
しむらー!出力!出力!!
958デフォルトの名無しさん:2006/10/31(火) 13:19:59
>>957
もうすこし仕組みを勉強した方がいいよ。
959デフォルトの名無しさん:2006/10/31(火) 13:31:53
>>958
わかってんの?wwwwwww
960デフォルトの名無しさん:2006/10/31(火) 13:38:57
みなさん、ここは「質問箱」であることを忘れずに。

教育的指導を行なう際は、ヒントや、学習を始めるポイントを提示しましょう。
961957:2006/10/31(火) 13:53:09
>>958
どこが間違ってる教えてください。

この流れだと誰も正解を言わないと思ったので流れ変えたんです
まぁスレ違いですが。
962デフォルトの名無しさん:2006/10/31(火) 13:58:53
CGIでファイルをクライアントに送るとき、たいていは一度に全部読み込んで
送るようなコードは書かずに

while (バッファに適当な量読む) {
バッファを出力
}

みたいな書き方になるだろう。出力はは最終的にはOSのTCPスタックまで行くわけ
だが、クライアント側が読み出して残りがある一定量以下になるまではブロックする
ので、ここで待たされて先にはいかない。したがってファイルの読み出しも間欠的に
ちょろちょろ行われることになる。かかる時間をみるとクライアント側の読み出し時間
で大体決まる。読み出しのためにCPUなりIOなりが働いている時間はそのうちのごく
わずかではあるが。

もちろんメモリを豪華に使って最初に全部読み込んだり、mmap使ったりsendfile使ったり
するとまた話はいろいろ違ってくるだろうがね。
963デフォルトの名無しさん:2006/10/31(火) 14:04:29
難しいのは日本語だということがよくわかった
964デフォルトの名無しさん:2006/10/31(火) 14:09:36
>>957
罰として次スレ立てなさいw
965デフォルトの名無しさん:2006/10/31(火) 14:13:30
要はプログラムは標準出力という宅配ボックスの中にデータを
出来た物からポンポン放り込み、宅配業者はそれを自分のペースで
取ってくんでしょ。
966デフォルトの名無しさん:2006/10/31(火) 14:32:31
>>965
宅配ボックスがパムパムになるとプログラムは宅配業者を待つしかできなくなる。
967957:2006/10/31(火) 14:56:41
たててきました

Perlについての質問箱 28箱目
http://pc8.2ch.net/test/read.cgi/tech/1162273941/
968デフォルトの名無しさん:2006/10/31(火) 15:12:29
>>966
現実的にパンパンになるweb出力なんてあるのかい?
ストリーミングとかかい?
って、質問が何を10M、どう出力してんのか曖昧すぎて
話しにならん。 もうしーらねっと。
969948:2006/10/31(火) 16:21:00
>>957
>>>948はとりあえずおかしい

確かに日本語が曖昧だった。
オレはクライアントへの出力について言ったつもりで、
ファイルreadのつもりじゃなかった。
(ファイルreadがクライアント側と関係ないのは当たり前だと思ったので)

>>962が書いていることで良いんじゃまいか。
970935:2006/10/31(火) 16:24:50
どうもです。
とあるアップローダーを無料サーバーで運営しています。
認証しないとダウンできないようにCGIを介してダウンロードさせる
仕組みなのですが無料サーバーゆえに30秒以上たつとプロセスが自動で
終わってしまうのです。サーバー側のバッファに溜まると思ったのですが
違うようですね。低速の方の場合は途中で切れてしまうようなので他の事
考えて見ます。ありがとうこざいました。
CGIはだだ
ファイルを少し読み込んで出力のくりかえしです。



971デフォルトの名無しさん:2006/10/31(火) 16:38:39
どうみてもPerlと関係ない話です。
CGIの話は>>1のテンプレに従って他のスレでやってください。
972デフォルトの名無しさん:2006/10/31(火) 16:40:35
出力と、ソケットをごっちゃにしてる人がいるな。
973デフォルトの名無しさん:2006/10/31(火) 17:11:50
win32::OLEとsamieで IEを操作しようと思うのですが、
アドレスとソースの取得はどのようにやればいいのでしょうか?
974デフォルトの名無しさん:2006/10/31(火) 17:38:08
ume
975948:2006/10/31(火) 17:39:51

976943:2006/10/31(火) 18:12:21
>947
せいぜい100程度のオーダーなので、シュワルツ変換持ち出すまでもないかなぁ。
Module::Pluggableをつかっているので、はじめから優先度順に並べるとかできないのです。
plugin->prioriryも考えたのですが、優先度の高い順に試して、最初にマッチしたプラグインを
使うようにしたので、その案は取りやめました。

>949
自分で書いてみてどっちにしようか悩んでいたので、参考になりました。
>950さんが言っているとおり、priotrityが0の場合があるので、||は使えませんでした。

とりあえずシュワルツ変換を使った方法にしようと思います。ありがとうございました。
977デフォルトの名無しさん:2006/10/31(火) 18:30:38
質問です!

CSVファイルのデータを元に、テキストファイル内の語句の検索・置換を行いたい。

CSVファイル(数十万行)
あ,い
う,え
・・・・・

確認なしで一括置換

どのようにすればよいでしょうか?
もしくは、どこか参考になるサイトをご紹介ください。
978デフォルトの名無しさん:2006/10/31(火) 18:38:34
>>977
そのCSVファイルはデータとしてカンマや改行を含む? 含まない?
含まないなら本当のCSVとして全部解釈する必要がなくなるから
処理は簡略化できるよ。
979デフォルトの名無しさん:2006/10/31(火) 18:43:41
含みません。
980デフォルトの名無しさん:2006/10/31(火) 18:51:20
つエクセル
981デフォルトの名無しさん:2006/10/31(火) 19:30:16
うーん
エクセル、秀丸でやってみたんですけど、実行速度が遅すぎてどうにもなりません
そこで、文字列処理に強いと謳われている、perlで処理すれば、パッとできるのかな、と。

perlもエクセル程度の速度ですか?

そんなもんなんですか? perlって・・・・・・
982デフォルトの名無しさん:2006/10/31(火) 19:47:22
>>981
perlの方が断然早いはず。
ファイルの読み書きと正規表現の勉強が必要だね。
perl入門と言ってるまともなサイトなら、
だいたいどこでもやり方は書いてあると思う。
983デフォルトの名無しさん:2006/10/31(火) 20:02:41
早いですか!

1万行処理したぐらいで止まるようなアプリって、どうなんでしょうね

perlに期待です。
984デフォルトの名無しさん:2006/10/31(火) 20:29:40
perlエディタでお勧めのありますか?
985デフォルトの名無しさん:2006/10/31(火) 20:46:16
>>984
emacs
986デフォルトの名無しさん:2006/10/31(火) 21:48:27
>>984 ぶっちゃけJIS,ISO-2022,Shift_JIS,EUC-JP,UTF-8が扱えてればなんでもOK
987デフォルトの名無しさん:2006/10/31(火) 21:51:51
>>984
主要文字コードの文字と数値の対応表を全部暗記すればバイナリエディタでもおk
988デフォルトの名無しさん:2006/10/31(火) 21:54:47
>>984
vim
989デフォルトの名無しさん:2006/10/31(火) 21:58:23
>>979
じゃあ楽だな。
速度については処理によって微妙に変わる。

ところで具体的になにをどうしたいの?
990デフォルトの名無しさん:2006/10/31(火) 22:03:38
>>977
http://search.cpan.org/
でサチってみると幸福になれる。
991デフォルトの名無しさん:2006/10/31(火) 23:17:33
>>990
日本語でおk?
992デフォルトの名無しさん:2006/10/31(火) 23:35:01
読み込んだファイルの最初の空行以前と以後をそれぞれ別の配列に代入したくて

@retsu = <FH>;
push(@hai, shift @retsu) until ($retsu[-1] eq "\n");

こうしたのですが、いかにも効率が悪そうです。もっと良い方法はありますか。
993デフォルトの名無しさん:2006/10/31(火) 23:40:45
until するなら最初から while で回せよ(´・ω・`)
994デフォルトの名無しさん:2006/10/31(火) 23:42:53
読み込むときに別々にすりゃいいじゃん。
995デフォルトの名無しさん:2006/10/31(火) 23:50:09
>>993,994
もう何ヶ月も考えていますが浮かびません。具体例をください。
996デフォルトの名無しさん:2006/11/01(水) 00:05:21
while (<FH>) {
空行前 ? push (@前,$_) : push (@後,$_);
}
997977:2006/11/01(水) 00:05:53
全く解りません。

;;
998デフォルトの名無しさん:2006/11/01(水) 00:07:22
フラグ
999デフォルトの名無しさん:2006/11/01(水) 00:08:46
しゃぶれよ
1000デフォルトの名無しさん:2006/11/01(水) 00:09:24
日テレはルパンにひどいことをしたよね(´・ω・`)
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。