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

このエントリーをはてなブックマークに追加
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://pc5.2ch.net/php/ )

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

http://www.perl.org/get.html
● 2005/01/17現在の最新版: 5.8.6
● 2005/01/17現在の開発版: 5.9.1
2デフォルトの名無しさん:05/01/17 18:20:41
3デフォルトの名無しさん:05/01/17 18:22:45
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/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/4873110378/

[オンラインマニュアル]
Perldoc.com: http://www.perldoc.com/
perldoc.jp: http://www.perldoc.jp/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/

[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
41:05/01/17 18:26:48
過去ログは7、8箱目だけ閲覧不可でした。
9〜14が開けない場合、2chブラウザ以外で試してください。
51:05/01/17 18:28:51
前スレにアドレス貼るの間に合わなかった。スマン。
6デフォルトの名無しさん:05/01/17 20:00:00 ,
>>1
ageとこう
7デフォルトの名無しさん:05/01/17 21:17:40
perl-5.8になってsetuidが使えなくなった?
8デフォルトの名無しさん:05/01/17 21:32:24
>>7
普通に動いてるよ

ところで>>6の時刻の後にカンマが見えるのは自分だけか・・・
9デフォルトの名無しさん:05/01/17 21:56:37
俺も見えるな、0が続くと付くのか?

10デフォルトの名無しさん:05/01/17 21:58:55
perlのプログラ厶上でUNIXコマンドを使用する方法が分からないです。

googleで探してもUNIXコマンドのページばかりひっかかってどうしても見付かりません

どなたか御指導お願いします。
11デフォルトの名無しさん:05/01/17 22:08:59
system
1210:05/01/17 22:10:15
すいません、あれからまた調べ続けたら…やっと見つかりました

'ls ./' などのようにすればいいだけなのですね。
お騒がせしました。
13デフォルトの名無しさん:05/01/17 22:15:26
>>12
それシングルクォーテーションじゃ・・・
とりあえず三通り

[1]
system("command");

[2]
open(PIPE, "command |");
@msg = <PIPE>;
close PIPE;

[3]
$msg = `command`;

3番はバッククォーテーションだから注意
14デフォルトの名無しさん:05/01/17 22:53:37
形態の印ね。, → Oに改変。
15デフォルトの名無しさん:05/01/17 23:46:44
え、、、exec("command");、、、ハアハア
16デフォルトの名無しさん:05/01/17 23:49:48
ドコモ携帯テスd
17デフォルトの名無しさん:05/01/17 23:52:39
ə
18デフォルトの名無しさん:05/01/18 22:12:17
15箱目ですか乙です。
14 の次が 15 だと推論するのに時間がかかりました。
なんか閑散としてますが他の人も同じなのか?
19デフォルトの名無しさん:05/01/18 22:15:30
これがデフォ。
よほどのネタ振りがあるか
粘着初心者くんでもいないかぎり。

まあ大抵後者でスレが消化されて行くわけだが。
20デフォルトの名無しさん:05/01/19 20:20:19
sudo 命令をパスワード付きでperlから実行できますか?
21デフォルトの名無しさん:05/01/19 20:33:35
>>20
IPC::Open2なんか使えば出来るかも
22デフォルトの名無しさん:05/01/19 21:25:11
>>20
Expect なんか使えば出来るかも
sudo の -S オプションなんか使えば出来るかも
23デフォルトの名無しさん:05/01/19 23:06:28
唯一ついえることは、そんなことを聞くようなレベルでsudoは危険だぞ、と。
24デフォルトの名無しさん:05/01/19 23:39:20
ソケットで他のサイトを読み込む時、5秒経っても鯖の応答がなければFaild、とするにはどうすればよいですか?
25デフォルトの名無しさん:05/01/19 23:44:59
>>24
alarmとか使えばできると思うが、他のサイトってのがhttpなら
ソケットでごりごりやるよりLWP使ったほうが楽だよ。




26デフォルトの名無しさん:05/01/20 17:41:48
自身のモジュール名(ソースファイル名)を取得する関数ってありますか?
27デフォルトの名無しさん:05/01/20 17:48:01
ソースファイルのフルパスなら $0 でわかる(通常は)。
パッケージ名まで知りたいなら
 my ($package, $filename, $line) = caller();
あたりでどうなんだろ?
28デフォルトの名無しさん:05/01/20 17:52:36
>>26
__FILE__ とか?
29デフォルトの名無しさん:05/01/20 18:00:45
>>28
出ました。ありがとうございます!
30デフォルトの名無しさん:05/01/20 18:03:30
>>26, >>27
蛇足ですが、caller はサブルーチン呼び出し 1 段以上経てないと機能しませんから!
package foo;
sub bar {
 my ($package, $filename, $line) = caller;
 print "$package, $filename, $line\n";
}
bar();
print "$0\n"; # ついで
31デフォルトの名無しさん:05/01/20 18:16:00
おお、>>27さん>>30さんありがとうございます。
32デフォルトの名無しさん:05/01/21 06:21:29
forって10回までしか繰り返せないんでしょうか?
50回繰り返したら1回だけ動かしたいスクリプトがあるんですが、
どう書いたら良いかわかりませぬ。
気が向いたら教えてくださいm(_ _)m
33デフォルトの名無しさん:05/01/21 06:24:56
Σ(゚д゚) エッ!?
34デフォルトの名無しさん:05/01/21 07:00:36
>>32
> forって10回までしか繰り返せないんでしょうか?

なぜそう思い込み、決めつけ、疑いのないそのまっすぐな眼差しで
この愚劣極まる質問を発したのかを説明してくれると、みんな楽
しめると思います。ぜひお願いします。
35デフォルトの名無しさん:05/01/21 12:38:13
カモキター
36デフォルトの名無しさん:05/01/21 17:34:53
100%釣り
37デフォルトの名無しさん:05/01/21 19:16:13
くだらない質問でゴメン。
これでa.plを実行したら、表示される結果は1?2?
やっぱり1?
手元にperlを実行できる環境がないけど、至急回答が必要なの…。

./a.pl
#!/usr/bin/perl
my $a = "1";
require './b.pl';
print $a;



./b.pl
#!/usr/bin/perl
$a = "2";
1;
38デフォルトの名無しさん:05/01/21 21:02:54
>>37
2
39デフォルトの名無しさん:05/01/21 21:13:31
>>37
1
40デフォルトの名無しさん:05/01/21 21:17:02
ここは丸投げ厨には厳しいインターネッツですね
41デフォルトの名無しさん:05/01/22 22:55:29
お前らはPerlの標準モジュールでもあるswitchを使っているのか?
http://perldoc.jp/docs/modules/Switch-2.09/Switch.pod
42デフォルトの名無しさん:05/01/22 22:57:31
なにを突然
43デフォルトの名無しさん:05/01/22 23:10:09
>37
実行環境がなくてもすぐ手元で確認できるようにPerlのインタプリタを作ればいいじゃないか?
44デフォルトの名無しさん:05/01/22 23:12:15
>>37
undef
45デフォルトの名無しさん:05/01/22 23:33:42
>>41
知ってはいるけど使ったこと無い
大抵はラベルとブロックを組み合わせた方法で事足りるから
46デフォルトの名無しさん:05/01/23 00:36:42
リストで十分。
47デフォルトの名無しさん:05/01/23 01:23:37
多態で十分。
48デフォルトの名無しさん:05/01/23 02:59:42
今日暇だし標準モジュール全部使ってみるか
49デフォルトの名無しさん:05/01/23 15:20:24
早くも挫折か?
50デフォルトの名無しさん:05/01/24 11:26:14
CPANからHTML::モジュールをインストールしようとしたら、

cpan> install HTML
Warning: Cannot install HTML, don't know what it is.
Try the command

i /HTML/

to find objects with matching identifiers.

となります。どうやったらインストールできますか?
51デフォルトの名無しさん:05/01/24 11:31:23
cpan> i /HTML/
52デフォルトの名無しさん:05/01/24 11:38:52
i /HTML/

i /HTML::LinkExtor/
などとすると、
cpan> i /HTML::LinkExtor/
Module id = HTML::LinkExtor
DESCRIPTION Extract links from HTML documents
CPAN_USERID LWWWP (The libwww-perl mailing list <[email protected]>)
CPAN_VERSION 1.33
CPAN_FILE G/GA/GAAS/HTML-Parser-3.45.tar.gz
DSLI_STATUS RmpO (released,mailing-list,perl,object-oriented)
MANPAGE HTML::LinkExtor - Extract links from an HTML document
INST_FILE /usr/local/lib/perl5/site_perl/5.8.5/mach/HTML/LinkExtor.pm
INST_VERSION 1.33
と出ます。
要するにインストールするにはどうしたらいいのでしょうか?
53デフォルトの名無しさん:05/01/24 11:54:36
cpan> help install
54デフォルトの名無しさん:05/01/24 11:55:18
インストールされているってことですか?
55デフォルトの名無しさん:05/01/24 11:59:11
Sorry, can't speak English
56デフォルトの名無しさん:05/01/24 12:15:15
どうなんですか?
57デフォルトの名無しさん:05/01/24 12:18:23
No, am I. Read the warning message: "CANNOT INSTALL"
58デフォルトの名無しさん:05/01/24 13:03:59
ここはアメリカンなインターネットですね
59デフォルトの名無しさん:05/01/24 13:13:34
いぢめないで教えて下さい
60デフォルトの名無しさん:05/01/24 16:54:23
activeperl5.6.1
windowsXP

この環境で、aというフォルダ内にたくさんあるフォルダの中にある.txt/.csv
ファイルなどを全てaの直下に移すプログラムを書きたいのですが、どうすればいいでしょうか?

my @fold = glob 'aの中にあるフォルダだけを取得';
foreach (@fold){
my @sub_fold = glob 'aの中にあるフォルダの中にあるファイルを全て取得';
}
・・・ファイルの移動ってどうやるんですか?
一度元を読み込んで、任意の場所でopenをして自動でファイルを新規に開いて
そこに元になるものを流し込むみたいな方法以外にないのでしょうか?

ちょっと大変そうですねそれ;
61デフォルトの名無しさん:05/01/24 16:57:12
a\a.bat
move *.txt ..
move *.csv ..
62デフォルトの名無しさん:05/01/24 17:04:32
>>60
File::Find
File::Copy
6360:05/01/24 19:16:08
>>62
File::Copyの解説(英語)を読む方がしんどいです。
本当に日本語訳以外のperl.docの説明書って直感的でないですね。

英語だろうが、関数の使い方くらいパットミでわかると思いマシ多雨。が、疎コマsだsファslgじゃkjgばsdgかjdbがshd

1から自分で書きます。それなら30プンですから
64デフォルトの名無しさん:05/01/24 19:28:42
1)エクスプローラで詳細表示、ファイルの種類で並べ換え、複数ファイル同時選択。
2)エクスプローラでF3を押してファイル名検索「*.txt;*.csv」検索結果をCTRL+A
65デフォルトの名無しさん:05/01/24 20:07:00
英語はよく判らないけれど、サンプル見れば何となく判る漏れは逝ってよしですか?
66デフォルトの名無しさん:05/01/24 20:10:13
最初にperlfaqを読まない者はきびしいな
67デフォルトの名無しさん:05/01/24 20:53:39
あんなの読めないなんて釣られないぞ〜
68デフォルトの名無しさん:05/01/24 21:22:02
あの程度が読めない奴が30プンで書いたああいやいや釣られないぞ〜
69デフォルトの名無しさん:05/01/24 21:28:26
SQLiteを使ってみたんだが素晴らしいなこれ。
70デフォルトの名無しさん:05/01/25 00:06:38
>>69
SQLite、使ってみたいと思ってます。
(いまのとこ、インストールしただけです。時間がなくて)
日本語、通りますか?
そのままじゃ通らないとしたら、urlエンコードなど
使ったりするのでしょうか?
よろしかったら、教えてください。
71デフォルトの名無しさん:05/01/25 00:47:15
すんません、ちょっと教えてください。

Perlで「"」ダブルクォート内の文字列を抜き出したいのですが
やり方がわかりません。
何か方法が有るのでしょうか?
72デフォルトの名無しさん:05/01/25 00:48:17
>>70
実際にやってみようとは思わないのか?
Shift_JISもEUC-JPも特に問題はないが、文字列操作関数を使うならUTF-8にしておいたほうが無難ではある。
73デフォルトの名無しさん:05/01/25 00:49:18
>>71
意味不明。パラフレーズせよ。
74デフォルトの名無しさん:05/01/25 00:56:28
>>71
while(/"(.*?)"/g) {print $1;}
75デフォルトの名無しさん:05/01/25 00:56:44
>>60
C:\path\to\a\dir /s /b *.txt | perl -nle "`move /y $_ C:\path\to\a`"
うはwwww
76デフォルトの名無しさん:05/01/25 01:02:32
71でつ。

>>74
それで1発で逝けました。
ありがとうございました。
77デフォルトの名無しさん:05/01/25 01:04:41
>>70
サンクスです。
>実際にやってみようとは思わないのか?
思いますぅ。ただ、クエリの初歩から勉強という段階で…。
近日中に、なんとかします!
78デフォルトの名無しさん:05/01/25 04:53:27
>>77
データベース板の SQLite スレもよろしく。
79デフォルトの名無しさん:05/01/25 07:02:14
WindowsでのPerlについて質問があります。
環境はWindows XP Pro SP2,perl, v5.8.2 built for cygwinです。

#! /usr/bin/perl
use Cwd;
my $dir1 = Cwd::getcwd();
print "$dir1\n";
my $infile = $ARGV[0];
open (INFILE, "$infile");
open (OUTFILE, ">result.txt");
print OUTFILE "hogehoge\n";

上記のようなスクリプトをコマンドラインで実行すると実行時のデ
ィレクトリがカレントディレクトリになりますよね。
それに対しperlコンパイラ(PAR,perl2exe,perlcc)でコンパイルし、
入力ファイルを実行ファイルにドラッグすると、カレントディレク
トリである$dir1はホームディレクトリになってしまい、その結果
OUTFILEもホームディレクトリに出来てしまいます。
1)INFILEと同じディレクトリにOUTFILEを作りたいので、現在の所
infileの最後の"/" or "\" までを取得してchdirしているのですが、
もう少しスマートな方法はないでしょうか?
2)ドラッグ時にカレントディレクトリがホームになるあたりについ
ての説明のソース等がありましたら教えてください。
よろしくお願いします。
80デフォルトの名無しさん:05/01/25 09:49:26
>>79
超一般論だけど、引きずって落とした時には、
その引きずり落としを行なうシステムが、
カレントディレクトリを決定するのではないか?

Winでそのあたりの設定をいじった記憶があるのだが、
もう何年も触ってないのでうろ覚え。

それから、ふつう、chdirなどせずに、OUTFILEを絶対パス
していしたりすると思うが。
81デフォルトの名無しさん:05/01/25 11:53:03
>1)INFILEと同じディレクトリにOUTFILEを作りたいので、現在の所
>infileの最後の"/" or "\" までを取得してchdirしているのですが、
>もう少しスマートな方法はないでしょうか?

それが一番スマート
82デフォルトの名無しさん:05/01/25 12:44:56
>>81
いや実は、少なくとも v5.6.1 では "$infile/.." で通る罠。
BEGIN {
 push @INC, "$0/..";
}
とかよくやる。
8382:05/01/25 12:56:52
>>82 のディレクトリ取得方法が合法だと主張したり勧めたりはしませんので念のため。
実際、perl 以外のシチュエーション(たとえば ls './foo.txt/..' とか)は NG (Not a directory) なので処理系依存であることは間違いない。
84デフォルトの名無しさん:05/01/25 13:09:32
File::Basename
85デフォルトの名無しさん:05/01/25 21:29:35
>>82
んなあほな、と思ったらマジでできる。。。
5.8.4でもOKだった。

../で打ち消される部分は単純にスラッシュの数だけ数えてて、
間のフォルダ名は何書いても評価されてないみたいね。
86デフォルトの名無しさん:05/01/25 21:35:18
$cur = Cwd::getcwd();
open (OUT, ">>$cur/;,:?<>|/../foobar.txt");

こんなのまで許される。うわー。
87デフォルトの名無しさん:05/01/25 23:08:59
my($input_dir) = $ARGV[0] =~ /^(.*?)[^\/]+$/;
my($exec_dir) = $0 =~ /^(.*?)[^\/]+$/;

おれこうやって受け取ったファイルのディレクトリとか
実行ファイルのディレクトリいつもゲットしてchdirをめったに使わん。
88デフォルトの名無しさん:05/01/26 04:12:49
sjisのファイル名で漢字の第二バイトに\が含まれてて泣いた人いないっすか?

いや、いないならいいんですけど…
89デフォルトの名無しさん:05/01/26 06:48:10
しょっぱい質問なんですけど、
while(1){
A;
B;
サブルーチン();
C;
}
これサブルーチンに一回戻ってもう一度Aから動かしたら
ABCと動いて最後にもう一度Cを実行してしまうんですが、
二回目のCを実行しないようにするにはどうしたらいいんですかね?
サブルーチンで一旦別の場所に飛んでwhile(1)に戻って来た時に
サブルーチン呼び出し以下のコードを二度繰り返さないようにしたいんですが。
last;入れてもループ自体が終了しちゃってだめですた。
90デフォルトの名無しさん:05/01/26 07:10:44
フラグでも立てればいいだろ。
91デフォルトの名無しさん:05/01/26 08:15:24
後藤さん出番ですよ?
92デフォルトの名無しさん:05/01/26 10:25:34
イミフメ過ぎ
サブルーチンは毎回実行される(C; は繰り返さない)なら
while{A; B; サブルーチン();} と等価何じゃねーの

とりあえず next; 調べて来い
93デフォルトの名無しさん:05/01/26 10:27:55
>>89
なにいいたいのかよく分からん。
戻るっていまドコにいるんだよ?
て言うかあれか?再帰とかしてんのか?
せめてルーチンの中見せなさいよ。

94デフォルトの名無しさん:05/01/26 10:38:21
あー、やっと意味分かった。
1回目のループのみCを実行したいんだぬ?

while(1){
 $count ++;
 A;
 B;
 サブルーチン();
 $count == 1 and C;
}

とか?みたいな?
95デフォルトの名無しさん:05/01/26 10:58:33
Perlというよりは意味不明な文章の意味をみんなで
推理する謎解き大会になってきたな...

96デフォルトの名無しさん:05/01/26 11:28:26
>>94 ネタだとは思うが一応。
無限ループ内で整数をカウントアップさせっぱなしはやめれ。
2^32 回に一回実行されるし、そもそも符号付き整数のオーバーフローで roundup せずに例外投げる
アーキテクチャも広い世の中にはあるらしい。(直に見たことはないが)
97デフォルトの名無しさん:05/01/26 11:34:32
>>96
もとの記述が無限だったんだ。俺のせいじゃない。
98デフォルトの名無しさん:05/01/26 12:12:23
先生!
>>89が「すれ立てるまでもない…」でマルチしてるんですけど、
勝手に自己解決してるみたいです!
99るんぱっぱ〜る:05/01/26 12:19:48
どもです。

use Image::Size;

したいのですが、Can't locate auto/Image/Size/jpegsize.alって出ます。
ちゃんとスクリプト冒頭で

use FindBin qw($Bin);
use lib "$Bin/lib";

ってやってるのですが、なぜでしょうか?
(Size.pmは、(Perlスクリプト本体のディレクトリ)/lib/Imageの中にあります)

とんでもないヘマをやらかしてますか?
心優しいPerlコミュニティの皆様、教えてください…
100デフォルトの名無しさん:05/01/26 12:26:57
>>99
エラーメッセージに書いてあるようにないのはjpegsize.alなので、
Size.pmがあったからといってどうにもならんのだが。多分Size.pm
は読めていてその中でjpegsize.alを要求していると思われる。

まずはjpegsize.alがあるか確認すべきだろうな。
101るんぱっぱ〜る:05/01/26 13:02:07
jpegsize.alをググって、はいずりまわって探し出しました。そして、
Size.pmと同じ階層のディレクトリに置きました。

いざ実行してみると!
…同じエラーが出てだめでした。

alファイルというのはオートロードファイルということがわかったの
ですが、このオートロードというのは、どの時点で自動(オート)で
読み込まれる(ロード)でしょうか?スクリプトの実行時?

(そもそも画像データの扱いはImage::Magickを使うのが一般的なので
しょうか。)
102デフォルトの名無しさん:05/01/26 13:05:40
>>101
いちいち書き込まずに頭冷やせよ。
103るんぱっぱ〜る:05/01/26 13:15:10
アウチ!!

できました。お玉冷やしたおかげで、わかりました!
Perlディレクトリ\lib\auto\Image\Sizeにalファイルを置いたら動きました!
うわぁあああん、ありがとう。

でも、これってサーバー上のPerlディレクトリをいじれなかったらできないん
ですか?
104デフォルトの名無しさん:05/01/26 13:21:17
>>103
>>99-104(このレス)まで含めperlと関係ないスレッドのゴミになってるのがわからんのか?
いいかげんにしろよ。
105デフォルトの名無しさん:05/01/26 13:22:38
>>103
置ける場所に置いて、その場所を示すuse libを追加してやればいい。
106るんぱっぱ〜る:05/01/26 13:29:16
>>104
間違った投稿していたなら謝ります…。

あとはメーリングリストにでも行って聞いてきます。
ありがとうございました。
107デフォルトの名無しさん:05/01/26 13:37:07
っていうか、どういうインストールの仕方をしたら、
そういうグチャグチャの状況になるんだ?
108デフォルトの名無しさん:05/01/26 13:37:53
>>104
ほう、
Image::Size: ttp://perldoc.jp/docs/modules/Image-Size-2.99/Size.pod

AutoLoader: ttp://perldoc.jp/docs/perl/5.8.0/AutoLoader.pod
はPerlとは関係ない、と言いたいわけですな?
話の流れからして、>>105のPerl流の解決方法すらも
109デフォルトの名無しさん:05/01/26 13:41:25
無益な煽り合いはそのへんでもうやめれ。
110デフォルトの名無しさん:05/01/26 14:53:27
それがPerlクオリティ
111デフォルトの名無しさん:05/01/26 14:57:57
>>103
CPAN にこんな奇妙なモジュールが置いてあるのか、と疑問に思ってテストしてみたよ。>>103
Image::Size の取説を読んでないんじゃないの?UNIX なら指定のmakeファイルを使ってイン
ストールしなきゃならないし、Win32 ならREADME.Win32 に書いてある通りに編集しなきゃならない。
少なくともWin2000なら、それで全く問題なく動いたぜ。

自分で勝手に判断してインストールするとどうなるか、という点では有益な投稿だったんじゃないかな。
112デフォルトの名無しさん:05/01/26 15:08:33
ファイルを一個だけコピッて充実してたのかねえ?
113るんぱっぱ〜る:05/01/26 15:12:57
>>112
はい。スカーっとした気分でした。

モジュール使う場合はインストールするしかないのですね。
レンタルサーバーとかの場合でモジュールの追加できないとなると、
こまりましたねぇ…。

use lib 'unko';

ってやってモジュールの位置を教えてあげれば

require 'unko.pl';

みたいに使えるのかと思ってました。use libすごい大発見
だったのに
114デフォルトの名無しさん:05/01/26 15:15:11
ははは
11579:05/01/26 16:09:38
>>80-87
皆さんどうもありがとうございました。
大変勉強になりましたので、いただきました解決方法を簡単にまと
めます。
0)infileの最後の"/" or "\" までを取得してchdir
1)OUTFILEを絶対パスで指定
2)infile/.. で記述
3)File::Basenameのdirnameを使ってdirectory名を取得
4)my($input_dir) = $ARGV[0] =~ /^(.*?)[^\/]+$/;
(レス番号順)

116デフォルトの名無しさん:05/01/26 18:23:25
>>113
SSH/telnet できるならレンタルサーバでもモジュールインストールできるよ
おれは ~/lib/perl5 にCPANからインストして
use lib '/home/user/lib/perl5';
ってしてるけど
117デフォルトの名無しさん:05/01/26 18:25:30
環境変数 PERLLIB はお嫌い?
118デフォルトの名無しさん:05/01/26 18:31:25
>>117
個人的には普通-Tなので使えません。
119デフォルトの名無しさん:05/01/26 19:11:47
perl5.8 つかってます。
いったん立てた thread を thread の外部から頃すことってできますか?

use threads;
sub hoge() {
 print "x" while(1);
}
$thr = threads->new(\&hoge);

ってしたところで、メインルーチンから適当なところでスレッド $thr を殺したいんです。
120デフォルトの名無しさん:05/01/26 19:38:28
>>113
>レンタルサーバーとかの場合でモジュールの追加できないとなると、
>こまりましたねぇ…。

ユーザにモジュールの追加を許したらどうなると思う?
サーバはすぐにdosアタックやらスパムメールやらの基地にされるだろう。
121デフォルトの名無しさん:05/01/26 20:09:36
>>103, >>120
あの、レンタルサーバーにも Perl のセキュリティー設定にも詳しくないんで質問なんですが、
main のスクリプトと同じディレクトリに使いたいモジュール一式コピーして、main 先頭で
(つまり use する前の行で) >>82 のコード書いてもだめなんですか?
122121:05/01/26 20:35:06
↑ あ、.pm は ./ にコピーしますが、
al や dll については、たとえば Foo::Bar.pm が使うものであれば
./auto/Foo/Bar/ 以下に置くとします。
123デフォルトの名無しさん:05/01/26 20:48:48
>>121
お前が設置すべきファイルを全て手元で揃えられるならよほ
どのことがない限りそれでできる。

しかし一般に配布されているモジュールの中には設置すべき
ファイルがそのままの形で含まれていないものもあるという
話だな。一部がC等で書かれていてコンパイル必要なものとか
オートロードのためにインストール時に分割されるように
なってるものとか。運がよければ設置に必要なファイルを
まとめた配布物が手に入ることもあるがそうでなければ自分で
なんとかする環境を持ってないとどうにもならないことも
ある。


124デフォルトの名無しさん:05/01/26 21:49:38
>>113
つーかそんな下手糞にインストール任せる業者さんが居ると困るっしょ。
業者さんに素直に頼みなさいな。
「金よこせ」っていわれたら、「友達を紹(ry
125デフォルトの名無しさん:05/01/26 22:05:12
メーリスで聞くのもやめた方がいいぞ。うざいから
126デフォルトの名無しさん:05/01/26 22:41:38
メーリス
127デフォルトの名無しさん:05/01/27 01:26:29
メーリスと言うのもやめた方がいいぞ。恥ずいから。
128デフォルトの名無しさん:05/01/27 03:49:59
恥ずい
129るんぱっぱ〜る:05/01/27 12:13:31
メーリスで聞いたら、わかりました!

TELNETで入って

perl Makefile.PL INSTALLSITELIB=~/lib INSTALLMAN3DIR=~/man3
make
make install

(~/lib、~/man3は適当に変える。今回はこのまま指定して出来たモノ
をあとから好きなところに移動してuse libで指定しました)

ここで書いていいもんかどうかちょっと悩みましたが、もしかしたら
僕と同じことで悩んでる人がここを見るかもってことで書き込みマウス

メーリスの人とても親切でしたよ。
少なくともここでキレてた人よりも(ニッコリ
130デフォルトの名無しさん:05/01/27 12:22:53
バカは答え書いて追い払った方が早いからな
131デフォルトの名無しさん:05/01/27 12:51:23
超くだらない質問で申し訳ありません。
誰か教えてください。

$value = 'test';
$string = '$value';

上の例で変数$stringの内容に従って変数$valueの値を展開して返すような命令なり、
関数なりはありませんか?
132デフォルトの名無しさん:05/01/27 12:57:05
>131
eval
133デフォルトの名無しさん:05/01/27 13:24:28
>>132
ありがとうございます。

$value = 'test';
$string = '$value';

print eval $string;

これで期待通りの結果が出ました。
134デフォルトの名無しさん:05/01/27 13:29:50
>>129
> メーリスの人とても親切でしたよ。
> 少なくともここでキレてた人よりも(ニッコリ

いや、案外同じ人だったりするもんだよ。
135デフォルトの名無しさん:05/01/27 13:34:59
メーリス
136デフォルトの名無しさん:05/01/27 13:54:01
>>133
本当にそれでいいのか・・・?
前後にも文字列が入ってるんじゃないのか・・・
137デフォルトの名無しさん:05/01/27 14:34:53
>>136

その応用で大丈夫だと思ったのですが、期待したとおりにならず
苦しんでいます。(T_T)

何がなんだか解らなくなってきて、どういう風に質問をあげれば
良いのかも判りません。
138デフォルトの名無しさん:05/01/27 14:57:47
>137
evalとFAQ見ろ
139デフォルトの名無しさん:05/01/27 15:05:02
>>138
わかりました。゚⌒(つД´)⌒゚
140デフォルトの名無しさん:05/01/27 15:11:43
>>139
本当はやりたいことは
$string = "$value";
というだけのことだったりして・・・
141デフォルトの名無しさん:05/01/27 16:46:16
""すらいらなかったりして・・・
142デフォルトの名無しさん:05/01/27 20:56:53
Perlも長いこと使ってるがいまだにpack、unpackの使い方が
良く分からん。
143デフォルトの名無しさん:05/01/27 21:02:47
>>142
それは必要とするケースを扱ったことがないっちゅう事ですかな
実例を伴った例で調べればすぐに分かるもんだと思うが・・・
144デフォルトの名無しさん:05/01/27 21:37:01
'&'付きで呼んでも、プロトタイプのチェックをさせるには
どうすれば良いですか?
145デフォルトの名無しさん:05/01/27 22:31:16
>>143
今までにあった必要とするケースといえばCGIで
URLエンコード/デコードに使ったくらい。
食わず嫌いになってる感じ。

>>144
確かできないと思ったが。
146デフォルトの名無しさん:05/01/27 23:08:00
既存cgiの改良依頼ってOK?

昔配布されていた2ちゃんのスクリプトを現行のものと同じレベルに改良して欲しいんです。
業者に頼むのも考えましたが「既存スクリプトの改良」「2ちゃんにあわせろ」っていう点で
ちょっと気が引けたのでここで依頼しようと思います。
ここで受けていただけるようでしたら改めて詳細等を記して有志を募ろうと思います。
(Perlでリクに答えるスレはなんか死んでるようなので・・・)

よろしくお願いします。
147デフォルトの名無しさん:05/01/27 23:15:55
>>146
>>1も読めない奴は氏ね
148デフォルトの名無しさん:05/01/27 23:20:24
>>147
失礼しますた・・・
149デフォルトの名無しさん:05/01/27 23:42:11
>>142
固定長のデータを分解するときには便利ですよ。

150デフォルトの名無しさん:05/01/28 03:23:46
CPANについて質問です。

CPANでモジュールをインストールしたのですが、
その時にオプションを選ぶようになっていて、別の選択肢を選び直したいと思っています。

そこでいったんモジュールをアンインストールしようと思い立ったのですがやり方がわかりません。
思い切って~/.cpanの中身を捨ててしまったのですが、
CPANのセッティングはやり直しになるものの、モジュールに関しては以前に出た問い合わせが出ずすぐにインストールが終わるようです。

どうすればモジュールのアンインストールができるのか、正しいやり方を教えてください。
よろしくお願いします。
151デフォルトの名無しさん:05/01/28 04:16:45
半角と全角が混雑した文字列を半角60文字のサイズで切り取りたいんですけど、
Googleのキーワードが悪くてよいのが見つかりません。

エレガントでスマートな方法を教えてくだちぃ。
Jcode使うのでしょうか?
152デフォルトの名無しさん:05/01/28 09:53:06
>>151
Jcodeのfoldでいいんでねーの?
153デフォルトの名無しさん:05/01/28 13:25:46
open IN, "hoge.prog |";
で hoge.prog のstdoutを ファイルハンドル IN に対応させて、
と、 ここまではいいのですが、同時に hoge.prog のstderrも別の
ファイルハンドルに対応させたいのですが、どのようにすればいいのでしょうか?
154デフォルトの名無しさん:05/01/28 13:27:56
>>153
IPC::Open3
155デフォルトの名無しさん:05/01/28 13:57:40
即レスサンクスです。
よく探したら過去ログにもありました。m(__)m
156デフォルトの名無しさん:05/01/28 14:02:25
>>153
対応させるのは154の言うようにIPC::Open3で簡単にできるが、
両方のファイルハンドルから適切に読み出してやらないと
ブロックするので注意。まじめにやるとselectとか駆使する
ハメになって結構めんどいよ。

perlfaq8(1)の「How can I capture STDERR from an external
command?」あたり参照。クックブックにもなんかそれっぽいのが
あったと思ったけど手元にないので不明。

157デフォルトの名無しさん:05/01/28 19:17:02
たしかにクックブックの583ページにそれっぽい事が載ってますね。
私には要約できませんが。
158デフォルトの名無しさん:05/01/28 20:33:22
perl からただでPDF作るならやっぱり 

PDFlib Lite
http://www.pdflib.com/jp/products/download-source.html
が王道なんでしょうか?

ほかにもっと良いモジュールを使っている方はいませんか?
159デフォルトの名無しさん:05/01/28 21:47:33
>>150
~/.cpan/CPAN/MyConfig.pm
が設定ファイルだから再インストなんかしないでこいつを編集。
rootで入れたんなら、
/usr/local/lib/perl5/5.8.4/CPAN/Config.pm
が設定ファイルなので好きなようにパラメータを編集すればよし。
160デフォルトの名無しさん:05/01/28 22:15:06
俺が思うにperlでpdf自体が王道じゃない。
だって、初めて聞いたし。

でも興味あるから見てみる。
161デフォルトの名無しさん:05/01/28 22:48:29
>>158
PDFJのほうが好き。


162デフォルトの名無しさん:05/01/28 23:20:55
PDFJ なんて物があったんですね。これは良さそうですね
articledemo.pdf のようにサンプル論文PDF程度のことが
ことができれば自分的には十分なので
163デフォルトの名無しさん:05/01/29 01:23:22
なるほど〜
164デフォルトの名無しさん:05/01/29 05:13:13
失礼します。perlのプログラミングをやってみたいのですが
手始めに何か参考本がほしくなりました。お勧めの本とかってありませんでしょうか?
あんまり入門本とかではなくて分厚くて読み応えのある本がいいのですが・・・。
よろしくお願いします。
165デフォルトの名無しさん:05/01/29 05:31:44
>>164
>>2
一応こういうスレもある
【Perl,CGI】参考書籍 第三版
http://pc5.2ch.net/test/read.cgi/php/1030209573/
166165:05/01/29 05:34:38
間違えた
×>>2
>>3
167デフォルトの名無しさん:05/01/29 09:13:48
>>164
perlがはじめてで読み応えある本希望ということなら、>>3
駱駝で決まりだろうな。
168164:05/01/29 15:16:59
あぁ。助かります。どうもありがとうございます。
アマゾンで予約してきます。
169デフォルトの名無しさん:05/01/29 22:28:40
パソコン初心者板総合質問スレッドvol.931から誘導されてきた者なんですが。
age2ch.plのsearch.plを
my @crypted = ($content =~ /<dd>([0-9a-zA-Z\/\.]{11})<br><br>/g);

my @crypted = ($content =~ /<dd>\s*([0-9a-zA-Z\/\.]{11})\s*<br><br>/g);
に書きなおすということは、どういうことで、どのような変化が起こるのですか?
教えて下さい。お願いします。
170デフォルトの名無しさん:05/01/29 22:29:49
Usr | S 11/17 00:46:33 1100619993.349208 | E 11/17 00:46:33 1100619993.361487 | ID:21124 | 0.012279
Cnt | S 11/17 00:07:07 1100617627.980650 | E 11/17 00:07:39 1100617659.310731 | ID:32539 | 31.330081
Day | S 11/17 00:04:59 1100617499.362986 | E 11/17 00:04:59 1100617499.628110 | ID:21124 | 0.265124

というような形式で記述されているテキストを、『| E』の直前の17バイトの数字で
ソートしてファイルに書き込みたいのですが、どのようなコードかわからず躓いてます。



while( <READ> )
{
 if ( /(\w{3}) | S (\d+)\/(\d+) (\d+):(\d+):(\d+) (\S{17}) | E (\d+)\/(\d+) (\d+):(\d+):(\d+) (\S{17}) | ID:(\d+) | (\S+)$/ )
  {
   push ( @value , [ $2, $_ ] );
  }
}

@sort_value = sort{ $a->[0]<=>$b->[0] } @value;
print WRITE $_->[1] foreach( @sort_value );

としてあるのですが、意図した通りに動いてくれません。
どのようにしたらいいでしょうか?

どなたかわかる方、ご教授お願いいたします。
171デフォルトの名無しさん:05/01/29 22:31:52
push ( @value , [ $2, $_ ] );

は、

push ( @value , [ $7, $_ ] );

の書き間違えです。
$7 の方でやっているのにできません。
172デフォルトの名無しさん:05/01/29 22:43:43
>>170
俺なら、「『| E』の直前の17バイトの数字」をkeyとするhashに行をぶち込み、
(まあ、たとえば%hogeとすると)
foreach (sort keys %hash){
print WRITE $hash{$_};
}
とするな
173デフォルトの名無しさん:05/01/29 22:44:24
つか、無理に正規表現で表そうとしないで
単純にsplitすればいいんじゃない?
174デフォルトの名無しさん:05/01/29 22:51:33
>>173
そうね、「『| E』の直前の17バイトの数字」の抽出は正規表現でもいいし、
行に規則性があればsplitのほうが簡単
175デフォルトの名無しさん:05/01/29 23:29:54
>>170
> としてあるのですが、意図した通りに動いてくれません。
> どのようにしたらいいでしょうか?

どこでおかしくなっているのか調べて、そこを修正するといいよ。
176デフォルトの名無しさん:05/01/29 23:31:55
>>170
「|」は正規表現のメタキャラクタだからエスケープしろ。
他にも突っ込みどころはあるが致命的な間違いはたぶん
これ。
177デフォルトの名無しさん:05/01/30 00:16:53
my @value = <READ>;
my $RegExp = qr/(\S{17}) (?: \| E)/;
close READ;
print WRITE map $_->[1], sort $a->[0] <=> $b->[0], map [ (/$RegExp/o)[0], $_ ], @value;
close WRITE;

かな?
178デフォルトの名無しさん:05/01/30 00:25:05
>>177
余計なものが色々入ってないか?
179デフォルトの名無しさん:05/01/30 01:55:10
>>169
my @crypted = ($content =~ /<dd>([0-9a-zA-Z\/\.]{11})<br><br>/g);
というのは、$content(投稿内容)に含まれるIPアドレスを暗号化して、
age2ch.plを誰が使っているのか解らなくする命令だ。そこに「\s*」を
挿入すると、暗号化が解除されて、キミのIPアドレスが2ちゃんねるの
運営側に筒抜けになる。
意味が解らない人に罠をかけて陥れようとする香具師がいるようだな。
180169:05/01/30 02:28:02
>>179
ホントですか!?なんか人間不信になりそうですが・・
ではこれは、やらないほうがいいということですね。
そうするとsearch.plは、もう使い物にならないということですか?
他になにか探す方法はないのでしょうか?
教えて下さい。お願いします。
181デフォルトの名無しさん:05/01/30 03:43:10
>>179
面白いけどちょっと遊びすぎw

>>180
嘘ですよ
それは、
<dd>※(本体)※<br><br>
※のところに空白が入っていても、マッチングに成功するようにする修正パッチ。
182デフォルトの名無しさん:05/01/30 06:47:45
>>180
> ホントですか!?なんか人間不信になりそうですが・・
↑そっくり、お返ししたい今日この頃…。
183デフォルトの名無しさん:05/01/30 16:23:01
joinを使って連結させようとしているんですが。
半角スペースを区切り文字に指定するとき
join(" ",@array)
で出来ないのですが、半角スペースはどう書けばいいんでしょうか?
184デフォルトの名無しさん:05/01/30 16:30:09
>>183
どう出来無いの?
それで当ってそうだけど

#ってか本人ならCスレに誤爆詫び入れとけよ
185デフォルトの名無しさん:05/01/30 16:31:00
わかりました
186183:05/01/30 16:33:56
DBファイルとして保存しようとしたんですが。
" "で、連結したのに、" "がないんです。
187183:05/01/30 16:35:39
ども、できました
失礼しました。
188デフォルトの名無しさん:05/01/30 17:00:32
余談だけど、展開する必要のない文字列は '' で、囲うクセを付けると良いよ。
189デフォルトの名無しさん:05/01/30 17:06:58
>>188
同意だけど二つ並べちゃうとダブルクォーテーション一つに見えるよ・・・
190デフォルトの名無しさん:05/01/30 17:42:05
'hoge'.$hage
"hoge$hage"
どっちがいいの?
191デフォルトの名無しさん:05/01/30 17:46:48
>>189
> 同意だけど二つ並べちゃうとダブルクォーテーション一つに見えるよ・・・

プログラミング環境の表示を、シングルクォート2つがダブルクォートに見える
ようにしておくのはマヌケの3乗だよ。
192169:05/01/30 17:50:47
>>181
一体どれを信じればいいんですか?
search.plは今もちゃんと使えるんですか?
193デフォルトの名無しさん:05/01/30 17:55:10
>>192
\sの意味調べればわかんだろ。
194169:05/01/30 17:56:00
↑追加
search.plで検索すると
前は○○○×○とかだったんですけど
最近はeeee×eeとかで、串がまったく見つからないんですが
どういうことでしょうか?
原因と改善策を教えて下さい。
195デフォルトの名無しさん:05/01/30 18:02:28
>>191
プログラミングも好きだけどAAも好きなんだよヽ(`Д´)ノワーン
#2chブラウザだし
196デフォルトの名無しさん:05/01/30 18:09:00
>>190
ベンチマーク的には同じだった。
書きやすいから、漏れなら下の方を選ぶ。
197デフォルトの名無しさん:05/01/30 20:18:18
>>190
それはどんな場合の話?
printの引数なら "hoge",$hage にするよ

198デフォルトの名無しさん:05/01/30 20:48:11
>>190
100万回やったら上のが早かった
Winだけど
199デフォルトの名無しさん:05/01/30 21:13:44
>>191
Visual Studioはどうしてる?
200デフォルトの名無しさん:05/01/30 21:38:47
>>188
これなんで?
201Rubyist!:05/01/30 21:55:49
なんつーか技術レベルの低い奴に限ってどーでもいい些事にこだわるよなw
202デフォルトの名無しさん:05/01/30 22:20:42
>>201
細かいことにこだわらないようじゃプログラマ失格だな。
203Rubyist!:05/01/30 22:30:03
188みたいなのはあくまで「どーでもいいこと」であって「細かいこと」じゃねえよ。話をすり替えるなアホ
204デフォルトの名無しさん:05/01/30 22:46:50
>>200
\による意図しない展開を避けるため。
205デフォルトの名無しさん:05/01/30 23:07:23
>>204
そ、それだけすか?それだけのために '' にしろと言われても・・・
206デフォルトの名無しさん:05/01/30 23:10:26
どこに''にしろって書いてあるんですかー
207デフォルトの名無しさん:05/01/30 23:16:38
>>206
>>188 に書いてますよね。

というか、私は \ による展開は '' の方が意図しないものになるように感じるんですよね。

% cat hoge.pl
print '\';
% perl hoge.pl
Can't find string terminator "'" anywhere before EOF at z.pl line 1.
208デフォルトの名無しさん:05/01/30 23:20:35
>>207
え、どこに?
209デフォルトの名無しさん:05/01/30 23:21:43
>>208
ああすいません、揚げ足取りしたかったんですかね。
書いてません書いてません。
210デフォルトの名無しさん:05/01/30 23:24:41
''にした方がいいってのは188の理由だけじゃないと思うけど。
2111001:05/01/30 23:48:18
漏れは"は沢山使うとごしゃごしゃして汚いから
シングルクォート派だけど。
212デフォルトの名無しさん:05/01/31 00:08:31
>>211
ごしゃごしゃって"<tag name=\"hoge\">"見たいなケース?
そういう場合は、普通こうだろ
qq|<tag name="hoge">|
'の場合でもq|hoge'hoge|っと
213デフォルトの名無しさん:05/01/31 00:19:26
以下のようなデータベースサーバのログがあります.

1秒後 (処理時間2秒)
5秒後 (処理時間6秒)
13秒後 (処理時間9秒)
16秒後 (処理時間5秒)


サーバ開始時間を0秒として,それから何秒後にリクエストが来たか,
その処理時間は何秒だったか,というような形のログです.
このログデータを使い,プログラムで任意の数のクラスタサーバを用意して,
どうすれば一番効率の良い負荷分散をするプログラムを作ることがしたいのですが,
どういう構造にしたらいいのかわかりません.
たとえば3台のクラスタサーバを用意するとした場合,
1台目 … 0+ (3×0行目,3×1行目,3×2行目・・・)
2台目 … 1+ (3×0行目,3×1行目,3×2行目・・・)
3台目 … 2+ (3×0行目,3×1行目,3×2行目・・・)
というラウンドロビンで振り分けていくプログラムを作りました.
これはこれで1台でやるよりは効率よく処理できます.
しかし,これに加えて処理時間と到着時間が被っていないかで判定して振り分けるのがいいと思うのですが,
どういう制御文にしたらいいのかわかりません….
Perlで作らなければいけないのでここで質問させていただいたのですが,
どなたか知恵を貸していただけませんか.
読み込むログデータは冒頭のような形で固定です.
214デフォルトの名無しさん:05/01/31 00:19:31
一応シングルクオートの方がコンパイルは早いはず。
でも別にわざわざ気をつけるほどのことじゃないけどな。
2151001:05/01/31 00:22:05
>>212
そうだね。そういう時は特にそうだね。
でも単純に
$foo = 'hoge';
$bar = 'hage';
$baz = 'zure';
というときもシングルクオートにしちゃうね。
エスケープがうんぬんというよりも、
見た目が単に綺麗じゃないよね。ダブルクォートって。
フォント変えれば心も変わるかもしれないけどね。
216213:05/01/31 00:22:47
正確にはログデータには日本語は入っておらず,

1.42423_2.53556
5.24524_6.35352
13.43663_9.59301
16.93821_5.23428



という形です.
『_』はスペースです.
217デフォルトの名無しさん:05/01/31 00:27:46
>>214
そんなに違いますかね?
コンパイル時ってことは評価されるのは一度だけですよね?
218デフォルトの名無しさん:05/01/31 00:30:23
>>214
え?
評価可能なパターンが入っているかどうか、
いやらしい眼でなめずるように見るか、
それとも見ないかの違いじゃないのか?

実行時に作用しないか?
219Hiro58:05/01/31 00:40:18
今バイトでCGI(perl)を作る仕事をしてますが、バイト先の人がperlだと素人みたいだからほかの言語で作ってほしいといわれてしまいました。
perlは素人の言語なのでしょうか?その会社の人はphpかaspとかいっているのですが、わざわざ変える必要はあるのでしょうか?
220デフォルトの名無しさん:05/01/31 00:45:34
>>219
じゃあ、なでしこで。
221デフォルトの名無しさん:05/01/31 00:48:02
>>219
はてなのシステムはPerlだそうだが。
phpのほうが素人っぽくないか…?
222デフォルトの名無しさん:05/01/31 00:49:09
あれだ、顧客に変な知識がついてんだろう。
223デフォルトの名無しさん:05/01/31 00:53:11
>>219
そんなことないと思うが、その場で反駁できなかった時点で負けと思ってほかの言語で頑張れ。
224デフォルトの名無しさん:05/01/31 01:01:57
>>219
その会社の人は間違いなく素人
違うところでバイトした方が君のためだ
225デフォルトの名無しさん:05/01/31 01:02:37
>>219
顧客の見たPerl感はPerl4と個人サイトの掲示板なんだろうなぁと想像
とりあえずPerl5で作って、Perlで作られているものの代表例を言ってみることをお勧め。
Movable Typeとか。
226デフォルトの名無しさん:05/01/31 01:48:25
スレ違いかも知れませんが、
御存じなら教えていただけないでしょうか?
TL10DにUpdate kitを当てた状態で、
Perl/Tkを使いwedgitに日本語を表示させたいのですが文字化けします。
Tcl/Tkのwishでは問題なく表示されているので、
Perl/Tkの問題のように思いますがGoogleでも、
TurboのHPでも有効な情報は検索できませんでした。
環境は以下の通りです。どうぞよろしくお願いします。
tcl-8.3.5-18
perl-Tk-800.023-4
perl-5.8.0-11
227Hiro58:05/01/31 01:50:45
なるほど。やはりperlでも問題ないですよね。顧客に吹きこまれたかw
まあ、社員はみんな良い人で社長もいい人☆バイト代もたくさんもらえるので
がんばってperlで続けてみます。

そういえばaspだとすごいWebアプリが作れそうな気がするのですが…。
ユニクロとかaspだし。でも簡単にはできないですよね。。

>>224
その通りです。会社で誰も作れる人がいないのでバイトの自分がプログラム
してます。


228デフォルトの名無しさん:05/01/31 02:08:46
perlでこんなことが出来る、って感じの書籍やサイトはありませんか?
229デフォルトの名無しさん:05/01/31 02:17:18
>>228
>>3
テンプレくらい嫁
230デフォルトの名無しさん:05/01/31 02:25:08
>>227
>aspだとすごいWebアプリが作れそうな気がするのですが…。
試してみれば?
ttp://www.microsoft.com/japan/users/recipe/
ttp://www.microsoft.com/japan/msdn/asp.net/webmatrix/
231デフォルトの名無しさん:05/01/31 02:29:10
>>227
まあ、PerlにもWebアプリケーションフレームワークは色々あるみたいだし。
232デフォルトの名無しさん:05/01/31 02:47:18
>>227
お前の腕次第だ。馬鹿。
asp使ってもお前にはすごいWebアプリが作れるとは思えない。
233デフォルトの名無しさん:05/01/31 02:53:09
Perl PHP ASP、どれも一定の機能を備えてるから、
ウェブ開発で不可能なことは無いしね。作る人次第だ
234Hiro58:05/01/31 02:58:55
>>230
visualC#でもやってみようかと。。どちらにしろ、そこまで大きな依頼は
無いのでやはり必要ないかもしれないですね(スイマセン)今のところHPの管理ページ
のみなので。(ショッピングカートや在庫管理など)

>>231
Webアプリケーションフレームワークありました。とりあえず「Sledge」を見つけたのですが、スクリーンショット
など無くて、どのようなもんか想像できないです(泣)
235デフォルトの名無しさん:05/01/31 03:03:34
Jakarta でも眺めて何でもできる気分にでもなってくれ。
236デフォルトの名無しさん:05/01/31 04:02:05
>>226
WINのActivePerlなら、下のコードで こんにちは と
確かに表示できるので、use encoding "cp932"; とSJIS指定してる
ところで、EUCでも指定すれば、出来ると思うけどなぁ。
(ActivePerlでは、cp932と指定しないと化ける)

use Tk;
use encoding "cp932";
$mw = MainWindow -> new;
$lb = $mw -> Label(-text => "こんにちは!", -font => 'System') -> pack();
MainLoop;
237デフォルトの名無しさん:05/01/31 15:41:33
>>Hiro58

 Cやshでも使ってやれよ。
238デフォルトの名無しさん:05/01/31 15:41:38
>>234
>のみなので。(ショッピングカートや在庫管理など)

B2C?
SSL とか 負荷分散とか FW までヤラサレル悪寒 (((( ;´ω`))) カクカクプルプル
239デフォルトの名無しさん:05/01/31 21:18:27
$aが abcdefghiの値のいずれかの場合というifをつくるとき
if($a==/[abcdefghi]/){〜〜〜}
でいいのでしょうか?
240デフォルトの名無しさん:05/01/31 21:23:29
eq
241デフォルトの名無しさん:05/01/31 21:23:53
>>239
やりたいのはこういうことかな
if($a !~ /[^abcdefghi]/){〜〜〜}
242デフォルトの名無しさん:05/01/31 21:25:09
こうでは?
if ($a =~ /\A[abcdefghi]\z/) { 〜〜〜 }
243241:05/01/31 21:29:42
なるほど最初と最後の一文字でやるんですね
=~でしたね

すみませんでした。
244デフォルトの名無しさん:05/01/31 21:35:54
ひねくれてみた。
if ($a =~ tr/abcdefghi// == 1) {〜〜〜}
245デフォルトの名無しさん:05/01/31 21:38:12
>>239
if (-1 < index('abcdefghi', $a)) {
;
}
246デフォルトの名無しさん:05/01/31 21:40:15
>>242
\Z のZは、小文字でも良いんだっけか?
if ( $a =~ /\A[a-i]\Z/ ) { 〜〜〜 }
247デフォルトの名無しさん:05/01/31 21:54:30
>>246
違うものだよ。

\Z Match only at end of string, or before newline at the end
\z Match only at end of string
248デフォルトの名無しさん:05/01/31 22:18:24
>>247
大文字Zだと$aの中身が "a\n" でもマッチしちゃうのね。
納得。お勉強になった。つか、ずっと勘違いしてた。
ご指摘、サンクスです。
249デフォルトの名無しさん:05/01/31 22:20:58
>>246
と書く前にさっとマニュアルを見るという行動が
なぜ出来ないのかと。
250デフォルトの名無しさん:05/01/31 22:30:12
>>249
\z って、最近実装されたんでね?
251デフォルトの名無しさん:05/01/31 23:22:45
>>236
御親切に御回答いただき有難うございます。
残念ながら御指摘の点を以下のように変更し実施しましたが、
文字化けの現象を回避するには至りませんでした。
暇を見付けて、もう少し検証を続けてみようと思っております。
有難うございました。

use encoding "euc-jp";
252デフォルトの名無しさん:05/01/31 23:25:32
>>250
> \z って、最近実装されたんでね?

それで?
いや、だから、

% perldoc perlre

に相当するアクションを行なわないのはなぜかと。
どういう問題があるの?

Winだと、添付マニュアルは、htmlで提供されてい
たりするんだっけ。
253デフォルトの名無しさん:05/01/31 23:32:00
>>245
それ間違ってねえ?
254デフォルトの名無しさん:05/02/01 01:03:18
配列の要素数を知りたいとき,

$num = @array;

でわかりますよね。
では,配列の配列(リストのリスト) の要素数を知りたい場合はどうすればいいでしょう?

たとえば,
1年1組は生徒数30人
2年1組は生徒数32人
3年1組は生徒数31人
という学校を,
@array[学校のクラス][各クラスにいる生徒の数]
という配列に当てはめたとき,

$num = @array;

とすると「$num = 3」(クラス数)になります。
そうではなくて,
num[1] = 30(1年1組)
num[2] = 32(2年1組)
num[3] = 31(3年1組)

という感じで各クラスの数を知りたい場合にはどうすればいいでしょうか?
255デフォルトの名無しさん:05/02/01 01:04:35
(誤)
という感じで各クラスの数を知りたい場合にはどうすればいいでしょうか?

(正)
という感じで各クラスの生徒数を知りたい場合にはどうすればいいでしょうか?


です。
すみません。
256デフォルトの名無しさん:05/02/01 01:04:52
perlで、Lan内へarpの問い合わせが出来るようなライブラリはありませんで
しょうか?
257デフォルトの名無しさん:05/02/01 01:09:32
>>256
質問する前にsearch.cpan.orgで調べようと思わんのか?あーん?
258デフォルトの名無しさん:05/02/01 01:11:05
>>254
まず、その配列の配列の実装方法わかってる?
(@arr1, @arr2)じゃ駄目、リファレンスを使う。
リファレンスについて調べれば自ずと方法がわかるはずだ。
259デフォルトの名無しさん:05/02/01 01:11:20
>>254
なにがしたいのかよくわからんが
$array[1] = 30;
ではいかんのか。
260デフォルトの名無しさん:05/02/01 01:11:46
>>254
$num[1] = @{$array[1]};
261デフォルトの名無しさん:05/02/01 01:19:53
ところで、「リファレンス」って言葉ググるのすごく大変だよね・・・
262デフォルトの名無しさん:05/02/01 02:28:00
>>258
頭悪いね

>>259
超頭悪いね
263デフォルトの名無しさん:05/02/01 02:38:12
>>254
超絶的に頭悪いね。
264デフォルトの名無しさん:05/02/01 08:25:01
>>254
# @array[学校のクラス][各クラスにいる生徒の数]
#   では、あやしいので、
# @array[学年][クラス] [生徒]= 各生徒のデータ
#   のとき
# (1年2組)
my $num = @{ $array[1][2] };
265デフォルトの名無しさん:05/02/01 11:45:43
$ans = hoge($s_time, $e_time, $abc1_num, \@moge1e_time) ;

↑これってどういう意味…?
特に最後の『\@』の意味がわからん…。
誰か教えてくれ〜。
266デフォルトの名無しさん:05/02/01 11:47:37
>>265
参照渡し
267デフォルトの名無しさん:05/02/01 12:04:14
>>261
「デリファレンス」でググるとピンポイントですごい命中
268デフォルトの名無しさん:05/02/01 13:05:37
>>267
ホントだ。「デリファレンス」って Perl 以外では使われない用語?
269デフォルトの名無しさん:05/02/01 14:52:03
>>268
むしろ日本(ry
270デフォルトの名無しさん:05/02/01 14:52:21
$hoge = '(foo|bar)([baz]+)';
$fuga = '$2,$1,moge';
# ...
$piyo =~ s/$hoge/$fuga/;

こんな感じに動的に$fugaの中の$1,$2を評価したいのですが、
どんな方法を使えばいいでしょうか。
271デフォルトの名無しさん:05/02/01 14:52:51
>>268
C系の「ポインタ」は「参照を値に戻す」という概念ではない。
「リファレンス」を使うJavaは基本的にプログラムでデリファ
レンスしない(Javaが自動で行う)

PHPにはあったような希ガス
272デフォルトの名無しさん:05/02/01 15:14:06
>>270
evalを使って、実行式をその都度生成。
273デフォルトの名無しさん:05/02/01 15:18:39
>>270
my $hoge = '(foo|bar)([baz]+)';
my $fuga = q/"$2,$1,moge"/;
my $piyo = 'barb';
$piyo =~ s/$hoge/$fuga/ee;
print $piyo;
274270:05/02/01 15:54:10
>>272-273
ありがとうございました。
275デフォルトの名無しさん:05/02/01 16:03:18
eeには笑った。

276デフォルトの名無しさん:05/02/01 16:13:59
eval(s///ee含む)は激遅なのでループ内部などではお奨めできない。
277デフォルトの名無しさん:05/02/01 17:25:16
Return-path: <[email protected]>
Delivery-date: Mon, 11 Aug 2003 22:49:59 +0900
Received: from lupin by eqv.ne.jp with local (MailPost 5.6)
id HJGJRA-0001JO-00
for [email protected]; Mon, 11 Aug 2003 22:49:58 +0900
To: [email protected] (MINE Fujiko)
From: LUPIN III <[email protected]>
Subject: yeah!
X-mailer: My Post Tester V1.0
Message-Id: <[email protected]>
Date: Mon, 11 Aug 2003 22:49:58 +0900

Dear mine@:

Hello, Fuuujiko Chaaan!
Are you OK?

--
lupin

このメールが誰から誰へ送信されたものか、また本文を示すスクリプトを作りたいのですが
どなたか分かる方いらっしゃったらよろしくお願いします。
278デフォルトの名無しさん:05/02/01 17:42:32
>>277
> このメールが誰から誰へ送信されたものか、また本文を示すスクリプトを作りたいのですが
> どなたか分かる方いらっしゃったらよろしくお願いします。

メールのテキストから、それが誰から誰へ送信されたものなのかを
厳密に同定する技術的手段は存在しない。

もちろん「誰から誰へ送信されたものということにしてあるか」は
ヘッダから抽出可能であり、そのレベルのもので良いのなら、可能だろう。

ヘッダとボディは、「最初の空行」で分割される。

っていうか、のあたりをやるモジュールがあるはず。
279デフォルトの名無しさん:05/02/01 18:53:54
CGI・perlを使い背景に画像を持ってきたいんですがうまくいきません。
backgroundでは駄目なんでしょうか?
280デフォルトの名無しさん:05/02/01 19:12:52
>>278
> っていうか、のあたりをやるモジュールがあるはず。

http://search.cpan.org/~markov/MailTools-1.66/

がどんぴしゃりかな。
281デフォルトの名無しさん:05/02/01 19:12:54
282デフォルトの名無しさん:05/02/01 20:05:00
>>278
わかるよ
283デフォルトの名無しさん:05/02/01 23:12:40
278ではないけど
>>282
詳しく教えて下さい。
仕組み的に無理だと思うのですが。
284デフォルトの名無しさん:05/02/01 23:39:43
お願いします!
「キーボードから日本語のデータを入力し、1字づつずらしながら表示し、
ファイルにそのデータを出力する。」の方法を教えてください!



285ゆうこりん:05/02/01 23:57:41
以下のやり方を教えてください。
1、1月1日が土曜日の平年について、曜日の入力データからその月日
をすべて表示する。
2、2つのファイル{英文と日本訳}を読み込み、行数を数えながら、
表示し、新しいファイルを作成する。
マジわからなくて困ってます!よろしくお願いします!
286デフォルトの名無しさん:05/02/01 23:59:41
>>285
こういうバカが絶対に業界に来ないようにする方法って
ないものだろうか。
287デフォルトの名無しさん:05/02/02 00:01:56
>>283
>詳しく教えて下さい。
>仕組み的に無理だと思うのですが。
横からなんだが、しかも全然詳しくないんだが、
メールヘッダの送信先を偽るのは簡単だけど、ルーティング情報を隠すのは
難しいとされてるみたいだよ。
メール ルーティング情報 とかで、ぐぐってみれば?
詳しくないので、このへんで。
288デフォルトの名無しさん:05/02/02 00:30:36
>>287
詳しくない人は、頓珍漢なこと言いながら出て来るのはやめて。
289デフォルトの名無しさん:05/02/02 00:30:48
>>284
system "stty raw";
open F,">>test.txt";
while ($c = getc) {
last if ord($c) == 13;
print F $c;
}
close F;

(除ActivePerl@Windows)
290デフォルトの名無しさん:05/02/02 02:10:52
>>288 詳しくないついでに。
Received: メールの経路情報
送信メールがどのサーバーを経由して配送されたかがわかる。
Received:ヘッダは複数あるのがふつうで、
その場合は下の方にあるほど送信元となる。
291デフォルトの名無しさん:05/02/02 03:04:39
>>290
> Received: メールの経路情報
× 送信メールがどのサーバーを経由して配送されたかがわかる。
○ 送信メールがどのサーバーを経由して配送されたかがわかることになっているが、偽造可能。

> Received:ヘッダは複数あるのがふつうで、
× その場合は下の方にあるほど送信元となる。
○ その場合は下の方にあるほど送信元となることになっているが、偽造可能。
292デフォルトの名無しさん:05/02/02 03:14:09
>>291
それ以前に、Recievedにはユーザ名が入ってないって。
293デフォルトの名無しさん:05/02/02 04:59:37
ユーザ名が入っていても、それも偽造可能。
294デフォルトの名無しさん:05/02/02 07:07:09
一番下にある Received ヘッダは常に正確に発信元を示しているとは限らない。
スパマーは Received ヘッダを偽造して追跡から逃れようとするのだが、
すべての Received ヘッダを偽造することはできない。
偽造された Received ヘッダは本来の Received ヘッダの下に現れ、
通常は一目で分かるほど偽物らしいものだ。
詳しくないので、このへんで。
メールサーバは黙って相手の名乗りを信じるのではなく、
DNS 検索を行い、相手の本名を発見し、ヘッダに記録する。
295デフォルトの名無しさん:05/02/02 07:48:49
最近のSPAMって受取人アドレスのメールサーバーに直接SMTP接続して送ってくるよね?
296デフォルトの名無しさん:05/02/02 08:05:57
文字列とその繰り返す回数を入力し、文章の段落を作成し、
文章の段落を繰り返す回数の入力でデータを作成する。
(一行のデータは30文字とする。)
※wordで、直接入力で =rand(2,4)と入力するのと同様のプログラム

実行結果例:

文字入力:今日は晴れるが、明日は雨が降る。
繰り返し回数:3
段落数:2

本日は晴天なり。明日は雨が降る。本日は晴天なり。明日は雨が降
る。本日は晴天なり。明日は雨が降る。

本日は晴天なり。明日は雨が降る。本日は晴天なり。明日は雨が降
る。本日は晴天なり。明日は雨が降る。

297デフォルトの名無しさん:05/02/02 08:07:08
>296の問題が分かりません…
教えてもらえないでしょうか??
298デフォルトの名無しさん:05/02/02 08:11:07
>>296
print '文字入力:';
my $str = <>;
chomp $str;
print '繰り返し回数:';
my $count = <>;
print '段落数:';
my $p = <>;

print $str x $count, "\n\n" for(1..$p);

適当に書いたけど一応動作確認済み
299デフォルトの名無しさん:05/02/02 08:16:05
スマン。30文字の条件忘れてた

print '文字入力:';
my $str = <>;
chomp $str;
print '繰り返し回数:';
my $count = <>;
print '段落数:';
my $p = <>;

$line = $str x $count;
$line =~ s/(.{30})/$1\n/g;
print $line, "\n" for(1..$p);
300デフォルトの名無しさん:05/02/02 08:21:31
>>296
my $mojiretu = ' 文字入力:今日は晴れるが、明日は雨が降る。 ';
my $repeat = 3;
my $danraku = 2;

$_ = $mojiretu x $repeat;
$_ = "$_\n\n" x $danraku;
print;
301デフォルトの名無しさん:05/02/02 08:52:44
>>300
ありがとうございました!!
302296:05/02/02 09:08:45
たびたびすみませんが

print"文字入力";
chomp($moji=<STDIN>);
print"繰り返し回数";
chomp($rep=<STDIN>);
print"段落数";
chomp($danraku=<STDIN>);

for ($i=0;$i<&danraku;$i++){

での形も教えてもらえないでしょうか?



303デフォルトの名無しさん:05/02/02 09:13:13
てめーの宿題を他人にやらせるとはいい度胸だなw
304296:05/02/02 09:17:29
>>303
>>all
ごめんなさい!
どうしても分からなくて…
305デフォルトの名無しさん:05/02/02 09:19:45
>>304
for文の使い方くらい自分で調べろ。
306296:05/02/02 09:30:02
>>305
for文自体は調べて分かったんですが、
複数使うやり方がよく分からないんです・・・
307デフォルトの名無しさん:05/02/02 09:41:38
>>302
もう出来てるやん…まあ一応汚染チェックとか入れてみるか。

#/usr/bin/perl
use strict;
my ($moji, $rep, $danraku, $i, $j);

print"文字入力 : ";
chomp( $moji = <STDIN> );
while( $rep !~ /^[0-9]+$/ ){
 print"繰り返し回数 : ";
 chomp ($rep = <STDIN>);
}
while($danraku !~ /^[0-9]+$/){
 print"段落数 : ";
 chomp ($danraku = <STDIN>);
}
for ( $i = 0; $i < $danraku; $i++ ){
 for ( $j = 0; $j < $rep; $j++ ){
  print $moji;
 }
 print "\n\n";
}

書き殴り動作未チェック。カキコindent用に全角スペース入り。
perl的にはこういう回すだけのやつは(1 .. $rep) とか使いたいが、
c的、for文ネストの教科書的にはこんなもんだろ。
308デフォルトの名無しさん:05/02/02 09:43:18
perlの宿題スレってありますか?
309デフォルトの名無しさん:05/02/02 09:52:33
宿題みたいなのは、cgi板のperl初心者スレでやってくれないかなあ
310デフォルトの名無しさん:05/02/02 11:39:52
18.95354 〜 25.58224 の数値の間でランダムで150件数値を生成したい,
という場合はどういう乱数の使い方をすればいいでしょうか?

$a=rand(10);

というのは 1〜10までの範囲で乱数を発生させる,というのはわかるのですが,
開始範囲が1からに固定になってしまいますよね。
乱数の範囲を指定できればいいな,と思っているのですが,こんなことってできるでしょうか?
311デフォルトの名無しさん:05/02/02 11:48:40
>>310
> $a=rand(10);
>
> というのは 1〜10までの範囲で乱数を発生させる,というのはわかるのですが,

違います。

> 乱数の範囲を指定できればいいな,と思っているのですが,こんなことってできるでしょうか?

例えば、3に4を足すと、7になるということは知っていますか?
312デフォルトの名無しさん:05/02/02 11:56:11
$ sort --version
sort (coreutils) 4.5.3

sort -n -k2 -k3
のようなことをしているのですがこれをperlで
実現できる手段はありませんか?

313デフォルトの名無しさん:05/02/02 11:56:31
$a=rand(1)*(25.58224-18.95354)+18.95354
314デフォルトの名無しさん:05/02/02 12:04:31
>>312
ある。
315デフォルトの名無しさん:05/02/02 12:58:54
®ist # データ更新
&sendmail # 更新データメール送信
&view # 更新後データ表示

こんな流れでやってるのですが、&sendmail でちょっと時間がかかるので
&view までモタモタしてしまいます。
&sendmail の返りを待たずに &view の処理に進ませるにはどうやるのでしょうか。
316デフォルトの名無しさん:05/02/02 13:04:24
>>315
forkしてやるとか、alarmと$SIG{ALRM}で平行に流すとかまあいろいろある。
このへんのキーワードでググってみてくれ。
317デフォルトの名無しさん:05/02/02 13:06:08
>>315
®ist # データ更新
&view # 更新後データ表示
&sendmail # 更新データメール送信

こんな流れでやるとか。
318デフォルトの名無しさん:05/02/02 14:18:28
>>316
>>317
forkで望みどおりできました。
ありがとうございました。
319312:05/02/02 16:15:13
とても親切な314様のおかげで 思いどおりのsortができました。
314様 ありがとうございました
320デフォルトの名無しさん:05/02/02 20:54:21
>>319
314は、ネ申 だからな。実生活は別にして。
しかし、キミもエスパーだねぇ。
321デフォルトの名無しさん:05/02/02 21:01:13
わたしも今後、314様を見習うことにします。
322デフォルトの名無しさん:05/02/02 22:04:59
俺も2年程前Perlでスパムツール作ったことある。
Net::DNSでMXレコードを引いて、Net::SMTPで直接メール投げてた。
323デフォルトの名無しさん:05/02/03 00:15:22
( ゚Д゚)そいつはすげぇ
324デフォルトの名無しさん:05/02/03 02:47:12
ファイルを読み込んだ後に数字を入力し、その数字の行数分、読み取ったファイルからランダムに抜き出して
別のファイルに書き込むにはどうすればいいでしょうか?
325デフォルトの名無しさん:05/02/03 02:52:32
そうすればいいです
326デフォルトの名無しさん:05/02/03 03:15:48
>>324
File::Slurpでも使って、ファイルを配列に読み込み、
rand(@配列)という書式で乱数を生成し、既出行を排除しつつ
必要行数ピックアップし、出力用ファイルをopenして
そこに書き込めば良いです。
327デフォルトの名無しさん:05/02/03 08:06:55
>>324
> どうすればいいでしょうか?
ご自分で、調べ、考え、試行錯誤の上、どうしても解らないところだけ
質問して下さい。宿題丸投げスレでは、ありませんよ。
328デフォルトの名無しさん:05/02/03 14:21:50
perl -e 'open F,"read.txt";open W,">result.txt";@f=<F>;print"Number:";$a=<STDIN>;print W $f[int(rand(@f))]for(1..$a);'
※出力行重複未考慮
329デフォルトの名無しさん:05/02/03 14:30:50
>>328
> ※出力行重複未考慮
破壊検査
perl -e 'open F,"read.txt";open W,">result.txt";@f=<F>;print"Number:";$a=<STDIN>;print W splice(@f,int(rand(@f)),1)for(1..$a);';cat result.txt
でオケー
330デフォルトの名無しさん:05/02/03 14:43:07
331デフォルトの名無しさん:05/02/03 16:30:29
>>324
そのモジュールのrandom_lineというのがそれっぽいですが、
出力に重複を許してるような気がします。324の欲しいものは
どうなのかな?

紹介されていたアルゴリズムを利用して重複しない$N行を
抜き出すとしたらこんな感じだろうか。

while (<F>) {
if (@Line < $N) {
push @Line, {lno => $., str => $_};
} else {
if (rand($.) < $N) {
$Line[int rand($N)] = {lno => $., str => $_};
}
}
}

foreach (sort { $a->{lno} <=> $b->{lno} } @Line) {
printf W $_->{str};
}
332デフォルトの名無しさん:05/02/03 17:39:37
メールをパースするいいモジュールはありませんでしょうか?
ヘッダーだけでしたらMail::Headerで文句無しなのですが
添付ファイルを含めパースしてくれるものを探しています。
自分である程度の物は作れたのですが精度がイマイチです。

my $mail = parser(*MAIL);
print "題名:$mail->{header}->{subject}\n";
print "差出人:$mail->{header}->{from}\n";
for my $file_name (@{$mail->{attach}){
 print "---$file_name---\n"
 print $mail->show_file($file_name);
}

このような事を実現出来るものはありますでしょうか。
333デフォルトの名無しさん:05/02/03 18:38:14
>>332
> メールをパースするいいモジュールはありませんでしょうか?
> ヘッダーだけでしたらMail::Headerで文句無しなのですが
> 添付ファイルを含めパースしてくれるものを探しています。

MIME関係は別扱いでMIME::*っていうのが色々あると
思うけど。
334デフォルトの名無しさん:05/02/03 18:50:54
どなたか以下の症状に遭遇した方いませんか。
WinXP+ActivePerl5.8.6で下のコードを実行するとperlが異常終了してしまいます。

use threads;
use encoding "euc-jp";
$th = threads->new(sub {print "thread: end.\n"});
$th->join;
print "main: end.\n";

use encodingの行をコメントアウトするとちゃんと動きます。
だれか助けて
335デフォルトの名無しさん:05/02/03 19:02:13
>>334
ホントだ。
Cygwin Perl(This is perl, v5.8.5 built for cygwin-thread-multi-64int)
でも再現した。

Segmentation fault (core dumped)
336デフォルトの名無しさん:05/02/03 19:05:48
>>333
MIME-toolsで望み通りの事が出来ました。ありがとうございました。
337デフォルトの名無しさん:05/02/03 20:00:50
use threads;
$th = threads->new(sub {print "thread: end.\n"});
$th->join;
print "main: end.\n";
use encoding "euc-jp";
338デフォルトの名無しさん:05/02/03 20:07:29
>>334

http://bugs.activestate.com/query.cgi
同様のバグが報告されていないかこのページでチェック。

http://bugs.activestate.com/help.cgi
なければ、このページのSubmitting Bugs by Email に従って、
バグ報告しましょう。
339デフォルトの名無しさん:05/02/04 12:04:30
LWP::UserAgentでフォームデータをPOSTしてデータを取得するプログラムを組んだのですが、
少ないデータをリクエストすると期待通りにデータを取得できます。
でも、多いデータをリクエストすると'500 SSL read timeout:'となってしまいます。

$ua->timeout(600)のコードを入れても3分ほどで終了してしまいます。

何とか10分くらいは待たせておきたいのですが、どうしたら解決できるのでしょうか。
どなたか教えてください。

これではいけないのでしょうか?
$ua = LWP::UserAgent->new;
$ua->cookie_jar($cookie_jar);
$ua->timeout(600);
340デフォルトの名無しさん:05/02/04 12:20:42
>>339
通常ファイルに吐かせて、その間「作業中ページ」を5〜10秒refreshで回す。
10分も(しかも待ちで)接続維持させるのはイクナイ。
341デフォルトの名無しさん:05/02/04 12:32:52
ブラウザーでダウンロードするのを自動化したいのです。
サーバー側の方はどうしようもないので、こちら側は待つしかないのです。
ブラウザーでダウンロードしてみたのですが、それは数分で終わりました。

問題は別のところにあるのでしょうか?
342デフォルトの名無しさん:05/02/04 14:07:07
具体的にはテキスト・バイナリの判定をやろうと思い、ファイルの文字コードをEncode::Guessで
調べようと考えました。全部読み込んで文字コード判定はアレゲなんで、10行ほど読んで、Joinして
判定しようかと考えたところ、ファイルの改行コードがCRのファイル、LFのファイル入り混じりなん
です。それでセパレータをCR,LF両方対応に出来ないかと思い、$/= "(\r|\n)";としてみましたが、
やはり正規表現は受け付けてくれませんでした。

レコードセパレータにCR,LF両方をいれるのは無理でしょうか?
また、日本語ファイルのテキスト・バイナリ判定に良い方法(数行読んで文字コードの判定以外に)
はありますでしょうか?教えてください。
343342:05/02/04 14:12:31
すいません追加ですが。日本語ファイルなのでファイルテスト演算子は使えません。
344デフォルトの名無しさん:05/02/04 14:33:44
"(\r|\n)"
↑ そもそも正規表現じゃないし、
345デフォルトの名無しさん:05/02/04 15:20:31
>>342
search.cpan.orgで検索するとPerlIO::eolが使えそうな感じだが
試したことはないな。

しかし目的を考えると10「行」である必要はあまりないし、逆に
バイナリファイルだといつまでたっても改行文字が出てこなくて
大変なことになりかねないといったことを考慮すると、読み込む
量は適当なバイト数とかで決めた方がいくない?

346342:05/02/04 15:56:23
>>345
アリガトンです。全くもってその通りでした。readでやってみたら上手くいきマスタ。
↓こんな感じです。

use Encode::Guess qw/euc-jp shift-jis/;
print "text\n" if is_text("/foo/bar");
sub is_text{
$file = $_[0];
open FH,$file or die;
read (FH, $buf,200);
my $guess = Encode::Guess::guess_encoding($buf);
unless(ref $guess){return 0;}
else{return 1;}
}
347デフォルトの名無しさん:05/02/04 15:57:49
perl-lib.pl
ってライブラリがあるんだけど、試したヤツいる?
ttp://www.tryhp.net/perllib.htm

この中で、ksubstrって関数があるんだけど、

----------------------------------
!/usr/bin/perl

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

$str = "コンピュータを使用している";
$a = ksubstr($str,0,5);
print $a;
----------------------------------
【結果】
コンピ

はえ?
実行環境 linux perl 5
348デフォルトの名無しさん:05/02/04 16:56:58
>>347
ソースを眺めたところSJISを仮定しているようだ。

1バイト目が0x81〜0x9f, 0xe0〜0xfcにあるときのみ
2バイト文字として扱われ、それ以外は半角カナを
含む1バイト文字とみなされているらしい。

で、「コンピ」がEUCだとすると

% echo コンピ | hex
0x00000000: a5 b3 a5 f3 a5 d4 0a - コンピJ

だからして、f3 a5の並びが2バイト文字他は1バイト文字
になってちょうど5文字という判定になるようですな。

しかし扱えるのがSJISだけだなんてどこにも書いてないぞ(笑)
349デフォルトの名無しさん:05/02/04 17:07:02
>>348
だよね?だよね?

俺もソースで

unpack("C", $string)
で返ってくる文字を一文字ずつチェックしてみたんだけど、
やっぱりおかしいんだよね。

if ($cn >= 129 && $cn <= 159 || $cn >= 224 && $cn <= 252)

の部分で文字コードを判別しているんだけど、
この部分をEUCに置き換えたいんだけど、

その文字コードをどうやって調べたらよいのか・・・

ちなみに、

$str = "コンピュータを使用している";
&jcode::convert(\$str,sjis);
$a = ksubstr($str,0,5);
とか

$str = "コンピュータを使用している";
&jcode::convert(\$str,jis)
$a = ksubstr($str,0,5);

とか挿入して判別させてみたんだけどとんでもない事になったよ。


350デフォルトの名無しさん:05/02/04 17:35:31
>>349
jcode.plの中にEUCの1文字にマッチさせるための正規表現があるので
これを参考にすればいいんじゃないかな。

$re_euc_c = '[\241-\376][\241-\376]';
$re_euc_kana = '\216[\241-\337]';
$re_euc_0212 = '\217[\241-\376][\241-\376]';

1文字が3バイトになるやつ(最後の$re_euc_0212)があるのがちと
面倒だろうけど、基本は同じはずだから健闘を祈る。

351デフォルトの名無しさん:05/02/04 17:49:33
>>350
ありがとう!!

道が見えてきたよ
352デフォルトの名無しさん:05/02/04 18:23:18
(もし使えるのなら)Perl5.8のEncodeを使うのが早いと思う……

ちょっと使いにくいけど。
353デフォルトの名無しさん:05/02/04 19:55:48
申し訳ありませんが質問させて下さい

cgiの入力フォームで送信ボタンを押した後など
ブラウザでリロードを行うと同じ処理が繰り返し行われてしまいます

そのせいで、例えばリストの中の2番目のデータを削除していた場合
リロードの度に新しく2番目となったデータが削除されていってしまうのですが
こういった場合にある程度経験のあるプログラマーの方は
どのようなやり方で解決しているのかお伺いしたいのですm(__)m
354デフォルトの名無しさん:05/02/04 20:00:27
Perlコーディング初心者質問スレ Part 40
http://pc5.2ch.net/test/read.cgi/php/1106816922/
355334:05/02/04 20:10:41
レスどうもです。
書き込んでからいろいろ情報探してたけど、解決方法は見つかりませんでした。
やはりバグなんでしょうか。
英語苦手なんで、どうやってバグ報告しようか。
356353:05/02/04 21:11:26
板違い申し訳ありません
誘導ありがとうございましたm(__)m
357デフォルトの名無しさん:05/02/05 00:18:59
>>355

encodingのことならJcode.pmメーリングリストあたりで弾さんに相談してみるのも手。

358デフォルトの名無しさん:05/02/05 00:38:49
二次元配列の中身をテーブルにして出そうと思ったんですが・・・

$tbl[0][0] = "00";
$tbl[0][1] = "01";
$tbl[1][0] = "10";
$tbl[1][1] = "11";

print "<TABLE BORDER=1>\n";
foreach $value (@tbl) {
 print " <TR>$value\n";
 foreach $value2 (@value) {
  print "  <TD>$value2</TD>\n";
 }
 print " </TR>\n";
}
print "</TABLE>\n";

何もでてきません
何がだめなんでしょうか?誰か教えてください・・・
359デフォルトの名無しさん:05/02/05 00:39:46
すいません
print " <TR>$value\n";
この行の$valueってのはデバッグ用です 消し忘れました
360デフォルトの名無しさん:05/02/05 01:01:09
>>358
あんたも板違い
361デフォルトの名無しさん:05/02/05 01:15:58
$valueと@valueは別の変数だよ。
362デフォルトの名無しさん:05/02/05 01:28:05
open2が難しすぎる。プロセスを鵜飼のように使いこなす指南サイトはござりませぬか?
363デフォルトの名無しさん:05/02/05 09:28:02
>>359
多次元配列でハマってるんだからそう板違いでもない罠。

そのデバッグコードで「ARRAY(0x10166cbc)」といった出力があるだろう。
外側のループでは$valueには配列へのリファレンスが入るので、
内側のループではデリファレンスしてやる必要がある。

× foreach $value2 (@value) {
○ foreach $value2 (@{$value}) {

perlでは多次元配列は作成出来ない。
多次元配列は配列へのリファレンスの配列を作ることになる。
CやVBから入ってきた人はここでつまづき易い。

つまりこの場合、
$tbl[0] には 無名配列 {"00", "10"} へのリファレンスが、
$tbl[1] には 無名配列 {"10", "11"} へのリファレンスが

代入されている。
$tbl[1][0] は $tbl[1]->[0] (または ${$tbl[1]}[0]) の略記。
C++経験者なら $tbl[1]->[0] でピンと来るだろう。

わかるかな〜?
364デフォルトの名無しさん:05/02/05 13:07:21
>362
気をつけなきゃいけないのはバッファリングとシグナルの扱いぐらいなんじゃないの?
365デフォルトの名無しさん:05/02/05 13:10:53
デバッグ中です。
$foo = undef; であるとき
if ($foo->{bar}->{baz}) {...} とかすると
$foo->{bar} = {}; が自動生成されてしまいますが
これを禁止する、あるいは自動生成しそうになったときに
自動的に die かなんかする方法ってないでしょうか?
366デフォルトの名無しさん:05/02/05 13:33:53
if ($foo and $foo->{bar}->{baz}) {...}
367デフォルトの名無しさん:05/02/05 13:40:46
>>365
existsを使えば?
368デフォルトの名無しさん:05/02/05 13:43:56
>>366
サンクスです。
確かに毎回チェックすればオーケーなんですが
チェックせずに済む方法ってないでしょうか。
既にあるソースの中で、どこで自動生成しているのか簡単に突き止めたいのと
$foo->{level_1}->{level_2}->{level_3}->{level_4}->{level_5} ...
と階層が深くなった場合の要素の存在チェックが面倒なので…
369デフォルトの名無しさん:05/02/05 13:51:31
>>367
どもです。
exists使っても $foo->{bar}までは自動生成されてしまいます。
use strict に自動生成禁止とかのオプションってないのかなぁ...
370デフォルトの名無しさん:05/02/05 15:01:49
>>365
う〜ん、先日、auto-vivificationを禁止するモジュールを
見つけて何に使うんだろうと首をひねった記憶があるが、
どこで見たのか忘れた。
371デフォルトの名無しさん:05/02/05 15:09:46
372デフォルトの名無しさん:05/02/05 16:35:36
パールって、位置付けはWeb言語になるのかな?
373デフォルトの名無しさん:05/02/05 16:37:43
>>372
ちがう
374デフォルトの名無しさん:05/02/05 17:04:06
5.8.5 → 5.8.6 の変更点がわかりやすく説明してあるとこ教えて。
375デフォルトの名無しさん:05/02/05 17:10:06
perldoc perl586delta
376デフォルトの名無しさん:05/02/05 17:10:14
>>374
> 5.8.5 → 5.8.6 の変更点がわかりやすく説明してあるとこ教えて。
http://search.cpan.org/~nwclark/perl-5.8.5/pod/perl585delta.pod
377デフォルトの名無しさん:05/02/05 17:12:03
>>376
> > 5.8.5 → 5.8.6 の変更点がわかりやすく説明してあるとこ教えて。
> http://search.cpan.org/~nwclark/perl-5.8.5/pod/perl585delta.pod

うわ、間違えた。

http://search.cpan.org/~nwclark/perl/pod/perl586delta.pod

だな……って、cpan内でリンクミスしてるんじゃん。
378デフォルトの名無しさん:05/02/05 18:16:52
ありがとうございます。早速見てみます。
379デフォルトの名無しさん:05/02/05 20:45:54
質問させてください。リストからテキストを読み込んで、パターンマッチしようと思っています。
メタ文字を展開するのに悩み、evalを使う事で何とか出来たんですが、余り意味がわかってない
せいか挙動が把握しきれません。

$a = '\d \t';
($pattern,$str) = split /\s/,$a;
$_ = 'one2three';

・s/$pattern/$str/g;
・eval {s/$pattern/$str/g};
$_ -> one\tthree 
この2つでは、$patternは展開され、$strはメタ文字ではなくリテラル

eval "s/$pattern/$str/g";
$_ -> onethree
これでは、$patternは展開され、$strはメタ文字になります。

なぜ、eval " "でメタ文字が展開されるのでしょうか?
evalを使わないでメタ文字を展開する方法はありますでしょうか?
また、eval " "で展開しないようにするためにquotemetaしたんですが、2重にしなければ駄目でした。
\\tでは駄目、\\\tでは'\t'になる。これもなぜかわかりません。質問ばかりで申し訳ありませんが、
教えてください。
380デフォルトの名無しさん:05/02/05 21:47:20
>>379
>なぜ、eval " "でメタ文字が展開されるのでしょうか?
eval "s/$pattern/$str/g"; というのは、「s/$pattern/$str/g」という
文字列を展開し、展開した文字列を評価する、ということなのだから、
「$str」を" "で展開した結果、「\t」という文字列が現れたなら、
eval するとき、それはメタ文字のタブであると評価されるだろう。
>evalを使わないでメタ文字を展開する方法はありますでしょうか?
s/\\t/\t/g; のようなことをメタ文字ごとに繰り返すしかないだろうね。

それ以降の質問は、何をしたいのかよくわからん。
381デフォルトの名無しさん:05/02/05 22:13:45
>>379
とりあえず、evalを使う方向で問題に対処してみたつもり。
もうちょっと綺麗にならないかな・・・

$a = '\d \t';
($pattern,$str) = split /\s/,$a;
$str =~ s/"/\\"/g;
$_ = 'one2three';

s/$pattern/eval qq|"$str"|/eg;


説明は>>380さんもしていますが、
eval {s/$pattern/$str/g}; では、
s/$pattern/$str/ が、

eval "s/$pattern/$str/g"; では
s/\d/\t/g が評価されます。

eval ""は""を普通に文字列としてみるわけ。
382デフォルトの名無しさん:05/02/05 22:15:14
Perl6はいつ出るのよ?
383365:05/02/05 22:21:03
>>370
サンクスコです。ばっちりでした!助かりました。
384379:05/02/05 22:38:19
>>380-381
サンクスコです。ダブルクォート→evalの順に評価ということで、疑問が解けました。
お二人とも大変丁寧なご説明ありがとうございました。

最後の質問は
$str = '\\t' と $str = '\t'
の結果に差がないのが不思議だったんです。すいません質問が悪かったです。これについては
evalも少しは理解できたので、考えてみたいと思ってます。
385デフォルトの名無しさん:05/02/05 22:58:00
>>381
> s/$pattern/eval qq|"$str"|/eg;
オプションのeは、evalと同義なので
s/$pattern/qq("$str")/eeg;
で、よさげ。

>>384
> $str = '\\t' と $str = '\t'
' '内でも \' と \\は、展開されるからだと思う。
386デフォルトの名無しさん:05/02/05 23:11:21
>>385
(` ・ω・)づ ヘー
eオプション重ねられたんだ
添削ありがとう
387デフォルトの名無しさん:05/02/05 23:26:26
PascalやSQLとかにある in演算子(?)を作りたいのですが、可能でしょうか?
@list = qw(a b c d e);
$value = 'a';
if ($value in @list) { ....
のように包含条件を判定するものです。
演算子オーバロードでいけるのかな?と思ったのだけれど
+や-などの記号の類しかオーバーロードしてくれないようで…。
なんか関数の左側にある項が引数として渡ってくる方法があればよいのですが。
素直にgrep使えばいいといえば、そうなのだけれど。
388デフォルトの名無しさん:05/02/05 23:55:21
use strict;
sub In($@){
my$val =shift;
for(@_){
return 1 if $_ eq $val;
}
return undef;
}

my@list = 'a'..'e';
my$value = 'a';
print "yes\n" if In($value=>@list);

↑じゃぁイヤかな〜?
389デフォルトの名無しさん:05/02/06 00:22:23
>>387
> 素直にgrep使えばいいといえば、そうなのだけれど。

grepはつねに全要素を処理するので効率が悪い。
390387:05/02/06 00:36:49
>>388
う〜ん、やはり関数スタイルになってしまいますかあ。。。
しかしレスありがとうです。
391デフォルトの名無しさん:05/02/06 00:53:52
>>390
Switchなんかはどうやってるのかと見てみると、
Filter::Util::Callなんてのが出て来ました。
Perlのコードを解釈前/解釈時に置換できるみたいです。
その上にFilter::Simpleがあったのでちょっと使ってみましたが・・・

これ使うなら――がんがれ
392デフォルトの名無しさん:05/02/06 01:05:17
>>390
そこにこだわるなら。

use overload "nomethod" => nomethodMethod";

"nomethod" は、4 つのパラメータを持つ関数へのリファレンスが引き続きます。
これが定義されていれば、多重定義の仕組みで、 何らかの演算子に対するメソッドを
見つけることができなかったときに、 呼び出されます。 この関数の最初の 3 つの
引数は、本来、 呼ばれるはずだったメソッドに対する引数と一致し、4 番目の引数は、
見つからなかったメソッドに対応するシンボルとなります。 いくつかのメソッドが
試されている場合には、最後のものが使われます。 たとえば、1-$a であれば、 "nomethod" => "nomethodMethod" の組が use overload 指示子で 指定されていれば
&nomethodMethod($a,1,1,"-") と同様です。
393387:05/02/06 01:08:22
>>391
おお!ありがとうございます。CPAN見てみました!
プリプロセッサのようなものと思えばいいのでしょうか。
やってみるよ!ありがとう。
394387:05/02/06 01:39:32
>>392
どもです。
試してみたのですが "in" を使うとBarewordでやはり弾かれてしまうようです。
395デフォルトの名無しさん:05/02/06 02:03:17
>>394
プリプロセッサに通すとか。

まあ、こんな事にこだわるのは、本末転倒だと思うけどな。
396387:05/02/06 02:17:47
>>395
>まあ、こんな事にこだわるのは、本末転倒だと思うけどな。
あは。それは認めるよ。
ただ、まぁ、自分はSwitch.pmもTry/CatchのError.pmも好んでuseするほうだからさ。
できればソースはすっきりしてるほうがいいじゃない?
397デフォルトの名無しさん:05/02/06 02:27:07
藻前スタイルで記述したスクリプト全部を perl構文に置換してeval すれば?
398デフォルトの名無しさん:05/02/06 15:56:02
素朴な疑問です。

例えば
my $a = 100*200;
これは内部でどういう処理をしているのでしょうか?
Perlはコンパイルするだけだと思うのでスレ違いな気もしますが、
Perlしか知らないのでここでお願いします。

コンピュータは基本的にon/offの感知しかしませんよね。
もしかして100+100+100+.......
ていう行為をしているのでしょうか?
399デフォルトの名無しさん:05/02/06 16:02:47
CPUが一瞬のうちにかけ算の筆算をしてると思えばヨイ
400デフォルトの名無しさん:05/02/06 16:05:49
>>398
「アセンブラ」を少し勉強すれば、コンピュータが何をしているのか解るだろう。
401デフォルトの名無しさん:05/02/06 16:09:43
最近は掛け算のテーブル(9x9みたいなの)を持ってる
402デフォルトの名無しさん:05/02/06 16:10:46
>>398
二進数って知ってる?
十進法だろうと二進法だろうと数学は成り立つから安心汁
403398:05/02/06 16:28:09
>>399-402
ということはコンピュータはあらかじめ3*3の答えを知っていて、それを
どこかにメモリしているだけですか?

そもそも1+1というのは一つのハコに異なる二つを入れてソレを後から数えた結果ですよね。
掛け算はどうなのでしょうか?

コンピュ−タができる意味がわからんのです。
404デフォルトの名無しさん:05/02/06 16:34:51
>>403
Perlに関係ないってことはわかるよね?
405デフォルトの名無しさん:05/02/06 16:38:04
>>403
> コンピュ−タができる意味がわからんのです。
CPUの内部構造やらアーキテクチャにまで踏み込んだ本でも
買って読め。
406デフォルトの名無しさん:05/02/06 16:47:42
>>404
わざわざ指摘するまでも無くはじめに自分で言ってるじゃないか・・・
ここで答える気が無いなら適切なところに誘導するくらい汁
#漏れは答える

>>403
> ということはコンピュータはあらかじめ3*3の答えを知っていて、それを
> どこかにメモリしているだけですか?
それは高速化するための工夫であって原理とは少し違う

とりあえず、掛け算の前に足し算をどうやってるか知った方が良いと思ふ
原理的には、コンピュータが行う足し算は、
筆算での足し算方式を二進法でやったもの。
実際に紙に書いてでもやって見れ。
407デフォルトの名無しさん:05/02/06 17:04:25
>>398
1100100 * 11001000 の筆算やってみ?
408デフォルトの名無しさん:05/02/06 17:26:58
ほんと、厨の出たときにしか盛り上がらないスレだな
409デフォルトの名無しさん:05/02/06 17:30:44
いまさら何言ってるんだよ
2chってどこもそうだろ?
410デフォルトの名無しさん:05/02/06 18:35:08
>>391s
Filter::Util::Call面白そう。
サンクス。
411デフォルトの名無しさん:05/02/07 00:17:09
リファレンスの管理でラクしようと思って、弱いリファレンスを使ってみたのですが
自己参照を含むリファレンスをweakenしても思うように動作してくれません。
use Scalar::Util qw(weaken);
my $outer;
{
  my $inner = {id => 'inner'};
  $inner->{self} = $inner;
  $outer = $inner;
  weaken $outer;
}
print Data::Dumper->Dump([$outer]);
の出力は
$VAR1 = {'self' => $VAR1, 'id' => 'inner'};
と、$innerが解放されずに自己参照が生きています。
まだ実験機能らしいしこういうものなのでしょうか?
ちなみに5行目の $inner->{self} = $inner; をコメントアウトすると
ちゃんと $innerのスコープ外で $outerはundefになります。
な、なんで??
412411:05/02/07 00:20:51
ちなみにperl v5.6.0および5.8.5共に同じ動作です。
413デフォルトの名無しさん:05/02/07 00:25:54
>>440
弱いリファレンスについては始めて知ったんだけど、
weaken $outer じゃなくて、
weaken $inner->{self} じゃないの?
まだ試してもいないから思いっきり見当違いだったらスマソ
414413:05/02/07 00:30:52
やってみた。
weaken $inner->{self};
weaken $outer;
両方やったら、
$VAR1 = undef;
成功した模様。
415デフォルトの名無しさん:05/02/07 00:34:56
>>413
ええ、私も始めそう思って weaken $inner->{self}したのですが
解放されませんでした。
perldocのサンプルが
{
my $var;
$ref = \$var;
weaken($ref); # Make $ref a weak reference
}
# $ref is now undef
となっているので411的な書き方でよいかとは思うのですが
どうも上手くいきませぬ。。。
416デフォルトの名無しさん:05/02/07 00:39:32
>>414
お!ほんとだ!!ありがとう神様!!
これで、自己参照セットするときに weakenしとけば解放忘れないということですね。
やった!!
417413:05/02/07 00:45:24
>>416
weaken $foo = $bar;
と書きたくなるけど、
weaken($foo = $bar);
じゃ無いと駄目なのね・・・

ところで、>>413>>440なんて何所から出てきたのやらw
418デフォルトの名無しさん:05/02/07 02:07:57
>>411
たぶんこういうことだと思う。

use Scalar::Util qw(weaken);
my $outer;
{
  my $inner = {id => 'inner'}; # 無名ハッシュのrefcount = 1
  $inner->{self} = $inner; # refcount = 2
  $outer = $inner; # refcount = 3
  weaken $outer; # refcount = 2
}
# ブロックを抜けたので$innerがなくなりrefcount = 1
# これは $inner->{self}による参照が残っているから

ということで、414の言うようにweaken $inner->{self}を追加すると
ブロックを抜けた時点でめでたくrefcount=0になって解放されると。

循環リストみたいのつくっていらなくなったらまとめて消すのには
使えるかもしれないな。要素を保持する配列か何かが別途必要に
なるけど、普通だとまともに解放するにはデータ構造たどって全部
参照けすところをその配列消すだけですむのでだいぶ楽だ。

419デフォルトの名無しさん:05/02/07 10:06:20
>>350
すまん。これを利用してEUC文字列を検索しようと思っているんだが、
俺自体文字コードをよく理解してないんだけど、

'[\241-\376][\241-\376]';
ってどういう意味?

おそらく文字コード表のどこからどこまでって事だと思うんだけど、
その一覧みたいなのってあるのかな?

ググっても
http://www.rtpro.yamaha.co.jp/RT/docs/misc/kanji-euc.html
とかで良く分からんよ。

基礎的なことを覚えられるWEBってある?
420デフォルトの名無しさん:05/02/07 10:16:27
>>419
8進数
421デフォルトの名無しさん:05/02/07 10:21:53
>>420
ありがとう。

環境linuxなんだけど、
echo 'コンピュータ' |hexdump -b

ってやると、
0000000 245 263 245 363 245 324 245 345 241 274 245 277 012
000000d

って出てきたんだけど、このコードのことだよね?

ふむふむ
これを検索すればいいのか・・・

マンドクセ
422デフォルトの名無しさん:05/02/07 13:01:49
423デフォルトの名無しさん:05/02/07 16:33:42
初歩的な質問ですみません、
%Ext = (
foo => {
path => "/foo",
data => [ "ab", "ac", "ad", "af" ],
},
bar => {
path => "/bar",
data => [ "cc", "cd" ],
}
);

このようなハッシュの配列があるとすると、
要素"af"が与えられた場合のpathの値を返す方法がわかりません。
どのようにすれば良いのでしょうか?
424デフォルトの名無しさん:05/02/07 16:55:05
Perl というより、アルゴリズムの質問な気が…。

use List::Util qw(first);

my $node = first {
first { $_ eq 'af' } @{$_->{'data'}}
} values(%Ext);

die 'not found' unless $node;

my $path = $node->{'path'};
425デフォルトの名無しさん:05/02/07 17:02:29
すげえ!すみません、取り乱しました。
こういうアルゴリズムはどうやって覚えるのでしょうか?
なにはともあれありがとうございます!
426デフォルトの名無しさん:05/02/07 17:20:47
ほとんどHashの意味が無くなってるがw
427デフォルトの名無しさん:05/02/07 17:32:17
元のデータ構造が糞すぎるもん。
428デフォルトの名無しさん:05/02/07 18:25:23
>>423
素直に考えてみた。

$target = 'af';
foreach (values %Ext){
push @result, $_->{'path'} if grep{ $_ eq $target } @{$_->{'data'}};
}

print join "\n", @result;
429デフォルトの名無しさん:05/02/07 21:15:59
素直に "ab", "ac", "ad", "af" や "cc", "cd" を Hashキーにした方がいいぞ。
430411:05/02/08 01:25:19
>>418
解説ありがd。
weakenはその参照がなかったことにする(参照カウントを一つ戻す)
関数ということで理解したよ。つまり、外部参照であれ循環や自己参照であれ
参照している部分を全てweakenしておかなければいけなかったんだね。
俺は1回やればOKなのだと思ってた。勉強になりました。ありがとう。
431423 :05/02/08 18:25:53
みなさんありがとうございます。
覚えたてなので、いろいろなやり方がある事もわかって、
かなり勉強になりました。
もう少し難しい質問が出来るように精進します。
432デフォルトの名無しさん:05/02/09 15:42:20
>>431
>>429の言うデータ構造にしてみ。
たとえばこんな感じ。

%Ext = (
foo => {
map{$_ => "/foo"}( "ab", "ac", "ad", "af" ),
},
bar => {
map{$_ => "/bar"}( "cc", "cd" ),
}
);


$Ext{bar}{cd}

とか

$Ext{foo}{ad}

とかでアクセスできるよ。
433デフォルトの名無しさん:05/02/09 17:42:56
あんまり嬉しくない構造だよな
434デフォルトの名無しさん:05/02/09 18:30:43
一歩下がって、「何をしたいのか?」レベルから再考すべき
ケースですね。
435デフォルトの名無しさん:05/02/09 18:53:43
>>434
非常に良い意見だ。
perlウィザードになるとハッシュとリファレンスでおよそどんな
構造でも作れてしまうから逆にハマったりするんだよね。
436デフォルトの名無しさん:05/02/09 19:26:58
まったくもって、そのとうり。
>>432のできが良くない構造をレスしたのは、俺なんだけど
自分で示しながら正直データ構造として使う気にはなれんしね。

各パスからdataを追加したり、削除したりするときにハマるのは目に見えてるし。
あくまでデータの内容が固定だったら、要素にアクセスする記述が簡単である
ていうしかメリットはなかったりする。

ただ、>>423がそれでことたりる話というのであれば
こういうアプローチもあるよって示しただけなんで。
まあ>>432は反面教師ということでヨロ。
437デフォルトの名無しさん:05/02/09 19:39:52
「とうり」
438デフォルトの名無しさん:05/02/09 19:49:30
%Ext = (
"/foo"=> ["ab", "ac", "ad", "af" ],
"/bar"=> ["cc", "cd"],
);

%Ext2 = map{my $key=$_; map{$_ => $key} @{$Ext{$key}} } keys %Ext;

print $Ext2{af};
439デフォルトの名無しさん:05/02/09 21:05:00
ハッシュをリニアスキャンするなど、弾の入った銃で殴りかかるのと同じだ…と、Perlクックブックに合った気がする。
440デフォルトの名無しさん:05/02/09 21:06:50
PerlでLALR(1)構文による構文解析をするようなモジュールは
ないですかね?
Parse::RecDescentはなかなか良いんですが、LL(1)構文なので
左再帰ができないんですよね。
441デフォルトの名無しさん:05/02/09 21:50:11
cpan で検索すれば引っかかるだろ。

Parse::Yapp でいいじゃねーか?
442デフォルトの名無しさん:05/02/09 22:04:16
きっとアホな質問かもしれません。
しかも文章長いです。

win98で開発してます。
どーしてもperlで開発したいんですが「exeファイル」で「GUI」したいんです。
この時点で「あー、なんか俺って間違ってる」ってのは分かるんですが、perlがいいです。

ちなみに、ぶっちゃけGUI回りはperlの力じゃなくていいです。
内部処理をperlで作りたいだけです。

んで、実行環境は複数のマシンで使うんですが、OSは全部winでバージョンはなんかいろいろです。
perlはインストールされてるかどうかなんて知りませんし、ソース隠蔽したいから完全なexeにしたいです。

んで、試したのは、perl/Tk。これ微妙だけど使ってもいいとおもた。
exe化ではperl2exeとかやったらバグが多くて断念。しかも料金請求されたし。払う気ない。

あと、コンパイラはBCCとかあるけど、ヘボプログラマーなんで
どやってCとperlインタプリタごと全部コンパイルしてexeにしたらいいか分からんくて断念。

これから、ちょっと試してみたいと思うのは、画面だけHSPで作って内部処理は全部perlにやらせる、
ってのを試したいと思うけど、
どーせperlコンパイラごとexeになんて出来そうにないからきっと断念するんだろうな、と思っている。

なんか誰か簡単に出来るいい方法、アホな俺に教えて下さい。
443442:05/02/09 22:09:32
追伸。
実行速度はそんなに重視しない。それなりに稼動すればOK.
実行ファイルも、でかくてOK。

GUI以外の内部処理がperlで作れて、どんなwin環境でも実行出きるexeならそれでいい。
ただし、お金は一切払わない。なんも買わない。
444デフォルトの名無しさん:05/02/09 22:13:07
>>442
pp
445デフォルトの名無しさん:05/02/09 22:13:59
446デフォルトの名無しさん:05/02/09 22:28:25
447デフォルトの名無しさん:05/02/10 03:49:04
exeにしても結構な再現率でデコンパイルされてしまうよ
448デフォルトの名無しさん:05/02/10 03:55:18
とりあえずバイトコードにしないとな
449デフォルトの名無しさん:05/02/10 05:09:06
何をしたいんだ?
450デフォルトの名無しさん:05/02/10 10:05:33
質問です。

処理に時間がかかるスクリプトを foreground で実行して、
経過時間をリアルタイムで表示させたいんですが、ヒントいただけませんでしょうか。
451デフォルトの名無しさん:05/02/10 10:33:15
>>450
何所のヒントがほしいのかねぇ。キーワードを挙げれば、
時刻の取得 time関数
表示の更新 復帰文字(\r)
バッファリングの抑止 $|

ついでに、サンプルコードも書いちゃる
$|=1;
my $start = time();
while(1){
print "\r", time() - $start, 's';
sleep(1);
}
452デフォルトの名無しさん:05/02/10 12:32:54
>>442
盗っ人猛々しい乙! (*^ー゚)ノ
453デフォルトの名無しさん:05/02/10 14:06:53
>>451
おお!
まさに、「表示の更新」、「バッファリングの抑止」の方法が
知りたかったです。どうもありがとうございます。
勉強になりました!
454デフォルトの名無しさん:05/02/10 14:16:40
テキストファイルの行数を数え上げるのってどうやってますか?
455デフォルトの名無しさん:05/02/10 14:43:35
open IN, $file or die $!;
1 while <IN>;
close IN;

print $.;
456デフォルトの名無しさん:05/02/10 14:45:40
>>454

print `wc -l hoge.txt`;

うそですうそです。

open R,"<hoge.txt";
$i++ while(<R>);
print $i;
457デフォルトの名無しさん:05/02/10 14:50:49
>>455
closeしちゃうと$.が(ry
458デフォルトの名無しさん:05/02/10 17:53:04
こんちはー perl初心者です!
遺伝子配列を処理するperlのモジュールを
少しいじって出力形式を変えてやろう考えたのですが、
このモジュールの中で、
$$data = 0.;
とか書いてあるんですけど、なんなんでしょう、この$$って?
459デフォルトの名無しさん:05/02/10 18:00:53
>>458
リファレンス
460デフォルトの名無しさん:05/02/10 18:18:55
>>458
デリファレンス
461デフォルトの名無しさん:05/02/10 18:30:10
>>458

$var = "abcdefg';
$data = \$var;

print $$data,"\n";

$$data = "xyz";

print $var,"\n";

とすれば

abcdef
xyz

と表示される。
462デフォルトの名無しさん:05/02/10 20:10:03
山椒寿司
463デフォルトの名無しさん:05/02/11 17:08:44
>>441
Parse::Yappってコンパイラコンパイラですよね?
Parse::RecDescentのようなインターフェイスで
LRLA(1)構文のPerl製パーサってないのかな。
464デフォルトの名無しさん:05/02/11 17:26:29
Parse::RecDescent は良くて Parse::Yapp がイカン理由が分からんのだが。
阿呆?

465デフォルトの名無しさん:05/02/11 19:59:09
>>464
全然インターフェイスが違うじゃん。阿呆?
466デフォルトの名無しさん:05/02/12 00:28:51
キャラ名<>ID名<>パス<>a<>b<>c<>d<>e<>f<>g


キャラ名<>ID名<>パス<>a<>b<>c<>d<>e<>f<>g

こんな感じのキャラゲーのデータが10垢分あるのですが、
a〜gのデータを10垢分読み込んで、
aのデータのランキング、bのデータのランキング、cの・・・
っと7項目それぞれのランキングを表示させたいのです。
sortを使うのかな・・・程度しか思い浮かびませんが。。。
htmlへ表示させる時は、各$a、$b・・・だけを任意の場所に書き加えれば良い様に・・・
具体的にどう書けば宜しいのでしょうか?
どなたか御教授頂ければ幸いです。
467デフォルトの名無しさん:05/02/12 01:46:53
そんなどうとでも書ける質問されてもなー
468デフォルトの名無しさん:05/02/12 02:19:11
簡単な(けど効率の悪い)やり方
#aでランキング
print sort { (split "<>",$b)[3] <=> (split "<>",$a)[3] } @data;
469デフォルトの名無しさん:05/02/12 09:17:35
今、「素数を計算プログラム」を作っているのですが苦戦中、、、
とりあえず素数を計算する所は出来たのですが、
計算した素数をファイルに保存しておいて、次にさっき計算した以上の素数を計算する時は、そのファイルを読み込んで追加で計算させたいんですが、、、 よろしくお願いします。

470デフォルトの名無しさん:05/02/12 09:18:32
素数を計算するだけ
#! c:/perl/bin/perl

$endnum = 100; #この数字まで計算
$x = 0; #素数の個数-1
$number = 2; #2から計算
$so[0] = 2; #素数に2を入れておく
# 計算
while($number <= $endnum) {
$s = 0;
while ($number % $so[$s] != 0) {
if($s == $x) {
++$s;
$so[$s] = $number;
++$x;
last;
}
++$s;
}
++$number;
}
++$x;
471デフォルトの名無しさん:05/02/12 09:26:14
>>470
3965299226は素数ですか?
472デフォルトの名無しさん:05/02/12 09:54:51
PCのスペック上の問題で、10万までしか計算していません。すみません。
473デフォルトの名無しさん:05/02/12 11:34:11
>>469
読み書きするのがperlからだけなら、Storableモジュール使うのが
楽だよ。
474デフォルトの名無しさん:05/02/12 16:00:08
どなたかご助言お願いします。

zlibによって圧縮されたデータが借りてるWEBサーバー(apache)へアップされてきます。
それをPerlによって解凍し、中身を読んで、ソートしたいのです。
zlibの解凍処理はどのようにしたら良いのか、なにか手段はありますでしょうか。


ググったら「Compress-Zlib-Perl」というのがソレかなーという感じなのですが、
どうもこれはサーバー側にインストールされるべきモジュールのような気もします。

あと、自作Perlソースに
use Compress::Zlib;
$dest = uncompress($source);
とか書いておいて、サーバー上で実行してもエラーが出ないので、
借りてるサーバーでも既に利用可能なのかなーと思いますが、それ以上の使い方や
動作チェックの方法がよくわかりません。
475デフォルトの名無しさん:05/02/12 16:51:19
476デフォルトの名無しさん:05/02/12 20:24:55
Storableモジュールですか?初めて聞きました、、、
ぐぐってみましたがよくわかりませんでした(泣
よろしければ、モジュールについて説明してもらえないでしょうか?
お願いします。
477デフォルトの名無しさん:05/02/12 21:03:05
$hoge = {
 abc => 1,
 def => 2,
 array => [0, 1, 2],
 scalar => \'hello',
 ref = {
  aaa => {
   bbb => {
    123 => ['a', 'b']
   }
  }
 }
};
みたいな複雑な変数をファイルに出力できる。
次回このファイルを読み込めば同じ変数を再現できる。
参考になりそうなキーワード シリアライズData::Dumper MLDBM
478デフォルトの名無しさん:05/02/12 23:52:46
ファイルの中にプログラムを入れておけば、
ファイルを読み込んできて、そのファイルの中のプログラムを実行できるんですかね?
perlの本を買ってきます、、
479デフォルトの名無しさん:05/02/12 23:59:10
>>478
保存されるのはコードじゃなくデータ…
480デフォルトの名無しさん:05/02/13 00:05:46
ぽりぽり、、、 わからないっす。
計算した素数をファイルに保存するのは、
openを使うより、モジュールを使った方が楽って言うのがよくわかりません、、、
度々質問すいません。
481デフォルトの名無しさん:05/02/13 00:15:30
>>480
中断する事や計算した素数を他の処理で使う事を考えた場合の話だね
一回だけ起動して素数計算して終わりなら関係無いけど
482デフォルトの名無しさん:05/02/13 00:32:28
素数を見つけた時にハッシュに入れるのではなく、ファイルに保存するということですか?
483デフォルトの名無しさん:05/02/13 00:41:58
ラーメンを作る->フリーズドライして保存可能にする->お湯をかけて
ラーメンを再び食べられる状態に戻す。
484474:05/02/13 00:54:58
Perlの中断時に、いまどこまで計算したかをファイルへ保存する
次回Perlの起動時に、前回どこまで計算したかをファイルから復元する
…ってことでしょ。


>475
しょうもないミスの連発で時間かかりましたが、おかげでばっちし動きました!
こんな感じです。ひょっとして将来誰かの役に立てばと思い、メモっておきます。

#表示用、解析処理(引数=ファイル番号)
sub replayfiles_read {
#フルパスのファイル名を得る
$readfilename = "$replay_dir/$files[ @_[0] ]";
#リプレイファイルサイズを得る
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)
= stat( $readfilename );
#リプレイファイルをバイナリとして読み込む
open( IN, $readfilename );
binmode( IN );
sysread( IN, $buf, $size );
close( IN );
#zlib解凍
$dest = uncompress( $buf );
if ( !defined( $dest ) ) { return "zlib decode error"; }; #解凍失敗なら、退出する
#数値配列へ変換しておく
@data = unpack("C*", $dest);
485デフォルトの名無しさん:05/02/13 00:58:42
>>482
それよりも、ハッシュという言葉に気になったんだが・・・
何で素数をハッシュに入れるの・・・
486デフォルトの名無しさん:05/02/13 03:50:52
PHPのeregi関数みたいな、文字列の中に文字列があるかどうかっていう関数ありますか?
487デフォルトの名無しさん:05/02/13 03:54:37
>>486
pregiはどこからパクってきたか知ってるか?
488デフォルトの名無しさん:05/02/13 05:18:46
>>487
>>486 は eregi と言っているが
489デフォルトの名無しさん:05/02/13 10:07:58
>>486
eregi関数は知らないが
こんなことはperlの得意技だと思うのだが。
490デフォルトの名無しさん:05/02/13 13:32:31
>>486-489
eregiは「大文字小文字を区別せずに正規表現によるマッチングを行う」。
つまりm//iとまあだいたい同じ。
違うのは正規表現のマッチングの方法。

>>486
っつーわけで、当然のようにあります。関数じゃないけど。
491486:05/02/14 03:01:20
調べても出てこないんです・・・教えてもらえますか?
492デフォルトの名無しさん:05/02/14 03:08:34
ど、ど、ど、ど、童貞ちゃうわ!
493デフォルトの名無しさん:05/02/14 03:13:01
>>491
入門書の最初の方すら読まないあなたには教えてあげられません。
494デフォルトの名無しさん:05/02/14 03:23:02
>>488
PHPのeregiを知ってるくらいだからpregiも知ってるだろう。
pregiを知ってたらこんな質問はしないだろう。
という皮肉のつもりだったが、だめか?
495デフォルトの名無しさん:05/02/14 03:41:07
>>491
>>490さんが教えてくれてますよ。m//i。
詳しくはperldoc perlre
496デフォルトの名無しさん:05/02/14 03:42:14
あと perldoc perlop も
497デフォルトの名無しさん:05/02/14 04:03:39
>>492
空耳かよw

>>491
Perlで正規表現は関数じゃない。
だから検索キーワードから関数をはずせ
498デフォルトの名無しさん:05/02/14 13:37:19
win32apiに渡す時、構造体のポインタって何を渡せばいいですか?

使いたい関数はkernel32のProcess32Firstです。
499デフォルトの名無しさん:05/02/14 18:18:07
>>498
ハァ?渡すものが分かっていて、何を渡したらいいか
分からないって、アンタ真性の(ry
500デフォルトの名無しさん:05/02/14 18:24:25
M・S・D・N!M・S・D・N!
501デフォルトの名無しさん:05/02/14 18:28:52
質問の仕方が下手糞
502デフォルトの名無しさん:05/02/14 18:46:00
PerlでWinのSleep関数をまねるにはどうすりゃいいのだろう?
そんなのよりXML::SimpleのXMLoutを使うと属性で書き出されるのだがどうしてだ?

実行結果
<opt title="TEST">
<chapter body="XML/Perl TEST" subtitle="TEST - 1" />
<chapter body="Chapter2 ARR Test" subtitle="TEST - 2" />
</opt>
$VAR1 = {
'chapter' => [
{
'body' => 'XML/Perl TEST',
'subtitle' => 'TEST - 1'
},
{
'body' => 'Chapter2 ARR Test',
'subtitle' => 'TEST - 2'
}
],
'title' => 'TEST'
};
503502:05/02/14 18:53:57
ソース

#! /usr/local/bin/perl

use utf8;
use XML::Simple;
use Data::Dumper;

$x = new XML::Simple;
my $xml = $x->XMLin('test.xml');


print XMLout($xml);
print Dumper($xml);

__END__

test.xmlだが適当なデータを用意してくれ

環境
ActivPerl v5.8.6 built 811
perl 5.8.6 (cygwin)
504デフォルトの名無しさん:05/02/14 19:13:11
MCPANについての質問です。

MCPANでImage::Magickモジュールを入れようとしましたが、エラーになってしまいました。
そこで、ついforce installをしてしまいました。その結果か、入っていないにもかかわらず、
MCPANではImage::Magick is up to dateと表示されてしまうようになりました。

現状どおり、Image::Magickが入っていないと表示されるようにするには、どのようにしたら
良いのでしょうか。よろしくお願いします。
505デフォルトの名無しさん:05/02/14 19:49:26
>>502
XML::Simpleはこの間使ったから良く知ってる
属性で書き出されないようにするには
NoAttr => 1
すればいい。

あと、chapterの所の出力形式で困ったら、GroupTagsを調べてみるべし。
506デフォルトの名無しさん:05/02/14 20:01:42
>>502
XMLは回答ついてるようなのでSleepの方。

たぶん秒より小さい単位のsleepが欲しいのだと思うが、
そのためには

(1) Time::HiResのusleepを使う
(2) select(undef, undef, undef, 0.25); とかする。


507502:05/02/14 20:48:50
>>505殿
ありがとう、解決できました
>>506殿
半分正解です、
sleep関数が出現したところで実行が一時停止して欲しいんですよ
508486:05/02/14 21:03:04
できました!ありがとうございます
しかし関数じゃなくてこんなの(?)なんすね・・なんかカルチャーショック・・・
509デフォルトの名無しさん:05/02/15 02:01:19
Perlを知らずPHPからWebProgに入る世代がもういるのか・・なんかカルチャーショック・・・
510498:05/02/15 09:15:11
すみませんでした。
サンプルコードをください。
511デフォルトの名無しさん:05/02/15 10:10:52
初心者です。たのんます

use Getopt::Std;

getopt("abcde");

みたいにした時、「二つ以上の$opt_hogeが正なら」みたいな判断、
みなさんはどうやってますか。
条件処理ごとにフラグを立てるくらいしか思い浮かばなかったんだけど
なんかうまい手がありそうな・・・・。
512デフォルトの名無しさん:05/02/15 13:29:30
>>508
Perに慣れると何で他の言語では正規表現が
関数やクラスなんだと思うようになる。
513デフォルトの名無しさん:05/02/15 14:11:28
>>512
エディタのカラー設定をする時は何で関数じゃないんだと思うことがある。
514デフォルトの名無しさん:05/02/15 18:26:43
初歩的なんですが、perlで作ったプログラムはブラウザを通してじゃないと
動作できないのでしょうか? クーロンで起動させたいのですが・・
515デフォルトの名無しさん:05/02/15 18:30:16
>>514
できる。
516デフォルトの名無しさん:05/02/15 18:32:18
>>513
エディタのカラー設定でperl5互換の正規表現が欲しくなることがある。
517デフォルトの名無しさん:05/02/15 19:15:04
>>515
thxs こ
518デフォルトの名無しさん:05/02/15 19:27:32
質問ですが
オフラインでperlで作成したcgiを作成した場合で、cgiにパラメータを引き継がせたい場合
どのように起動すればいいのでしょうか?

./exsampl.cgi?a=abc

でやるとエラーになりますた
519デフォルトの名無しさん:05/02/15 19:41:28
520デフォルトの名無しさん:05/02/15 19:42:29
pack()っての難しすぎてよくわからんよ。
521デフォルトの名無しさん:05/02/15 19:42:39
Perlコーディング初心者質問スレ Part 40
http://pc5.2ch.net/test/read.cgi/php/1106816922/
522デフォルトの名無しさん:05/02/15 19:52:29
>>518
>質問ですが
>オフラインでperlで作成したcgi
うーん、コマンドラインでperlスクリプトを引数付きで起動させたいってこと?
だとしたらcgiじゃないよ。別に拡張子が.cgiでもいいけど
>でやるとエラーになりますた
エラーログは?
なんか基本的に勘違いしてる様子。

--test.pl
#!/usr/local/bin/perl
my $cmt = $ARGV[0];
print "$cmt\n";

で、コマンドラインから
$ ./test.pl baka?

ってやってみ
523デフォルトの名無しさん:05/02/15 19:52:53
>>521
誘導サンクスコ
524デフォルトの名無しさん:05/02/15 19:55:34
>>522
うまくいきますた
ちゃんとbaka?って でましたよ
どうもです
525デフォルトの名無しさん:05/02/16 00:05:54
>511 こんなんどうでしょ?
use Getopt::Std;
getopt('abcde', \%opt);
print "OK\n" if(2 <= grep { $opt{$_} > 0 } a..e);

シンボリックリファレンス使うのがやだからちょっと変えた。
526デフォルトの名無しさん:05/02/16 13:41:37
>>525
use Getopt::Std;
getopt('abcde',\%opt);
print "OK\n" if ( keys(%opt) >= 2 );

print "$_ = $opt{$_}\n" for (keys %opt); # 表示 :)

ハードコードなくした。
527デフォルトの名無しさん:05/02/16 14:23:48
>>525
>>526
全てのオプションの重複を調べたいのはむしろ特殊な場合であって
普通はオプションの一部のいくつかが重複不可な方が多いような気が
する。a..eもkeysもやりすぎで列挙した方がいいのではないか。

528デフォルトの名無しさん:05/02/16 21:42:18
529デフォルトの名無しさん:05/02/16 22:19:21
>>525-527
レスありがとうございます。
昼には読んでいたのですが理解するのに時間かかってました。
望み通りの挙動得られました。

一応確認なんですけど、
(数字 <= 文字列)
といった条件式の場合、というか不等号のような算術演算子の場合は
文字列は文字数として読まれる、てことだったんですね。
まだまだダメだなあ。おらー。
530デフォルトの名無しさん:05/02/16 22:32:05
>>529
いや、スカラコンテキストでgrep()はマッチした回数を、
リストはリストの要素数を、それぞれ返すって事。
531529など:05/02/17 02:35:50
ああ、配列の挙動と一緒か。やっと飲み込めました。

あれこれ申し訳ない。いろんなとこ逝ってきます。
532デフォルトの名無しさん:05/02/18 18:45:04
$ perl -de 1
DB<1> $str="abcde123fgh";$str =~ /(\d+)/;print "$1\n";
123
DB<2> $str="abcde123fgh";$str =~ /(\d+)/;

DB<3> print "$1\n";

となるんだけど、どうして$1は2行に渡って書くとなくなるの???

あと、カーソルキー使えないんだけども
設定ファイルとかでなんとかならないですかね?
This is perl, v5.8.2 built for i386-linux-thread-multi
533デフォルトの名無しさん:05/02/18 23:27:09
>>532
デバッガ内部でコマンドライン解析の為にマッチングを行ってるからだろうよ。
デバッガ書き直さないかぎりむりぽ。

(@mached) = "foo" =~ /(o)/g;

とでもするしかないな。
534532:05/02/19 12:52:42
>>533
なるほど、ぬるぽな感じっすね・・・
535デフォルトの名無しさん:05/02/19 21:00:13
$hoge = "hogehugafooHOGE";
$huga = ($hoge =~ m/h/g);
@hoge = ($hoge =~ m/h/g);
print "$huga\n\a";
foreach (@hoge) { print "$_ "; };
print "\n\a";
というコードで、
1
h
というように表示されるのですが、
@hoge の内容はなぜ
hh
にならないのでしょうか…

動作環境:v5.8.6 built for MSWin32-x86-multi-thread
536デフォルトの名無しさん:05/02/19 23:36:51
>>535
> $huga = ($hoge =~ m/h/g);
カッコが余分。リスト数が代入される。
$huga = $hoge =~ m/h/g;
と、すれば?
537デフォルトの名無しさん:05/02/20 00:05:32
>>536
> > $huga = ($hoge =~ m/h/g);
> カッコが余分。リスト数が代入される。
> $huga = $hoge =~ m/h/g;
> と、すれば?

($huga = $hoge) =~ m/h/g;

っしょ。

538デフォルトの名無しさん:05/02/20 00:13:29
っていうか、>>535に必要なのは、「デバッグしろ」という言葉だな。
539デフォルトの名無しさん:05/02/20 01:44:50
質問ですが・・
週ごとのシフト表を登録・管理するためのCGIを組んでいます。
それで、週ごとにcsvファイルを新たに作って記録していきたいのですが、
ファイル名を20050220.csvのように日曜日の日付を基準につけたい場合に
どうすればいいのか悩んでいます。

例えば、2月28日月曜日にCGIから登録すると、
CGIは次の週の日曜日の日付を基準に20050306.csvというファイルを作り、
そこに内容を記録するといった風にしたいです。

($sec, $min, $hour, $day, $month, $year, $wday, $yday) = localtime(time);
$year += 1900;
$month++;
これを使ってなんとかアルゴニズムを作ろうとしてるんですが
四苦八苦しています・・・。
現在の日付・曜日から次の日曜日までの日数を計算して、
そこから月や日を処理しようとしてるんですがなかなか上手くいきません・・・
何か見落としてるんでしょうか・・・
540デフォルトの名無しさん:05/02/20 02:02:42
>>538
↓ この辺を参考にしてみては?
http://www.din.or.jp/~ohzaki/perl.htm#Date2WDay
541デフォルトの名無しさん:05/02/20 02:29:05
>>539
foreach (0..6) {
    ($sec, $min, $hour, $day, $month, $year, $wday, $yday) = localtime(time + 60*60*24*$_);
    last if ($wday == 0); # 日曜なら終了
}
これでいいべ?
542デフォルトの名無しさん:05/02/20 02:34:27
>>539

# 一日は何秒?
my$day_sec = 24 * 60 *60;

# 後何日で次の日曜?
my$wday =( localtime(time) )[6];
my$next_sunday =(7-$wday)%7;

# で、何日?
my( $day, $month, $year ) =( localtime($day_sec *$next_sunday +time) )[3,4,5];
printf "%4d%02d%02d.csv", $year +1900, $month +1, $day ;

543デフォルトの名無しさん:05/02/20 02:55:54
かぶってたので、sub化してみた。すまん>541


# my( $day, $month, $year ) =next_weekday_date($weekday_No);# sun0~sat6
sub next_weekday_date($){
( localtime( 86400 *($_[0]+(7 -localtime[6] )%7) +time) )[3,4,5]
}
544デフォルトの名無しさん:05/02/20 09:54:07
彼の人は、ずっと「あるごにずむ」と言ってきたのだろうか……
545デフォルトの名無しさん:05/02/20 10:40:17
ニズムを刻む。ニンゴ、ニムジン、ニカルデントガム、ニクエスト、…。
なんかイイなっ!「に」。常用しようっと。
546535:05/02/20 20:46:54
質問の仕方が悪かったようです.すいません.

$hoge = "hh"; # h は2回だけ
$huga = ($hoge =~ m/h/g); # マッチする
print "$huga\n\a"; # 1
$huga = ($hoge =~ m/h/g); # マッチする
print "$huga\n\a"; # 1
$huga = ($hoge =~ m/h/g); # 3回目マッチしない
print "$huga\n\a"; # ヌルポ 以下同様

となるのですが、これは仕様なのでしょうか…

動作環境:v5.8.6 built for MSWin32-x86-multi-thread
547539:05/02/20 21:01:47
>>541-543
レスありがとうございます。
おかげさまでうまく出来ました。
7で割った余りをとるのがミソだったんですね・・・
とにかくどうもありがとうございました。
548デフォルトの名無しさん:05/02/20 21:27:26
>>546
自分で答出してるじゃんw
549デフォルトの名無しさん:05/02/20 21:27:37
>>546
同じ文字列に対する連続したマッチ処理は、前回マッチが成功した位置を
覚えていてそこから開始される。この位置は pos によって知る事ができ、
マッチしなかったり、既に末尾に達していたり、別の文字列を評価した際に
リセットされる。

my $str = 'abcde';
my($rv, @rv, $pos);

$rv = $str =~ /a/g; $pos = pos $str; print "[$rv][$pos]\n"; # [1][1]
$rv = $str =~ /b/g; $pos = pos $str; print "[$rv][$pos]\n"; # [1][2]
$rv = $str =~ /f/g; $pos = pos $str; print "[$rv][$pos]\n"; # [][]
@rv = $str =~ /./g; $pos = pos $str; print "[@rv][$pos]\n"; # [a b c d e][]
$rv = $str =~ /c/g; $pos = pos $str; print "[$rv][$pos]\n"; # [1][3]
@rv = $str =~ /./g; $pos = pos $str; print "[@rv][$pos]\n"; # [d e][]
550デフォルトの名無しさん:05/02/20 21:39:10
>>546
$hoge = "hh"; # h は2回だけ
$huga = ($hoge =~ m/h/);
print "$huga\n";
$huga = ($hoge =~ m/h/);
print "$huga\n";
$huga = ($hoge =~ m/h/);
print "$huga\n";
$huga = ($hoge =~ m/h/);
print "$huga\n";

print "gあり\n";
$huga = ($hoge =~ m/h/g);
print "$huga\n";
$huga = ($hoge =~ m/h/g);
print "$huga\n";
$huga = ($hoge =~ m/h/g);
print "$huga\n";

結果
1
1
1
1
gあり
1
1

551デフォルトの名無しさん:05/02/20 22:27:17
>>546
仕様もへったくれも、"hh"に "h" が2回しかマッチしないのは
当然だろうが。3回目に何にマッチするってんだよ。


552デフォルトの名無しさん:05/02/20 22:58:35
551の豚まん
553デフォルトの名無しさん:05/02/21 00:25:32
MIME::Parserを使って/var/mail/のスプールファイルからメールを読み出して添付ファイルだけを任意の名前で保存したいのですが。
以下のような感じでMIME:Parserを使ってみているのですが、FOMAから送信してjpgのファイルの時は成功して、3gpのファイルの時は失敗してしまいます。
mimetypeは取得できていて(image/pjpegとvideo/3gpp)ハッシュと名前つける関数を使ってファイル名を決めています。
とりあえずこの部分ソースでどこかツッコミはありますでしょうか?
一応添付ファイルは1件だけを想定してて、複数件あっても一つだけ処理できれば良いという考えです。

my $parser = new MIME::Parser;
$parser->output_to_core(1);
$entity = $parser -> parse_open("/var/mail/user");

my %hash_mime = ( 'image/pjpeg' => 'jpg', 'video/3gpp' => '3gp' );

@parts = $entity->parts;
$mimetype = $entity->parts($#parts)->mime_type;

# 保存するファイル名を取得
open (FILE, "> /home/user/http_data/image/file") || die "file open error!\n";
if( $#parts == 0 ){
print FILE $entity->parts(0)->bodyhandle->as_string;
}
else{
print FILE $entity->parts($#parts)->bodyhandle->as_string;
}
my $size = (stat(FILE))[7];
close( FILE );
}
554デフォルトの名無しさん:05/02/21 00:34:48
どこで失敗してるかは自分で掴めてないのか
555553:05/02/21 00:50:24
>>554

ファイル名を決めてファイルをオープンするところまでは上手くいってるようなんです。
メールのマルチパート処理の部分で、$entity->parts($#parts)->bodyhandle->as_stringで添付ファイルが
取れる場合と取れない場合があるんですよね。

本文 有り/無し
添付 jpeg/3gpp

のマトリックスでテストケース作ってもうちょい絞り込みしてみます。
556553:05/02/21 01:39:36
スミマセン自己解決したみたいです。
スクリプトではなく、添付したファイルが問題だったみたいです。
きちんとした3gppのファイルを添付したら上手く切り出せたみたいです。

お騒がせしました。というかお目汚ししてスミマセン。
557542:05/02/21 01:42:21
>>547
> 7で割った余りをとるのがミソだったんですね・・・
単なる思いつきだよ。
my$next_sunday =(0,6,5,4,3,2,1)[$wday];
とか、
my$next_sunday =( !$wday ? 0 : 7-$wday);
とか、でもいいし。
558デフォルトの名無しさん:05/02/22 00:40:58
2005-01-07 14:32:08
2005-01-07 14:30:52
2005-01-07 14:29:52
   ・
   ・
   ・

といった日付・時間がかかれたデータをUnix時間に変換するにはどうすればいいでしょうか?
やはり 365× 24× 60× 60 とか閏年を考えつつやっていくしかないのでしょうか?
559デフォルトの名無しさん:05/02/22 00:56:30
use Time::Local;
560デフォルトの名無しさん:05/02/22 14:21:16
中でほかのコマンドを起動するようなスクリプトを作りたいんですが、
$cmd = "/full/path/to/command/";
みたいにしなくても適当に ($ENV{"PATH"} などから) 実行ファイルのパスを
探してくれるような便利モジュールがあれば教えてください。
561529など:05/02/22 15:46:01
PATH通ってれば
$cmd = `cmd_name';
で実行してくれない?
562デフォルトの名無しさん:05/02/22 16:18:19
コードのチェックをするのによいツールとか無いですかね。
一定のコーディング規約に則ることを前提にして。
たとえば、
 my $class = Class->new();
 $class->methed();
 package Class;
 sub new {bless {}, shift;}
 sub method {}
を実行前にエラーとして検出するには、
インスタンスを ->new で作るという規約があれば自動化できますよね。
563デフォルトの名無しさん:05/02/22 16:18:43
>>561
あ、もちろんいきなり実行するだけで構わないもの (`cmd` や system('cmd')) は
それで良いのですが、
引数としてコマンドのパス文字列を渡す必要のあるケース
(Expect の spawn() や IPC::Open3 の open3() など) では
ちょっと具合が悪いのです。
564デフォルトの名無しさん:05/02/22 16:30:05
>>563
自分で書いてもたいしたことはなさそうだが出来合いのが
欲しければこのへんだろう

ttp://search.cpan.org/~pereinar/File-Which-0.05/Which.pm
565デフォルトの名無しさん:05/02/22 16:58:27
>>564
ありがとうございます。早速使ってみます。
566デフォルトの名無しさん:05/02/22 17:02:50
しょうもないことではまってたんでちょっと質問させてください。

正規表現のデミリタを/以外の文字に代えると、
その文字がデミリタと見なされる。
たとえば、|だったらorとぶつかり、{}だと範囲指定とぶつかるetc.
($str =~ s|ab(?!(?:d|e))|zz|g;は不正な構文になる)

でも/をデミリタに使いたくない。
こういうときは何をデミリタに使ってます?
567デフォルトの名無しさん:05/02/22 17:25:06
#
568デフォルトの名無しさん:05/02/22 17:27:16
デミリタじゃなくてデリミタね。delimiter
569デフォルトの名無しさん:05/02/22 17:41:33
>>567-8
ども。寝ぼけてる。
/x使ってずらずらなんがいからコメント入れたくて
#も使いたくないときはどうでしょ?
570デフォルトの名無しさん:05/02/22 17:48:46
m"(pattern)" とかは?何か気持ち悪いが。
571デフォルトの名無しさん:05/02/22 18:08:57
>>566
そもそもカッコ系はちゃんとバランスみるから中でその文字使っても
ペアで出てくる分には問題ないよ。

m{a{3,4}}とかm[[a-z]]とか試してみ。
572デフォルトの名無しさん:05/02/22 20:01:24
s(){} みたいに、前後で異なるかっこも使える
573デフォルトの名無しさん:05/02/22 20:49:40
俺は/と|が使えない場合はs!hoge!fuga!gだな
574デフォルトの名無しさん:05/02/22 21:14:49
漏れは s"hoge"moge" だ。
575562なんだけど:05/02/22 21:28:49
みんなはスクリプトとか書いてコードチェックしたり、
デバッグの手間省いたりとかしてないの?
576デフォルトの名無しさん:05/02/22 22:29:53
>>575
いいからテストコード書けよ。
577566:05/02/22 22:50:39
>>570 >>574
"は大丈夫だね。

>>571
確かに大丈夫だった。データの中括弧団子の帳尻あわせみたいなことを
やってるときにおかしなことになったんで使わなくなってたけど
自分のバグだったみたい。

>>573
!だと>>566の例では引っかかる。
578574:05/02/22 23:10:52
>>577
漏れは、比較的長い時はカッコとxを使うよ。
s{ [a-z]{ 1, 6 }
| [A-E]{ 2, 8 }
| [F-Z]{ 3, 9 } # (?# ~ )使わずコメント入るし。
}{
hoge\ moge\ mage\n
}x;
とか。
579デフォルトの名無しさん:05/02/22 23:29:10
>>575
ふつうにする。エディタの整形機能とskkの補完機能と
-w && use stict,-cのSyntax Checkで間に合ってる。

562みたいな希望に沿うようなものを知らんから書かな
かっただけだよ。
580デフォルトの名無しさん:05/02/22 23:33:08
貴様らエディタ何使ってる?
xyzzy?
581デフォルトの名無しさん:05/02/22 23:51:34
eclipse + EPIC
582デフォルトの名無しさん:05/02/23 01:36:59
jcode.plとjcode.pmどっち使ってる?
583デフォルトの名無しさん:05/02/23 01:47:36
Encode.pm
584デフォルトの名無しさん:05/02/23 02:01:34
特定のライブラリのバージョンを確認する方法ってあるんでしょうか?
585デフォルトの名無しさん:05/02/23 07:51:01
perl -MFoo -e 'print $Foo::VERSION'
586デフォルトの名無しさん:05/02/23 11:57:03
Pod 形式でドキュメント書きたいのですが、何を読んで勉強するのが良いですか?
587デフォルトの名無しさん:05/02/23 12:02:49
From: taro <[email protected]>
To: hanako <[email protected]>
って文があったら[email protected] --> [email protected]
って表示させる正規表現教えてください。
588デフォルトの名無しさん:05/02/23 12:21:58
>>586
perlpod
perlpodspec

589デフォルトの名無しさん:05/02/23 12:40:31
>>588
ありがとうございます。Pod 形式のドキュメントも perldoc であったんですね。
考えてみたら当然か。早速それ読んで勉強します。
590デフォルトの名無しさん:05/02/24 00:02:53
つーか君達はPerlを書くのにエディタ使ってる?
正直もうそろそろPerlプログラマもエディタは卒業だと思うのよ。
EclipseなどのIDEを使うべきだろ?
正規表現のデバックなんかエディタじゃ限界来てるもんなぁ。
591デフォルトの名無しさん:05/02/24 01:17:08
エディタ自分はxyzzyを使ってます。emacs好きなもので。
ちょっと質問なのですが、perlで買いカゴを作っているのですが、
メーカー選択画面はhtmlにして、買い物をするページはcgiにしたいのですが
買い物途中に違うメーカーに移る時にhtmlへ移動してしまうと買いカゴの情報を
保持できなくて困っています。

つまり、確実にクライアントを特定できる情報をゲットしたいのですが、
有効な手段が思いつきません。どなたか知恵をかしていただけませんでしょうか?

ちなみにIPアドレスではproxyサーバを経由している(会社内・学校内)場合
ローカルエリアネットワーク共通の買い物籠となってしまいます(爆)
592デフォルトの名無しさん:05/02/24 01:38:20
cookie
593デフォルトの名無しさん:05/02/24 01:56:11
>>592
なるほど。ですが、最近はクッキーを受け付けないと設定している人が
多いような気がします。やはりクッキーしかないですかね?
594デフォルトの名無しさん:05/02/24 02:03:10
>>590
> 正規表現のデバックなんかエディタじゃ限界来てるもんなぁ。

「デバック」とか抜かしてるようじゃ、バグ出しまくりなんだろうな。
595デフォルトの名無しさん:05/02/24 02:13:10
前向きなコーディングかチェックしてるんだよ、きっと。
596デフォルトの名無しさん:05/02/24 05:14:35
LinuxでPerl5.8使ってます。
コンソールでの文字の色を変えたいのですが、良いモジュールはありませんか?
597デフォルトの名無しさん:05/02/24 09:23:05
>>596
Term::ANSIColorとかどうよ。
598デフォルトの名無しさん:05/02/24 11:14:27
>>593
セッション情報として鯖に持たせるとか、ほかにも手はある。
まあ板違いだ罠。WebProg板池。
599デフォルトの名無しさん:05/02/24 20:32:03
UNIX で daemon 作るのに標準入出力を /dev/null に繋げたいのですが、
Perl だとどうすればいいでしょうか?
600デフォルトの名無しさん:05/02/24 20:48:52
>>599
perldoc -q daemon
601デフォルトの名無しさん:05/02/24 20:58:00
クックブック17.17より
for my $handle (*STDIN, *STDOUT, *STDERR){
open($handle, "+<", "/dev/null" ) || die "$!";
}
602デフォルトの名無しさん:05/02/24 21:14:24
>>600, >>601
ありがとうございます。クックブックこういうのも載ってるのかあ。
603デフォルトの名無しさん:05/02/24 21:19:54
>>602
制御端末とかセッションとかのからみがあるので、600が示した
faqの最後の方に紹介されてるProc::Daemonモジュールを使うのが
オススメです。
604デフォルトの名無しさん:05/02/25 02:34:55
俺もクライアントばっかじゃなくそろそろダエモンも組んでみるかな
誰か面白いの作ってる?
605デフォルトの名無しさん:05/02/25 07:55:08
`rm -rf ./`
606デフォルトの名無しさん:05/02/25 09:42:17
覚えたて?
607デフォルトの名無しさん:05/02/25 11:27:35

どなたか教えてください。

windows上にて、perlでutf-8のテキスト処理を行っています。
テキスト処理はうまくいっているのですが、取り出した
UTF-8テキストでフォルダーを作成すると、文字化けの
フォルダーになってしまいます。
windows上で、普通に新規フォルダーを作成し、名前変更でUTF-8テキストを
ペーストしたらうまくいくのに、perlからだとうまくいきません。

フォルダ作成は mkdir("utf-8テキスト"); としています。

何か設定があるのでしょうか?
お助けお願いします。

perlは5.8.6を使用しています。
608デフォルトの名無しさん:05/02/25 11:47:14
>>607
>windows上で、普通に新規フォルダーを作成し、名前変更でUTF-8テキストを
Windowsはsjis。よってUTF-8は文字化けするのが仕様。
609デフォルトの名無しさん:05/02/25 11:54:57

 Win2000でのファイル名、フォルダー名にユニコード使えますよね。
 perlがDOSベースで動作している?ので、できないということに
 なるのでしょうか?
610デフォルトの名無しさん:05/02/25 13:54:32
MLDBMで、既存のデータベースに対し、serializerを交換するには
どうしたら良いのでしょう?

というのは、serializerに何を使うかは、

use MLDBM qw(DB_File Storable);

と、use時に指定する仕様になっているのです。
この場合、どうしたら良いのでしょう?



611デフォルトの名無しさん:05/02/25 14:06:04
>>610
マニュアルを読む限りでは

$MLDBM::Serializer or $OBJ->Serializer([SZROBJECT])
The global $MLDBM::Serializer can be set to the name of the serial-
izing package to be used. Currently can be set to one of
"Data::Dumper", "Storable", or "FreezeThaw". Defaults to
"Data::Dumper". Alternatively, you can specify the name of the
serializer package at "use" time, as the second "parameter".

じゃないかと。

612デフォルトの名無しさん:05/02/25 14:43:51
>>609
でいないはずがない。
use Encode;
#utf8flagが立っているUTF-8テキスト
mkdir( Encode::encode('Shift_JIS', $dirname) );
#単なるバイト列 UTF-8以外でもEUC-JPなどなんでもあり
Encode::from_to($dirname, "UTF-8" => "Shift_JIS");
mkdir($dirname);

>>610
データベースを作り直すしかないね。
613610:05/02/25 14:44:36
自分の質問を読み返してみると、若干不明瞭ですね。

つまり、Data::Dumperを使って作ったDBファイルを、Storableを使うものに
変換したいというわけです。

>>611
ところが、異なるserializerは排他のようなのです。

入力用と出力用に、tieなり$OBJ->Serializerで指定なりすると、
2番目の指定で

Can't locate auto/Storable/serialize.al in @INC (モジュールパス一覧) at /usr/local/lib/perl5/site_perl/5.8.6/MLDBM.pm line 160

などと出る始末。逆でもStorableがData::Dumperになるだけで同様です。

異なるpackage内でそれぞれやればなんとかなるかな?
あるいは、いったんダンプして、別プログラムで新DBを作る?

と、いろいろやってます。
614デフォルトの名無しさん:05/02/25 14:55:27
perlのウイルスってありえますか?
615デフォルトの名無しさん:05/02/25 15:09:14
>>612
use Encode;
$fname = "■■■";
Encode::from_to($fname, "UTF-8" => "Shift_JIS");
open( OUT_FILE ,">$fname.txt");
close( OUT_FILE );
mkdir($fname);

上記スクリプトをUTF-8形式で作成。

上記実行でファイルとフォルダの名前は"■■■"に、
Encode行を外して実行すれば、ファイルとフォルダの名前は
"文字化け"になります。

実はこの名前全部もしくは中に「SHIFT-JIS外」の文字があった場合です。
この場合、
Encode行を外せばファイルとフォルダの名前は"文字化け"に
Encode行有効では、ファイルもフォルダもできません。
・・・
616デフォルトの名無しさん:05/02/25 15:14:37
>>613
こういうこと?

use MLDBM;
use Fcntl;

$dbm1 = tie %o1, 'MLDBM', 'testmldbm', O_CREAT|O_RDWR, 0640 or die $!;
$MLDBM::Serializer = 'Storable';
$dbm2 = tie %o2, 'MLDBM', 'testmldbm2', O_CREAT|O_RDWR, 0640 or die $!;

while (($k, $v) = each %o1) {
$o2{$k} = $v;
}
617デフォルトの名無しさん:05/02/25 21:22:56
>>614
あり得ます
618デフォルトの名無しさん:05/02/25 21:34:04
>>615
>実はこの名前全部もしくは中に「SHIFT-JIS外」の文字があった場合です。
意味不明。
619デフォルトの名無しさん:05/02/25 21:36:46
>>615
だめなときはopenとmkdir失敗してそうだから、or die $!つけて
エラーメッセージ見れば何か手がかりになるかもナ。
620デフォルトの名無しさん:05/02/25 21:48:45
621610:05/02/26 15:57:40
>>613
> つまり、Data::Dumperを使って作ったDBファイルを、Storableを使うものに
> 変換したいというわけです。

> 異なるpackage内でそれぞれやればなんとかなるかな?
> あるいは、いったんダンプして、別プログラムで新DBを作る?

結局、Storableで一括ダンプして、別プログラムで
一括リストアしてStorableなMLDBMにするという方法で
逃げました。

なんか釈然としないけど、とりあえず結果報告しておきます。
622デフォルトの名無しさん:05/02/26 18:36:40
いわゆる機種依存文字に関する質問です。

Shift-JISで書かれたテキストをUTF-8に変換して
s///やm//で必要な部分を取り出してどうのこうのするスクリプトを書いています。
環境はPerl5.8で文字コードの変換にはEncode.pmを使っています。
スクリプト自体はUTF8で書いています。

もとのテキストの中にある丸に数字などのいわゆる機種依存文字を
どの環境でも見れる文字列に変換したいのですが、やり方がわかりません。

ttp://x68000.q-e-d.net/~68user/webcgi/char-code-2.html
に書いてある事を応用すればよいのだと思いますが阿呆なもので何をどうすればいいのかわかりません。
どうかご指導よろしくお願いします。
623デフォルトの名無しさん:05/02/27 02:27:50
質問なのですが、perlでクッキーの書き込みを行ったところうまくいかず、
クッキーの内容がブラウザに表示されてしまいました。
以下のプログラムは間違っているのでしょうか? どうしてもできずに泣きそうです(泣)

$cookie = "123";
$cookie =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;

print "Set-Cookie: test=$cookie; expires=Thu, 1-Jan-2030 00:00:00 GMT\n\n";
624デフォルトの名無しさん:05/02/27 03:10:08
だいたい予想はつくが>>1も読まないバカに教える気は無い。
625デフォルトの名無しさん:05/02/27 13:00:31
下のように書かれているなら、\n を一つに減らせ。
print "Content-type: txt/html\n\n";

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

さらに、>>623 の部分をこの行より前に書け。
626デフォルトの名無しさん:05/02/27 14:24:43
>>622
cp932で変換したら普通にutf8にならない?
変換してもフォントになかったら見れないけど。
627デフォルトの名無しさん:05/02/27 15:02:37
必要に迫られPerlの勉強を始めたが、
「リャマ本」にのってるジョークがおもしろくありません。
講習会でバカ受けの最高のジョークらしいですが、
僕には意味すら分からないときがあります。
こんな僕は、Perlをマスターできませんか?
628デフォルトの名無しさん:05/02/27 15:07:17
>>627
必要に迫られていない時に勉強するのは最高
必要に迫られて勉強するのは最低

まぁ、がんばれ
629デフォルトの名無しさん:05/02/27 19:05:07
下記のコードで3を入力したときに、表示されないのはなぜでしょうか。
入力した引数に応じて、名前を表示させるだけですが、
3を入力したときは、なぜかnot exsitsになってしまいます。

chomp(@line =<STDIN>);
%name = (1 => jane,
2 => fred,
3 => amy);
@key = keys(%name);
foreach(@line){
if(exists $key[$_]){
print "$name{$_}\n"
}else{
print "not exists";
}
}
630デフォルトの名無しさん:05/02/27 19:58:36
>>629
> 下記のコードで3を入力したときに、表示されないのはなぜでしょうか。
> 入力した引数に応じて、名前を表示させるだけですが、
> 3を入力したときは、なぜかnot exsitsになってしまいます。

関係する変数をダンプしてみればわかる。
631デフォルトの名無しさん:05/02/27 20:46:19
ハッシュと配列の区別の付いていない奴がいるな
632629:05/02/27 22:30:19
ダンプしたところ、入力した値はちゃんと1 2 3と入っていました。
ハッシュのキーを下記のように数値から文字に変更すると、
うまく表示できました。この数値と文字の動きの違いというのは
なぜですか。

%name = (a => jane,
b => fred,
c => amy);
633デフォルトの名無しさん:05/02/27 23:24:53
@list = (1,2,3)
このとき@listの3番目の要素は何だ?
634629:05/02/27 23:56:58
>>633
>@list = (1,2,3)
>このとき@listの3番目の要素は何だ?
要素がないので、undefです。ようやくなぞが解けました。
ハッシュは、インデックスでなく、キーで値を取れるということで
入力も1 2 3とすれば、jane fred amyと返すはずだったけど、
@key = keys(%name); と配列に代入したときに、0番目から代入されるので
if(exists $key[$_])の時に存在しない3番目をアクセスしてしまう。
そのため、not existsになっていた。解決策としてif(exists $key[$_-1]){
とすると無事amyが表示されました。ありがとうございます。助かりました。

635デフォルトの名無しさん:05/02/27 23:59:30
で、無駄な事をしているのにはまだ気が付かないのかね
636デフォルトの名無しさん:05/02/28 08:08:15
>>635
リアルで見つけ次第解雇でいいじゃん。
637デフォルトの名無しさん:05/02/28 09:57:33
http://d.hatena.ne.jp/tunachan/20050226
> 逆アセンブルソースのエミュレート実行

質問ですが、これってすごいですか?
638デフォルトの名無しさん:05/02/28 10:34:35
ただのCPUでも出来ることだし何もすごくない
639デフォルトの名無しさん:05/02/28 18:33:52
Larryって今どんな仕事をしているのですか?
640デフォルトの名無しさん:05/03/01 01:56:50
ラリーX
641デフォルトの名無しさん:05/03/01 11:56:57
マッチングについて聞きたいのですが・・・
"タチツテト" =~ m/チ/i
これだとマッチするのに
"タチツテト" =~ m/タ/i
これだとマッチしません

他にも全角でできないのがいくつかあるようです
マッチしない全角をマッチするようにする方法なにかありませんか?
642デフォルトの名無しさん:05/03/01 12:02:17
>>641
SJISやめれ

643デフォルトの名無しさん:05/03/01 13:17:25
>>641
とりあえずそれだけ動けばいいのであれば use encoding。
644デフォルトの名無しさん:05/03/01 21:51:40
$bar="1"と$foo=1を区別したいのですが、
文字と数値を判断する方法ってありますか?

文字列なら cmp で数値なら <=> で比較したいのです。
645デフォルトの名無しさん:05/03/01 22:02:12
if /^\d+?$/ {#数値扱い} else {#文字扱い}
とかは?
646デフォルトの名無しさん:05/03/01 22:28:17
>>644
内部的には違いはあるといえばあるのだが、調べるモジュール
とかはあるのかな? 残念ながら私は知りません。

目的次第では数値として解釈できる文字列かどうかを判定する
Scalar::Utilのlooks_like_numberは使えるかもしれない。
どちらもlooks_like_numberなら数値比較、そうでなければ
文字列比較とか。

しかし同じScalar::Utilのdualvarを使って作った値とかを考えると
いやになると思うけどな(笑)
647デフォルトの名無しさん:05/03/01 22:36:33
>>645
それ、実際に自分で実行して書いてるの?
648デフォルトの名無しさん:05/03/01 22:51:23
>>644
Devel::PeekというモジュールのDumpってのを使うとperlの内部をのぞくことが
できる。コレを使うと

% perl -MDevel::Peek -e '$foo = 1; Dump($foo);'
SV = IV(0x816378c) at 0x8163d1c
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 1
% perl -MDevel::Peek -e '$foo = "1"; Dump($foo);'
SV = PV(0x814cef8) at 0x8163d1c
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x815d438 "1"\0
CUR = 1
LEN = 2

と一見区別できるように見えるのだが、
(改行多すぎといわれたので続く)

649デフォルトの名無しさん:05/03/01 22:53:26
(続き)
% perl -MDevel::Peek -e '$foo = 1; $bar = "$foo"; Dump($foo);'
SV = PVIV(0x814d308) at 0x8163d2c
REFCNT = 1
FLAGS = (IOK,POK,pIOK,pPOK)
IV = 1
PV = 0x815d448 "1"\0
CUR = 1
LEN = 2
% perl -MDevel::Peek -e '$foo = "1"; $bar = $foo+1; Dump($foo);'
SV = PVIV(0x814d308) at 0x8163d2c
REFCNT = 1
FLAGS = (IOK,POK,pIOK,pPOK)
IV = 1
PV = 0x815d448 "1"\0
CUR = 1
LEN = 2

というように使われ方ですぐに元がどっちだったかは区別できなくなってしまう。
650デフォルトの名無しさん:05/03/01 23:33:48
単純に"1"が来たら1に置き換えちゃう方が楽そう
651644:05/03/02 00:01:52
コンテキストに応じて文字列<->数値の変換を勝手にやっているところ
を見ると、数値っぽい文字列なら数値として扱うのがperl流ってとこですかね。
あまりこだわらずに"1"は1として扱うようにしようと思います。

あと、Scalar::Utilのlooks_like_numberはやってることは>>645とほとんど
同じでした(あと浮動小数点への対応とか)。
652デフォルトの名無しさん:05/03/02 00:14:46
まあ、文字列をインクリメントできたりするわけだが。
653デフォルトの名無しさん:05/03/02 13:45:49
Perl のモジュールをまとめようと思って、
ExtUtils::MakeMaker::Tutorial を参考にファイルを整理しているんですが、
サンプルコードみたいなものはどこにおくべきかで迷っています。
``eg'' というディレクトリに入れているケースもあるようなのですが、
これが Perl モジュールの標準的なサンプルコードのディレクトリでしょうか?
654デフォルトの名無しさん:05/03/02 18:28:24
>>653
わかりやすい構成にしときゃ別にどこでも好きなように。
e.g. = exempli gratia = 「例えば」
655デフォルトの名無しさん:05/03/02 18:28:34
質問です。
$aaa ← 配列のリファレンス
があります
これの内容を参照するには、@$aaa[添字]でとれますが、
要素数はどう指定すれば取得できますでしょうか?

656デフォルトの名無しさん:05/03/02 18:33:16
scalar(@$aaa)
657デフォルトの名無しさん:05/03/02 18:39:25
>>653
素直に「examples」としているモジュールが多いように思う。

>>655
my @{array} = (0..3); # 'array' という名の配列
print @{array}, ${array}[2], $#{array}, scalar @{array}, "\n"; # 0123234
print @array, $array[2], $#array, scalar @array, "\n"; # 0123234

my $array = \ @{array}; # 配列変数 @array のリファレンス
print @{$array}, ${$array}[2], $#{$array}, scalar @{$array}, "\n"; # 0123234
print @$array, $$array[2], $#$array, scalar @$array, "\n"; # 0123234
658デフォルトの名無しさん:05/03/02 18:39:37
>>656
ありがとうございます
659デフォルトの名無しさん:05/03/02 18:44:06
>>657さん
他の例まで書いて頂きまして、ありがとうございます。
660デフォルトの名無しさん:05/03/02 20:57:28
質問なのですが、

グループA,山田,水,3
グループB,鈴木,月,3
グループA,山田,水,4
グループB,鈴木,月,4
グループC,佐藤,木,2
グループA,山田,水,5
グループC,佐藤,月,3

のようなcsvファイルを@list = <FILE>;で読み込んで、その後に

グループA,山田,水,3,水,4,水,5
グループB,鈴木,月,3,月,4
グループC,佐藤,木,2,月,3

のように重複するグループ名と名前をまとめて、その後に曜日と時間をくっつける
構成の配列に直すところで悩んでいます。グループや曜日の順番は順不同で
かまわないのでくっつけるだけなのですが、上手くできません・・・。
いったいどうやったら上手くできますか・・・?
661デフォルトの名無しさん:05/03/02 21:18:31
>>660
グループと名前をキーにしたハシュにしてみては?

foreach (@List){
$_ = [split /,/];
$hash{sprintf qq|%s,%s|, $_->[0,1]} .= sprintf qq|,%s,%d|, $_->[2,3];
}

foreach (sort keys %hash){
push @List_new, $_ . $hash{$_};
}
みたいな。
662デフォルトの名無しさん:05/03/02 23:55:03
SSL機能ってperlでもできるのでしょうか??
663デフォルトの名無しさん:05/03/03 00:28:39
できるでしょ。
664デフォルトの名無しさん:05/03/03 00:31:32
勘違いしてそうだけど。
665デフォルトの名無しさん:05/03/03 08:14:42
>>661
俺の趣味ではこうだな。やってることはほぼ同じだが。
#!/usr/bin/perl

open READ,"test.csv";
while(<READ>){
chomp;
split /,/;
push @{$dummy{join ',',@_[0,1]}},@_[2,3];
}
close READ;

open WRITE,">result.csv";
print WRITE (join ',',($_,(@{$dummy{$_}}))),"\n" for (sort keys %dummy);
close WRITE;
666デフォルトの名無しさん:05/03/03 16:00:41
perl から、xhtmlを表示させたいのですが、ヘッダーエラーとなります
色々調べましたが、とんとわかりませんのでよろしくです

$top_html = <<"<EXIT>";
<html>
<head>
<title>制作してみよう</title>
</head>
<body bgcolor="#FF0000">
test
</body>
</html>
<EXIT>

&jcode::convert(\$top_html, "sjis");
print "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n\n";

print $top_html;
667デフォルトの名無しさん:05/03/03 16:04:10
ヘッダをprintしてないんだろう。
668デフォルトの名無しさん:05/03/03 16:18:46
>>667

プリントしてますけど、アパッチのログにはヘッダーエラー?みたいなものがでます
malformed header from sc
ript. Bad header=<?xml version="1.0" encoding=": index.cgi


print "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n\n";
669デフォルトの名無しさん:05/03/03 16:30:54
>>668
いや、HTTPヘッダをね
670デフォルトの名無しさん:05/03/03 16:39:48
>>669
どうもありがとう、
ナオリマスタ
671デフォルトの名無しさん:05/03/03 18:17:29
orz
672660:05/03/03 19:48:33
>>661 >>665

できました!ありがとうございます!
673デフォルトの名無しさん:05/03/03 23:15:13
> perl から、xhtmlを表示させたいのですが、ヘッダーエラーとなります

> print "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n
> <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n\n";

xhtmlに見えません…
674ηCar:05/03/04 03:24:09
time関数はうるう秒を考慮していませんよね。
天文計算をperlで行なう人は、時間をどのように扱っていますか?
675デフォルトの名無しさん:05/03/04 07:46:37
>>674
ユリウスに変換するのがもっとものような。。。
676デフォルトの名無しさん:05/03/04 08:17:11
$perl[Enter]

としたときに、プログラムを記述できますが、それを実行するにはどうしたらよいのですか?
677デフォルトの名無しさん:05/03/04 08:27:12
>>676
EOFの送り方か?
UNIXならCtrl+D
678デフォルトの名無しさん:05/03/04 09:11:42
@$aaa

これってどういうこと?
679デフォルトの名無しさん:05/03/04 09:45:06
>>677

THX!
ちょっとしたコードもファイルに書き出していたから助かります。
680デフォルトの名無しさん:05/03/04 10:17:19
>>674
perlはlibc呼んでるだけだし、glibcあたりはうるう秒に対応する
機能は持っている。ただしうるう秒がいつ入ったかの情報を設定
する必要があって、それをしてないシステムがほとんどですな。
オレも話には聞いてもやったことないし。この辺が参考になる。

ttp://www.netfort.gr.jp/~matsu/utc/
681デフォルトの名無しさん:05/03/04 11:34:33
>>674
うるう秒はシステム依存。
OS(というかlibraryまわり)によって対応してたりしてなかったりする。
うるう秒なシステム上のperlだとちゃんと働く。

>>680
うかつにうるう秒に対応させるとnfsやsambaなんかでハマるので気をつけれ。
周辺のマシン含め一斉にやらないと、makeが発狂したり、
ファイルコピー時にタイムスタンプがズレたりと、問題おこりまくり。
682デフォルトの名無しさん:05/03/04 14:49:55
>>678
>@$aaa

配列へのリファレンス変数のデリファレンス
683デフォルトの名無しさん:05/03/04 20:44:17
>>673
最初の ?xml

がXHTMLのヘッダや
684デフォルトの名無しさん:05/03/04 20:51:16
>>683
ほほぅ。

じゃあこれは何かね?

> <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n\n";
685デフォルトの名無しさん:05/03/04 21:21:27
>>684

それは、どこかのサイトに書いてあった
のをコピーしただけ 違うの?
686デフォルトの名無しさん:05/03/04 22:09:38
Q1.
リャマ本読んで習得中の修習生です。(プログラム経験なし、13章で混乱中)
WINでperl使いたいのですが、初めてのWIN32(ワニ本)に切り替えた方が
良いでしょうか?リャマはUNIX的な表現が多くてWINに移行できるか不安です><
続perlは購入済

Q2.
続perl以降に読むべき本は 駱駝→Effective Perl→クック でOKですか?
687デフォルトの名無しさん:05/03/04 22:23:58
>>685
そんなこと教えるのは何処のサイトだまったく・・・
XHTMLのDOCTYPEはこれ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
688デフォルトの名無しさん:05/03/04 22:28:12
use LWP::Simple;をつかって
$doc = get $url;
のようにして他のサーバーのファイルをgetするプログラムを作っています。

質問なのですが、このサーバーがとてもおもくて、応答が無いせいか、
プログラム自体がとまってしまうことがあります。

1分くらい応答がなかったらリトライするというふうにしたいのですが
どのように書けばいいのでしょうか?
ご指導よろしくお願いいたします。
689デフォルトの名無しさん:05/03/04 22:39:08
age
690デフォルトの名無しさん:05/03/04 23:02:48
>>686
読むべき本など存在しない。
691デフォルトの名無しさん:05/03/04 23:06:44
>>688
LWP::Simpleじゃ無理。
マニュアルにある通り、
LWP::UserAgentを使え。
692デフォルトの名無しさん:05/03/04 23:10:44
>>688

UserAgentのtimeoutを60に設定して使うのがよろし。

ところで、サーバーを待っている間に他の処理をさせたいと思った場合は
なにを調べるのが良いでしょうか。
693デフォルトの名無しさん:05/03/04 23:16:02
>>692

timeoutを60でリトライになるのでしょうか?
それとも、新たに処理をかくのでしょうか?
694デフォルトの名無しさん:05/03/04 23:19:34
>>692
LWP::Simpleのソース見てみたんだが、
タイムアウト60にデフォルトで設定されているような。
となると、完全に応答がないわけじゃなくて、
少しずつデータが送られてきているような状態なんだろう。

となると、別スレッドで監視して、一定時間たったら
処理を中断させるなり何かしないと駄目だろうな
695デフォルトの名無しさん:05/03/04 23:34:48
>>687
AUのサイトにかいてありました

さんくすこ
696デフォルトの名無しさん:05/03/04 23:46:07

##############
ここから
ここまでのしょり
を60秒以内で済まさない限り外に出れない(繰り返される)
#############

こんなかんじでできないでしょうか?
いままでLWP::Simpleのgetで書いてきたんでなるべくそこのところは変えたくないのですが。

どなたかよろしくお願いします。
697デフォルトの名無しさん:05/03/04 23:49:29
>>696
インターバルタイマでシグナルを打って、
シグナルハンドラで後始末するんだな。

そんなややこしいことをしたがるなんて、チャレンジャーだな。がんばれ。
698デフォルトの名無しさん:05/03/04 23:50:39
>>697
おっと、別にインターバルタイマでなくてもいいか。
alarm使えばいいな。
699デフォルトの名無しさん:05/03/04 23:53:21
>>697
むむむー
やっぱややこしいんですか。

どなたか簡単なサンプルをいただけませんでしょうか?
他のサーバーのファイルをとってきて60秒間応答なかったらリロード(再読み込み)
みたいな感じなんですけど・・・・(。-人-。)
700デフォルトの名無しさん:05/03/04 23:56:27
>>694
> LWP::Simpleのソース見てみたんだが、
> タイムアウト60にデフォルトで設定されているような。

それはsocketのコネクション要求のタイムアウトだろう。
読み込みはすっぴんsysreadで読んでいるから、そこでブロックするだろう。

> となると、完全に応答がないわけじゃなくて、
> 少しずつデータが送られてきているような状態なんだろう。

でなきゃ、まったく送られてないかだな。

> となると、別スレッドで監視して、一定時間たったら
> 処理を中断させるなり何かしないと駄目だろうな

selectを使うのは最近は流行らないのかな。
701デフォルトの名無しさん:05/03/05 00:15:45
>>686
TT) 教えてください
702デフォルトの名無しさん:05/03/05 00:21:35
>>701
とりあえずWindowsにPerlのインストールはしてる?
本読んでるだけで実際に手を動かしてる様子じゃなさそうだな。
703デフォルトの名無しさん:05/03/05 00:21:56
>>695
もっとマシなもの参照するようにしろよな・・・
704デフォルトの名無しさん:05/03/05 00:36:53
>>703
KDDIって、xhtmlをWAPで正式採用してるから 問題な酢
705デフォルトの名無しさん:05/03/05 00:50:48
>>686
本の選択は間違っていないので買った本を良み進めるがよろし。
WindowsでActivePerl使うのでも基本的な部分は変わらない。
Effective Perlは読みやすいし短いし、Perlらしい表現を覚える
のに良いので続リャマの前に読んでも。
クックブックは読む順番は気にせず、実際にちょっとコード
書こうとした時とかにちらちら拾い良みすれ。
706デフォルトの名無しさん:05/03/05 00:53:36
Ruby以外の言語は糞
ましてやPerlは汚物
707デフォルトの名無しさん:05/03/05 01:21:05
Javaのjavawコマンドのようにコンソールウィンドウが開かないようなコマンドは
perlでできますか?
708デフォルトの名無しさん:05/03/05 01:31:56
wperl.exe
709Hiro58:05/03/05 01:40:26
よくあるCGI管理画面でパスワードでログインをするページありますよね?
アドレスをコピーして、他のブラウザに貼り付けしたらログイン
できないのですが、あれはどのような仕掛けになっているのですか?
ソースを見る限りformタグのhiddenを使っているのではないようなのですが…。
なぞです…。
710デフォルトの名無しさん:05/03/05 01:52:51
cookieとか。
それともGET,POSTの話か?
711Hiro58:05/03/05 01:59:00
クッキーだった場合アドレスバーに同じアドレスを打ち込めばログイン可能
となってしまいます。(おそらく)

アドレスはhttp://〜.co.jp/〜.cgi?hoge=hoge&hogehoge=hogehoge
となっていたので、POSTではないようです。

やはり何か難しい処理をしているのでしょうか?
712デフォルトの名無しさん:05/03/05 02:10:57
>>711

>>1
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc5.2ch.net/php/ )
713デフォルトの名無しさん:05/03/05 02:13:50
セッションクッキーじゃない
714Hiro58:05/03/05 02:16:04
>>713
ありがとうございます。セッションクッキーを調べてみます。

>>712
板違いすいませんでした。読んでませんでした。m(__)m
715デフォルトの名無しさん:05/03/05 02:33:05
昨日からperl始めた初心者ですが
>>3で紹介されてるプログラミング講座を見ています
それについて質問ですが
講座の中にこんなのがありました
%weekday =(
1=>'Sunday',
2=>'Monday',
3=>'Tuesday',
4=>'Wednesday',
5=>'Thursday',
6=>'Friday',
7=>'Saturday');

if( exists $weekday{$ARGV[0]}){
print $weekday{$ARGV[0]};
}else{
print "範囲外です!!";
}

これをこのまま実行すると”範囲外です!!”となります
$ARGV[0]だから”Sunday”と表示されるんじゃないんですか?
716デフォルトの名無しさん:05/03/05 02:39:16
>>715
$ARGVについて調べてみませう。
717デフォルトの名無しさん:05/03/05 02:42:52
718デフォルトの名無しさん:05/03/05 02:43:39
>>716
調べてきまつ
719715:05/03/05 02:59:36
$ARGVについて調べたのですが
スクリプトを実行するときに指定した引数のリストが格納される特殊な配列。
第一引数
$ARGV[0]

第一引数だからこの場合$ARGV[0]は1で
$weekday{$ARGV[0]} は $weekday{1}; になってSundayと表示されると言うことじゃないんですか?
720デフォルトの名無しさん:05/03/05 03:08:24
>>719
訊いてないで調べてみろよ。
721715:05/03/05 03:16:54
さっきから調べてるのですが
まったくもって分かりません
では違う質問してみます
>>715でsundayと表示させるにはどうすればいいのでしょうか
722デフォルトの名無しさん:05/03/05 03:18:57
実行する時に
>perl myscript.pl 1 [Enter]
と入力
723715:05/03/05 03:27:01
ファイルへのパスのあとに1を入力するということですか
それでも範囲外ですってなります
724デフォルトの名無しさん:05/03/05 03:29:46
>>721
> さっきから調べてるのですが

関係する変数を表示させてみたのか?
725715:05/03/05 03:37:03
なんだかもうわけが分からなくなりました
単語一つにしろググって調べないと意味もわからない
プログラムって難しいですね
今日はもう寝ます
いろいろありがとう
726デフォルトの名無しさん:05/03/05 03:41:03
> 第一引数だからこの場合$ARGV[0]は1で
って言っといて>>723みたいに答えてるからわかってなさそ。
727デフォルトの名無しさん:05/03/05 04:05:13
ふむふむ、参考にしている>>3のサイトが初心者にわかりにくいってことだな。
@ARGVのごく簡単な説明とperlスクリプト文での使い方は説明してあるが、
実際に@ARGVに値を入れて実行する方法が書いてないようだ。
728デフォルトの名無しさん:05/03/05 09:36:35
>>705
有難うございますm><m
729デフォルトの名無しさん:05/03/05 09:56:42
このなかでPerl勉強して後悔した人はいますか?
730デフォルトの名無しさん:05/03/05 10:05:15
forkの使い方を勉強しています。
下のサイトをサンプルを動かして、動くことは動くのですが
動作についてイメージが湧きません。
http://www.stackasterisk.jp/tech/program/perl04_02.jsp

実行するとif($pid = fork)のブロックが実行されて、いつ(defined $pid)の
ブロックが実行されるのでしょうか。
浅はかな頭では最初のifで子プロセスを生成してから子プロセスの終了を待ってから
終わってしまうように見えます。
どなたか解説をお願いします。
731デフォルトの名無しさん:05/03/05 10:27:59
>>730
fork() した時点で、メモリ上で動作中のプログラムがコピーされて2個になると思えばいい。
全く同じ2つのメモリイメージだけど、親の方では $pid に(新しく作られた子の)プロセスIDが入る
子の方は0が入る

親では、 if($pid = fork) が true になる($pidに子プロセスIDがセットされる)から、waitまで行くが
子では if($pid = fork) がfalseになる( $pidが0にセットされる)ので、そこはパスして
elsif(defined $pid) の部分が実行される


正確な話は自分でmanでも読んでくれ、大体こんな感じ。
732デフォルトの名無しさん:05/03/05 10:35:51
>>731

なるほど。
丁寧な解説でようやく理解ができました。
ありがとうございました。
733デフォルトの名無しさん:05/03/05 14:47:34
>>731
open していたファイルはそっちでも open していることになるよね?
open していたものがデバイスだったら競合はしないの?
734デフォルトの名無しさん:05/03/05 14:48:31
>>729
後悔はしていないけど、Cしか知らなかった頃に比べて頭が悪くなったような希ガス
735デフォルトの名無しさん:05/03/05 15:00:12
C より Perl 書く方が苦痛だよな。
736デフォルトの名無しさん:05/03/05 15:22:18
>>733
close しなさい。
737デフォルトの名無しさん:05/03/05 19:25:11
n行目からm行目までを処理しようとして
while (<IN>) {
hoge($_) if $n..$m;
}
ってやってもうまくいかないのですが。
最初から最後まで処理されます。
738デフォルトの名無しさん:05/03/05 19:58:51
>>737
自動的に$.と比較してくれるのは定数のときだけなので、
今回のように$n,$mのような変数に入ってる場合は、明示的に

$.==$n .. $. == $m

のようにする必要があります。
739デフォルトの名無しさん:05/03/06 00:45:58
Perlはじめたら父ちゃん家出して母ちゃんは酒びたり、姉ちゃんは変な男連れ込んでごそごそしてるしもうこんな生活いやだ。
僕に最適な言語を教えてください。
740デフォルトの名無しさん:05/03/06 00:53:53
>>739
つ スワヒリ
741デフォルトの名無しさん:05/03/06 02:18:56
>>739
つ アラム語
742ηCar:05/03/06 02:30:38
674です。
>>675 >>680 >>681 ありがとうございます。

perlでなくシステムの話になるのですね。
makeが発狂しないように気を付けてポチポチいじってみます。
743デフォルトの名無しさん:05/03/06 05:41:44
sub mailer{

添付めーるを送信する処理

}
このようなサブルーチンを作って、logディレクトリにある画像ファイルを片っ端から一通ずつ送るということをやろうとしています。
環境はwindows2000でsendmailの代わりにsendmane.exeを使っています。
jcode.plとmimew.plを使って添付処理をしているのですが

&mailer("file1.jpeg");
のように一回の処理だとうまく送ることができるのすが、

foreach $aa ($filelist){
&mailer($aa);
}
のようにやったり、
&mailer("file1.jpeg");
&mailer("file2.jpeg");
のようにやると、添付ファイルの一部が破損しているようで送信はできるのですが、
正常なファイルを送信することができません。
なんとか
foreach $aa ($filelist){
&mailer($aa);
}
のような処理をうまくやる方法はないでしょうか?
送信プログラムは
http://www.parkcity.ne.jp/~chaichan/src/perl05.htm
ココのを参考に作っています。
よろしくおねがいします。
744デフォルトの名無しさん:05/03/06 05:55:32
foreach $aa ($filelist){

$filelist?????
745デフォルトの名無しさん:05/03/06 06:10:01
&mailer("file1.jpeg");
&mailer("file2.jpeg");
でうまくいかないんだから
mailer内で一回目に書き換えた変数を
二回目以降も使っているのだろう。
746デフォルトの名無しさん:05/03/06 06:30:28
すまんこ。
euc-jp環境のLinuxでShift-jisのファイルを読み込み、
シェル上から日本語文字列のコマンドライン引数を受付け、
euc-jpの標準出力に出力、つうスクリプトでハマってます。
--
use Encode;
binmode STDOUT,':encoding(euc-jp)';
open IN, "< :encoding(shiftjis)","sjis.txt" or die;
...

ここまではいいんだけどこの状態で$ARGV[0]をprintするとエラー。

binmode $ARGV[0],':encoding(euc-jp)'; とか
binmode ARGV,':encoding(euc-jp)';
とかやってもダメ。
参考サイトだけでも教えてくださいませんか。
747デフォルトの名無しさん:05/03/06 07:01:27
あーすみません。
$str = decode("euc-jp",$ARGV[0]);
でいいんですね。お邪魔しました。
748デフォルトの名無しさん:05/03/06 10:46:11
>>746
Jcode mailinglistで聞いたら?
749デフォルトの名無しさん:05/03/06 14:27:59
>>745

一応mailerサブルーチンの中身は全部my変数にしてあります。
jcodeとかmimewの問題なのでしょうか?

>>744

@filelistのなかに、送信するファイルの一覧が入っています。
750デフォルトの名無しさん:05/03/06 14:37:03
一応確認だが、複数送ろうとするときにおかしくなるファイルは
単独で送れば全てきちんと送られているわけね?

751デフォルトの名無しさん:05/03/06 14:43:35
解決しました”””

$encodedata = &bodyencode($sdata);
$encodedata .= &benflush;

↓↓↓

$encodedata = &bodyencode($sdata, "b64");
$encodedata .= &benflush("b64");

にしたらうまくいきました

なんでだろー
752デフォルトの名無しさん:05/03/06 15:08:05
PerlにCのような構造体を実装するモジュールってあるかな?
753デフォルトの名無しさん:05/03/06 15:12:30
>>752
> PerlにCのような構造体を実装するモジュールってあるかな?

あるし、それ以前に、hashへのリファレンスを使えばやりたい放題だが。
754デフォルトの名無しさん:05/03/06 15:14:55
>>749
> >>744
> @filelistのなかに、送信するファイルの一覧が入っています。

こんなバカを言って澄ましている節穴眼野郎が、

> >>745
>
> 一応mailerサブルーチンの中身は全部my変数にしてあります。
> jcodeとかmimewの問題なのでしょうか?

とかほざいても信用できないね。
755デフォルトの名無しさん:05/03/06 15:20:18
まったくだw
756デフォルトの名無しさん:05/03/06 15:55:33
>>751
あーわかった。

&benflushの形式で呼び出すと@_がひきつがれてしまうので、$codingに
不正なパラメタを与えてしまってたんだろう。benflushはしらない
パラメタが与えられると何もしないのでいろいろいやなことが置きそうだ。
最初の一つが大丈夫だったのもたぶん偶然半端がでてなかったとか
なんじゃないかな。

いまどきのperlではサブルーチン呼び出しに&つけるのはやめた方が
いいよ。(あえて必要な場合を除く)



757デフォルトの名無しさん:05/03/06 16:10:55
いったい何の話やら
758デフォルトの名無しさん:05/03/06 16:57:43
オブジェクト指向のところがさっぱりわからん。
C++やjavaは、別に分からんことないのに、
perlのオブジェクト指向は、なんか良く分からん。
バカな俺のために、もっと見通し良く実装してくれ・・・
759デフォルトの名無しさん:05/03/06 17:47:50
>>758
perlのオブジェクト指向ってのは変数やサブルーチンを区分けされた
名前空間でリファレンスとして扱うってだけのことで、Javaのように
オブジェクト指向を徹底しているわけではないのね。

このなんちゃってOOPが慣れると結構使い易いんだわ。

Perlのいい所(あるいは最悪の点)は、他の言語のいい所を適当につまみ
食いしてるところなんだよね。

>>739
そんな貴方にはObjective-Cをお勧めします。
760デフォルトの名無しさん:05/03/06 17:54:03
>>758
Perlのオブジェクト指向メカニズムは、
確かに異常に変だな(笑
761デフォルトの名無しさん:05/03/07 02:28:02
コンソールの文字の色などを変えるようなモジュールってありますか?
762デフォルトの名無しさん:05/03/07 02:35:01
>>761
Term::Cap
Term::ANSIColor
763デフォルトの名無しさん:05/03/07 04:27:42
>>762
ありがとう!
764デフォルトの名無しさん:05/03/07 07:04:53
すまんこ。再び本当にすまんこ。

use Encode;
binmode STDOUT, ":encoding(euc-jp)";
open IN, "< :encoding(shiftjis)","sjis.txt" or die;

としたファイルハンドラINをサブルーチンに渡すところで
またまたつまづいてしまいました。以下

$cnt = Getlines(\*IN);
print $cnt;
exit;

までがメイン。サブルーチンは
sub Getlines {
my $fh = shift;
my $count = 0;
while(<$fh>) {
$count++;
}
return $count;
}

なのですが、実行すると
shiftjis "\x87" does not map to Unicode at unko.pl line 20, <IN> line 829.
shiftjis "\x94" does not map to Unicode at unko.pl line 20, <IN> line 829.
とエラーを吐きます。Perlのバージョンは5.8.5。
サブルーチン内でも文字コード云々の対策が要るのでしょうか。
765デフォルトの名無しさん:05/03/07 09:04:04
>>764
それはエラーじゃなく警告だろ。

open IN, "<:encoding(CP932)", "sjis.txt" or die;
766デフォルトの名無しさん:05/03/07 11:42:20
う、かたじけない。警告でした。
CP932にしたらやたらと出てた警告も
"x85"と"x9F"だけになりました。
サンプルに2chの.datファイル20個ほど使って
警告二つなら安心して使えます。どうもです。
767デフォルトの名無しさん:05/03/08 03:13:59
今日からperl始めたら
何日で掲示板が作れるようになれますか?
就職がかかってますのでマジレスキボンぬです
768デフォルトの名無しさん:05/03/08 03:24:16
Perlで無理にオブジェクト指向するくらいならRuby使うよ
769デフォルトの名無しさん:05/03/08 03:25:26
>>767
一応マジレスすると、一概に言える訳ないだろヴォケ。
perl以外の言語の経験、プログラミングの経験によって答えは変わる。
770デフォルトの名無しさん:05/03/08 03:28:40
>>767
3日。
一通り網羅された本を手元において、
他人書いた掲示板のソースコードを解読してけばいいんじゃない。
771デフォルトの名無しさん:05/03/08 04:15:26
>>767
3時間くらいという人もいるだろう。
772デフォルトの名無しさん:05/03/08 06:41:46
>>767
しかし書き込みの程度からして一ヶ月はかかるな、こりゃ
プログラミング経験がほとんどないように見える
新しい言語にすぐなじめるような経験がある人ならこんな質問はしない
773デフォルトの名無しさん:05/03/08 06:48:37
まあ、まったく経験が無いとしたら、
出来上がった掲示板が使い物になるかは別問題だけどなー
セキュリティ知識とかCGI動作原理とか覚えることは色々あるぞ
774デフォルトの名無しさん:05/03/08 08:33:18
プログラミング経験が無いならみっちり6ヶ月はやってほしい。マジで。
最低限のセキュリティ知識がないと怪我をしかねない。
775デフォルトの名無しさん:05/03/08 10:25:03
掲示板って言ってもめちゃめちゃピンキリなのでは
776デフォルトの名無しさん:05/03/08 16:13:49
6ヶ月か
767だけど
プログラミングは高校のときのベーシックでライン引いたりした以来です
777デフォルトの名無しさん:05/03/08 16:29:10
つーか板違い。
とりあえず、どんな掲示板が作りたいかくらい言えるようになれ。
778デフォルトの名無しさん:05/03/08 17:02:15
>>775
> 掲示板って言ってもめちゃめちゃピンキリなのでは

バンド幅が狭かった昔は、多くの大学でWeb掲示板を動かしたり作ったり
するのが禁止されてたりしたな。
よく分かってない人が作ると、利用者がリロードする毎に30MBも再ロード
するような何も考えてないシステムになるからな。
779デフォルトの名無しさん:05/03/08 21:57:30
2chって、Perlで出来てるの?
780デフォルトの名無しさん:05/03/08 22:37:27
まさか
781デフォルトの名無しさん:05/03/08 23:05:01
WindowつかってCPANをやろうとしてます
CPANでmakeまでうまくできてるみたいなんですけど、
C:\.cpan\buildに展開されてるだけで、インストールされてないみたいなんですけど、
どこか設定ミスってしまったのでしょうか?
可能性あることをおしえてください
782デフォルトの名無しさん:05/03/08 23:10:07
>>781
で、やった手順は書かないの?
783デフォルトの名無しさん:05/03/08 23:53:05
784デフォルトの名無しさん:05/03/09 02:47:26
CPANのインストールが出来ただけだと思う
785デフォルトの名無しさん:05/03/09 10:21:50
print で出力すると数値も文字列となって出力されますが
数値又はバイナリとして出力する方法はありますでしょうか?
786デフォルトの名無しさん:05/03/09 10:24:16
>>785
pack
787デフォルトの名無しさん:05/03/09 18:55:44
ActivePerlの-Cオプションの意味・使い方を教えてください。
doc見ても簡単すぎてさっぱりわからない。
788デフォルトの名無しさん:05/03/09 20:18:49
$r = int rand (9);
$h-i-rady = 'i-rady-mb'.$r.'jpg';


これで、エラーになるんですけど、なぜかわかりません
おせえて
789デフォルトの名無しさん:05/03/09 20:24:54
$r = int rand (9);
$h_i_rady = 'i-rady-mb'.$r.'jpg';
790デフォルトの名無しさん:05/03/09 20:26:46
>>789
どうも、thxです
791デフォルトの名無しさん:05/03/10 16:43:59
Perlの.NetFramework版ってActiveStateで売ってあるやつしかないの?
フリーで欲しいんだけど
792デフォルトの名無しさん:05/03/10 18:46:39
Template Toolkitの構文をインデント付で記述したいのですが
START
[% IF 1 -%]
  [% IF name == 'doraemon' -%]
    boku doraemon
  [% ELSE -%]
    boku nobita
  [% END -%]
[% END -%]
END

だと出力結果が
start
      boku nobita
  end

bokuの前のスペースは仕様上しょうがないかもしれないけど、せめて
START
[% IF 1 -%]
  [% IF name == 'doraemon' -%]
boku doraemon
  [% ELSE -%]
boku nobita
  [% END -%]
[% END -%]
END
と記述したいです 実際の出力結果は
START
  boku nobita
  END

今NOVAってますが日本語のドキュメントが少なくてつらひです
793デフォルトの名無しさん:05/03/10 19:18:25
こうすれば行頭を見れば地の文か制御ロジックかの見分けが付きやすくなって良いと思うんだけど、ダメかな。

START
[% IF 1 -%]
[%   IF name == 'doraemon' -%]
boku doraemon
[%   ELSE -%]
boku nobita
[%   END -%]
[% END -%]
END
794くれくれ厨スマソ:05/03/10 20:18:45
問合せたURLの画像ファイルがあればTrueを、無ければFalseを返す関数。
だれかもってませんか?
795デフォルトの名無しさん:05/03/10 20:40:30
>>794
氏ね
796デフォルトの名無しさん:05/03/10 21:00:49

>>794
今すぐ死ね
797てきとー:05/03/10 21:05:21
sub exist_url { `wget --quiet --spider $_[0]`; !$?; }
798デフォルトの名無しさん:05/03/10 23:04:36
>>792

[%- foo -%]
だと何か問題あるんだっけ?
799デフォルトの名無しさん:05/03/11 01:42:54
sub exist_img {
use LWP::Simple;
return get($_[0]) ? 1 : 0;
}
800デフォルトの名無しさん:05/03/11 13:02:39
10進数とn進数を相互変換する関数ってありましたっけ?
PHPのbase_convert() みたいな感じです。
ttp://de3.php.net/manual/ja/function.base-convert.php

perlのを調べていたんですが、8進、16進はありましたけど、
標準でn進数ってのはないんでしょか?
801デフォルトの名無しさん:05/03/11 13:36:32
strtol?
802デフォルトの名無しさん:05/03/11 20:23:00
803800:05/03/11 21:05:09
ありがとうございます

>>801 そうですね、C言語で言うところのそれです。
ltoaなどなど。

>>802 20進数や30進数などが作りたいのですが、
ページの最終行を見る限り、perlはこういう処理は
苦手なのか…。

今回は頻繁に呼び出さない処理の予定なので、Cで作って
外部コマンドで実行した方が手っ取り早い気がしてきました。
804デフォルトの名無しさん:05/03/11 21:34:58
805デフォルトの名無しさん:05/03/11 23:44:52
>>803
Cの関数ならPOSIXモジュールに幾つか定義されているから使えるかもしれん。
806デフォルトの名無しさん:05/03/12 01:35:37
$a $b $c のうち二つが真ならば評価する式は
($a && $b)||($a && $c)||($b && $c)
これが一番短いですか?
807デフォルトの名無しさん:05/03/12 01:47:59
>>806
!$a+!$b+!$c<2
808デフォルトの名無しさん:05/03/12 01:49:42
>>806
演算子重視じゃなくていいなら、俺ならこんな感じにする。

(gerp {$_} $a, $b, $c) >= 2;

なんて言うか、意味的に分かりやすいから。
809808:05/03/12 01:51:13
あ、807のほうがいいと思った。
810デフォルトの名無しさん:05/03/12 02:26:39
>>807-808

後々にも役に立つ勉強になりました。
ありがとうございました。
811デフォルトの名無しさん:05/03/12 10:04:10
>>804 ありがとうございます。 ここのページにあるモジュール
Math::BaseCalc を落として追加することで出来ました。
# perl Makefile.PL
# make install
で追加でき、下記ページを参考に簡単に実現できました。
http://perldoc.jp/docs/modules/Math-BaseCalc-1.011/Math/BaseCalc.pod

ありがとうございました。
812792:05/03/12 19:36:38
遅くなりましたが皆様回答ありがとうございました。

>>793
今すぐ実践出来そうなので早速使ってみようと思います(゚ー゚*)

>>798
[%-が直前の行の改行から[%-までのスペースを削除するというのが
今回の用途ではちょっと使いにくいんですよね><。

START
[% name = 'doraemon' -%]
[% IF 1 -%]
  [%- IF name == 'doraemon' -%]
boku doraemon
  [%- ELSE -%]
boku nobita
  [%- END %]
[% END -%]
END
にて希望通りの動作しましたが削った改行、それを補うための改行を
出力する場所を考えると脳みそぷるるん
813デフォルトの名無しさん:05/03/12 21:49:09
おばんです。
Windows上で日本語ファイル名を読み取らなければならない時
どうしてますか。
カレントフォルダ内ののファイル名を得るとして
use Encode;
while(<*.txt>) {
$fname = decode("cp932",$_);
. . . .
みたいにしても
opendir DIR,".";
binmode DIR, "encoding(cp932);
. . . .
としても、結局入ってくる文字は化けてしまう…。
814デフォルトの名無しさん:05/03/12 22:02:38
>813
あなたの言う「化ける」とは何をどうしたときにどうなることを指すのか説明してください。
で、ディレクトリハンドルに binmode してどうする、っつーか use warnings; したら警告でますが。
815デフォルトの名無しさん:05/03/12 22:27:57
あーごめんなさい。
<*>なりopendir() readdir()なりしてディレクトリ内にあるファイルの名前を得たいと。
得たそれをSTDOUTなりテキストファイルなりに書き出すと
x\[0023]x\[0021]....
みたいな記号の羅列になっているということです。これを元の日本語として出力するには
どうすればいいんでしょうか。
816デフォルトの名無しさん:05/03/12 22:50:31
ポカーン
817デフォルトの名無しさん:05/03/13 00:13:43
化けてる訳じゃないから何の問題もない
818814:05/03/13 13:22:16
うむ、まるっきり予想通りの展開。

decode() することによって文字コードが CP932 → UTF-8 になっていることは分かってますか?
従って、書き出したテキストファイルを UTF-8 が読めるエディタ等で開けば普通に日本語で読めるはずです。
あるいは、encode() し直せば CP932 に戻るので Windows 上で普通に読めるでしょうね。
ファイル名に対して文字列処理をしないのならばわざわざ decode()/encode() する必要はないでしょう。
819デフォルトの名無しさん:05/03/13 21:34:13
教えてください

perlで構文エラーを出さないように
英語の文章を書く(※動作は見ない)
なんて冗談みたいな話があるって
聞いたのですが、googleで探しても
そんな情報が見つかりません。

誰かご存知ないですか?
820デフォルトの名無しさん:05/03/13 21:45:40
>>819
> 誰かご存知ないですか?

知ってるよ。詩を書いたりとかね。
821デフォルトの名無しさん:05/03/13 21:47:04
ここらへんとかかな

Perl Poetry
http://www.perlmonks.org/?node=Perl%20Poetry
822デフォルトの名無しさん:05/03/13 22:13:10
去年は、俳句コンテストもやってたし。
823デフォルトの名無しさん:05/03/14 01:47:37
#!/usr/bin/perl

@num = qw ! one two three four five !;
print "数字を入れて\n";
chomp ($input=<STDIN>);
push @num,$input;
print @num;

これはどこがおかしいでしょうか。例えば6を入力して
one two tthree four five 6
という答えが返るようにしたいのですが、実際には何も表示せずに終了してしまいます
824デフォルトの名無しさん:05/03/14 01:56:20
>>823
最後に print "\n"; って付けてみな
Perl的には出力してるけど、シェルがかき消してる
改行すれば消されずに済むよ

ついでに、 $,=" "; ってしないと配列が繋がる。
825デフォルトの名無しさん:05/03/14 02:09:58
おお成功しました。ありがとです
826デフォルトの名無しさん:05/03/14 03:18:02
・・・
827デフォルトの名無しさん:05/03/14 16:19:25
なんか良い開発環境とかあります?
フリーでも有料でも。
828デフォルトの名無しさん:05/03/14 19:05:16
質問させていただきます。
戻るのボタンクリックして戻ったり、更新ボタン押した時に
「戻らないで」と表示させる方法を教えてくれませんか?
教えてください。
829デフォルトの名無しさん:05/03/14 19:06:43
>>828
それのどこがPerlの質問なのかね
830デフォルトの名無しさん:05/03/14 19:31:10
>>828
とりあえず>>1
831デフォルトの名無しさん:05/03/14 21:00:55
つまり、ttp://cgi.members.interq.or.jp/www1/tf52316/handl/high.cgi
で小さいと予想してはずれた時、また、戻るのボタンを押してやり直すことを
できますよね?
そういう不正行為を無くしたいんです。
832デフォルトの名無しさん:05/03/14 21:06:44
>>831
それのどこがPerlの質問なのかね
833デフォルトの名無しさん:05/03/14 21:06:54
>>831
もしそういう目的なら、セッション管理して一度先に進んだら
戻ってやりなおしてもダメって制御した方がいいんじゃないの?
834デフォルトの名無しさん:05/03/14 21:07:50
>>831
とりあえず>>1
835デフォルトの名無しさん:05/03/14 21:07:50
>>831
いや、「つまり」じゃなくてさ人の話を聞けよ
836デフォルトの名無しさん:05/03/14 21:09:59
>>831

>>1
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc5.2ch.net/php/ )
837デフォルトの名無しさん:05/03/14 21:23:19
次は「わからない人は黙っててください」と言うに65535perl
838デフォルトの名無しさん:05/03/14 21:28:16
わからない人は書き込まないでください
839デフォルトの名無しさん:05/03/14 22:13:16
やさしくしてね
840デフォルトの名無しさん:05/03/14 22:14:38
( ゚д゚)、ペッ
841デフォルトの名無しさん:05/03/14 22:26:57
ここは話のわからないインターネットですね。
842デフォルトの名無しさん:05/03/14 23:18:08

843デフォルトの名無しさん:05/03/14 23:33:11
>>828-843

仲良しビームッッ!(ノ≧w≦)ノ・・・…━━━★ピキューン
844デフォルトの名無しさん:05/03/15 00:11:54
                   ターン
                  (゚д゚・)・∵; …━━━━
845デフォルトの名無しさん:05/03/15 00:16:49
仲良しビームッッ!(@u;@);
846デフォルトの名無しさん:05/03/15 00:19:07
(@u@ .:;)ノシ おはようビーム!
847デフォルトの名無しさん:05/03/15 00:25:33
なによその顔文字、ふざけてるの?
848デフォルトの名無しさん:05/03/15 00:35:38
>>843-847
それのどこがPerlの質問なのかね
849デフォルトの名無しさん:05/03/15 00:40:34
なんだと
850デフォルトの名無しさん:05/03/15 03:00:55
>>848
じゃぁ、perlで円周率を小数点以下100万桁まで計算する方法を教えて下さい。
851デフォルトの名無しさん:05/03/15 03:07:33
>>850
好きな公式使え
852デフォルトの名無しさん:05/03/15 03:32:47
>>850
それのどこがPerlの質問なのかね
853デフォルトの名無しさん:05/03/15 08:19:38
perlを使ってどうにかそういう不正行為をなくしたいんです。
方法はあるはずなのですがどうしてもわかりません
854デフォルトの名無しさん:05/03/15 10:52:55
つまり、ttp://cgi.members.interq.or.jp/www1/tf52316/handl/high.cgi
で小さいと予想してはずれた時、また、戻るのボタンを押してやり直すことを
できますよね?
855デフォルトの名無しさん:05/03/15 11:18:58
もしそういう目的なら、セッション管理して一度先に進んだら
戻ってやりなおしてもダメって制御した方がいいんじゃないの?
856デフォルトの名無しさん:05/03/15 11:45:52
perlを使ってどうにかそういうスレ違いな質問をなく(ry
857デフォルトの名無しさん:05/03/15 12:59:00
ここはPerlの言語仕様についての質問しか出来ないスレですか?
858デフォルトの名無しさん:05/03/15 13:06:49
>>855
ありがとうございました。無事にできました。
859デフォルトの名無しさん:05/03/15 13:11:02
|  >>858をお迎えに上がりました
\__  _________
     V
              凸\_________/,凸、
           ノ´⌒`ヽ三三三三三三三i三.ノ´⌒`ヽ、
         [二ノ´金`ヽ二]二二二二二二i仁ノ´劵`ヽニフ
           ,.-┴―┬┴┐鬨鬩鬨鬩鬨鬨鬩鬨
            /ΛΛ //ΛΛ||L匳匳||卅||匳匯||匳||
        /_(゚д゚_//_゚Д゚,,)| |丗卅丗卅丗卅丗卅丗
  _,,,.-―''''"_,,,.-―''''"|コ ̄ ∪i  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 i゛(}[王i王]I()0コ ―― |―――=|――――――――――〕
 |_∈口∋ ̄_l_l⌒l ノ       ノ      ___l⌒l_ソ
   ̄ ̄`ー' ̄ `ー' ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄`ー'   `ー'
860デフォルトの名無しさん:05/03/15 14:02:18
 ぱいチンコびろーん
   ∩___∩     
   | ノ      ヽ/⌒) 
  /⌒) (゚)   (゚) | .|  
 / /   ( _●_)  ミ/
.(  ヽ  |∪|  /
 \    ヽノ /   
  /      /  
 |   _つ  /    
 |  /UJ\ \       
 | /     )  )       
 ∪     (  \    
        \_)
861デフォルトの名無しさん:05/03/15 14:48:59
今自作スクリプト作っているのですが、
#メンテナンス中にするか(メンテナンス中は1。1にするとゲームを中断させることができます。
$mente = 1;
#メンテナンス中の時に出すメッセージ
$menteme = "ただいまメンテナンス中です。しばらくお待ち下さい。";
--------------------省略---------------------
#メンテナンス
if($mente == 1){&error("$menteme")}
と記述して、$menteme = 1;とやると500エラーになります。
なぜでしょうか?

862デフォルトの名無しさん:05/03/15 15:03:49
863デフォルトの名無しさん:05/03/15 15:08:41
Rubyスレと違って
Perlスレは下品だしスキル低いね・・・
864デフォルトの名無しさん:05/03/15 15:09:02
もし Larry Wall が死んじゃったらどうするの?
後継者とかいるの?
865デフォルトの名無しさん:05/03/15 15:10:14
お前やれ
866デフォルトの名無しさん:05/03/15 15:16:55
Rubyスレのどこが(ry
867デフォルトの名無しさん:05/03/15 15:39:46
昔PerlスレでPerl叩きやってたるびきちって最高に下品だったね。
868デフォルトの名無しさん:05/03/15 15:57:58
>>864
> もし Larry Wall が死んじゃったらどうするの?

なんの変化もないよ。
869デフォルトの名無しさん:05/03/15 16:41:48
ここでいいのかな?

ExtUtils::MakeMaker で作った Makefile を使うと、
Test::Unit や Test::Class と一緒に使うのがスゲーまんどくせーです。
# Test::Unit の方は Test::Unit::HarnessUnit があるから幾分マシだけど…。

ExtUtils::MakeMaker で、make test の挙動を変更したりとかできませんか?
Test::Harness 嫌い(#´Д`)
870デフォルトの名無しさん:05/03/15 16:46:57
>>861
せめて maintain と書いて欲しい
871869:05/03/15 17:05:59
自己レスです。

ExtUtils::MakeMaker(3pm) の Overriding MakeMaker Methods にやり方が書いてありました。
Makefile.PL の中で、MY::test() を定義してやれば上手く行きそうです。
872861:05/03/15 17:45:32
結局なぜなのでしょうか?
文法チェックしてみましたが記述は間違えていなかったようです。
873デフォルトの名無しさん:05/03/15 17:47:30
>>872
errorログを嫁
874デフォルトの名無しさん:05/03/15 17:52:06
 ちんこ隠しました  
    ∩___∩      
   | ノ      ヽ/⌒) 
  /⌒) (゚)   (゚) | .|  
 / /   ( _●_)  ミ/
.(  ヽ  |∪|  /
 \    ヽノ /   
  /      /  
 |    /    
 |  /● \       
 | /     )  )       
 ∪     (  \    
        \_)   ちんこちっさっ!!
875デフォルトの名無しさん:05/03/15 18:26:11
>>872
とりあえず>>1
876デフォルトの名無しさん:05/03/15 18:30:35
>>861
1. 断片的で答えようがない
2. シンタクス的に問題はない
3. errorというサブルーチンが無いという落ちではありませんよね?
4. まさかPerl以前の問題だったりはしませんよね?
5. 時に、>>1は読まれましたか?
877デフォルトの名無しさん:05/03/15 18:45:06
>>872

>>1
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc5.2ch.net/php/ )
878デフォルトの名無しさん:05/03/15 18:45:34
>>861
条件判断が $mente == 1 なのに入力が $menteme = 1 となってて、変数名を混乱してるようだな
879デフォルトの名無しさん:05/03/15 20:09:58
>>861
セミコロン抜けてねえか?
880デフォルトの名無しさん:05/03/15 20:21:31
それだw
881861:05/03/15 20:26:49
>>877
perlとはCGIの開発によく使われるプログラミング言語のこと。
CGIとはWEBサーバーとブラウザ側で双方向のデータのやりとりができるプログラムのこと。
CGIとperlの区別はついていますよ?大体どこがCGIの質問なんですか?
どこ考えてもperlの質問でしょう?
882デフォルトの名無しさん:05/03/15 20:33:54
syntax error の訂正も自力でできないような奴の質問は noisy なので、
Web プログラミング板に行ってくれ。というか俺がいるスレで質問するな。

…と、そういう事が言いたいんじゃないのか?(´ー`)
883デフォルトの名無しさん:05/03/15 20:49:07
>>881
じゃあ「500エラーになります」って何なんだよ?
実行環境もエラーメッセージも適切に示さずに
的確な回答を得ようなんて浅ましすぎるんだよ。
884デフォルトの名無しさん:05/03/15 20:49:18
CGIとはWEBサーバーがプログラムを起動してクライアントに結果を返す際のインターフェイスのこと。
885861:05/03/15 20:57:35
実行環境
OS:WINDOWS XP
ウェブサーバアプリケーション Apache
エラーメッセージ 500 Internal Server Error
886デフォルトの名無しさん:05/03/15 20:58:07
>>881
じゃあ、Webサーバー通さずにそのスクリプトのみで実行してから質問しろ
887デフォルトの名無しさん:05/03/15 20:59:26
>>885
error_log も出すんだよ。ヴォケが。
888デフォルトの名無しさん:05/03/15 21:00:45
>>885
> エラーメッセージ 500 Internal Server Error
こんなこと書くようではなぁ。
webprog板に行けばきっと幸せになるよ。
889861:05/03/15 21:04:56
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
890デフォルトの名無しさん:05/03/15 21:07:32
>>861お前も必死だな
891デフォルトの名無しさん:05/03/15 21:08:18
>>885
まさしく「CGIとPerlの区別がつかないバカ」だな。
892デフォルトの名無しさん:05/03/15 21:08:43
>>889
画面じゃなくてApachのエラーログだろ。どこにあるか知ってるよね?
893デフォルトの名無しさん:05/03/15 21:09:39
>>889
> More information about this error may be available in the server error log.

それだよ、それ
894デフォルトの名無しさん:05/03/15 21:10:46
英語読む気もないのだろう。
895デフォルトの名無しさん:05/03/15 21:11:23
>>861そんなにこのスレに書きたければWebサーバ上で実行するな
896デフォルトの名無しさん:05/03/15 21:12:47
861、恥の厚化粧w
897デフォルトの名無しさん:05/03/15 21:16:07
>>889WEBプログラミング板逝くと楽になれるよ。。。
   あなたと同じぐらいのスキルの人たちがいっぱいいるよヴァカ
>>892この誤りに関する詳しい情報はサーバ障害記録で利用可能であるかもしれません。
という意味だよ。。。ヴォケ
>>892 Apachって何?Apacheの名前もしらない人がそんなこと言う資格はないと思うよ。
898デフォルトの名無しさん:05/03/15 21:20:51
>>861小学生にしては良くやったと思うよw
早くおうちに帰りなさい
899デフォルトの名無しさん:05/03/15 21:24:09
誰も>>879-880につっこまないの?
900デフォルトの名無しさん:05/03/15 21:27:23
>>897
何だこれ。
分裂症か?
901デフォルトの名無しさん:05/03/15 21:28:37
ActivePerl5.8.6でUDPソケットを一つ作って、ithreadで
送信と受信を別々のスレッドで動かしてみたんだけど、
受信スレッドでselect中に送信スレッドで同じソケットに
sendしたところ、selectがタイムアウトするまでsendが
ブロックされてしまいました。同じスクリプトをLinuxで
実行してみましたが、sendがブロックされるようなことは
ありませんでした。
これ、sendがブロックされる原因は何処にあるのか
ご存知の方いませんか?
902861:05/03/15 21:32:47
ロクにスキルもないのに書き込んですみませんでした。
これからはもっともっとperlの勉強をして出直したいと思います。
903デフォルトの名無しさん:05/03/15 21:41:53
>>902

 いや、perlの勉強って訳じゃなくてね・・・。
 perlの勉強はこのスレでしても良いんだよ?
904デフォルトの名無しさん:05/03/15 21:47:55
>>902
スキルの問題じゃなくて、質問の仕方が問題なの。
もっと的確にエラーや状況を説明するようにしないと。
905861:05/03/15 21:55:53
わかりました。状況も詳しく説明しないのに
教えてもらおうなんて虫が良すぎますよね。
次からは気をつけます。本当にすみませんでした。
906デフォルトの名無しさん:05/03/15 22:32:05
>>899
> 誰も>>879-880につっこまないの?

そっとしておいてやれ。

今ごろ、顔を真っ赤にしてもじもじしている
かもしれないんだから。

見ないふりしてやれ。
907デフォルトの名無しさん:05/03/15 22:39:08
Perlって多少間違ってても動いちゃうからバグ見つけるの大変だ
最近はJAVAに浮気中
ひさびさにPerl触ると、文字でも数字でも入る変数に便利さより戸惑いの方が大きい・・・
908デフォルトの名無しさん:05/03/16 00:09:06
>>861
まあ・・・原因は予想つくけどね
# ここでは言わないのがマナーであろうな
まだ解決してなかったら素直にWebProg板に行ってらっしゃい
向こうで見かけたら答えてあげるから
909デフォルトの名無しさん:05/03/16 00:10:37
まあJavaと比べちゃうとPerlはカタナシだよなあ
910デフォルトの名無しさん:05/03/16 00:34:11
上手いこと言ってません
911デフォルトの名無しさん:05/03/16 01:14:11
>>901
ithreadsはネイティヴスレッドなので実装はOSによって大きく異なる。

…漏れに判るのはそれだけ。すまん。
912デフォルトの名無しさん:05/03/16 01:48:16
>>905
WebProg板で同じ質問したら多分答えてもらえる。
パンを食いたきゃパン屋へ行け。肉が欲しけりゃ肉屋行け。
そんな当たり前のことが何故できん?
913デフォルトの名無しさん:05/03/16 07:00:04
>>912
スーパーに行ったらパンも肉も買えるよw
914デフォルトの名無しさん:05/03/16 07:05:53
>>913
疑問なのですが、どうしてそんな的外れな発言が出来るのでしょうか?
才能?

精肉コーナーに行ってもパンは手に入らず、パンのコーナーにも
肉は置いてないだろう?
915デフォルトの名無しさん:05/03/16 07:19:44
>>914
別に的外れでもないと思うぞ。言っていることは頓珍漢だけど
問題はここがスーパーじゃないということだろが
916デフォルトの名無しさん:05/03/16 08:00:02
そうだ、ここはスーパーじゃない。
スーパーの裏のゴミ捨て場。
917デフォルトの名無しさん:05/03/16 08:03:26
朝からご苦労様です
918デフォルトの名無しさん:05/03/16 09:10:31
>>915
頓珍漢なのが才能なのでしょうか?

2ちゃんねる全体はスーパーではあるけどね。
919デフォルトの名無しさん:05/03/16 09:32:40
>>914
語尾は統一してください。
920デフォルトの名無しさん:05/03/16 10:58:39
なんか、珍獣を可愛がるスレになってるな
921デフォルトの名無しさん:05/03/16 11:07:21
>>900
統合なんたらダ (σ゚з゚)σ
922デフォルトの名無しさん:05/03/16 11:13:20
>>907
君の彼女が君の父親に浮気しても
「彼女の動作も父親の動作も
すべて仕様どおり。想定の範囲内だす」と
923デフォルトの名無しさん:05/03/16 13:12:36
んー、は?
924デフォルトの名無しさん:05/03/16 15:18:27
正規表現を学ぶのに最適なサイト教えてください
925デフォルトの名無しさん:05/03/16 17:22:40
926デフォルトの名無しさん:05/03/16 17:56:18
パール超初心者なんですが、perlがlocalで動きません。どうもperl.exeがちゃんと認識されていないようです

OS WindowsXP Pro ,
Perl ActivePerl-5.8.6.811-MSWin32-x86-122208
apache_1.3.26-win32-x86-no_src
を使っています。

ActiveperlはC:\usr\localにインストールし、
apacheを起動させて、ブラウザのアドレスに " ttp://local/・・・・ " と打つと、
CGI以外のhtml等はちゃんと表示されるのですが、拡張子がCGIではInternal server errorが出てしまいます。
CGIファイル中のperlのパスも合ってるんですが・・

どなたかこの問題の解決方法がわかる方、教えていただけませんか
927デフォルトの名無しさん:05/03/16 17:58:59
>>926
>>1を100万回読んでからapacheのエラーログを見ろ
928デフォルトの名無しさん:05/03/16 18:26:47
>>861 のすぐあとでコレってもうネタか釣り以外考えられないだろ?
929デフォルトの名無しさん:05/03/16 19:13:36
>>911
荒れてる中レスしてくれてサンクス
今のところWindowsでの解決策がないので、切り捨てるしかなさそうです。
930デフォルトの名無しさん:05/03/16 21:24:49
>>926
Apacheのhttpd.confでCGIを許可する必要がある。
Options ExecCGI, Include, AddHandler あたりがキーワードだ。
あとはググるかWebProg板へ煎って暮。これはPerlの問題でもFAQでもないんでね。

無事動いた後、Perlのテクニック的な問題で壁につきあたったらまた来るがいい。
グドラク!
931デフォルトの名無しさん:05/03/16 22:02:43
>>930
色々いじってみたんですがやっぱりうまくいきません・・

具体的に教えていただけませんか
932デフォルトの名無しさん:05/03/16 22:13:42
>>931
釣りじゃなければ、まずお前が具体的にソースコード教えろ。
そうじゃなきゃ誰にもわからん。
933デフォルトの名無しさん:05/03/16 22:14:32
> 色々いじってみたんですがやっぱりうまくいきません

いじりかたがわるいんだろうね
934デフォルトの名無しさん:05/03/16 23:59:37
>>931
>>930が読めねーのかよ。
氏ね!
935930:05/03/17 00:11:33
>>931
しかたないな、のび太くんは。
「ScriptAlias」でcgi-binフォルダが外部にエイリアスされてないか確認。
俺も昔いつだったかhttpd.confがデフォでScriptAliasを設定するように
なった時、htdocs以下のcgi-binフォルダを無視されてえらいハマったっけな。
がんがれ。スレ違いなんでホントに最後だからな。あとはWebProg板へ池。

print "表1を参照";
print "<table><tr><td>";
:
:
がうまく表示されないよぅ、とかのレベルになったらまた来るがいい。

スレ汚し許せ>ALL
なんかちょっとperl覚えてCGIとかやりたい初心者が、環境構築が出来ない
故にperlを嫌いになって欲しくないんで助けてやりたくなったのさ。
936デフォルトの名無しさん:05/03/17 00:31:15
ActivePerlをC:\usr\localにインストールしたのなら、
スクリプトの最初の行は
#!/usr/local/perl/bin/perl
だと思われるが、それは大丈夫だろうな。

というか、エラーログ嫁。
937デフォルトの名無しさん:05/03/17 02:03:30
Apacheってデフォ設定でCGIファイルの一行目のパスを参照するの?
938デフォルトの名無しさん:05/03/17 02:08:40
それのどこがPerlの質問なのかね
939デフォルトの名無しさん:05/03/17 02:43:14
様式美になってきたな
940デフォルトの名無しさん:05/03/17 02:46:37
>>938
いやいや、上のやり取り見てたらね・・・
俺はApache使ってないからわからないんだけど・・・
WindowsでPerlのパスが通ってないってオチじゃないよね・・・
941デフォルトの名無しさん:05/03/17 02:52:29
だから、そういうものが関わる質問は一切無視だと何度言ったら(ry
942デフォルトの名無しさん:05/03/17 03:56:51
>>935
> スレ汚し許せ>ALL
> なんかちょっとperl覚えてCGIとかやりたい初心者が、環境構築が出来ない
> 故にperlを嫌いになって欲しくないんで助けてやりたくなったのさ。

この汚れを拭い去るのに、数スレを消費し、優に1年を要することは珍しくないのである。
943デフォルトの名無しさん:05/03/17 05:51:44
そんくらい目つぶってやれよ
944デフォルトの名無しさん:05/03/17 06:48:50
こんな駄スレが1年使いものにならなくなってもだれも困らねえだろ。
945デフォルトの名無しさん:05/03/17 07:08:30
あざーす
946デフォルトの名無しさん:05/03/17 07:42:39
あっざーす
947デフォルトの名無しさん:05/03/17 09:23:08
もうそろそろ次スレのことを考えておいた方がいいな。
948デフォルトの名無しさん:05/03/17 10:54:32
様式美 ヘビメタ万歳 パーカッションを語るスレ
949デフォルトの名無しさん:05/03/17 12:07:49
スレ違いの質問は適したスレに誘導するほうが
双方にとっていいと思うのだが。
950デフォルトの名無しさん:05/03/17 12:55:49
>>949
それが分からないバカな子が居るってだけの話さ
951デフォルトの名無しさん:05/03/17 13:29:39
>>950
だな。質問する方もする方だが、答える方も答える方だ。

というわけで、次スレよろしく。> >>950
952デフォルトの名無しさん:05/03/17 13:46:28
あいよ、16箱目
http://pc5.2ch.net/test/read.cgi/tech/1111034732/l50

丁度2ヶ月で使い切ったな、今スレ
953デフォルトの名無しさん:05/03/17 18:08:17
まだ50もあるよ・・・
954デフォルトの名無しさん:05/03/18 19:02:43
1000取った椰子はPerl神
955デフォルトの名無しさん:05/03/18 20:20:40
Perl6はまだですか?
956デフォルトの名無しさん:05/03/19 09:11:53
こないだ5.9あたりを見かけたが
957デフォルトの名無しさん:05/03/19 13:46:52
>>956
5.9は5.10になるから6とは関係ない。

6は……ある程度なら実装があるっぽい。
ライブラリとかがないから仕事で使いにくそうだけど。遊びなら。
958デフォルトの名無しさん:05/03/19 14:08:45
Perl6::Classes使って見れば雰囲気は味わえる
959デフォルトの名無しさん:05/03/19 14:18:20
>>958
まぁおそらくプリプロセスかましてるだろうから
速度的にアレなんだろうな。
960デフォルトの名無しさん:05/03/19 21:35:42
じゃPerlの標準関数でしりとりしながら埋めようか

getppid
961デフォルトの名無しさん:05/03/19 21:46:44
die
962デフォルトの名無しさん:05/03/19 21:46:58
die
963デフォルトの名無しさん:05/03/19 21:47:23
うへ、かぶた
964デフォルトの名無しさん:05/03/19 21:52:57
each
965デフォルトの名無しさん:05/03/19 21:56:59
hex
966デフォルトの名無しさん:05/03/19 22:00:42
uhawwokwww
967デフォルトの名無しさん:05/03/19 22:57:07
chomp
968デフォルトの名無しさん:05/03/19 23:05:51
空手chop
969デフォルトの名無しさん:05/03/20 00:17:21
if( i == 10 )
continue;
970デフォルトの名無しさん:05/03/20 00:22:59
pos
971デフォルトの名無しさん:05/03/20 00:23:59
next if $i == 10;
972デフォルトの名無しさん:05/03/20 01:09:30
>>969
Cですか?
973デフォルトの名無しさん:05/03/20 03:34:24
5.9から5.10になるのはなんか違和感ありませんか
974デフォルトの名無しさん:05/03/20 03:56:01
ドットと小数点の区別は付けとけ。井桁とシャープみたいなもんだ。
975デフォルトの名無しさん:05/03/20 04:33:15
$VERSION = 1.10;

ってやってハマることってよくあるよね?
976デフォルトの名無しさん:05/03/20 06:47:06
>>973
D知ってる奴は慣れっこだ
なにせ、DMDは0.99->0.100になったからな
# イツニナッタラ1.0ニナルンダヨ
977デフォルトの名無しさん:05/03/20 06:57:45
(x-1).9が開発版で、正式版をx.0として出すバージョンのつけ方もあるからややこしい
例えばXFree86なんかがこの方式
978デフォルトの名無しさん:05/03/20 11:02:12
>>975
$VERSION = v1.10;
とするとか。
979デフォルトの名無しさん:05/03/20 15:13:12
>>978
v-stringはdeprecated。
980デフォルトの名無しさん:05/03/20 18:21:21
リャマ本読んで習得中の者ですが、perlでVB、VCのような視覚的コードディんグって
可能ですか?
フォームに自動記入とか、オートログインやりたいことが沢山あるのですが
作業の自動化とか...何から手をつけてよいものやら...リャマ本を何度も何度も
読み返してはいるのですが、やりたいことの敷居が高すぎて、
遊びで計算、集計などチマチマとコーディングしながら学習中です
981デフォルトの名無しさん:05/03/20 18:23:42
>>980
> リャマ本読んで習得中の者ですが、perlでVB、VCのような視覚的コードディんグって
> 可能ですか?

お前に可能だとはとても思えない。
982デフォルトの名無しさん:05/03/20 18:41:41
手段はあるが知能が足りないので無理って意味ですか...なるほど。
オイラにはコマンドライン→ファイル出力が限界なのですね...
素直にVB,VC選択しとけばよかった...はうう、明日、宅配便ラマ本到着
するなあ、手遅れか。 切腹
983デフォルトの名無しさん:05/03/20 19:26:47
>>982
視覚的コードディんグってのが何なのかわかんない
CGIの質問なら板違い
984デフォルトの名無しさん:05/03/20 19:51:55
ええと、VC系だとボタンやチェックBOX等オブジェクトを容易に作成でき
クラス分けしコーディングしてますよね?
それを視覚的と呼びましたスイマセン><
perlもオブジェクト指向なのですが、オイラの技量じゃコンソールが精一杯
なのです。コマンドライン操作ではなく、直感的なボタン等が欲しかったのです。
また、他のアプリ定型作業をperlで自動化させたいなあ っと儚い夢を抱いておりました
985デフォルトの名無しさん:05/03/20 20:01:24
>>984
適当なGUIモジュールを入れれ
[GUI perl]でググれば出てくる。
VB,VCみたいなやさしい環境は期待するな。
986デフォルトの名無しさん:05/03/20 20:11:39
Perl/Tk用のGUIビルダがあると、何かの本で読んだことある
987デフォルトの名無しさん:05/03/20 20:23:03
リャマ本の最後にGUIについてちょっと書いてある
詳しくはO'Reillyの入門Perl/Tkを読んでください、と
988デフォルトの名無しさん:05/03/20 20:24:17
Tk拾ってきました。
難しそうですが、乗り換えずにperlで頑張ってみます。
有難うございました。m><m

ttp://www.geocities.jp/m_hiroi/perl_tk/index.html
今後の参考までに記述しておきます。
989デフォルトの名無しさん:05/03/20 20:36:11
Fight!(*^ヮ^*)
990デフォルトの名無しさん:05/03/20 23:30:22
IDEが欲しいってだけの話なんじゃないかな...
991デフォルトの名無しさん:05/03/21 01:12:42
Windows限定で良いなら、Win32::GUI::Loftはけっこうお勧め。
簡単なGUIビルダーもついてるよ。
992デフォルトの名無しさん:2005/03/21(月) 18:45:29
OSXならこちらへ
http://camelbones.sourceforge.net/index.php

CamelBoneのサイト久々に見たら更新されててびっくりした
993デフォルトの名無しさん:2005/03/21(月) 22:49:02
Perlについての質問箱 16箱目
http://pc5.2ch.net/test/read.cgi/tech/1111034732/
994デフォルトの名無しさん
Perl6 っていつ(ry