5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:03/05/16 11:44
"The duct tape of the Internet"こと、
Perlについての質問箱です
"There's more than one way to do it"ということで
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

過去ログは>>2-5あたり

2 :デフォルトの名無しさん:03/05/16 11:45
過去ログ

Perlについての質問箱 2箱目
http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
Perlについての質問箱 3箱目
http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
Perlについての質問箱 4箱目
http://pc2.2ch.net/test/read.cgi/tech/1048519394/l50


3 :デフォルトの名無しさん:03/05/16 11:45
3get

4 :デフォルトの名無しさん:03/05/16 13:37
>>1おつ

5 :デフォルトの名無しさん:03/05/16 15:32
5getか?

6 :デフォルトの名無しさん:03/05/16 17:54
   / ̄ ̄ ̄ ̄ ̄ ミ
  /  ,―――─―-ミ
 /  //     \|
 |  / ,(・ )   ( ・)  ハァ
  (6       つ   |    ハァ
  |      ∪__  |
  |      /__/ /
/|     ∪   /\

ここはム板のほうがかっこいいと思ってる厨房・痴呆専用のスレです
WEBプログラム板perlスレ本部に逝くことを押すすめします

7 :デフォルトの名無しさん:03/05/16 18:17
CGIしか書けない痴呆は帰れ

8 :デフォルトの名無しさん:03/05/16 23:37
PerlはCGIじゃないあげ。

9 :デフォルトの名無しさん:03/05/17 09:36
>>7>>6へだ。紛らわしくてスマソ。

10 :デフォルトの名無しさん:03/05/17 10:02
10

11 :デフォルトの名無しさん:03/05/17 19:28
$i = $a = $b = 0;
って使えないのか?

12 :デフォルトの名無しさん:03/05/17 19:44
>>11

13 :デフォルトの名無しさん:03/05/17 19:44
>>11
全部初期化されるよ


14 :デフォルトの名無しさん:03/05/17 19:56
>13
寝ぼけてますた。それで初期化してほかのところでundefな変数を代入してた…

15 :デフォルトの名無しさん:03/05/18 06:49
すみません、質問です。
csvファイルの一番上から順に1レコード読み込んで、$idと$keycodeが等しければ
それぞれ変数に代入する、という検索の部分なのですが、$idが奇数、又は偶数だ
と(csvファイルのレコード数が奇数か偶数かによる)検索失敗しまいます。
尚、$data = <IN>;の部分は、手元の本だと$data = $_;になっています。これだと
全く代入されません。
csvファイルに問題は無いと思います。お願いします。

$match = 0;
open IN,"log.csv";
while((<IN>)and($match == 0)){
$data = <IN>;
chop $data;
($keycode) = split(/\,/,$data);
if($keycode == $id){
($keycode,$flg,$mailadd,$name,$title,$comment) = split(/\,/,$data);
$match = 1;
}
}
close IN;

16 :デフォルトの名無しさん:03/05/18 07:11
>>15
寝ぼけた香具師ばかりだな。
CGIだろ、webprog逝け。


17 :デフォルトの名無しさん:03/05/18 09:34
#ふと疑問に思ったのでつが

#!/usr/bin/perl

use strict;

my $test = 10;
my $p = ¥$test;


&test_p(¥$p);
&test_p2(¥$test);
&test_g(*test);
$test = &test_v($test);

sub test_p {
$$p = 20;
}
sub test_p2 {
$test = 20;
}
sub test_g {
$test = 20;
}
sub test_v {
my $test = 20;
return $test;
}

より良いperl使いになろうとしたらどれを選択するべきでしょうか?

18 :デフォルトの名無しさん:03/05/18 09:48
>>17
4番目の方法においてなぜ引数を渡しているのか分からない。


19 :デフォルトの名無しさん:03/05/18 10:33
#!/usr/bin/perl

use strict;

my $test = 10;
my $p = ¥$test;


&test_p(¥$p);
&test_p2(¥$test);
&test_g(*test);
$test = &test_v($test);

sub test_p {
$$p += 10;
}
sub test_p2 {
$test += 10;
}
sub test_g {
$test += 10;
}
sub test_v {
my $test = shift @_;
return $test;
}

20 :デフォルトの名無しさん:03/05/18 10:35
sub test_v {
my $test = shift @_;
$test += 10;
}
だた

21 :デフォルトの名無しさん:03/05/18 11:03
もうわけわからんな。全部引数渡してる意味ないやん。
修正した4番はともかく、な。

22 :デフォルトの名無しさん:03/05/18 11:05
use strict;

my $i = 10;
my $i_ref = \$i;

print join '/', (
  plus10($i), plus10(\$i), plus10($i_ref),
  plus10_g(*i), plus10_g(\$i), plus10_g($i_ref),
);

sub plus10 {
  my $i_ref = ref $_[0] ? $_[0] : \$_[0];
  return ${$i_ref} += 10;
}
sub plus10_g {
  no strict 'vars';
  local *i = ref $_[0] ? $_[0] : \$_[0];
  return $i += 10;
}

23 :デフォルトの名無しさん:03/05/18 11:49

暗号?

24 :デフォルトの名無しさん:03/05/18 14:04
(,,゚Д゚)∩先生質問です
(warning: too few iterations for a reliable count)
ってエラーどういう意味でつか?

ちなみにベンチマークしてました。

25 :デフォルトの名無しさん:03/05/18 14:14
>>24
http://www.excite.co.jp/world/text/

26 :デフォルトの名無しさん:03/05/18 18:20
スレタイトルに「初心者無視!」って付けてほしいよ

27 :デフォルトの名無しさん:03/05/18 23:58
↑初心者の為のスレだろ?

28 :デフォルトの名無しさん:03/05/19 00:05
>>27
どこにそんなことが書いてある?


29 :デフォルトの名無しさん:03/05/19 00:19
じゃあ、予め答えを知ってる人のみ質問すること

30 :デフォルトの名無しさん:03/05/19 00:44
つまり、知ったかを釣ることを目的としたスレなんですね?

31 :デフォルトの名無しさん:03/05/19 05:34
そうです。
IDは出ませんので、得意げに答える回答者の
不備をジサクジエーンで容赦なく追求して下さい。

32 :bloom:03/05/19 07:11
http://homepage.mac.com/ayaya16/

33 :デフォルトの名無しさん:03/05/19 11:51
解凍者は元々バグを持っています

34 :デフォルトの名無しさん:03/05/20 00:15
Win32::APIを使えばPerlからdllを使うことができるらしいのですが、
VBのように使えるdllに制限などあるのでしょうか?


35 :デフォルトの名無しさん:03/05/20 00:39
前スレ>>972の方
ありがdございました。おかげさまで、結構、先まで進みました。


全然違う話なのですが、エキスプローラだとコピーが出来るんだ
けど、Perlからは扱えない長いフルパスのファイルがあって、若
干困ってます。つうか、あんな深いネストにするなよ!!

36 :デフォルトの名無しさん:03/05/20 08:16
>>35
浦島、竜宮城に帰れ


37 :デフォルトの名無しさん:03/05/20 10:52
モジュールでファイルの読み書きをさせているのですが
使っているファイルハンドルが同じなもので
同時に2つのファイルを書き込むことが出来ません。
複数のファイルを扱える様にするにはどうしたら
良いのか教えてください、お願いします。
ちなみにIO::Fileを使ってもFHは同じなのかダメでした。

Sample.pm
package Sample;
sub new {
 $class = shift; $file = shift; $self = {LIST=>[]};
 bress $self,$class; open(FH,'+<'.$file);
 push($self->{'LIST'},$_) while <FH>; return $self;
}
sub sample {
 my $self = shift;
 unshift(@{$self->{'LIST'}},pop(@{$self->{'LIST'}}));
}
sub regist {
 my $self = shift; truncate(FH,0); seek(FH,0,0);
 print FH $_ for @{$self->{'LIST'}}; close(FH);
}

use Sample;
$s1 = new Sample('./s1.dat'); $s2 = new Sample('./s2.dat');
$s1->sample(); $s2->sample();
$s1->regist(); $s2->regist();


38 :bloom:03/05/20 11:11
http://homepage.mac.com/ayaya16/

39 :デフォルトの名無しさん:03/05/20 12:54
>>37
use Symbol; して gensym

40 :デフォルトの名無しさん:03/05/20 13:02
ファイルかディレクトリかを判断するにはどうすれば?

41 :デフォルトの名無しさん:03/05/20 13:03
>>40
google

42 :40:03/05/20 13:08
>>41 適切な回答ありがとう(・∀・)

43 :40:03/05/20 13:08
>>41
適切な回答ありがとう(・∀・)

44 :デフォルトの名無しさん:03/05/20 13:15
ファイルテスト演算子にある。


45 :40:03/05/20 13:19
>>44
ふぁいるてすとえんざんし?
ぐぐります。
その後で逝ってきます。

46 :デフォルトの名無しさん:03/05/20 13:37
この判定条件の意味が分かりません。
教えてください。

$output = "a\\b";
if( $output =~ /\\$/ )
{
$output .= "\\";
}


47 :デフォルトの名無しさん:03/05/20 13:44
>>46
末尾に\が無かったら、末尾に\を追加。


48 :デフォルトの名無しさん:03/05/20 13:44
>46
正規表現

49 :46:03/05/20 13:50
>>47

助かりました。

もうひとつ聞きたいのですが、
この判定条件の$はどのような意味があるのでしょうか?


50 :デフォルトの名無しさん:03/05/20 13:55
>>49
末尾を表す。

っていうか、ちゃんと勉強しろよ・・・
正規表現勉強してるなら、^.*$ この辺は分かって当然だろ・・・?


51 :46:03/05/20 14:06
>>50

すいませんね。勉強不足で。
なにせ、まだ1週間しか勉強していないものですから。

とりあえず助かりました。
ありがとうございます。

52 :デフォルトの名無しさん:03/05/20 14:12
Perl/Tkの質問はここでいいでしょうか?
メインウィンドウを画面の中央に配置したいのですが
リファレンスを読んでもやり方がわからず。可能でしょうか?
まずはオライリーの本でも買って読んでみようかな。


53 :デフォルトの名無しさん:03/05/20 14:21
すみません、初心者の質問答えてやってください。
Perlによる普通の掲示板でログの先頭行のタイトルだけを
取るにはどういう構文にすればいいんでしょうか?

54 :デフォルトの名無しさん:03/05/20 14:27
普通の掲示板って何?

55 :デフォルトの名無しさん:03/05/20 14:35
>>54
webに使う2ch見たいな掲示板です。
すみません,今すれ違いだと気づきました。
お騒がせ致しました。

56 :デフォルトの名無しさん:03/05/20 14:59
>>51
ちったぁ勉強するなり調べるなりしろよ。
聞けば解決的な考えでは一歩も前に進まんぞ。

57 :デフォルトの名無しさん:03/05/20 15:14
前に見た正規表現で、
(.+)* ←これは何を意味してるのですか?


58 :52:03/05/20 15:20
(任意の文字の1回以上の繰り返し)の0回以上の繰り返し
これでわかる?使い道は良くわからないけど。

Perl/Tk使ってる人いませんか〜?

59 :デフォルトの名無しさん:03/05/20 15:23
>>58
Perl/Tkねぇ〜・・・。
日本語通らねーし。
GUI使うなら、それ用の言語へ移行した方がよい。


60 :52:03/05/20 15:27
>>59
Win用のActivePerlなら日本語通ってますよ。
移行してもいいんだけど標準モジュールなので便利なんです…

61 :デフォルトの名無しさん:03/05/20 16:22
>>57
何も表してません。全部の文字です。

>>52
俺もTkやってみました。が、すぐやめた経験者。
なにかといらん所で互換性(?)が悪いですよ事件が多発したのでやる気なくしました。
と言う事で記述ほとんど覚えてません。
http://www.geocities.co.jp/SiliconValley-Oakland/1680/perl_tk/inde
http://b2c-1.rocketbeach.com/~bitwalk/perltk.htmlx.html
でもお気に入りには入ってた。



62 :デフォルトの名無しさん:03/05/20 20:23
Perl/Tkは最近のお気に入り
Perlで本格的にGUIが作れるのは嬉しい
ただノウハウがないせいか、希望の画面になかなかならない
いいGUIビルダが欲しい

63 :デフォルトの名無しさん:03/05/20 20:33
マウスとか使わずにGUIを設計するのは明らかに間違いだな

64 :デフォルトの名無しさん:03/05/20 22:33
Tk用のGUI設計鶴なかったっけ?

65 :デフォルトの名無しさん:03/05/20 23:47
>>63
いや、お前が何か勘違いしてる。


66 :棄教者 ◆egKIKYO7cg :03/05/21 01:24
>>58
何でもマッチする。
>>Perl/Tk
もれはガンガン使っている。
日本語が通らないのは我慢。
>>63
マウスを使ってGUI設計するのには限界がある。

67 :デフォルトの名無しさん:03/05/21 07:54
Perl/Tkの日本語パッチあるよ
今携帯だからURL貼れないけど
少なくともSolarisでは問題なかった

68 :デフォルトの名無しさん:03/05/21 15:32
質問です。
Perl-5.6.1の環境なんですが
PurePerlで共通鍵方式の暗号/復号ができるモジュールかソースってありませんか?

# http://www.counterpane.com/blowfish-download.html
# ここにBlowfishのCソースがあって簡単そうなんですけど、自分だと品質に自身がないので
# Perl版がないのはCrypt::Blowfishがあるからでしょうか

69 :自己レス:03/05/21 16:00
>> 68
むっちゃCPANにありました。
http://search.cpan.org/author/MATTBM/Crypt-Blowfish_PP-1.12/
最初の探し方がいけなかったみたい。

70 :デフォルトの名無しさん:03/05/21 22:47
Graphvizのperlモジュールは素晴らしいな。perlだから、日本語通るし(通る
っていうか、使おうと思えば使える程度だけど)。

71 :デフォルトの名無しさん:03/05/22 10:01
INIファイルを読み書きするモジュールを探しているんですけど、
CPAN SEARCHで「ini」で検索するといろいろ出てきます。
定番があればそれを使いたいのですが。

72 : ◆hMJAPH9PWA :03/05/22 12:16
>>71
Config::IniFiles -
Config::Simple
Config::Tiny

このあたりかなぁ。
ざっと見た感じIniFileがフル装備、
Simpleは他のフォーマットもサポートしてる汎用性重視、
Tinyは最低限の実装といった感じだろうか。

# 三つともインターフェイスが全く異なるというのが痛いぞ…。


73 :デフォルトの名無しさん:03/05/22 19:41
""と''の差はメタ文字の表示の仕方以外にもありますか?

74 :デフォルトの名無しさん:03/05/22 20:03
変数をメタ文字と捕えないならある

75 :デフォルトの名無しさん:03/05/22 22:35
罵倒されるのを覚悟で質問します
スクリプトのコメント部分にこういう記述がしてあるのがあります

# $Id ??? 22:22:22 Ext $

そのスクリプトのバージョンと最終更新日を意味しているのは
わかるんですが、この$Id $にはどういう意味があるのでしょうか

こういう風に書いておくとなにかと便利なことがあるのでしょうか
ググッてもヒットしなかったので質問させていただきます

76 : ◆hMJAPH9PWA :03/05/22 22:48
>>75
それはRCSやCVSといったバージョン管理ツールにがファイルに埋め込む情報だよ。
だからPerlにとっては何ら意味を持たない。気にしなくていいよ。

77 :デフォルトの名無しさん:03/05/22 22:50
>>76
そうですか、今のところCVSで管理するようなものは
書いてないので安心しました。
どうもありがとうございます

78 :デフォルトの名無しさん:03/05/23 10:05
>>77>>75
便利だから導入しなさい。
便利すぎて氏ぬ。
http://pc2.2ch.net/test/read.cgi/tech/1030563262/l50
http://pc.2ch.net/test/read.cgi/unix/1047262230/l50
http://pc.2ch.net/test/read.cgi/unix/999837578/l50

79 :71:03/05/23 10:24
>>72
ありがとうございます。
やっぱり、Configシリーズですよね。
Config::IniFiles使ってみようかな。



80 :デフォルトの名無しさん:03/05/23 20:44
だれかWin32::APIの詳しい使い方教えてくれ!
・・・と思ったら、今月号のハッカージャパンの
1コーナーで解説してくれてたので買いました。

81 :デフォルトの名無しさん:03/05/23 21:22
そんなのをテキストにしたくないな

82 :ズボラー:03/05/23 22:35
ズボラーズラ。
二次元配列の要素数の取り出し方がいまいちよくわからんアフォズラ。
一次元だと
$rigid = @array;
もしくは
$rigid = $#array+1;(どっちがいいのかわからんが。。。)
で取り出せるんだが、
@array_all = (@array_one,@array_two,@array_three);
の場合で、array[0]の配列数を取り出したいとき、
@array_all[0]は$arry_one[0]が取り出されてしまうズラ。
かといって$#array_all[0]は実行エラーになるズラ。
また、一次元目の要素数を自由に取り出したいズラ。
今回の例なら
なんちゃらarray_allなんちゃら=3;としたいズラ。
どうすりゃいいズラ。ウズラ。


83 :デフォルトの名無しさん:03/05/23 22:52
一行レスならともかく
質問するなら普通の日本語使ってくれよ。
読みづらくてかなわん。


84 :デフォルトの名無しさん:03/05/23 23:01
>>82
@array_all = (\@array_one, \@array_two, \@array_three);
$array_one_count = @{$array_all[0]};
だな。大体Perlで二次元配列なんてどこで教わったんだ?

85 :ズボラー:03/05/23 23:06
84さんどうも。
やっぱ連想配列でやるのが普通ですかね。。。


86 :デフォルトの名無しさん:03/05/23 23:11
どこが連想配列なのか

87 :ズボラー:03/05/23 23:24
perl記述のスタンダードがわからんヅラ。
配列の要素数にしても、他にも色々あるにしても
$rigid = @array;
$rigid = $#array+1;
とりあえず上記の二つがあるヅラ。
84さんが
>大体Perlで二次元配列なんてどこで教わったんだ?
といってたんで、Perlって二次元配列とか
スタンダードじゃないんだーとか思ったヅラ。
そうするとスタンダードなのは連想配列かと。。。
そう思ったヅラ。ウヅラ。

88 :デフォルトの名無しさん:03/05/23 23:47
$res[87] =~ s/ヅラ//g;

89 : ◆hMJAPH9PWA :03/05/24 00:09
>>88
それだと最後の行が
> そう思った。ウ。
となり意味不明になってしまうよ。


90 :デフォルトの名無しさん:03/05/24 00:25
>>89
でも全体的にはヅラとった方が読みやすいから。

91 :デフォルトの名無しさん:03/05/24 01:18
>>89
意味不明度に違いはない。

92 :デフォルトの名無しさん:03/05/24 01:55
next if ($. == 87)

93 :デフォルトの名無しさん:03/05/24 02:01
>>87
「要素数」が欲しいんだろ? そのものが一発で取れるのに、
何故わざわざ 1 足さなきゃいけないような値を使うんだ?
一番素直なコードを書いときゃいいんだよ。

94 :デフォルトの名無しさん:03/05/24 02:23
どなたか、詳しい方教えてください。

aaa "bbb ccc" ddd "eee fff" ggg

という文字列があったとします
これをスペースを区切りとする単語ごとにわけるとする
ただし""で囲まれている部分は一単語としてあつかうものとする
ような場合、スマートにコーディングしようとした場合どう書けばよろしいですか。

期待している出力結果は

aaa
"bbb ccc"
ddd
"eee fff"
ggg

です

95 :サンプルです:03/05/24 02:23
★オマンコは地球を救う★
http://yahooo.s2.x-beat.com/linkvp/linkvp.html

96 :デフォルトの名無しさん:03/05/24 02:43
>>94
my $str = 'aaa "bbb ccc" ddd "eee fff" ggg';
push @str, $1 while $str =~ /([^ "]+|"[^"]*?")/g;
print join '/', @str;

97 :デフォルトの名無しさん:03/05/24 03:59
>>96
なるほど
勉強になります。
ありがとうございました

98 :デフォルトの名無しさん:03/05/24 10:30
>>52
遅レスだが。
win32環境ならこんな感じかな。

use Tk;
use Win32::API;

$GetSystemMetrics = new Win32::API('user32', 'GetSystemMetrics', 'N', 'N');
$cxscreen = $GetSystemMetrics->Call(0); #SM_CXSCREEN
$cyscreen = $GetSystemMetrics->Call(1); #SM_CYSCREEN

$top = MainWindow->new();
Centering(0,int($cxscreen/2),int($cyscreen/2));
$top->bind( "<Double-1>", [\&Centering,, 0, 0] );
MainLoop();

sub Centering {
my ($event, $width, $height) = @_;
$width = $top->width if !$width;
$height = $top->height if !$height;
my $x = int(($cxscreen - $width)/2);
my $y = int(($cyscreen - $height)/2);
my $geo = $width .'x'. $height .'+'. $x .'+'. $y;
$top->geometry($geo);
}

99 :::03/05/24 14:10

探し物はこちら
http://sagatoku.fc2web.com/
新商品・安売・キャンペーン・流行商品・ネット商品等10万点以上
ジャンル別・50音別で楽々探し物




100 :デフォルトの名無しさん:03/05/24 18:34
de Perl6はどうなったんだコラ?

101 :デフォルトの名無しさん:03/05/24 19:06
2001年に中日ドラゴンズに10億円という巨額の金額で入団した川崎憲次郎。
しかし彼は入団してから2年間、1軍のマウンドで1球も投げていない。 怪我は治っているが、2軍での投球も拒否。
最近では自宅での休養(サボリ)を続けているという。
ちなみにヤクルトの伊藤選手も同じような状況であるが、本人からの要望で給料の8〜9割を返還している。 一方川崎憲次郎はビタ1文も返してはいない。
もちろん税金等の問題があり、そんな単純ではないが1本10円のワクチンを10億円で買うならば1億人の人口が救えるのだ。
食料に困っている1億人の人たちにうまい棒を買ってあげられるのだ。
必死に生きて餓死していく人たちの前で川崎憲次郎は優雅な生活を楽しんでいる。
こんなことは許されない。皆もオールスターのファン投票で川崎憲次郎に投票し、出場させるのだ!!
5月23日の中間発表ではセリーグの先発2位につけている!!
投票は6月22日まで!!
https://allstar.sanyo.co.jp/vote/
中日・川崎憲次郎、依然先見えず…
http://www.zakzak.co.jp/spo/s-2003_02/s2003021502.html
  

102 :デフォルトの名無しさん:03/05/24 19:25
いま自分が書いている perl プログラムに RCS だとか CVS のような履歴管理の機能を付け加えたいのですが、良いモジュールを知っていませんか?

YukiWiki2 でも使われている Algorithm::Diff (http://search.cpan.org/author/NEDKONZ/Algorithm-Diff-1.15/lib/Algorithm/Diff.pm)
などを使えばそれらしいことができるかもと思っているのですが…

103 :デフォルトの名無しさん:03/05/25 01:14
すんませんperl56.dllってなんでしょうか
どこかでDLするものなんですか?

104 :デフォルトの名無しさん:03/05/25 01:58
perlDBIでODBCを使用する場合、ファイルDSNは使えないんですか?

105 :デフォルトの名無しさん:03/05/25 14:21
>>102
どういう物を作りたいのかイメージが分からないけど
RCSとかCVSを利用するためのモジュールは色々あるよ
そうじゃなくて、履歴管理を自分で実装したいって事?


うぃんどうずの話は別スレの方が良いんじゃ無いかと思う今日この頃

106 :デフォルトの名無しさん:03/05/25 16:36
配列操作関数で、ハッシュで使える delete が使えないのですが、
何かいい方法はありませんか?
※とりあえずこんなsubroutineを代用としてみましたが。

sub deletefromarray {
my($n,@a) = @_;
my(@ra);
for(my($i)=0;@a;$i++){
$_ = shift @a;
($i == $n) && next;
push @ra, $_;
}
@ra;
}


107 :デフォルトの名無しさん:03/05/25 16:55
外部コマンドの入力も出力の両方をperlから入出色させるにはどうすればよいのですか?
open(INOUT, "| cat |");とかやると Can't open bidirectional pipe といわれてしまいます。

108 :デフォルトの名無しさん:03/05/25 17:05
Perlクックブック読もうね。はい次のひとー。

109 :デフォルトの名無しさん:03/05/25 17:11
>>106
splice

>>107
IPC::Open2

110 :デフォルトの名無しさん:03/05/25 17:16
>>105
Window&Perlでスレ立てるほど人がいるかな?
個人的にはこの話題をどんどん語ってほしいけど。

>>106
splice

>>107
わざと実装してないみたいな事がらくだ本に書いてある。
どうしても使いたいならIPC::Open2

111 :デフォルトの名無しさん:03/05/25 18:35
>>110
この話題ってどの話題? いや、別に煽りじゃないんだが

Win&Perlって、結局はインストールが出来ないとか、モジュールの使い方を知らない ってレベルが多いような気がする

112 :デフォルトの名無しさん:03/05/25 21:19
>>111
Win32モジュール関係の話題とか。

113 :デフォルトの名無しさん:03/05/25 23:41
ActivePerlではパッケージのインストールはppmをつかうけどcygwinでは何つかうの?



114 :デフォルトの名無しさん:03/05/25 23:57
最近perlにハマり初めて、ちょっとしたメール関係のプログラムを組んでいます。
開発環境はWindowsXP標準のPerlです。

pop3からメールを受信して、本文を"$count","list"という名前の添付ファイルを"$count.lst"として保存するプログラムを組みたいと思っています。

ttp://www.din.or.jp/~bigstone/cgilab/guide/pop3.html
のpop3.pmを利用して作りました。

添付ファイルは、
$file = $pop3->attach(list);

で得られるファイルに保存されると言う事なので

$list=join('',"$count",'.lst');
$source = $pop3->attach(list);
rename ("$source","$list");

としましたが、ファイル名が変更されません。わかる方、解決方法教えて下さい。ソースは次レス。

※ホスト名など環境に合わせる必要があります。

115 :デフォルトの名無しさん:03/05/25 23:58
# 現在のメール数と総サイズを得る
my($mail, $size) = $pop3->stat();

# メール取得件数
my $retr = 0;


116 :デフォルトの名無しさん:03/05/26 00:00
★2日間無料で見れる★あなたは幸福です★
http://bbs.1oku.com/bbs/bbs.phtml?id=yasuko

117 :デフォルトの名無しさん:03/05/26 00:00
あら・・・。本文が長すぎてソース書き込めない(>_<)

118 :デフォルトの名無しさん:03/05/26 00:02
>>114
のURLのサンプルプログラム以下の部分に追加しました。

# 必要なら添付データ情報の処理を行う
%attach = $pop3->attach();
if(keys %attach > 0){
# 添付データがある場合の処理
$list=join('',"$count",'.lst');
$source = $pop3->attach(list);
rename ("$source","$list");

}

$countには数字が入ってます。

119 :デフォルトの名無しさん:03/05/26 00:17
open( IN, "hoge |") とやった場合に、 hoge コマンドの終了コードを得るには
どうすればいいのでしょうか。

120 :デフォルトの名無しさん:03/05/26 00:30
>>113
>perl -MCPAN -e 'shell'
でやってるけど、今のところ問題無いよ

121 :102:03/05/26 01:59
>>105
YukiWiki の履歴機能を充実させたいなというふうに思っているのですが。

とりあえず、Algorithm::Diff を利用して `diff -n` ライクな差分の生成と patch ができるようにしてみたのですがどうでしょうか?
http://morara123.tripod.co.jp/perl/difftest.pl
http://morara123.tripod.co.jp/perl/difftest.html


122 :114:03/05/26 13:23
>>114-115

自己完結しました(^^;一晩おいて、翌日考え直すと直る事って良くありますよね。

pop3.qmがロックをかけているからrename出来ないのかとかいろいろ深読みして
ましたが、単純にパスの指定がおかしかったようです。

× rename ("$source","$list");
○ rename ("$mail_dir/$source","$mail_dir/$list);


123 :デフォルトの名無しさん:03/05/26 16:09
>>113
>>120
たしかバイナリ含むやつってなかったっけ?
そういうのは問題が起きると思う。

124 :nobodyさん :03/05/26 17:04
コンパイラ有るんであればcpanでいいと思うけど、
ppmの方が楽なんだなぁ・・・

125 :デフォルトの名無しさん:03/05/26 19:01
Linux板とかそっちの方がいいのかも知れませんが、わかる方教えて下さい。
10分毎に起動するプログラムを作りたいと思っています。


そこで、
while(1){
system('perl prgram.pl');
sleep 600;
}

というプログラムを組みましたが、&オプションで起動してもログアウトすると
終了されてしまいます。

何かいい方法はないでしょうか?

SunOS 5.6のサーバに置こうとしています。

126 :デフォルトの名無しさん:03/05/26 19:10
>>125
nohupとかそういう話じゃなくて?

127 :デフォルトの名無しさん:03/05/26 19:21
>>126

思いっきりそれで行けそうでした。

Thanks!

128 :デフォルトの名無しさん:03/05/26 19:30
PerlとDelphi比べたらどっちが上ですか?

129 :デフォルトの名無しさん:03/05/26 19:40
>>125
cron

130 :デフォルトの名無しさん:03/05/26 20:18
>>123
Cygwin 版の gcc をそのまま使うんじゃなくて、
cl とか bcc とか持ってきて cpan の設定ファイルいじればいい。

131 :デフォルトの名無しさん:03/05/26 22:56
125です。

>>129

ほんとは、crontab設定すべきなんでしょうけどPermissionのせいかうまく
設定出来ませんでした。

自鯖じゃないから、cronは無理かも知れません・・・。

132 :デフォルトの名無しさん:03/05/27 03:11
あと10秒
と表示して同じ場所に数字をどんどん減らして表示するのはどうやりますか?
数字を減らす事は出来ますが、同じ場所に表示させる方法がわかりません。

133 :bloom:03/05/27 03:13
http://homepage.mac.com/ayaya16/

134 :デフォルトの名無しさん:03/05/27 03:22
$|=1;
for ($i=10;$i;--$i) {printf "%2d\b\b", $i; sleep 1}

135 :132:03/05/27 04:32
>>134
ありがとうございます。\bを使うのですね。
でも1から1000までのように桁数が増える場合はどうするのでしょう?

136 :_:03/05/27 04:35
http://homepage.mac.com/hiroyuki43/moe/jaz02.html

137 :デフォルトの名無しさん:03/05/27 06:11
Perlってもう終りなんですか?

138 :デフォルトの名無しさん:03/05/27 07:30

>>134
そーゆのって、sleepできっかり1秒になるもんなの??
処理自体の時間の考慮って言うか、そうゆうのが必要だから
sleepはどうかと思ってたんだけど…。今まで。


139 :デフォルトの名無しさん:03/05/27 08:10
>>135
表示した桁数分だけ\bで戻してスペースで消せばいい。

$|=1
$n=0
for ($i=10;print("\b \b" x $n), $i;--$i) {print $i; $n = length($i); sleep 1}

>>138
用とによるだろうなぁ。132はそんなに精度が必要とも思えなかったんで。
現時刻と最初の時刻からsleepする時間を補正すればできると思うが、
perlでgettimeofday()呼ぶのってどうすんだっけ。

# 最近はrubyに移ってしまったので、実はあんまり覚えてない。

140 :132:03/05/27 09:57
なるほど。出力した文字の長さを保持してその分を消せばいいんですね。
参考になりました。ありがとうございます。
元々sleepするだけのところをsleepの残り時間がわかるようにしたかっただけで
時間の精度は特に考えてないです。

141 :デフォルトの名無しさん:03/05/27 16:01
Perl2exe買ったヒトいる?
あれはPerl/TKで作ったヤツもコンパイルできるのか?
TKごとスタンドアローンアプリになるのか?ならないよな。

142 :デフォルトの名無しさん:03/05/27 16:03
>>132
\r(復帰)をつかってみぃ。

143 :138:03/05/27 16:28
>>140
ああ、なるほど。
それだけの目的か。

Perl2exeは全部まとめてコンパイルされるよ。
use Tk;
これ宣言したのをコンパイルしたら実行ファイルが1.5MBになる。酷すぎる。

でも、実はperl2exeなんぞ使わなくてもperlにBと言うモジュールコンパイラがついてるらしいんだな。
使ったことないけど。
perl2exeは無料で使いつづけてます、俺。


144 :デフォルトの名無しさん:03/05/27 17:47
>>132
C言語のエスケープ・シーケンスみたいなことがPerlでできればいいのにね。

145 :デフォルトの名無しさん:03/05/27 20:13
あらかじめ登録しておいたディレクトリに移動できるという簡単なツール
をPerl4の時代(Win95)に作ったんですが、XPでひさびさに使ってみたら
ディレクトリが移動してくれません。chdirという関数を使ってるんですが
調べてみると「作業用のディレクトリ」を変更する・・・とかかれてあります。
作業用のディレクトリに移動する関数とか別に用意されたんでしょうか?
あるいは純粋にディレクトリ移動できる関数とかご存知でしたら教えていただきたいです。

146 :デフォルトの名無しさん:03/05/27 21:19
perlの置換で連想配列の配列($a{$b}[$c]のような)を使用する場合
$hoge =~ s/$array{$foo}[$bar]/$array{$foo}[$hogehoge]/
上記の方法では、うまく置換されません。
$や[が正規表現上問題があるのはわかりますが、
どこに入れればうまくいくのかわかりません。
もしご存知の方がいらっしゃったら教えてください。

147 :デフォルトの名無しさん:03/05/27 21:59
Working directoryを作業用ディレクトリと訳しただけじゃないか

148 :デフォルトの名無しさん:03/05/27 22:15
>>146
その例だと問題なく置換してしまうけど?

$foo = 'foo';
$array{$foo}[$bar = 1] = 'bar';
$array{$foo}[$baz = 2] = 'baz';

($hoge = 'foobar3baz') =~ s/$array{$foo}[$bar][123]/$array{$foo}[$baz]/;
print "$hoge\n"; # bazfoobar3baz

($hoge = 'foobar3baz') =~ s/${array{$foo}[$bar]}[123]/$array{$foo}[$baz]/;
print "$hoge\n"; # foobazbaz

149 :デフォルトの名無しさん:03/05/28 01:07
コマンドラインから実行する一行スクリプトを作っています。

SQL を作るために、別ファイルから読み込んだ文字列を '' の中に埋め込む、
という処理をしたいのですが、-e の中なのでシングルクオートを使えません。

perl -n -e 'printf("INSERT INTO url (url) VALUES ('%s');", $_);' source.txt

何か良い方法はないでしょうか?

150 :デフォルトの名無しさん:03/05/28 01:15
Perl仕事で使える?

151 :デフォルトの名無しさん:03/05/28 01:16
Perlって趣味でしょ?

152 :デフォルトの名無しさん:03/05/28 01:25
>>150
さっきVBスレでも聞いていなかったか?
仕事で使いたいならC++かJavaやりなよ。他の人のことはいい。

153 :デフォルトの名無しさん:03/05/28 01:52
>>150

仕事で使ってるUNIX環境だと、

C++:コンパイル環境無し
Java:同じく
シェル:処理遅い

って感じでPerl使ってるんだけどさ。
まぁ、別にCでも良いんだけど。
CGIだと未だにPerlってイメージがあるからね。
スキルアップちゅうか、経験になるかな?程度で使ってるな。

まぁ、プログラムの仕様でPerl使えって言われりゃPerlを使うわけで...

154 :デフォルトの名無しさん:03/05/28 02:02
仕事で、というのが個人レベルの問題解決なのか、
グループ内に配布して使うのか、
社内で正式リリースするのか、
それどころかクライアントに渡すのか、
で全然変わってくる罠。

155 :149:03/05/28 10:13
>>149 への自己レスです。
アスキーコードでシングルクオートを指定してやることで解決できました。
$ perl -n -l -e 'printf("INSERT INTO uniq_uri (uri) VALUES(\x27%s\x27);\n", $_);' source.txt

156 :デフォルトの名無しさん:03/05/28 10:18
>>149
シェルの話なのでバックスラッシュ(\)でquoteするのが普通だけど、
$ perldoc -f q
$ perldoc perlop
という手もある。

157 :デフォルトの名無しさん:03/05/28 10:21
>>144
Perlのエスケープ・シーケンスはCよりも多いぞ。Cには\eなんてない。


158 :デフォルトの名無しさん:03/05/28 10:23
>>145
親プロセスのpwdを変えようとしてるんなら、単独では不可能。
ディレクトリ名を出力して親プロセスでそれを読んでcdするしかない。

159 :156:03/05/28 10:28
>>149
ごめん、この場合qはぜんぜんダメですね。

160 :149:03/05/28 11:15
>>159
確かに、q// を使っても qq// を使っても、
出力にシングルクオートが出てこないんですよね。
シェルに消されてるのでしょうか?
$ perl -n -l -e 'printf(qq/INSERT INTO uniq_uri (uri) VALUES('%s');\n/, $_);' source.txt
INSERT INTO uniq_uri (uri) VALUES(http://www.example.com);

バックスラッシュ付けると bash の文法エラーになっちゃうし。
$ perl -n -l -e 'printf(qq/INSERT INTO uniq_uri (uri) VALUES(\'%s\');\n/, $_);' source.txt
bash: syntax error near unexpected token `;'


環境は以下の通りです。
$ bash --version
GNU bash, version 2.04.0(1)-release (i386-turbo-linux-gnu)
Copyright 1999 Free Software Foundation, Inc.

$ perl --version

This is perl, version 5.005_03 built for i386-linux
(以下略)

161 :>>143:03/05/28 11:25
perl2exeの件ありがと、1.5Mかぁ、けっこう惨いね。
しかも高いし。

162 :山崎渉:03/05/28 12:27
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

163 :デフォルトの名無しさん:03/05/28 14:09
新種の山崎登場につきage

164 :デフォルトの名無しさん:03/05/29 10:40
Rubyでいうところの
配列の初期化 a=Array.new(100,0)
===演算子 a===[1,2,3]
のようなものはありますか?

165 :デフォルトの名無しさん:03/05/29 13:02
>>164
Rubyは知らんが
@a = (100,0);
@a = (1,2,3);
が期待しているそれかな?

166 :棄教者 ◆egKIKYO7cg :03/05/29 14:09
>>164>>165
Array.new( 100, 0 ) ってのは a[0] から a[99] を確保して 0 を入れておくってやつだとしたら
ない。
foreach( 0..99 ) { a[$_] = 0; }
とやるしかない。

あとそれから親切にも Ruby のサイト回って === とかいう演算子について調べたが、
Perlには残念ながら似たような機能はない。
一個一個条件文を書くしかない。
ついでにいうが switch - case
もないからこれも一つ一つ
if( ... ) {

} elsif( ... ) {


} elsif( ... ) {


} else {

}
と書くしかない。

167 :棄教者 ◆egKIKYO7cg :03/05/29 14:14
一緒に質問。

Perl のスレッド機能が使いたいので、
Cygwin で「コンパイルして」インストールしてみたら
perl -MCPAN -e shell が使えなくなった。

正確に言えば起動はするのだが
install Bundle::CPAN ってコマンドを打ち込んだときに
CPAN: Storable loaded ok
Going to read /home/kikyosha/.cpan/sources/authors/01mailrc.txt.gz
/home/kikyosha/.cpan/sources/authors/01mailrc.txt.gz: No such file or directory
Going to read /home/kikyosha/.cpan/sources/modules/02packages.details.txt.gz
/home/kikyosha/.cpan/sources/modules/02packages.details.txt.gz: No such file or directory
というエラーが出て氏ぬ。
ところが ls で /home/kikyosha/.cpan 以下を確認するとファイルは全て存在する。

また、Sun OS にも自分でコンパイルして Perl をインスコしたが、
こちらの CPAN は正常に動作する。

チェックすべき点を教えて頂きたく候。

168 :デフォルトの名無しさん:03/05/29 15:39
>>166
ありがとうございました

169 :デフォルトの名無しさん:03/05/29 15:41
>>164
my @array = (0) x 100;

170 :デフォルトの名無しさん:03/05/29 15:58
>>169
紙!!

171 :nobodyさん :03/05/29 16:01
でも、初期化って必要なん?
modperlとかならいりそうやけど・・・

172 :デフォルトの名無しさん:03/05/29 16:20
>>171
99.5%のPerlユーザは初期値はどうでもいいと思っているけど、
0.4%のユーザは初期値に1を、
0.1%のユーザは初期値に3.1415をキボンヌしているという統計があります。

173 :デフォルトの名無しさん:03/05/29 17:03
>>169
テストしたら正常に動いた!
紙!

でも、俺は変数の型宣言とか初期値とかあんま好きくない。
ましてやスクリプトなのになんでそんな事を…。
て言うかperlで宣言とかしたら重くなる。いらん処理増える。

174 :デフォルトの名無しさん:03/05/29 17:16
>>173
perlだといきなり $a[10]+=1 とかしても動くからな。
rubyはnilと0は区別するから。

175 :デフォルトの名無しさん:03/05/29 17:25
>>164
配列を確保するだけでよいなら、
$#a = 100;

176 :デフォルトの名無しさん:03/05/29 18:15
それだと101個確保しないか。

177 :デフォルトの名無しさん:03/05/29 19:36
えーと。win98。ActivePerlの5.8使用。

open(FILE,">test.txt"
close(FILE);

なぜかファイルが生成されませんでした。
あれれれれ。失敗したのかな?
失敗だとしたら、目印のために強制終了させよう。
で、以下のように書く。

if(open(FILE,">test.txt")){
print FILE "あああ\n";
close(FILE);
}else{
exit;
}

プログラムは強制終了される事なく普通に進行。
でも…。ファイルが生成されてない。
あれれ。もしかして、この記述では実行ファイルと同じ場所には出来ないで、他の場所に出来るのかな?
と思い、
「スタート -> 検索 -> ファイルやフォルダ」
の技を使いC:の中を標的とし、test.txtを検索。

でも、そんなファイル存在しなかった。
なんでやねん。

このコンピュータは明らかに私を馬鹿にしています。
許せません。

…と言うか誰か馬鹿な俺に教えて下さい。

178 :デフォルトの名無しさん:03/05/29 19:45
>>177
> あれれ。もしかして、この記述では実行ファイルと同じ場所には出来ないで、他の場所に出来るのかな?
カレントディレクトリって知ってる?

179 :デフォルトの名無しさん:03/05/29 19:50
今やり直した所、超誤爆してました。
思いっきりファイル名を書き間違えてました。
ごめんなさい。
消滅してきます。



180 :デフォルトの名無しさん:03/05/29 20:16
perl2exe V6.00 持ってる人いる?
わけがあって欲しいでした。

181 :デフォルトの名無しさん:03/05/29 21:36
↑7.0.0じゃなくて?

182 :デフォルトの名無しさん:03/05/29 22:19
そうそう、実は、HDD がクラッシュしちゃって、
perl2exe 6.X でコンパイルしたファイルだけが残ってるという事態で。。

6.x でコンパイルしたやつは
http://www.securityfocus.com/archive/1/312757/2003-02-20/2003-02-26/0
で復元できそうなんだけど、
コンパイルに使った perl2exe 6.x もやっぱり HDD クラッシュで消えちゃったの。

いろいろ探してるんだけど、7.00 か 5.03b しかなくてねぇ。
今年の 2/20 〜 5/5 の間に perl2exe を落とした人いたら協力お願いしました。


183 :デフォルトの名無しさん:03/05/29 22:26
>>174
perl にもundefあるじゃないか。
上手くやってくれるけどな


184 :デフォルトの名無しさん:03/05/30 01:40
>>176
そだな。すまそ。

185 :デフォルトの名無しさん:03/05/30 14:25
>>182
作者にメールしてみるとか。
こうゆうことでメールするのって迷惑なのかな?

186 :デフォルトの名無しさん:03/05/30 14:38
>>185
迷惑だ

187 :デフォルトの名無しさん:03/05/30 17:44
すいません
GD::Graphモジュールを使用したくて
動作確認のため簡単なプログラムを走らせてみると、

Can't call method "plot" on an underfined value at ./test.pl line ***.

となってしまいます。
なにが 起きてるのか教えて下さい。 お願いします。

188 :187:03/05/30 17:46
あ それと対処法も・・・

189 :デフォルトの名無しさん:03/05/30 18:42
>>187
> なにが 起きてるのか教えて下さい。 お願いします。
エラー。

>>188
> あ それと対処法も・・・
デバッグ。

190 :デフォルトの名無しさん:03/05/30 19:58
Can't call method "plot" on an underfined value at ./test.pl line ***.
^^^^^^^^^^
undefined の間違えでは?
「./test.pl の *** 行にある未定義値では"plot"というメソッドは呼び出せない」
だから、new していないとか…


191 : ◆hMJAPH9PWA :03/05/30 23:18
newに失敗したらundefを返すなんてよくあること。
# 個人的にはdieしてほしいけど。

192 :187:03/05/31 07:11
>>190
>>191
あ そういうエラーなんですね。
インストに苦労したから、GD::Graph自体がおかしいのかと思ってました。
プログラムもう一度見直してきます。
ありがとうございました。

193 :デフォルトの名無しさん:03/05/31 16:02
ハッシュから、ランダムに要素を選びたいのですが、重み付けも行いたいのです
$hash{1} = 50; $hash{2} = 30; $hash{3} = 20;
とあった場合に、大体 50%, 30%, 20% の確率で選ばれるように(randなので厳密にはなりませんが)
@array = ((1) x 50, (2) x 30, (3) x 20); $array[rand(@array)];
では流石に効率が悪いので
( 1000種類 × 100回 くらい なので、配列生成はちょっと...)

なにかスマートな or Perl的なやり方ないでしょうか。

194 :通行人さん@無名タレント:03/05/31 17:03
$a = int rand 10;
$a = ( $a < 5 )?1:
($a < 8)?2:
3;


195 :デフォルトの名無しさん:03/05/31 17:29
>>194
>>193は、ハッシュの要素が1000個って事じゃないかな


196 :デフォルトの名無しさん:03/05/31 18:20
>>193
スマートでもないしあんまりperl的でもないけど。
もうちょっと考えたらperl的なの思いつきそうだけど、
今から出かけなきゃいけないのでパス。
forの所はsort使って一発でできそうな気がする。

$hash{1} = 50;
$hash{2} = 30;
$hash{3} = 20;

map {$i+=$hash{$_}} keys(%hash);
$j = int(rand($i));
for (keys(%hash)) {
 if (($j -= $hash{$_}) < 0) {
  $answer = $_;
  last
 };
}

print "$answer\n";


197 :デフォルトの名無しさん:03/05/31 19:11
>>193
@weight = (25, 25, 150);
foreach (@weight) { $all += $_ }
until ( $weight[$key = int(rand(@weight))] > rand($all) ) {}
print $key;

198 :デフォルトの名無しさん:03/05/31 19:34
>>197
そのやり方よりこっちの方が速いとおもわれ

$max = 0;
@weight = (25, 25, 150);
map { $max = $_ if $_ > $max } @weight;
until ( $weight[$key = int(rand(@weight))] > rand($max) ) {}
print $key;



199 :197:03/05/31 19:39
@weight = (25, 25, 150);
foreach (@weight) { $max = $_ if $_ > $max };
until ( $weight[$key = int(rand(@weight))] > rand($max) ) {}
print $key;

要素の和じゃなくて、要素の最大値で十分だった。迂闊。

200 :197:03/05/31 19:41
時すでに遅しか(死
ところで foreach と map って優劣ある?

201 :193:03/05/31 20:20
割合を考えるだけでよかったのですね。
>>194 みたいに範囲のインデックスで上手くやる方法考えて詰まってました
ありがとうございました。


202 :202:03/06/01 08:10
m/^([0-9])([0-9])$([0-9])/;

if($3 == ($1 + $2)){
#大成功
}

__END__
2 + 0 = 2。
でした。

203 :デフォルトの名無しさん:03/06/01 10:39
>>202
m/^(\d)(\d)(\d)$/;
$3 == $1 + $2 and die;

204 :202:03/06/01 18:06
ガ━━━(゚д゚;)━━━ン!! 
$ の付ける場所間違って覚えてた。


205 :デフォルトの名無しさん:03/06/01 21:56
perlのサブルーチンをツリー表示してくれるような
ソフトを知っている方いましたら、教えて下さいな!

206 :Tk:03/06/01 23:39
ActivePerlのTk.pmでGUIやっている人いますか ?
最近ちょっと作るものがあったのでやっているのですが、
これすごい落ちます。Cならメモリ管理関係で何かミスがあるのかと疑いますが、
Perlなので原因不明です。
もし、Tk使っている方がいましたら、よく落ちるのは普通なのか
漏れのプログラムがおかしいのか、漏れのPC(Windows)がおかしいのか助言頼みます。

落ちるタイミングは、日本語を一気に読み込んで表示する際です。
Shift_Jisなので得に問題ないと思いますが、ここで8割落ちます。
2割は落ちなくて正常に動くのでますます意味が分かりません。

WindowsXP, ActivePerl5.8.0です。

207 :nobodyさん :03/06/02 03:25
>>205
エディタでそういうのを使うとか・・・


まぁ、自分で作ってる場合ですけど・・・

208 :デフォルトの名無しさん:03/06/02 05:42
>>206
日本語一気に読みこんだ事ないから分からない。
出来ればその読み込む時の記述を見せてもらいたいものだ。
また、読み込む文字列とやらは常に同じ物か?
途中正規表現にかけていないか?
などなど。条件によっては落ちる。

>>205
実行中のプログラムがルーチンを認識して出力すると言う事?
テキスト状態の時のサブルーチンをエディタなどが認識できると言う事?

後者ならperlエディタってのがある。


209 :デフォルトの名無しさん:03/06/02 07:07
>>205
エディタでツリー表示してくれる物探してるなら・・・・
PerlEdeitを・・・・と言う人が多いようだが、
JmEditの方が、まだ俺は使えると思う。
そうじゃなく、ただルーチンの一覧を出力したいなら、
Perlでも作れる。 勉強がてら作ってみるとよい。


210 :デフォルトの名無しさん:03/06/02 16:45
perl質問箱に書き込みがなくて寂しい。。。(正確には面白くない、つまらない)
だから勝手になんか書きます。
どうしても返信したい人も勝手になんか書いてください。

perlの乱数について。読みたくない人は飛ばしてください。
乱数はけっこう使う。
ゲームを作っていると、必ず乱数が必要になるし、CGIだと、ランダムにメッセージを表示することもある。
だけど、perl標準の乱数を使うと効率が悪い。一般的にプログラムから出てくる乱数は擬似乱数と呼ぶ。
だが、実際の所は乱数に擬似もクソもない。何が出てくるか「分からなければ乱数」だ。
乱数には、性能の良さもある。現実でもプログラムでも同じ。
トランプを全然シャッフルしないと、1/52で何が出てくるか分からないけど、乱数の性能は悪すぎる。
多分連続した数字が連発する。
でも、52枚全部引いた時点でちゃんとなるから「1/52%」になる。
だから「1/52%」と言ってもダメなのと良いのがある。

上記までのこれ。長かったけど、前置き。
調べた。perl/Tkをwinで動かし、乱数の出方を。効率の良い出しかたとか、統計取った。
かなり面白い結果が出てきたから書く事にする。

でも、2ちゃんねるは連続投稿してると規制がかかるから、イキナリレス出来なくなるかもしれない。

211 :210:03/06/02 17:01
まず、けっこう本を読んだけど、どの本もrand関数の説明がちょっと適当すぎる。
オライリーのプログラミングperlにいたっては、気に入らなければモジュールを使ってください。
と書いてある。

で、本には必ずsrand(乱数の初期化)は最初の1回きりで良いよ。
って書いてあるけど、場合によってはそれじゃ効率が悪い事が分かった。
ところで、rand関数では、絶対にやっちゃいけない事がある。これは本に書いてあったのではなくて、自分で解析した結果だ。
srand後の「1発目」の乱数を乱数だと信じて使ったらとんでもない事になる。
解析結果を書いても良いのだけど、実際動かしてみてほしい。
そのほうが面白いと思うから。

$no = 0;
while(srand($no)){
print rand(255) . "\n";
$no ++;
last if(255 < $no);
}

※↑今、普通に書いていったのでホントに動くかは分からない。
256回、初期化後「1発目の」乱数を出すはずだ。(初期値を1づつ変えながら)

あと、数字は適当に変えたりすれば結果も変わる。



212 :210:03/06/02 17:11
多分、イチイチ動かした人なんて居ないと思うけど、
動かした人はこれは乱数じゃないな、と思ったはず。
ほとんど全部同じような数字になる。で、ちょっとづつ増えていく(小数点未満で増えていく)。
だから、intで整数に直してやったら全部同じ数字になる。

「初期化のしかたが悪い」これはもっともな意見だと思うけど、あながちそうでもない。
初期化の数字が「一つずつ」ズレて行った所で、さほど問題にはならない。
一般的に初期化に「time」とか「$$」とかを使うのは、起動毎に似通った事にならないのが目的であって、
1回しか起動しないのならsrand(255);とか、明示的に書いてやっても問題ない。

で、疑問なのは「2発目」の数字はどうなるのか。
$no = 0;
while(srand($no)){
rand;
print rand(255) . "\n";
$no ++;
last if(255 < $no);
}

今度は、1発目の数字を捨てて、2発目の乱数を取得する。


213 :210:03/06/02 17:26
「2発目」の数字は、見事にばらけた。
「1発目」の数字が綺麗に順番に並んでいたのに対して、2発目は全く予測がつかない。
これは「3発目」の数字を取得しても「2発目と」同じ事だった。
つまり「2発目以降」から乱数と呼べそうな物が出てくるのである。

「1発目」に関しては、初期化を「srand($$ ^ time)」とかしても、
およそ乱数の範囲は限られ、そして小数点を切り捨てる(intする)とある程度数字が似かよる。
多分「1発目」は使うべきではない。

プログラム内では「rand」を使うと暗黙の内にsrandされるらしい。(←たしか5.5あたりから)
だからsrandは書かない事を勧めているような本が多い。
だが、やはり見える形(明示的)でsrandしたほうが良いに決まっているし、今回の解析で分かった通り、
sarndの直後に、
rand;
と書いて「一発目」を切り捨ててやる必要性がある。
暗黙にsrandされたのでは切捨てられない。


本当はまだたくさん面白い結果が出たのだけど、字を書くのは疲れるし、
キーボードが苦手で遅いのでまた今度。
あとでか、また明日くらいに。


214 :206:03/06/02 17:32
LinuxのPerlだと1回目でもかなりバラけた値になった。
同じ種で混ぜた乱数は同じタイミングで同じ値になる。
srandして次の1っ発目のrandで毎回違った値が欲しいからtime( )とプロセスIDのANDで
種を決めているんじゃない?
個人的に srand($$);で問題ないように思える。timeを入れるのは、再起動なんかして
同じプロセスID時に全く同じ数を出してしまうからいれてるんじゃないかな ?
逆に、毎回同じ乱数を発生させたいときはsrand(255)など値を指定すれば、
全く同じタイミングで同じ乱数が発生するからID生成なんかに使えると。

アア、すみません、あまり意味が分かりません。


215 :210:03/06/02 17:58
>>206
>LinuxのPerlだと1回目でもかなりバラけた値になった。
ええと、俺の環境はActivePerlの5.8です。
俺の解析結果(の一部)を書きます。

0:0.59375
1:0.640625
2:0.703125
3:0.75
4:0.796875
5:0.84375
6:0.90625
7:0.953125
8:1
9:1.0625
10:1.109375

左側が初期値の数。
右が「1発目」で出た乱数の数。
乱数の最大値は「512」で設定(決して「2」とかじゃないです)
綺麗に順番に並びました。こりゃ乱数じゃないですね。
「2発目以降」はこのような現象は見られず、まともに出てきます。

出来れば>>206の解析結果も知りたい所です。
って言うか、perlなら必ず同じ解析結果(数字)並ぶのかと思ってたよ…。


>同じ種で混ぜた乱数は同じタイミングで同じ値になる。
あと、こりゃ当たり前っすよ。w


216 :510:03/06/02 18:05
ちなみに、初期値は0~512までで、
それぞれの「1発目」を出してみました。
randの最大値は512です。
つまり、最大値が512の乱数を「一つづつ」初期値を変えながら「512」個出しました。
それについての解析結果はこのようになりました。
0:8
1:20
2:19
3:20
4:20
5:19
6:20
7:19
8:20
9:20
10:19
11:20
12:19
13:20
14:20
15:19
16:20
17:19
18:20
19:20
20:19
21:20
22:19
23:20
24:20
25:19
26:14

217 :デフォルトの名無しさん:03/06/02 18:08
>>214
time や $$ は種として推測しやすい値だから、
その種によって生成される乱数列もバレやすい。
乱数列をバレにくくする為に、
srand にバレにくい種を指定するか、
srand を呼ばないか (5.005 以降)、
モジュールを利用する。

Perl のヴァージョンによる s?rand の挙動の違いは 5.005 の
perldelta に載っている。
http://www.kt.rim.or.jp/~kbk/perl5.doc/perldelta.html

218 :210:03/06/02 18:10
ええと、
左側が、int(小数点切り捨て)した時の数字で、
右側が、その数字が出た数です。

つまり、int(rand(255))で「255回」一発目を求めた時、
26と言う数字は14回出たわけですね。

最大値が255に設定されてるにも関わらず、
0-26までの乱数しか発生しなかったのは>>215で書いたように、
1発目が「必ず順番で」出てくるからです。


219 :デフォルトの名無しさん:03/06/02 18:11
なんか頭痛がしてきた...

とりあえず、man srandしろ

220 :210:03/06/02 18:28
今度はまた別の解析結果について。文でアルゴリズムを書いたら頭痛とか言われたので記述で書く。

$no = 0;
while(srand($no)){
rand;
print rand(255) . "\n";
$no ++;
last if(255 < $no);
}

この記述はさっきも書いたけど、まだ本当の(?)乱数とは違う。
(これは2発目を取得するヤツ)
これはどんな結果が返って来るのかと言うと、
整数に直した(int)場合、0~255まで「ほぼ全て」返ってくる。
つまり、超バラけて同じ数字が返って来ない(きにくい)ってヤツだ。
トランプを一枚づつ引いて行くにに似ている。
しかも、連番では出なかった。やはり超バラけている。

これは「本当の効率のよい乱数」ではないけど、かなり使い道がある。
CGIなどでランダムメッセージなどを表示するのに超都合が良い。
次に何が出るのか分からない上に、重複がほとんどないのだ。


221 :210:03/06/02 18:29
もし、上記を通常の書籍が勧めるように

srand($$ ^ time);
rand;    #書籍には書いてないが1発目は捨てる。
$no = 0;
while(1){
rand;
print rand(255) . "\n";
$no ++;
last if(255 < $no);
}

などとやってしまうと、ランダムメッセージ的には重複の連続で、
しかも出てこないものはイツまで経っても出てこないというかなり効率の悪い結果になる事がわかった。
だが、統計を取ったところ、こちらのほうが自然的な乱数に近い。


222 :210:03/06/02 18:38

なんか、これだけ書いておいてどうでも良くなってきました。
本当はもっとイロイロなパターンを出せるプログラムを作成した上で、
様々な角度から統計を取るプログラムも作りました。

と言う事でもっと多くの発見があったのだけど、やめます。
見てて面白かったとか、興味があったとか、ちょっと変わった人(?)が居たらレス下さい。
続き書きます。

Ps,解析はまだ続けています。解析プログラムもまだ作っています。


223 :デフォルトの名無しさん:03/06/02 19:37
>>215,>>216
ひでぇ結果だな…。

224 :デフォルトの名無しさん:03/06/02 20:59
やっぱ ActivePerl はショボイんだなという事がわかって
勉強になりました
サンクス!

225 :デフォルトの名無しさん:03/06/02 21:07
とりあえず 210 には Perl 5.005 以降を使用して srand を使わないことをおすすめする。


226 :210:03/06/02 21:08
>>224
ちょ、ちょい。
perlの種類によってrandのアルゴリズムが違うの!?
標準関数の内部処理は全部同じだと思いこんでたよ…。
それと、出来ればそちらの環境と結果を書いてほしいな。
めんどうでしたらいいけど。


227 :210:03/06/02 21:10
>>225
いえ、ランダムの解析を楽しんでる(?)だけですから…。
あと、5.8の結果ですヨ。


228 :デフォルトの名無しさん:03/06/02 21:12
折角だから、続き書いて欲しいんだけど・・・。

229 :224:03/06/02 21:18
>210=226
じゃあ、書いといておこう

動かしたスクリプト
$no = 0;
while(srand($no)){
print int(rand(255)) . "\n";
$no ++;
last if(255 < $no);
}

結果は次

230 :224:03/06/02 21:20
229 の続き

二箇所で試して両方とも全く同じ結果だった。
最初の十行のみ

perl -v の結果
This is perl, v5.6.1 built for i386-linux
This is perl, v5.8.0 built for i86pc-solaris

動かした結果
43
10
232
199
166
133
100
67
34

231 :224:03/06/02 21:23
version 5.005_03 built for i86pc-solaris もあったので、
試してみますた

最初の十行のみね

0
131
7
138
14
145
21
152
28
159

232 :210:03/06/02 21:24
>>228
ええと、どうゆうのがお好みで?
取り敢えず適当に書きます。

引数の指定なしで
rand();
とやった場合、1未満の小数点出ます。

よく本などでこれを多いに活用してるプログラムを見ますが、
俺の解析結果によるとこの小数はかなり使いにくいと出ました。
その理由っというのは、

*最後の2桁が必ず75か25になる。
*さらに一つの理由としては、桁数が安定しないのでなんか使いにくい。
*小数点未満は、いかなる方法で出しても数字がかたよりやすい(←ちょっとこれはもう1回解析入れてみます。具体的に書けるように)

これら上記の事は、最大値を100とかの整数にしても同じです。
俺は乱数は必ず大きめの数にして、intしてから使うべきだと学びました。

でも、環境によって標準関数の仕様が違うらしいって話が出てきたので、
そっちを先に調査したいと思います。
悪しからず。


233 :224:03/06/02 21:27
>232
すまんが、それも俺の環境ではそんな結果にならんぞ、、。

234 :210:03/06/02 21:29
>>229-231
あ、ありがとうございます。
明らかにrandの仕様が違いますね…。

ActivePerlはショボイのか…
俺も勉強になりました。


235 :210:03/06/02 21:47
う〜ん。
ここまで仕様が違うと解析する気なくなって来た…。
解析しても意味ないじゃん。。。
あやうく「これがperlのランダムですよ」ってサイトに文章書く所だった。
危ない危ない。

そんな訳で、プログラミングperlに
Math::TrullyRandom
と言うモジュールが紹介されていたので、次解析する時はこれ使ってみようかと思います。
モジュール使えば性能良いし、多分仕様も同じになると思うから。

でも、めんどうになってきたのでしばらく解析はやめる。
そんなわけで役に立たない迷惑なレスを書き続けてしまいました。
ごめんなさい。


236 :デフォルトの名無しさん:03/06/02 21:52
>>232
それが perl が rand について詳しく書いてない理由。
自分の ActivePerl で以下のコードを実行すると、まあまあ再現できた。
ちなみにこういうのを線形合同法って呼ぶ。

srand($_), print rand() . "\t" . (6*$_+76+int($_ * 0.535)) / 2**16 . "\n" for (0..7);

結果:
0.00115966796875 0.00115966796875
0.001251220703125 0.001251220703125
0.001373291015625 0.0013580322265625
0.00146484375 0.0014495849609375
0.001556396484375 0.001556396484375
0.00164794921875 0.00164794921875
0.00177001953125 0.0017547607421875
0.001861572265625 0.0018463134765625

237 :デフォルトの名無しさん:03/06/02 22:06
というかperlのrandはlibcのrand呼んでるだけだから
激しく実装依存なのだが。

無駄な努力ごくろうさん

238 :デフォルトの名無しさん:03/06/02 22:20
>>237
あーあ、言っちゃった(w


239 :デフォルトの名無しさん:03/06/02 22:40
読んだ。
線形合同法の場合、一発目は捨てるって言ってたけど二発目も捨てる必要あるよ。
一発目と二発目を捨てて、初めて線形合同法が意図する乱数が生まれる。といった覚えがある。



240 :205:03/06/03 00:05
>207
>209
どうもありがとうございました。
えぇ〜〜っと、言葉が足りなかったですね。
サブルーチンを呼出し順でツリー表示してくれるのを
探してたんです。
イメージとしては
+ sub1
| + sub2
+ sub3
+ sub4
みたいな?

やっぱりないのかなぁ〜。作るしかないか(×_×;)


241 :210:03/06/03 00:07
>>236
おおお!
最初記述の意味が全く分からなかったけど、
perlが生成するrandと全く同じ処理を作ったわけですね。
(6*$_+76+int($_ * 0.535)) / 2**16
でも、なにがなんの数字だか分からなかったり。。。

この辺は自分で調べてみます。
う〜ん…。ちゃんと乱数生成のアルゴリズムを勉強してから解析。
それからここに来れば良かったカモ。

>まあまあ再現できた
出力部を見ると完璧に見えるのですが…。

>>237
あら。。ご愁傷様、俺。
>>239
そうでしたか、アルゴリズムの名前も教えてもらった事だし、検索してみます。

じゃあ、多大に失礼しました。


242 :デフォルトの名無しさん:03/06/03 10:58
>>240
実行時にどういう順で呼び出されたか? なら、perl debuggerとかでダンプしてちょいと手を加えれば出来るけど。

呼ばれる可能性のツリーを期待してるなら俺には出来ん、スマソ

243 :デフォルトの名無しさん:03/06/03 20:16
perlでhttpのプロクシ経由でhttpsのURLにアクセスするにはどうしたらいいですか?

244 :デフォルトの名無しさん:03/06/04 10:19
こんなこと調べて何か解析してる気になってる>>210 はリアル中学生ですかね?
まぁがんがれ

245 :デフォルトの名無しさん:03/06/04 13:15
>>244
言っちゃダメだってば


246 :デフォルトの名無しさん:03/06/04 13:47
>>244
オメェーの方がつまんねぇ。何様のつもりだ?(w

247 :デフォルトの名無しさん:03/06/04 17:41
>>244
source読む、ってことを知らないんだろ。ほっといてやれ

248 :デフォルトの名無しさん:03/06/04 18:18
>>247
は?なにを言ってんの?


249 :デフォルトの名無しさん:03/06/04 18:42
なんか微妙に必死なヤツがいるな(w



250 :デフォルトの名無しさん:03/06/04 18:47
>>210:| 現  な  闘 i::::::::::::::::::::::::::::::
:::::::::::.ゝ 実   き   わ  ノ:::::::::::::::::::::::::::: 
:::::::::::/  と。  ゃ    イ:::::::::::::::::::::::::::::
   \_          ,,-'
――--、..,ヽ__  _,,-''   
:::::::,-‐、,‐、ヽ. )ノ      ∠_:::::::: 
:::::_|/ 。|。ヽ|-i、        ,-、ヽ|::::::::: 
/. ` ' ● ' ニ 、       |・ | |, -、:: 
ニ __l___ノ      ゚r ー'  6 |::
/ ̄ _  | i        i     '- 
|( ̄`'  )/ / ,..      ヽ 、   
`ー---―' / '(__ )      ,/ニニニ

251 :デフォルトの名無しさん:03/06/04 19:00
あの大物アイドル〇○が脱いでる〜
登録してみたら得したよ(^^)v

http://endou.kir.jp/betu/linkvp/linkvp.html


252 :210:03/06/04 19:16
あらら。
俺が検索不足の話してしまったせいで荒れて(?)しまって…。

話しの内容的にはperlのrandではなく線形合同法の結果になってしまったようですが。
ついでですので線形合同法、その他アルゴリズムのランダム性の特徴は、
いつか気が向いた時にでも続けて調べてみようかと思います。あ、どうでもいいですね、こんな話。

今回のコトはここに書き込んだおかげで面白いレスを複数いただく事が出来ました。
特に動作環境の依存や、アルゴリズム(線形合同法)の計算法などの報告を貰って有意義に時間を使うことが出来ました。

210から続けて大量に書き込んでしまったので目には止まるかと思いますが、
好みの内容じゃないと感じた人はスルーしてやって下さいませ。

それじゃ、今度こそ失礼しようかと思います。

253 :デフォルトの名無しさん:03/06/04 19:26
>>252
ここはお前のメモ帳ではない。市ね。

254 :デフォルトの名無しさん:03/06/04 19:44
windows/activeperl環境で、
画像解析のために、jpg/gif/png画像を読み込んで、
ピクセルサイズや、ピクセル単位でのrgb情報の取得を行いたいのですが、
GD.pm ver2.0以上ではgifが読み込めないし、GD.pmの旧バージョンはactiveperl5.6以上で呼び出すと
落ちてしまうのですが、他にそういったことが可能なモジュール等はあるのでしょうか?

255 :デフォルトの名無しさん:03/06/04 19:46
まぁ、ソース読むのも面倒くさいし、
いい暇つぶしになったからいいや。

256 :デフォルトの名無しさん:03/06/04 19:53
>>210
Perlを勉強中の漏れにとってはかなり面白かった。
これからも話題を提供してください。

257 :デフォルトの名無しさん:03/06/04 19:58
210の能書きなんてPerlの勉強と何の関係もないじゃん。

258 :デフォルトの名無しさん:03/06/04 20:05
210の自演ウザー


259 :デフォルトの名無しさん:03/06/05 03:40
>>210
rand について調べる以前に、

$no = 0;
while(srand($no)){
print int(rand(255)) . "\n";
$no ++;
last if(255 < $no);
}

から、例えば

for (my $no = 0; $no <= 255; $no++) {
srand $no;
print int rand 255, "\n";
}

という感じに書けるようになって欲しい。
上じゃわかりにくくてしょうがない。


260 : ◆hMJAPH9PWA :03/06/05 13:38
もっとPerl的に行きたい

foreach my $no(0 .. 255){
srand $no;
print int rand 255, "\n";
}

261 :デフォルトの名無しさん:03/06/05 14:47
既に 210はどうでもいいわけだが

foreach my $no(0 .. 255){ ← これのコストってどんくらいなんだろね
極端な話 foreach my $no (0 .. 65535) はやりたくないよね
クリティカルな場面ならベンチでも取るが、普段はどうでもいいし、256位なら大した事も無いだろうし

感覚的に、どれくらいまでならリストでやる? > all

262 :デフォルトの名無しさん:03/06/05 17:26
($n = 0; $n < 255; $n++)

$n(0 .. 255)
にコストの違いってあるの?

263 :デフォルトの名無しさん:03/06/05 17:27
コストが気になるところでPerl使うのはいかがなものか。

264 :デフォルトの名無しさん:03/06/05 17:55
手を動かしてるといたという点では >>210 は感心できる。

use Benchmark;
$N = 10000;
timethese $coount, { a => \&a, b => \&b, c => \&c, d => \&d , e => \&e };
sub a { my $i; for ($i = 0;$i < $N;++$i) {} }
sub b { my $i; 1 while (++$i < $N) }
sub c { my $i; ++$i for (1 .. $N) }
sub d { for (1 .. $N) { 1 } }
sub e { 1 for (1 .. $N) }

a: 3 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 173.51/s (n=549)
b: 4 wallclock secs ( 3.20 usr + 0.00 sys = 3.20 CPU) @ 212.83/s (n=680)
c: 4 wallclock secs ( 3.20 usr + 0.00 sys = 3.20 CPU) @ 209.70/s (n=670)
d: 4 wallclock secs ( 3.19 usr + 0.00 sys = 3.19 CPU) @ 306.12/s (n=975)
e: 4 wallclock secs ( 3.14 usr + 0.00 sys = 3.14 CPU) @ 267.18/s (n=840)

理由は説明しきれないので、後は任せた。

265 :デフォルトの名無しさん:03/06/05 22:55
なんか、レベルの高い会話の所恐縮なのですが・・・。

$subj="[回覧板 No.123]タイトル"

という文字列から、123だけを抜き取って$countに入れたいんですけどスマートな方法が思い浮かびません。
無茶するなら、

#"[回覧版 "と"No.123…"に分割
@temp=split(/\s/,$subj);

#"No.123…"を"No."と"123]…"に分割
@temp=split(/\./,@temp[1]);

#"123]…"を"123"と"]…"に分割
@temp=split(/\]/,@temp[1]);

#結果の取得
$count=@temp[0];

で出来そうですが、スマートじゃないですよね(;´Д`)
せっかくperlなんで正規表現使ってドカン!と一発で出来ないでしょうか?

266 :デフォルトの名無しさん:03/06/05 23:13
>>265
$subj =~ /No\.(\d+)/;
$count = $1;

$subj =~ /^\[回覧板 No\.(\d+)\].*$/; の方が確実だけど

267 :デフォルトの名無しさん:03/06/05 23:14
>>265
$subj =~ /(\d+)/;
$count = $1;

268 :267:03/06/05 23:15
もう少しで結婚できたのに・・・。

269 :デフォルトの名無しさん:03/06/05 23:21
($subj) =~ /(\d)/g;

270 :デフォルトの名無しさん:03/06/05 23:22
+が抜けた

271 :デフォルトの名無しさん:03/06/05 23:37
>>269-270
できないんだけど・・・?

$ perl -e '$subj = "abc 123 efg"; ($subj) =~ /(\d+)/g; print $subj;'
abc 123 efg

272 :デフォルトの名無しさん:03/06/05 23:50
print $subj
ではなく、
print $1

$ perl -e '"abc 123 efg" =~ /(\d+)/ and print $1'
123


273 :デフォルトの名無しさん:03/06/05 23:52
>>271
ああねぼけてる。ごめん。
($count) = ($subj =~ /(\d+)/g);

274 :デフォルトの名無しさん:03/06/06 00:01
jperlのスクリプトをperl5.8で動かせると聞きました。
いろいろ調べましたがどうしてもわかりません。
どなたか教えてくれませんか。
ちなみに使用OSはredhat8.0でつ。


275 :265:03/06/06 00:34
できたー。

ありがとー。

276 :デフォルトの名無しさん:03/06/06 00:41
ファイルtext.txtの最後の行を変数$lastにいれるには
open(F,"text.txt");
while(<F>){
$last=$&;
}
close();
しかないですか?text.txtは行数が多いので時間がかかります。
最後の行から逆に一行ずつ読み込む関数というのはありますか?

277 :デフォルトの名無しさん:03/06/06 00:45
質問があるのですが、誰かいますか??

278 :デフォルトの名無しさん:03/06/06 00:47
>>265
見てないと思うが、上の方にある
$subj =~ /^\[回覧板 No\.(\d+)\].*$/;
の方がいいとおもうぞ。

($count) = ($subj =~ /(\d+)/g);
にすると、タイトルに数字が入るとそれも取得してしまうよ。

279 :デフォルトの名無しさん:03/06/06 00:47
close(F);だ・・・

280 :デフォルトの名無しさん:03/06/06 00:49
tailを使う

281 :デフォルトの名無しさん:03/06/06 00:58
>>280
tailってunixコマンドでは?

282 :デフォルトの名無しさん:03/06/06 00:59
>>278
同意。

というか、
($count) = ($subj =~ /(\d+)/g);
これだと $count にはマッチしても 1 しか代入されないんじゃないか?

283 :265:03/06/06 02:02
>>278
正規表現、今日手をつけたばかりなので詳しい事はわかりませんが、今回その
手法は使えないかな?

メールのサブジェクトを見て「[回覧板 No.dd]…」だったら回覧板宛のレスだと判断。
サーバーの保存された該当番号の回覧板ファイルを参照して、メール本文を追記。

もし、それ意外のタイトルだったら新規の回覧板(回覧板本文の意)として認識する
様に作っています。

よって、$subjはメールから取り出すのでそれ自体はいじれません。


$subj="[回覧板 No.30]タイトル123";

if ($subj=~/\[回覧板\sNo\.(\d+)\]/){
$subj=~/(\d+)/;
$count=$1;
print "$1\n";
}else{
#新規の場合の処理
}

としました。ちゃんと30が帰ってきましたよ(^-^)v

284 :278:03/06/06 02:23
>>283
それなら大丈夫かな。

$subj =~ /(\d+)/g
のように、グローバルマッチのオプションがついてると微妙ですが、、、

285 :デフォルトの名無しさん:03/06/06 04:45
>>276
行数にもよるが

open (F, "text.txt");
 @afo = <F>;
 $line_num = $#afo; #これでトータルの行数-1を$line_numに代入される
 print @afo[$line_num]; #多分これがファイルの最終行


最後の行から読み出す方法ってreverseを使う以外になんかあったっけ?


286 :デフォルトの名無しさん:03/06/06 07:59
pop

287 :デフォルトの名無しさん:03/06/06 08:00
>>285
まだ>276の方がマシ

288 :デフォルトの名無しさん:03/06/06 10:35
seekで末尾からある程度のブロック後ろに移動したあと、
変数に代入していく、とかはダメかね。
1行の長さがある程度事前にわからないとダメだけど、
改行が見つからなかったら、今度はその2倍戻るとか。


open(FILE,"dekai.txt");

my $last;
my $offset = 1024;
TAIL: {
my $i;
seek(FILE, -$offset, 2);
until(eof) {
$i++;
$last = <FILE>;
}
if ($i == 1) { $offset *= 2; redo TAIL }
}

close(FILE);


うーん、やってみたものの、大して早くないかも知らん(−−;
まぁ276のでいいと思うのですが。ちょっと思いついたので書いてみますた。

289 :デフォルトの名無しさん:03/06/06 10:54
mmap

290 :デフォルトの名無しさん:03/06/06 11:54
tailはどういうアルゴリズムなんだろう?

291 :デフォルトの名無しさん:03/06/06 11:58
後ろから前に向かって一文字ずつ読み、改行文字の数を数えればいいのでは。


292 :デフォルトの名無しさん:03/06/06 12:30
>>291 どうやって?

293 :デフォルトの名無しさん:03/06/06 13:11
Perl で作るのでまずここで聞かせてください。
ユリウス日を求める式みたいなのを教えてください。
入力はシステムクロックではなく年月日時分秒の数値です。
実は既にいろいろ見つけていますが、人によって係数などが違うので
何か正しそうなやつの例を1ついただければそれでいいです。

294 :デフォルトの名無しさん:03/06/06 13:23
>>290
実装次第だが、GNUのは>>288みたいんじゃなかったかな。

295 :293:03/06/06 13:33
補足
1年の最初から何日目とかいうやつじゃなくて
紀元前4713年から何日目ってやつです。

296 :デフォルトの名無しさん:03/06/06 14:15
http://search.cpan.org/search?query=Julian&mode=all
中身見てないけどこの辺?
ソース見ればその係数とやらは分かると思うけど

297 :デフォルトの名無しさん:03/06/06 14:20
>>292
fseekとfgetcを組み合わせて。
効率が悪いなら最初に行数を調べるという手もある。

298 :293:03/06/06 14:23
>>296
あああ、そういうモジュールがあるんですね。
どうもモジュールは嫌いなので忘れてました。
そちらを見てみることにします。
どうもありがとうございました。

299 :デフォルトの名無しさん:03/06/06 14:37
>>297
> 効率が悪いなら最初に行数を調べるという手もある。
行数を調べること自体効率悪そうだが。

300 :デフォルトの名無しさん:03/06/06 14:39
>>297
死ぬほど遅そう。
seek ができるくらいなら mmap 使ったほうがいい。

301 :デフォルトの名無しさん:03/06/06 14:44
>>300
標準だけでできる方法ってことで。

302 :301:03/06/06 14:46
メモリに展開するくらいなら標準でいくらでもできるか。でもファイルがでかいと・・・

303 :デフォルトの名無しさん:03/06/06 14:47
>>210
ttp://www.math.keio.ac.jp/~matumoto/mt.html ってどう?

304 :tail:03/06/06 14:55
open(FILE,$ARGV[1]) or die "failed";
$list=<FILE>;
close(FILE);
$i=$#list-9;
if($i<0){ $i=0; }
while($i<=$#list){
print $list[$i++];
}



305 :tail:03/06/06 14:58
open(FILE,$ARGV[0]) or die "failed";
@list=<FILE>;
こうだ

306 :デフォルトの名無しさん:03/06/06 15:33
# こんなのどうよ?
my $line = 1;
my @line = ();
open(F,"file");
while(<F>) {
  push(@line, $_);
  shift(@line) while @line > $line;
}
close(F);

# shift,unshift,push,pop はウンコな位遅い気もするが。

307 :デフォルトの名無しさん:03/06/06 16:42
お楽しみのところすみませんが
http://www.din.or.jp/~ohzaki/perl.htm#File_Reverse

308 :デフォルトの名無しさん:03/06/06 16:48
すまん、これから会議で中見てる余裕無いんだが
http://search.cpan.org/author/MGRABNAR/File-Tail-0.98/Tail.pm
これ見てみると面白そうだな

つか、既に3分遅刻だ(ワラ

309 :デフォルトの名無しさん:03/06/06 17:15
>>307
ややこしいのう

310 :デフォルトの名無しさん:03/06/06 18:50
>>307 >>309
なら、少し簡単にしたものを。元のPerlメモのよりは速い。
(自分で組んだルーチンではこれに勝てなかった。)
結局、binmodeとかseek(,,0)とかがかなり影響を与えている模様。

open(FILE, "< $file");
binmode(FILE);
$pos = (-s FILE);
while (!$last_line && $pos--) {
seek(FILE, $pos, 0);
read(FILE, $buf, 1);
$buf .= $buf_tmp;
($buf_tmp, $last_line) = $buf =~ /[^\x0D\x0A]*\x0D?\x0A?/g;
}
close(FILE);
return $last_line;

311 :デフォルトの名無しさん:03/06/06 22:37
まずどういうのを正しいとするか決めろよ

312 :311:03/06/06 22:39
ミス スマソ

313 :デフォルトの名無しさん:03/06/06 23:01
0とヌル文字列とundef 以外は正しい。

314 :デフォルトの名無しさん:03/06/06 23:55
>>311
早いものじゃないのかあ

315 :デフォルトの名無しさん:03/06/07 00:03
美しいものは正しい

さて諸君、美しいを定義したまえ


316 :デフォルトの名無しさん:03/06/07 00:29
私は美しい

317 :デフォルトの名無しさん:03/06/07 00:30
その前に定義を定義しようよ

318 :デフォルトの名無しさん:03/06/07 00:42
再帰を定義しようぜ!


319 :デフォルトの名無しさん:03/06/07 00:54
斎木しげる

320 :デフォルトの名無しさん:03/06/07 01:24
>>320

321 :デフォルトの名無しさん:03/06/07 01:56
>>320


322 :デフォルトの名無しさん:03/06/07 10:31
サブルーチンの最初でmyで変数宣言みたいなことするのって
効率悪いですか?

323 :デフォルトの名無しさん:03/06/07 10:39
sub answer {
my $res_number = shift;
print("それって普通じゃないか?$res_number\n");
}
&answer(">>322");

324 :デフォルトの名無しさん:03/06/07 10:43
>>173は?

325 :デフォルトの名無しさん:03/06/07 10:45
>>324
myの処理は宣言無しと同じか、それより速いと思ったが。
use strict;マンセー。

326 :デフォルトの名無しさん:03/06/07 12:24
それは局所化の宣言だから。
早くなる。
変数は使われるたびに自分がドコに所属してるのか記述をさかのぼって調べるけど、
myの場合さかのぼる量が極端に少なくなる。

by.173

>>322
初めて使われる時にmyするのが普通。
宣言したあと、使われる前にリターンされたら宣言自体がいらん処理になる。
もし、リターンのあとにmyなら、そんな変数自体もともとなかった。って方向で落ちつく。

327 :デフォルトの名無しさん:03/06/07 15:45
ソースいじってるうちに、
使ってからmyになりそうだ

328 :デフォルトの名無しさん:03/06/07 17:50
>>327
use strict;

329 :デフォルトの名無しさん:03/06/07 19:46
Hで上手いアイコラを発見っ!(*´Д`*)ハァハァ
このコラ上手すぎ!でもワレメはまずいだろ。(*´Д`*)ハァハァ
http://plaza16.mbn.or.jp/~satchel/turuturu/

330 :デフォルトの名無しさん:03/06/08 18:41
神さま教えてください。

以下のサブルーチンの処理中、必ずdieしてしまいます。
DBへアクセスする際の書式が変な気がするのですが…よく分かりません。

sub new {
my ($pkg, $loc) = @_;
my $d = {};

tie (%{$d->{dicc}}, 'DB_File', $loc, $DB_File::O_RD, 0644, $DB_BTREE)
|| die "diccionary->new: error opening database\n";

return bless $d, $pkg;
}

Perlのバージョンは5.6.1、
DB_Fileモジュールのバージョンは1.806、
Berkeley DBのバージョンはここでは1系列です。

331 :デフォルトの名無しさん:03/06/08 19:57
diccionary

332 :330:03/06/08 21:17
>>331
_| ̄|○dictionary

333 : ◆hMJAPH9PWA :03/06/08 22:34
>>330
$DB_File::O_RDが怪しい。

open定数はO_RDONLY O_WRONLY O_RDWR で、これらは変数ではないので"$"をつける必要はないよ。

334 :デフォルトの名無しさん:03/06/08 23:23
Net::DNS の質問です。

以下のコマンドと同じように、ROOT SERVER に問い合わせて、
jp ドメインの権威を持つサーバを検索したい場合には、どう
いうメソッドを使うのでしょう?

dig @a.root-servers.net -t NS -c IN jp

Net::DNS::Resolver の nameserver メソッドに a.root-servers.net
をセットしてから query してみても何も返って来ませんでした。


335 :デフォルトの名無しさん:03/06/08 23:57
Perlのいいデバッガっていうか
irbみたいにちょっとコマンドラインでテストするのに使いやすいのないですか?
今はperl -de使ってるんですけど

336 : ◆hMJAPH9PWA :03/06/09 00:29
>>335
Devel::ptkdbがけっこう面白いよ。まだバグだらけだけど。

337 :330:03/06/09 07:34
>>333
Thxです。

そこを疑って自分でもO_RDONLYなどに書き換えてみたのですが、
必ずdieしてしまう挙動に変わりはありませんでした。

確かに今DB_Fileのperldoc等を見てもopen定数に"$"をつけろとかはどこにも書いてありませんが、
このスクリプトが書かれたのはPerlが5.005とかの時代らしいので
DB_Fileのopen定数の書き方も違ってきてるのかもとか思ってます。

338 :デフォルトの名無しさん:03/06/09 08:13
or or or or

339 :デフォルトの名無しさん:03/06/09 08:18
オアオアうるさいな

340 :デフォルトの名無しさん:03/06/09 08:31
orだよor。||じゃないんだよ。マニュアルと同じ書き方しなさいってこった。

341 : ◆hMJAPH9PWA :03/06/09 10:31
>>337
$locが正しいファイル名で正しいパーミッションかどうかを確認する。
あと-wスイッチの元で動かしてみる。

…ああそういえば、読み込み専用では開く事は出来なかった気がするから、
O_RDWRにしてみて。

>>340
このケースでは無関係

342 :デフォルトの名無しさん:03/06/09 20:04
´−`)。oO( O_CREAT|O_RDWR でいけたなんてオチだとヤだな…。)

343 :デフォルトの名無しさん:03/06/09 21:22
perlでファイルハンドルからパスを求める方法はありませんか?

ここに「どんなものであれ、そのアドレスを得ることはできない」とか
書かれてますがマジですか?
http://flex.ee.uec.ac.jp/texi/perl/perl_204.html

344 :デフォルトの名無しさん:03/06/09 21:32
||がいいな。他言語に慣れるとorは読みにくい。

俺のソースは癖ありすぎてだめぽ。

345 :デフォルトの名無しさん:03/06/09 21:34
>>343
そのファイルハンドルはどうやって生成したんでしょうか。

346 :デフォルトの名無しさん:03/06/09 21:58
>>344
他言語とか言っているが実はCとそれに似せたC++、Java、C#だけのことしか言っていない罠。
実は世界が狭いのだよ。

347 :デフォルトの名無しさん:03/06/09 22:14
PerlもCの構文をまねたものなんだから||の方があっていると思う。

348 :デフォルトの名無しさん:03/06/09 22:15
優先順位


349 :デフォルトの名無しさん:03/06/09 22:36
いちいち()をつけるくらいならorのほうが数倍いい。

350 :デフォルトの名無しさん:03/06/09 22:46
>>345
適当な相対パスから生成しました。
求めたいのは絶対パスです。

351 :デフォルトの名無しさん:03/06/09 22:46
>>343

> この日本語 perl texinfo は、基本的に perl 4.0 パッチレベル 19 のオンラインマニュアルを
> 日本語訳し、そのセクション分けに対応したノードに分割したものです。

おそらく、そのページでいうアドレスというのはCでいうところのポインターのことだと思われ。

それはさておき、「ファイルハンドルからパスを求める」というのは
open IN, '../foo/hoge.txt' or die;
したときに、IN から '../foo/hoge.txt' を求めたいということ?

352 : ◆hMJAPH9PWA :03/06/09 23:47
>>350
ファイルハンドルはファイルとは無関係な場合があるので、パスは格納されていない。
openのときに使ったファイル名を保存しておくしかないよ。

353 :デフォルトの名無しさん:03/06/10 00:04
優先順位もそうだけど、orの方が「さもなければ」って直感的に読めるから好き。
open() or die; 開け。さもなければ氏ね。

354 :デフォルトの名無しさん:03/06/10 00:15
(同じ動作なら)どっちでもいいと思って使ってる漏れはボツでしょうか?


355 :330:03/06/10 00:35
>>341
>>342
Thxです。

ファイル名とパーミッションも問題なく、
open定数をO_RDWRやO_CREAT|O_RDWRに書き換えても変わらず。
単独で動かすといろいろ面倒なので-wオプションは試してません。

"$DB_File::"があってもなくても同じようにdieするので、
この部分は問題でもなんでもないってことなのでしょうか。

とりあえずハッシュにデータ蓄えるだけのミニマルなスクリプトを書いて、
もし動かなかったら環境の再構築を考えてみます。
もしくは開発元に問い合わせ。

356 :デフォルトの名無しさん:03/06/10 00:59
>>354
同じじゃないもん。
局面においては同じような挙動を示すけど、それって混乱の元じゃない?

357 :354:03/06/10 02:21
同じ動作をする場合の時って意味ね。
でも、orを使うことが多いかな。
極力||は使わないようにしてる。

記述自体を文字リテラルとして扱うとき
$aaa = q|
#記述
|;

って普段書くから。

358 :デフォルトの名無しさん:03/06/10 02:43
$a or= $b
って使えたっけ?

359 :デフォルトの名無しさん:03/06/10 03:43
$ perl -e "$a or= $b"
syntax error at -e line 1, near "or="
Execution of -e aborted due to compilation errors.

360 : ◆hMJAPH9PWA :03/06/10 09:47
>>355
いや、99%君の書き方が悪いから上手く行かないんだと思うよ。

>単独で動かすといろいろ面倒なので-wオプションは試してません。
「試してません」って…苦労したくないなら-wオプションは使うべき。

>"$DB_File::"があってもなくても同じようにdieするので、
"$DB_File::"が何を意味するのか分かって書いてる?
多分、何かを勘違いしてるよ。

とりあえずソース見せて。


361 :デフォルトの名無しさん:03/06/10 12:37
ほっときゃいいじゃん。-w使わない>>330の自業自得だし。

362 :デフォルトの名無しさん:03/06/10 23:14
メールをマルチパート分割して
添付ファイルと本文を抜き出す処理を工作しております。
MIME::Perser を使うとできそうなんですが
この他にも何かラクチンな方法があればご助言くださいませませ。


363 :マルチ:03/06/11 02:17
当方、WinXP, ActivePerl5.6.1です。
次のスクリプトを実行しても、ホスト名を得たいのですが、改行しか得られません。
これって、DNSに問い合わせができてないのでしょうか?
print scalar(gethostbyaddr(pack("C4", split /\./), 2)), "\n" while (<DATA>);
__END__
210.81.150.5


364 :デフォルトの名無しさん:03/06/11 06:46
>362
munpack

365 :デフォルトの名無しさん:03/06/12 00:59
まだ>>350はいるかー?
上の方にあがっていたスレを見てわかったぞ。
use POSIX;してPOSIX::getcwd();で得られるもの(現在の作業ディレクトリ)と相対パスをくっつければいいんだ。
開いた後にchdirしていたらそれだけではうまくゆかないけど。

366 :365:03/06/12 01:01
いや、Cwdモジュールを使えばいいか。

367 :デフォルトの名無しさん:03/06/12 18:11
スカラー変数(文字列)のサイズを知るにはどうすれば良いですか?


368 :デフォルトの名無しさん:03/06/12 18:14
length($a);


369 :デフォルトの名無しさん:03/06/12 18:26
>>368
長さじゃねーよ馬鹿
サイズを知りたいんだよ。

370 :デフォルトの名無しさん:03/06/12 18:27
length($a)*2

371 :デフォルトの名無しさん:03/06/12 18:52
>>370


372 :デフォルトの名無しさん:03/06/12 18:54
>>370
上手く出来ました。ありがとう。

373 :367:03/06/12 18:55
質問が悪かったです。
スカラー変数の大きさ(バイト)を知りたいです。

374 :デフォルトの名無しさん:03/06/12 19:04
ん?スカラー波でてる人?

375 :デフォルトの名無しさん:03/06/12 19:09
>>373
C言語のsizeofみたいなものか?
そんなものないよ。

376 :デフォルトの名無しさん:03/06/12 19:39
Perlのプログラム実行時間を計るのには、どうしたらいいですか??

377 :デフォルトの名無しさん:03/06/12 20:08
time

378 :デフォルトの名無しさん:03/06/12 20:30
use Benchmark;

379 :デフォルトの名無しさん:03/06/12 20:43
stopwatch

380 :デフォルトの名無しさん:03/06/12 21:30
>>376
プログラムの一行目に
$start=time();
最後に
$goal=time();
print $goal-$start;

とかけ。

381 :367:03/06/12 22:12
>>375
そうです。
どうすればいいんでしょう?

382 :m.m:03/06/12 22:24
こんにちは!誰か教えていただきたいんですけど、
私perlを使ってCGIで掲示板作りたいんです。まだ
初心者です。でも、最近カウンターの作り方は覚えました。
掲示板作りたいんですけど、いまいち検索かけても
掲示板の作り方とか見つけられないんです。本を買っても
いいんですけどお金かかりますし。。。。
いいサイトを知ってる方がいましたら是非是非教えてください!

383 :デフォルトの名無しさん:03/06/12 22:27
minibbsのソースでも見てろ

384 :デフォルトの名無しさん:03/06/12 23:05
そうだね、人のスクリプト見て色々いじりながら理解していって、
それから作るのがいいと思うよ

385 :名無し~3.EXE:03/06/13 00:44
perl入門書でスタンダードなのがありましたらお教えください。

386 :デフォルトの名無しさん:03/06/13 00:53
>>381
ないのは必要ないから。
いったいどんなことに使うんだよ。

387 :デフォルトの名無しさん:03/06/13 00:58
>>381
バイナリでもいじるの?それなら pack,unpack 。

388 :デフォルトの名無しさん:03/06/13 00:58
perlのクラス間(継承関係はなし)のやりとりって可能ですか?
C++だとfriendとかあったと思うけど(勉強したの昔だから忘れた)

389 : ◆hMJAPH9PWA :03/06/13 12:09
>>388
C++のfriendにあたるものなら、ない。というか、必要ないよ。
Perlでは基本的にメンバのアクセス制限は存在しないから。

390 :デフォルトの名無しさん:03/06/15 11:23
プロトタイプ宣言した再帰関数って作れるの?
なんかよくプロトタイプが確定する前に呼ぶなやゴルァって
Perlタンに怒られうんだが

391 :デフォルトの名無しさん:03/06/15 12:59
何故試さない?

#!/usr/local/bin/perl
use strict 'vars';
sub main::a($);
main::a(0);

sub main::a($){
my($c)=@_;
print "($c)\n";
(10 < $c) && return 0;
main::a($c+1);
}


392 :デフォルトの名無しさん:03/06/17 20:25
配列の中身をランダムに入れ替える方法を教えてくだそい

393 :デフォルトの名無しさん:03/06/17 20:37
sub fisher_yates_shuffle {
 my $array = shift;
 my $i;
 for ($i = @$array; --$i; ) {
  my $j = int rand ($i+1);
  next if $i == $j;
  @$array[$i, $j] = @$array[$j, $i];
 }
}

fisher_yates_shufftle( \@array );

クックブックから

394 :デフォルトの名無しさん:03/06/17 20:41
リア厨のころからずっとこのアルゴリズムだな
ポケコンでトランプゲームとか作るの

395 :デフォルトの名無しさん:03/06/17 20:44

use List::Util qw/shuffle/;
my @a = (1..10);
@a = shuffle @a;

396 :デフォルトの名無しさん:03/06/17 22:04
@after =
map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, rand] }
@before;

397 :デフォルトの名無しさん:03/06/17 22:57
配列の中をランダムでいれかえる。

foreach($aaa[int(rand(@aaa))];){
push @bbb, $_;
}

全然動作確認してないけどこれはどうだ!?
コンパクトな感じ。でもループんとこが怪しいような…。

ランダムで抜き取る時は日頃から
$bbb = $aaa[int(rand(@aaa))];
こう書いてます。

398 :デフォルトの名無しさん:03/06/17 23:11
駄目な気がする

399 :デフォルトの名無しさん:03/06/17 23:35
397でsplice使えばいけそうだなぁ。それはそれで微妙そうだけど。

400 :デフォルトの名無しさん:03/06/17 23:48
ちょっとした疑問なんですが、
連想配列ってなんで hash って言うんですか?
ハッシュドビーフの hash ですよね。
切ってゴチャゴチャにするという。


401 :デフォルトの名無しさん:03/06/17 23:52
連想配列が配列と紛らわしいからハッシュに名前が変わったらしいです。

402 :デフォルトの名無しさん:03/06/18 00:11
>>400
「ハッシュテーブル」という古典的構造を使ってるから。

403 :デフォルトの名無しさん:03/06/18 00:22
flock()について勉強している者です。
前々スレ554氏の
「openしてからflockまでの間によそのプロセスが開けちゃわない?」
という言葉が気になって気になって眠れません。
開けても読み込みがまだなら大丈夫なのか、この隙には割り込めないようになっているのか、
1行くらいの隙間は諦めるしかないのか、どうなんでしょうか?

404 :デフォルトの名無しさん:03/06/18 00:52
554がおかしい。
開いても書き込み(又はファイルサイズをゼロにする)がまだなら大丈夫。

405 :403:03/06/18 01:13
そうなのですか・・どうもありがとうございます。

しかし、openしてからflockまでの間によそのプロセスがopenできてしまうと言う事は、
そのプロセスで何かやってもよそのプロセスによってファイルへの書き込みが
上書きされてしまうような事になるように思います。

と言う事は、アクセスの集中による入力蹴られはflockでは防げないと考えて良いのでしょうか?

406 :デフォルトの名無しさん:03/06/18 01:22
> そのプロセスで何かやってもよそのプロセスによってファイルへの書き込みが
> 上書きされてしまうような事になるように思います。

上書きしなければよい。

407 :デフォルトの名無しさん:03/06/18 01:37
そもそもflockは(そのファイルを扱う)他のプロセス全てがflockすることが前提。
その条件なしでは、タイミングも何もない。

408 :403:03/06/18 07:53
多分理解しますた。
後は自分で実験して頑張ってみます。
どうもありがとうございました。

409 :デフォルトの名無しさん:03/06/18 14:25
ところで、このスレ(前スレも)まとめてるサイトとかってありますかね
なにかと世話になってるんで、無いならママーリと作ろうかと思って


410 :デフォルトの名無しさん:03/06/18 14:51
>>409
ママーリという言葉が謎だが、やるならがんがれ。

411 :デフォルトの名無しさん:03/06/19 05:30
ハッシュの読み出しに使っている反復子を保存しておくことって出来るんでしょうか。

sub AAA {
  my $a=shift;
  while (($key,$val)=each %hoge) {
    if ($val=~/$a/) { # $valの一部に$keyが含まれていたら
        &AAA($key);
          :
    }
  }
}

みたいな再帰関数があるのですが、反復子を共有するので再帰になりません。
でかいハッシュなので、それだけの為にコピーしたくもありませんし。

412 :デフォルトの名無しさん:03/06/19 06:02
携帯電話からメールを出すとweb上に掲載される掲示板を作ったのですが、
iモードの絵文字を使うと 〓 が出てしまいます。
ちゃんと絵文字を表示する良い方法はないでしょうか?
ちなみに、携帯からPC宛にメールを出しても 〓 が出ますよね?
これと同じで仕方ないことなのでしょうか?

413 :デフォルトの名無しさん:03/06/19 07:16
>>405
もう >>407 で分かったのかもしれないけど、flock は open や write を
排他するのではなく、(他プロセスの) flock を排他するもの。

他人が書けなくなる(=write がエラーするとか)、ではないことに注意

414 :デフォルトの名無しさん:03/06/19 09:33
>>412
Docomoの絵文字はDocomoでないと無理。代替画像でも用意すれば?

415 :デフォルトの名無しさん:03/06/19 13:59
ケータイの絵文字を画像に置換したらよい。
Docomoとかauとかのサイト見たら
絵文字画像があるので、その辺を参考にしながら手書きすれば?

416 :デフォルトの名無しさん:03/06/19 19:57
HTTP-Liteをインストしようとしてるのですが、
.ppdがあるフォルダに移動して、
ppm install http-liteとやると
error installing package 'http-lite':could not locate a PPD file for package http-lite
↑のエラーがでます。なにが原因なのでしょうか?

417 :403:03/06/19 20:28
>>413
一応それは分かっているつもりですた。


仮にhage.txtに「はげ」と書かれていたとして、
以下のスクリプトを2回ほぼ同時に実行した場合、

open(FILE, "+< hage.txt"); # ←A
flock(FILE, 2); # ←B
$txt = <FILE>; # ←C
$txt = $txt."ほげ";
truncate(FILE, 0);
seek(FILE, 0, 0);
print FILE $count;
close(FILE); # ←D

早い方のプロセスのAとBの間で遅い方のプロセスがhage.txtをopenしたとすると、
flockのために遅い方のプロセスがCを実行するのは1回目のプロセスがDまで行った後となるはずですが、
その時に$txtに入るのは「はげ」なのか「はげほげ」なのか?
遅い方のプロセスが終わった時にhage.txtに入っているのは「はげほげ」なのか「はげほげほげ」なのか?

>>405で言いたかったのはこのような事ですた。

418 :403:03/06/19 20:31
でももういいんです。
だってウチのMacPerlったらflock()使えなかったんだもの(鬱氏

長文スマソ。お騒がせしますた。逝ってきます…

419 :デフォルトの名無しさん:03/06/19 21:14
コマンドでperl hoge.cgiだと正常に動作するが(perl -wc hoge.cgiでsyntax OK)

web上からだとforbiddenになってしまうけど、
一番考えられる原因はどこよ。

420 :デフォルトの名無しさん:03/06/19 21:15
パーミッション

421 :デフォルトの名無しさん:03/06/19 21:16
>>420
すまん。書き忘れた。
パーミッションぐらいで質問しないよ。

422 :デフォルトの名無しさん:03/06/19 21:23
httpd の設定。

423 :デフォルトの名無しさん:03/06/19 21:24
パーミッション

424 : :03/06/19 21:31
多分パーミッション

425 :デフォルトの名無しさん:03/06/19 21:54
頭がパー以下略

426 :デフォルトの名無しさん:03/06/19 22:26
>>411
リファレンスを渡すんじゃ駄目なの?

427 :デフォルトの名無しさん:03/06/20 01:00
>>419
403ならパーミッション

428 :デフォルトの名無しさん:03/06/20 01:23
>>419
デーモンの設定な気がするが...
cgiファイル置いてるディレクトリにCGIの実行権限はある?
って言うかCGI関連はスレ違いじゃなかったっけ?

429 :411:03/06/20 01:52
>>426
なるほど〜、リファレンスですか。
まったく考えていませんでした。
ありがとうございました。

430 :426:03/06/20 02:23
>>429
今見たら

sub AAA {
  my $a=shift;
  while (my ($key,$val)=each %hoge) {
    if ($val=~/$a/) { # $valの一部に$keyが含まれていたら
        &AAA($key);
          :
    }
  }
}

のような気もせんではないけど・・・・

431 :411:03/06/20 03:42
>>430
そうでした…。
プログラム例を書き写す際に欠落しました。スマソ。

432 :ぬるぽ:03/06/21 15:00
漏れすごいあほ。

"abcde"という文字列があるとき、
それぞれの文字の前にある決まった文字列を入れる場合はどうするの?
例えば"AHO"を付加したい場合
"AHOaAHObAHOcAHOdAHOe"になって欲しいのーーん。ノンノン!

433 :デフォルトの名無しさん:03/06/21 15:03
(σ・∀・)σゲッツ!!ならココ!
http://www3.kcn.ne.jp/~barozza/

とっても ageなサイトかもぉ

434 :デフォルトの名無しさん:03/06/21 15:07
>>432
my @splited_chars = split('', "abcde");
my $result;
map { $result .= "AHO$_"; } @splited_chars;
print "$result\n";


435 :デフォルトの名無しさん:03/06/21 15:07
>432
s/(.)/AHO$1/g

436 :434:03/06/21 15:14
かぶらないようにまわりくどいほうほうをかいたんだ。
せいきひょうげんをしらなかったわけじゃないぞ。
フォルゴレはつよいんだ。みてろよー。


437 :デフォルトの名無しさん:03/06/21 15:45
漏れも、434のかきかたするなぅ・・・

それ以前にアスキーコードでしかつかえんね・・・コレ(w


438 :ぬるぽ:03/06/21 17:33
>>434,435,437
マジ愛してる
とりあえず漏れのレベルに合わせて435のやつでいくよ!いっちゃうよ!
$1ってのがわからんかった。lvが$1上がった気分。


439 :デフォルトの名無しさん:03/06/21 18:19
>>438は レベルが $1 あがった!

  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>438

440 :デフォルトの名無しさん:03/06/21 19:29
map { $result .= "AHO$_"; } @splited_chars;
はmapの使い方として推奨されてない気が。
434だったら、
join "" => map { "AHO", $_ } split('', "abcde");
な感じでFA。

441 :デフォルトの名無しさん:03/06/21 20:16
>>437
perlはunicodeもサポートしてますが(w

442 :デフォルトの名無しさん:03/06/21 22:20
Unicode以外のコードもあるのを忘れとるよ〜


443 :デフォルトの名無しさん:03/06/22 03:20
>>442
そのためのEncodeモジュールじゃないの?
といってもEncode::JPは変換がおかしいけど。

444 :デフォルトの名無しさん:03/06/22 15:31
漏れも split をしたら、join でつなげたくなるな

join "AHO", split( //, "abcdef")

って感じ。もうひとつ、行頭に "AHO"がいるが。

445 :デフォルトの名無しさん:03/06/22 20:11
すみません。
複数の検索エンジンにワードを投げて、その結果をまとめてから出力する、
というcgiを書いています。

$URL{$key[$num]}に検索エンジンのアドレスとと検索ワードを付け加えたURLを格納して、

`wget $URL{$key[$num]}`や
$html = `w3m -dump_source $URL{$key[$num]}`
などのようにして、検索エンジンにワードを投げた後に出力するhtmlを取得しようと思ったのですが
どうしても上手くいきません。

どなたか、解決方法をご教授してください…(;´д`)


446 :デフォルトの名無しさん:03/06/22 20:15
>>1

447 :デフォルトの名無しさん:03/06/22 20:19
「どうしても上手くいきません」で解決方法がわかる人は宇宙人です。

448 :デフォルトの名無しさん:03/06/22 20:19
あ、どもすみませんでした。Web板逝ってきます。

449 :デフォルトの名無しさん:03/06/22 20:40
地球が宇宙にある以上、地球人も宇宙人です

450 :デフォルトの名無しさん:03/06/23 00:50
もしかしたら、地球は宇宙じゃないのかもしれないよ。もしかしたらね。

451 :デフォルトの名無しさん:03/06/23 01:28
× 地球 IS-A 宇宙
○ 宇宙 HAS-A 地球

452 :11:03/06/23 11:04

以下のアルファベットのAからZまでの中から「BCD」を開始位置、「TUV」を終了位置とし、
その間の文字列の抜き出しと、その文字数を調べる問題なのですが、どうもうまくいきません。
まだ勉強したてなので、どなたか教えてください。


$str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$x=index($str,BCD);
$y=index($str,TUV);
print 'BCD開始位置=',"$x";
print 'TUV終了位置=',"$y";
@data=split(//,$str);
$result=scalar(@data);
print "$result";
exit;

453 :デフォルトの名無しさん:03/06/23 11:09
>452
宿題は自分でやれ。

454 :デフォルトの名無しさん:03/06/23 11:28
>>452
splice


455 :11:03/06/23 11:33
>453
宿題ではないですが、これを解きたいんです。
>454
ありがとうございます。
splitではなく、spliceという意味でしょうか?


456 :デフォルトの名無しさん:03/06/23 13:11
>452
文字列の抜き出し=substr
文字数を調べる=$y-$x
自分で考えなきゃ問題解いた事にはならないだろ。

457 :11:03/06/23 16:13
>456さん
頂いたヒントを元にやってみました。
時間はかかりましたが、なんとか出来上がりました。
ありがとうございました。

str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

$x=index($str,BCD);

$y=index($str,TUV);

print 'BCD開始位置:',"$x\n";

print 'TUV開始位置:',"$y\n";

$len=length($str);

$kouho= substr($str,$x,$y+1);

print '結果=',"$kouho";

exit;





458 :デフォルトの名無しさん:03/06/23 17:38
$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str =~ s/(\w|\W)+(BCD)(\w+|\W+)(TUV)(\w|\W)+/$2$3$4/;
$len=length($str);
print "str:$str\n";
print "length:$len\n";
exit;


459 :デフォルトの名無しさん:03/06/23 21:01
perlでは論理シフトと算術シフトってどう区別されてるんでしょうか?

460 :デフォルトの名無しさん:03/06/23 23:45
$ perl -Minteger -e "print(-8 >> 3)"
-1

となるから算術シフト?

461 :デフォルトの名無しさん:03/06/25 01:14
Windowsでperl -Dができるperlパッケージってないですか?
ActivePerlのFTPとかにおちてないかなぁ

462 :デフォルトの名無しさん:03/06/25 06:41
無いだろ。自分でコンパイル汁

463 :デフォルトの名無しさん:03/06/25 19:46
>>459
ここらへんは、perlにしては珍しく変数の型がそのまま使われる。
と言う事で、一応perlでもなんの変数なのか認識しとく必要がある。

余談だけど、型はしっかり意識して使っといたほうが良いヨ。
数字に対して「文字列比較演算」とかしたら、
内部で文字型に変換されて、比較して、その後また数字型に直す。
なんて言うようなクソ作業が始まるから。



464 :デフォルトの名無しさん:03/06/25 21:28
while なんかで大き目のファイルをぐりぐりパーズするスクリプトは
while の部分を eval {} で囲んだ方が効率が良いらしいのですが、
本当でしょうか?
また、本当なら何故効率が良くなるのか教えていただけないでしょうか?

465 : ◆hMJAPH9PWA :03/06/25 23:16
>>463
内部実装を意識した方がいいというのは同意だけど、意識しすぎるのは無意味だと思うな。
型を意識する必要がないのはPerlの利点の一つだし、
単に比較演算程度なら、一旦数値が文字列化されれば
あとは数値として使おうが、文字列として使おうが、値を変更しない限り変換が行われる事はないからね。

>>464
そんなこと、聞いた事ないな。
それとも正規表現のコンパイルに時間がかかる、ってことかなぁ…。

# こういうケース
my $pattern = "foo";
while(<>){
if(/$pattern/){
# ...
}
}

eval() すると早いってのはこのこと。
パターンが何種類もある場合は、確かに考慮に値するほど変わることもある。
$pattern = "foo";
eval <<'CODE';
while(<>){
if(/$pattern/o){ # o - コンパイルを一度しかしない
# ...
}
}
CODE
パターンに定数を使える(oオプション使用を含む)のなら、わざわざeval()する意味はないけどね。


466 :デフォルトの名無しさん:03/06/26 11:04
配列の中身(文字列)が全て同一かどうかを「スマートに」判別する方法って
ないでしょうか?
最初の要素を保持してループを回し、異なる要素が出てきたら
同一でないと判断するのはPerlっぽくない(他に手段がある)気がするので。

467 :デフォルトの名無しさん:03/06/26 11:18
どこが違っているかを見るなら、grepという手もあるが、
単に同一かどうかだけでいいのなら、
"@array1" eq "@array2"を評価しては?


468 :466:03/06/26 11:24
>>467
すみません、ちょっと書き方がまずかったようです。
二つの配列をマッチングさせるのではなく、一つの配列の中にある
全ての要素が同一かどうかを見たいのです。

また、配列の中身が何なのかはとりあえず考えません。
(タブ区切りの文字列をループ内で分割しながら処理するので)

grepを使えば・・・というのは良いヒントになりましたが、場合によっては
メモリを喰いそうですね。
自分でももうちょっと考えてみます。ありがとうございました。

469 :デフォルトの名無しさん:03/06/26 12:51
ttp://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
の122

470 :デフォルトの名無しさん:03/06/26 15:21
よく携帯サイトにある、オリジナル待ち受け画像作成プログラムみたいなのを
作りたいと思っています。例えば、背景色を選びロボットの頭、胴体、手、足の
各パーツ画像を選んで「画像作成」ボタンを押すことで、選んだすべてのパーツが
合体して表示される、といったものです。

perlよりほかの言語のほうが適しているのかもしれませんが、いろいろ調べても
よく分からなかったので、多少は分かるperlスレで質問しました。
スレ違いであれば別スレに誘導していただけると助かります。
よろしくお願いします。

471 :デフォルトの名無しさん:03/06/26 15:27
おまいさんは何が聞きたいんだ

472 :デフォルトの名無しさん:03/06/26 15:35
すいません。
こういうプログラムはperlで作成することが可能かどうかをお聞きしたいです。
もしできるなら、その作成例などがあるサイトを紹介していただければありがたいです。

473 :デフォルトの名無しさん:03/06/26 15:46
そういうのをperlでやることになったら鬱だ

474 :デフォルトの名無しさん:03/06/26 15:46
出来る
アクセスカウンターとかの画像を合成しているのを参考にするのが良いのかな
Web 系みたいだから、WebProg 板のスレの方がいいと思う
http://pc2.2ch.net/test/read.cgi/php/1054992610/

475 :デフォルトの名無しさん:03/06/26 16:03
>>470
まず、プログラムの実行環境から整理して書け。
めっちゃ意味分からん。

476 :470,472:03/06/26 16:14
>>474
ありがとうございました。行ってみます。

477 :デフォルトの名無しさん:03/06/26 16:14
>>467
my @array1 = (123, 456, 789);
my @array2 = ("123 456", 789);
(つД`)

478 :デフォルトの名無しさん:03/06/26 16:46
>>477
@array1 == @array2;
"@array1" eq "@array2";

じゃあこう。
2つとも通過でOK。
って質問主の要望に沿ってないし。

479 :509:03/06/26 21:51
2つ(以上)の jpeg 画像ファイルを入力とし、
横に連結した1つの jpeg 画像ファイルを出力するプログラムを書け。
また、指定した位置に連結できるようにもせよ。

どなたか作っていただけませんか?


480 :デフォルトの名無しさん:03/06/26 22:15
>479
偉そうにマルチポストか。死ね。

481 :デフォルトの名無しさん:03/06/26 22:20
>>479
うわぁ、最悪

482 :デフォルトの名無しさん:03/06/27 07:54
>>479
マジレスしてもいいの?
じゃ、PerlMagic使えば〜

483 :デフォルトの名無しさん:03/06/27 08:09
>>482
やめろ。続きが想像できる。
「PerlMagicって何ですか?必死で調べましたが分かりませんでした。教えてください」
「インストールってどうすればいいんですか?」
「インストールでなんかエラーが出たんですが、どうすればいいんですか?」
以下略

484 :464:03/06/27 11:35
>>465
答えていただきありがとうございます。
自分もそんなことしているのは cgi-lib.pl でしか見たことないです。
でも、 cgi-lib.pl は eval の始まりの辺りにコメントで
# for efficiency, compile multipart code only if needed
と書いてあるんですよね。
それから検索したらオライリーの目次みたいなのがヒットして
5.5 evalによる実行効率の向上 という内容があるわけですが
http://www.oreilly.co.jp/BOOK/adperl/contents.htm
この本は持ってないし、効率のために eval を使っているものをあまり見つけられないので
実際のところはどうなのかなと思ったわけです。
で、効率にかかわるのは正規表現が関係する時ですか?
よくわからないのでとりあえずヒットした本をどこかで探して読んでみます。
どうもありがとうございました。

485 : ◆hMJAPH9PWA :03/06/27 11:50
>>484
なるほど、やはり正規表現関連の事だと思うよ。
でもeval()は使い方を誤ると劇的に遅くなる事があるので、注意したほうがいい。


486 :誘導屋さん:03/06/27 12:24
>>509@C/C++の宿題やらせてください。9代目

#!/usr/local/bin/perl

use GD;

$file1 = "test2.jpeg";
$file2 = "test1.jpeg";

open (IMG,$file1);
$image1 = newFromJpeg GD::Image(IMG);
close(IMG);
open (IMG,$file2);
$image2 = newFromJpeg GD::Image(IMG);
close(IMG);

($w1, $h1) = $image1->getBounds();
($w2, $h2) = $image2->getBounds();

$width = $w1 + $w2;
$height = ($h1>$h2)?$h1:$h2;

my $target = new GD::Image($width, $height);
$target->copy($image1, 0, 0, 0, 0, $w1, $h1);
$target->copy($image2, $w1, 0, 0, 0, $w2, $h2);

print "content-type:image/jpeg\n\n";
print $target->jpeg;


487 :デフォルトの名無しさん:03/06/27 12:30
ごめんなさい、これもスレ違いだったか...

488 :デフォルトの名無しさん:03/06/27 12:47
ばっかでーぇ。


489 :デフォルトの名無しさん:03/06/27 14:28
>>484-485
適当な記憶で書くけど、ループは繰り返されるたびに再コンパイルされていて、
ループ自体をevalから実行させると1回しかコンパイルされないので良い。
ってオライリーに書いてあった気がする。

俺はループの中でやむなくeval連発するプログラム作った事あるけどね…。

490 :デフォルトの名無しさん:03/06/28 16:16
再コンパイルされるってのは正規表現のことで
処理自体には関係ないよね。

491 :デフォルトの名無しさん:03/06/28 17:25
積んどいた「オブジェクト指向Perlマスターコース」というのを今見てるが、
訳も悪いが誤植もひどい・・・
と思ったら、本家本も誤植が多いのね。

492 :デフォルトの名無しさん:03/06/28 18:24
>>491
スレ違い

493 :デフォルトの名無しさん:03/06/28 18:28
>>492
どうせしょうもない話しかしてないじゃん

494 :デフォルトの名無しさん:03/06/28 19:24
>>490
>465の最後のケースならevalのたびにパーズから必要。

495 :デフォルトの名無しさん:03/06/29 06:45
>>491
洩れはPerlネットワークプログラミング読んでるんだけど、
これも誤植ひどいよ。
ピアソンエデュケーションって。。。

496 :デフォルトの名無しさん:03/06/29 07:44
次スレからは「質問箱」ってスレタイを変えて
「情報交換」とでもしないかい?
本一冊読んでりゃしないような質問と回答ばかりじゃつまらない。

497 :デフォルトの名無しさん:03/06/29 11:21
しかし、そういう質問スレは依然として需要はあるので、
質問箱のスレも立ててくれ。

つまりトータルで見ると、情報交換のスレをお前が別に立てれ。

498 :デフォルトの名無しさん:03/06/29 13:10
Perlの情報交換のスレなんかいらない。
間違いなくCGIの話題が溢れ返る。

499 :デフォルトの名無しさん:03/06/29 13:17
>>497 >>498
わかったよ。もうこのスレの質問には答えない。


500 :デフォルトの名無しさん:03/06/29 13:33
教えたがり体質の人は常に一定数いるので、
適当に新陳代謝していってくれ
コテハンとか名乗らなくていいから

501 :デフォルトの名無しさん:03/06/29 13:43
>>499みたいのに限って、まともな回答なんて書いたことないんだよな。
自意識過剰なんだよ、役立たずのくせにw

502 :デフォルトの名無しさん:03/06/29 13:58
やーい、ハゲ、インポ

503 :デフォルトの名無しさん:03/06/29 15:07
えー、困りますよー。
2ちゃんでPerlの質問に答えられる天才は>>499様しかいないんですからー。



( ´,_ゝ`)プッ

504 :デフォルトの名無しさん:03/06/29 15:29
おっと。
さらにもましてスレが下らない方向に進んでるぞー。
Q&Aのはまだましだぞー。

505 :デフォルトの名無しさん:03/06/29 20:15
文字列中で演算結果を出力する方法を教えて下さい。
$a=1;
$b=2;
print "$a+$b=",$a+$b;


print "$a+$b=($a+$b)";
のような書き方で同じ出力を出したいのです。

506 :デフォルトの名無しさん:03/06/29 20:27
>>505
$a=1;
$b=2;
$c=$a+$b;
print "$a+$b=$c";

507 :デフォルトの名無しさん:03/06/29 20:36
>>505じゃないけど>>506ってアホ?
それをしたくないから質問してるのに。

508 :デフォルトの名無しさん:03/06/29 20:49
>>507
なら代わりに答えてください。

509 :貧乏脱出!これであなたはお金持ち:03/06/29 20:53
普通に働いてお金持ちになれるのは全体の1%のみって本当!?
本当にお金持ちになるにはやはり「副収入」が必要!
一日30分 おうちでコピペ、コピペ!
嘘だと思うんならランキング見てみてくださいよ↓↓
(直リン不可)
http://www.adultshoping.com/addclickport.cgi?pid=1053353765(直リン不可)

..............

510 :デフォルトの名無しさん:03/06/29 21:25
>>505
my $a = 1;
my $b = 2;
print "$a+$b=@{[$a+$b]}";

こんな感じ?


511 :棄教者 ◆egKIKYO7cg :03/06/29 21:26
>>505
Perlクックブックの第一章に同じようなネタがあったけど、
会社に置いてあるので、自宅から2CHに繋げている今は答えられない。
誰かPerlクックブック手元にある香具師いたら見て、変わりに答えておくれ。

512 :505:03/06/29 21:54
>510
ありがとうございます。
小数も平気みたいですね。
自分には原理がまだ良くわかってないんですが。

513 :デフォルトの名無しさん:03/06/29 22:18
$_="1/2.69**3";
print "$_=@{[eval($_)]}";

こんなんも出来るんか。

514 :デフォルトの名無しさん:03/06/29 22:59
510なら${\( )} でよくないですか?
まぁ@の方が拡張性あるとは思うケドね。

515 :デフォルトの名無しさん:03/06/29 23:04
どう違うの?

516 : ◆hMJAPH9PWA :03/06/29 23:15
$[\( )}や${\do{ }}のほうが@{[ ]}より若干高速だし、メモリも少なくてすむ。
まぁ、単純なものならsprintfでいいと思うけどね。

517 :デフォルトの名無しさん:03/06/30 00:09
${\( )}の\ってなんで必要なんだろう。


518 :デフォルトの名無しさん:03/06/30 00:26
なんでprint "$a+$b=",$a+$b;やprint "$a+$b=".($a+$b)を嫌がるんだろう さっぱり分からない。

519 :デフォルトの名無しさん:03/06/30 00:59
やっぱり>>506が正解のような

520 :デフォルトの名無しさん:03/06/30 01:01
ヒアドキュメントとか。

521 :デフォルトの名無しさん:03/06/30 01:02
>>517
${} の中身を(スカラー)リファレンスにするため。

522 :デフォルトの名無しさん:03/06/30 01:07
あ、デリファレンスの${}なわけか。産休

523 :デフォルトの名無しさん:03/06/30 02:31
普通にこう

$a=1;$b=2;
printf ("\$a + \$b = %d",$a+$b);


524 :デフォルトの名無しさん:03/06/30 02:47
""の中の変数が勝手に中身に置き換わって不思議〜、
というのを式でやりたいだけなのでは

525 :デフォルトの名無しさん:03/06/30 08:05
>>505じゃないけど>>523ってアホ?
それをしたくないから質問してるのに。


・・・一番アホなのは>>505だが。

526 :デフォルトの名無しさん:03/06/30 08:42
どういうデメリットがあるから何を避けたいのか、
というのが質問からさっぱり読み取れない

527 :デフォルトの名無しさん:03/06/30 09:19
おじいちゃんの遺言なので。

528 :デフォルトの名無しさん:03/06/30 17:12
そういうのをやってみたいだけじゃない?実用性はともかく。
みんなで質問者の知的好奇心を満たしてあげようじゃないの。


529 :デフォルトの名無しさん:03/06/30 17:30
式が不定で実行時にevalする必要があるならともかく、
最初から決まってるなら、それを文字列の中に入れる
メリットは無い、というかフィロソフィーがおかしい

530 :デフォルトの名無しさん:03/06/30 20:18
>>528
もしそうなら隔離板のWebProg板で聞いてほしいな。

531 :デフォルトの名無しさん:03/06/30 20:38
このスレが6になるのとperlが6になるの
どっちが早いのですか?

532 :デフォルトの名無しさん:03/06/30 20:39
実はこっちが隔離板

533 :デフォルトの名無しさん:03/06/30 22:15
>529
真の正解は
print "1+2=3";
だと言いたいのだね。

534 :デフォルトの名無しさん:03/06/30 22:17
"Perlクックブック"という本がこのスレではよく出てきますが、
その本は丸っきりの初心者向けでは無いようなので質問します。
Perlをまったく知らない状況から勉強しようとして本を買うなら、
最初歩としてはどの本が良いのですか?
なるべく分かりやすく、飽きにくいものをお願いします。

535 :デフォルトの名無しさん:03/06/30 22:23
>>534
http://pc2.2ch.net/test/read.cgi/php/1030209573/l50

536 :デフォルトの名無しさん:03/06/30 23:22
>>528
rubyではできるからperlではどうなのかと思ったとか

a=1
b=2
print "a+b=#{a+b}"

537 :デフォルトの名無しさん:03/06/30 23:34
確かに、変数を中身に変換してくれる機能がありながら、
それが不十分である為にprintfに切り替えたり、
予め別変数に書き出しておいたり、という作業が入るのは
言語としてちっとも完備していない

でもそれがperl

538 :デフォルトの名無しさん:03/07/01 01:09
確かに不十分かもしれんが、リファレンス使えりゃ問題無い


539 :デフォルトの名無しさん:03/07/01 13:45
>>510
my $a = 1;
my $b = 2;
print "$a+$b=${\($a+$b)}\n";

こっちのほうが>>536に近いかな。

540 :デフォルトの名無しさん:03/07/02 01:23
なんで /^.*$/ が文字列全体にマッチしないんだ〜〜?

541 :デフォルトの名無しさん:03/07/02 01:27
というか、 ^ と $ を同時に指定できない理由はあるのでしょうか?

542 :デフォルトの名無しさん:03/07/02 01:47
意味不明、同時に指定できるだろ?


543 :デフォルトの名無しさん:03/07/02 01:57
>>540
取り敢えず . は改行にはマッチしない。
なお、「.*」の場合、最長マッチなので ^ と $ は全然いらない。
そもそも、この記述を使いたい意味が全く分からない。

> ^ と $ を同時に指定できない理由はあるのでしょうか?
同時に指定できる。
取り敢えず、正規表現の動作を理解してから出直して。


544 :543:03/07/02 02:04

ああ、書き忘れたけど、
m/^.*$/
これは
!(m/\n/)
これとほぼ同義。

545 :デフォルトの名無しさん:03/07/02 07:45
>>544
ダウソ。DOS改行の場合とか・・・。mいらんよ。

546 :デフォルトの名無しさん:03/07/02 20:16
俺はふつー m 付けます。
デミリタの定義を目視出来るからね。

perlの改行(\n)は、システムにおいて意味合いが変わってくるのでDOSだからどーこーなる事はありません。

547 :デフォルトの名無しさん:03/07/02 20:24

$cmd = FileHandle->new( "|command" );
print( $cmd "hogehogehoge" );
...
でコマンドにパイプでデータを流し込んでコマンドの実行結果を得るには
どうしたらいいですか?

548 :デフォルトの名無しさん:03/07/02 21:00
>>546
CSVファイルの中身がそのスクリプトを動かしているシステムに合った改行コードとは限らない。
今回の場合は決めてあるのかもしらんけど。

549 :548:03/07/02 21:02
>>548
別のスレと激しく勘違いした


_| ̄|○

550 : ◆hMJAPH9PWA :03/07/02 22:59
>>547
IPC::Open2/IPC::Open3を使う。
ただしいとも簡単にデッドロックしてしまうため、素人にはお勧めできない、
というようなことがドキュメントに書いてあるので注意されたし。

551 :デフォルトの名無しさん:03/07/03 18:57
小数点以下第2位までの数値を得たいのですがどのようにすればいいでしょうか?

a=12.34567

552 :デフォルトの名無しさん:03/07/03 19:01
初手からperlでない

553 :デフォルトの名無しさん:03/07/03 19:03
>>551

int(($a/100)+0.05)*100で出るかな? 適当だけど。

554 :デフォルトの名無しさん:03/07/03 19:03
>>553
誤爆。四捨五入じゃないのか。'sprintf'を使えば?

555 :551:03/07/03 20:24
>>553
解決しました。
ありがとうございました。

556 :デフォルトの名無しさん:03/07/04 00:42
print sprintf('%.2f', $a);

557 :デフォルトの名無しさん:03/07/04 03:45
Windows2000
ActivePerl5.8
ですが
setsockopt(SOCKET,SOL_SOCKET,SO_RCVTIMEO,30)が成功しません

558 :デフォルトの名無しさん:03/07/04 03:55
>557
あーそうですか。
報告ありがとうございます。

559 :デフォルトの名無しさん:03/07/04 07:03
>557
乙〜

560 :デフォルトの名無しさん:03/07/04 10:24
win環境でperl使ってポーリングしたいと思ってるんだけど、
一般的な方法ってありますかね?
ユーザーが意図してポーリングの開始、終了を制御できるようにしたいんですが。。。
サービスとして実行させようにもアプリケーションじゃないとだめそうだし。。。

どなたかいい方法知ってる方いらっしゃいませんか??

561 :デフォルトの名無しさん:03/07/04 10:26
何をポーリングするんだ?

562 :デフォルトの名無しさん:03/07/04 11:53
油田

563 :デフォルトの名無しさん:03/07/04 12:00
鼻の穴


564 :デフォルトの名無しさん:03/07/04 12:14
ケツ拭くといつも赤い

565 :デフォルトの名無しさん:03/07/04 13:20
ストライク

566 :デフォルトの名無しさん:03/07/04 15:43
ポーリングって、燃焼系〜燃焼系〜アミノ式、のアレ?

567 :デフォルトの名無しさん:03/07/04 17:37
指ぱっちん

568 :デフォルトの名無しさん:03/07/04 17:46
質問するなら
Perl コーディング初心者質問コーナー Part25
http://pc2.2ch.net/test/read.cgi/php/1056730690/


569 :デフォルトの名無しさん:03/07/04 19:50
自分の質問のせいで荒れてしまってスイマセンでした。

570 :デフォルトの名無しさん:03/07/04 23:53
気にするな。

571 :デフォルトの名無しさん:03/07/05 01:47
荒れてない。
なんとなくネタスレになっただけ。

572 :デフォルトの名無しさん:03/07/06 19:50
perlのCPANを使うときの最初に設定をするでしょ?
そのときの地域選択のときに候補が上がってこないんだけど、どうしたらいいの??
数字を入れても起こられるからまぢわからんです。

573 :デフォルトの名無しさん:03/07/07 01:48
実効ユーザーID実効グループIDを表示させるCGIはどうするの?

574 :デフォルトの名無しさん:03/07/07 01:49
すいますぇん。板違いでした。

575 :デフォルトの名無しさん:03/07/07 03:07
質問です。当方あまりperlについて詳しくないので初心者でも分かるよう
ご教授いただけるとありがたいです。

トップページがCGI(top.cgi)でそこにアクセスするとURLを変えないまま
実際はA.shtmlを表示させています。
そのA.shtmlにはSSI式カウンタが設置してあります。

普通にA.shtmlを表示させればカウンタは表示できるんですが
top.cgiからアクセスしてもカウンタが表示されないで困ってます。

○A.shtml→SSIカウンタ=見える
×top.cgi(A.shtml)→SSIカウンタ=見えない

そのSSI式カウンタの設定では相対パス絶対パスも全て試しましたが
表示されません。なにか表示できる方法はありますでしょうか?

そこから先に進めず困っています。よろしくお願いします。


576 :デフォルトの名無しさん:03/07/07 03:15
Perl関係ないし

577 :デフォルトの名無しさん:03/07/07 03:23
>>576
すいません・・このような質問はWEB制作板とかのほうがいいんでしょうか

578 :デフォルトの名無しさん:03/07/07 04:22
はい。

579 :デフォルトの名無しさん:03/07/07 06:50
perlで階層化されたデータ構造って作れますか?
例えばHTMLのエレメントの構造の様なものを記憶しておきたいんですが。
(HTMLを読みたいというわけではない)

・・・ぶっちゃけた話、LISPのS式(そのものじゃなくても良い)を
perlでも扱えないかと。

580 :デフォルトの名無しさん:03/07/07 08:32
>>579
アルゴリズムの問題じゃない。
lispでできてPerlにできないことなんてないでしょ。
この場合は、フラグ処理が適切と思われ。
開始タグと終了タグの個数を差し引きして、階層を作る。


581 :デフォルトの名無しさん:03/07/07 10:53
>>579
単にこういう話ではなく?
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
http://perldoc.jp/docs/modules/MLDBM-2.01/MLDBM.pod

582 :デフォルトの名無しさん:03/07/07 13:50
Windows2000
ActivePerl5.8.0を使用しています。
-Vオプションで設定を見ると
「usethreads=undef」となっているのですが、
これを有効にする方法はありますでしょうか?



583 :デフォルトの名無しさん:03/07/07 16:05
>>582
Perl のソース拾ってきてコンパイルし直し。

584 :デフォルトの名無しさん:03/07/07 18:13
>>579
[$a,[$b,[$c,[$d,]]]]ってのはどう?

scalar( %hoge )の返り値は何?

585 :579:03/07/07 18:41
まだ良くわかっていませんが、多分>>581さんのリンクの
perlref の仕組みで大丈夫っぽいです。
厳密にリスト構造を似せる必要はないので。

586 :579:03/07/07 18:45
流し読みした感じでは、perlobjというのでもよさそうです。
ありがとうございました。

587 :デフォルトの名無しさん:03/07/07 20:30
>>584
http://tech-web.net/perlmania/perldata3.html

588 :デフォルトの名無しさん:03/07/07 21:39
[sub{},[sub{},[sub{},[sub{},undef]]]];

LISPしっかり使ったこと無いので何ともいえないけど・・・

[
    &{sub {
        my ($data,$data2);
        my $func;
        $func=sub{
        };
        return $func;
    }},undef
    ]
];

クロジャー組み合わせたりもできるし・・・
どんな使い方できるかは分からないけど面白いことできるかも。


589 : ◆hMJAPH9PWA :03/07/07 23:36
>>582
useithreads

590 :デフォルトの名無しさん:03/07/07 23:58
>>588
&nbsp じゃなくて &nbsp; が正式な(後ろにセミコロン)。
Janeだと正式な書き方しないとそのまま表示されてしまうので

591 :デフォルトの名無しさん:03/07/08 00:37
perlスクリプトで認証サイトの画像をダウンロードしたいのですが
とってきた画像ファイルの上にヘッダ情報がテキストで入ってしますのです。
こいつを取り除く手っ取り早い方法おしえて下さいお願いします。

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

$url = "http://aaa/aaa.jpg";
$id = "namae";
$passwd = "password";

$ua = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => "$url");
$req->authorization_basic("$id", "$passwd");
print $ua->request($req)->as_string;



592 :デフォルトの名無しさん:03/07/08 00:42
s/as_string/content/

593 :デフォルトの名無しさん:03/07/08 00:55
592さん
かたじけない!

594 :デフォルトの名無しさん:03/07/09 10:47
WindowsでPerlやる場合、
cygwinの使うのとwin用の使うのの利点、欠点教えて

595 :デフォルトの名無しさん:03/07/09 10:59
ActivePerlのほうがいいよ。
ppmでモジュール管理が楽。

596 :デフォルトの名無しさん:03/07/09 12:09
windowsのインターフェースがなぁ。command.comとか
cmd.exeとか使いにくいから、cygwinの方がイイ!
ま、簡単なことやるなら、copalなんか使う手もあるが。


597 :デフォルトの名無しさん:03/07/09 12:16
>>595
「ppmモジュールねぇよ」
って怒られること多くない?
どうせ perl -MCPAN すりゃ同じだし

system()とか`` 考えるなら、断然cygwinだな

598 :デフォルトの名無しさん:03/07/09 12:24
Cygwinの方がいいだろ

599 :デフォルトの名無しさん:03/07/09 12:29
system() になにか違いがあるんですか?

600 :デフォルトの名無しさん:03/07/09 14:45
>>599
偉い人じゃないから、system()自体の違いは知らんけど
Windowsだったら system('echo hoge'); とか @list=`ls`; とかできないじゃん


601 :デフォルトの名無しさん:03/07/09 15:59
両方イレトケ
bash上でActivePerl使うのが楽
どっちかでしかコンパイルできないmoduleもあるし

602 :デフォルトの名無しさん:03/07/09 16:06
両方入れてるが、PATHとかで無駄にはまる時あって初心者にはオススメできない
分かってるならいいんだけどね

603 :デフォルトの名無しさん:03/07/09 16:53
PATHは優先順位さえ覚えておけば問題ないんじゃないの?
オレッチはCygwin入れるときPerlは入れないでActivePerl入れてる。

604 :デフォルトの名無しさん:03/07/09 17:43
凝ったことをしたいなら、linuxを入れる
winからperlを便利に使いたいだけならActivePerl

605 :デフォルトの名無しさん:03/07/09 18:31
cygwinからActivePerlが最強。

606 :デフォルトの名無しさん:03/07/09 19:33
ActivePerlのが気楽だし、個人でCGI作る程度ならそっちのがいいかと。
UNIXコマンドを使うようならcygwin...ってかUNIXいれろ、と。

607 :デフォルトの名無しさん:03/07/09 20:21
perlを比較しているのにbashが便利wwwとか言ってる椰子は香具師

608 :デフォルトの名無しさん:03/07/09 20:52
椰子は香具師
椰子は香具師
椰子は香具師
椰子は香具師
椰子は香具師


609 :デフォルトの名無しさん:03/07/09 21:37
純粋にどう勘違いしていたのか気になる
> 椰子は香具師

610 :デフォルトの名無しさん:03/07/09 21:54
perlってなんてよむんですか?

611 :デフォルトの名無しさん:03/07/09 22:08
>>610
http://e-words.jp/?w=perl

612 :デフォルトの名無しさん:03/07/09 22:09
ピィール

613 :デフォルトの名無しさん:03/07/09 22:11
ぺるる

614 :デフォルトの名無しさん:03/07/09 22:52
ピロリだろ。初心者を騙すなよ。

615 :デフォルトの名無しさん:03/07/09 22:57
>>609
俺の予想: 彼は「香具師」をいわゆる「厨房」の意味と思っており、
        「ヤツ」の変化の歴史を知らなかった。
ありえない: 実はネタである。

616 :デフォルトの名無しさん:03/07/09 23:14
こうぐしでも変換できるし、なんか香ばしい輩の
ことだと思っちゃったんだろうなあ

617 :デフォルトの名無しさん:03/07/10 00:13
ピーナスだよ

618 :デフォルトの名無しさん:03/07/10 04:22
掲示板作りたいんですが、Activeperl5.8って無料なのですか?英語わけわからない。
後、ダウソする時のメアド記入欄ってちゃんとしたメール記入した方がいいのですか?
なんか怖い


619 :_:03/07/10 04:35
http://homepage.mac.com/hiroyuki44/

620 :デフォルトの名無しさん:03/07/10 04:43
>>618
http://pc2.2ch.net/php/
http://pc2.2ch.net/php/
http://pc2.2ch.net/php/
http://pc2.2ch.net/php/
http://pc2.2ch.net/php/
http://pc2.2ch.net/php/

ここは痴呆専用のスレで
次からCGI・ぺrlは↑の板で聞け
ActivePerlはフリー
メアドは適当でいい
英語嫁ないならどうせそのうち挫折するだろ

621 :デフォルトの名無しさん:03/07/10 08:31
>>618
英語がわからない人がプログラミングをするとこは法律で禁じられています。

622 :デフォルトの名無しさん:03/07/10 08:40
>>607が大アフォということで決着。
Perlを使う環境がPerlそのものと並んで重要なことくらい
分からない>>607は・・・

623 :デフォルトの名無しさん:03/07/10 08:42
大事だけど。でもそれはperlの比較じゃないよね?

624 :デフォルトの名無しさん:03/07/10 09:11
どーでもいいけど、そろそろコーティングやアルゴリズムの質問が見たくなった。

625 :デフォルトの名無しさん:03/07/10 09:15
最後言わしてくれ。
>>623、話の発端は、ActivePerlとcygwinPerlのどっち
入れたほうがいいでつか、っていう質問だっただろ。
そもそもPerlの比較じゃなかったんよ。漏れ、粘着?


626 :デフォルトの名無しさん:03/07/10 09:36
> 英語嫁ないならどうせそのうち挫折するだろ

エラーメッセージをコピペして
「どういう意味なんでしょうか……」


627 :デフォルトの名無しさん:03/07/10 13:01
お前らも英語わかんないくせにーwwwwwwwwwwwww

628 :デフォルトの名無しさん:03/07/10 22:24
分かんないけど、自分で調べるよ。

629 :デフォルトの名無しさん:03/07/10 23:51
>>626
エラーメッセージコピペするのは質問者として非常に正しい。
ダメな質問者は 「何かエラーが出て動かない」 としか言わない。

630 :デフォルトの名無しさん:03/07/11 01:08
>>629
そのまえにエラーメッセージでググッてみるとなお良い。

631 :デフォルトの名無しさん:03/07/11 02:08
perlでgetaddrinfo関数って使えないの?

632 :デフォルトの名無しさん:03/07/11 09:03
>>631
ttp://search.cpan.org/author/UMEMOTO/Socket6-0.11/

633 :631:03/07/11 09:52
>>632
サンクス
やっぱそれか
ppmないからな〜winVC6でコンパイルできるのかしら

634 :デフォルトの名無しさん:03/07/11 14:48
マシン構成:
Win2000
ActivePerl 5.8.0

これでマルチスレッドを組むことは可能ですか??

635 :デフォルトの名無しさん:03/07/11 19:06
リソースファイルを編集するスクリプトを書いています。
「\」が長すぎる行をコンソール上で見やすくするために、行の末尾に、次の行に
続くの意味で使われいます。
例)
aaa = bbb , \
zzz = ddd

aaa = bbb , zzz = ddd
と同じ意味。

これをうまく処理するためには、どんな感じにするのがよいでしょうか。



636 :635:03/07/11 19:09
{
local $/ = undef;
$text = <STDIN> ;
}
$text =~ s/\\\n//gd ;

私はこんなのとか、$/ = " \n" ; とかしか思いつかないのですが、
もうちょっと軽い感じにできないかと。


637 :デフォルトの名無しさん:03/07/11 19:10
>>635
それをどう処理したいの?

638 :デフォルトの名無しさん:03/07/11 23:27
>>635
意味がわからん。出直せ。

639 :デフォルトの名無しさん:03/07/12 02:14
まぁまぁ、636見りゃやりたい事は分かろう
日本語意味分かんないから放置するけどな



640 : ◆hMJAPH9PWA :03/07/12 09:32
なんかsearch.cpan.orgの色が変わってるけど、どうしたんだろう。


641 :デフォルトの名無しさん:03/07/12 23:07
>>640
"Why is this site Orange?" ってアンカーがあって
http://search.cpan.org/orange.html
に理由が書いてあるじゃん。

俺的抄訳:
OSCON2003でPerl Foundationの募金活動としてオークションをやった。
その一環として cpan.org の色を1年間指定の色にさせる権利をセリに出した。
http://london.pm.org/ が、自分たちのオフィシャルカラーであるオレンジ色に入札して、
結局競り落としはしなかったのだが、
London.pmはイイ香具師だったので1ヶ月間だけオレンジ色にすることにした。

642 : ◆hMJAPH9PWA :03/07/13 00:28
>>641
あれま。見落としてた。
色の権利か〜。面白い事考えるなぁ(笑

643 :デフォルトの名無しさん:03/07/14 10:24
※code-A
for(@array) {
/deleted/ && 配列からその要素を取り除く
}

という処理をしたいのですが、
splice で配列のoffsetを指定する必要があるので

※code-B
for(my($i=0);$i<scalar(@array);$i++) {
$array[$i] =~ /deleted/ && splice(@array, $i--, 1);
}}

こういうながったらしい書き方になってしまいます。
cod-he-A のような書き方でやれないでしょうか?


644 :643:03/07/14 10:25

code-B で閉じ括弧二重タイプしてしまいました。

645 :デフォルトの名無しさん:03/07/14 11:01
for(@array) {
 /deleted/ && push(@new, $_)
}

ちょっとせこいケド。

646 :645:03/07/14 11:02
あぁ、除くのか。 && を or にしといてください(´Д`;)

647 :645:03/07/14 11:10
@array = grep { not /deleted/ } @array
何度もすいませんw

648 :デフォルトの名無しさん:03/07/14 11:13
for(@array) {
}
@array = grep{!/deleted/} @array;

はダメ?

649 :648:03/07/14 11:13
かぶった(´Д`)

650 :デフォルトの名無しさん:03/07/14 11:51
 o000O
 (⌒⌒)
  ヽ  (
  (_)


           O000o
           (⌒⌒)
            ) /
           (_/


651 :デフォルトの名無しさん:03/07/14 20:21
activePerl5.8.0を使っている者です。
並列処理(Thread)を使いたいのですが、どなたか使われた方いらっしゃいませんか?
簡単なサンプルソースを見せていただきたいのですが。。。
初期化すらままならない状態でして。。。


652 :デフォルトの名無しさん:03/07/14 20:27
駄目だろ、普通。

653 :デフォルトの名無しさん:03/07/14 20:31
動かなくは無いけど、スレッドのリリース処理が上手く出来ない状態。

654 :デフォルトの名無しさん:03/07/15 01:50
#!perl
use threads;
use threads::shared;
use Win32;
my     $global : shared =0;
sub Func
{
    my ($tmp)=@_;
    my $tmp2="0".$tmp;
    $tmp2=~s/(..)/$1/;
    $tmp*=100;
    foreach(0..10)
    {
        {
            lock($global);
            $global.=$tmp2.'::'.($tmp*$_)."\n";
        }
        Win32::Sleep($tmp);
    }
}
@t=();
foreach(0..10){
    $t[$_]=threads->new(\&Func,$_);
}
foreach(0..10){
$t[$_]->join;
}

#print "exit $global\n";

print $global;


655 :654:03/07/15 01:54
テスト用のものの域出てないけど基本的に全ての変数はスレッドローカルになり
my $name : sheard;
でスレッド間で共有する変数は作る。
制限としてリファレンスとかが使えなかった気がする。
これ以上知りたかったら自分で調べるか実験するかしてくれい。
まあほかに試した人いたら聞きたいけど。


656 :デフォルトの名無しさん:03/07/15 03:16
shared

657 :山崎 渉:03/07/15 09:46

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

658 :651:03/07/15 10:14
>>654
ありがとうございます。
サンプルソースをベースにもう少し調べてみようと思います。
何かわかれば報告いたします。

659 :デフォルトの名無しさん:03/07/15 19:46
perlを1からやりたいんですけど、エディッタってメモ帳とかでいいんですか?
それとも専用のエディッタが必要ですか?

660 :デフォルトの名無しさん:03/07/15 20:03
>>659
メモ帳でもイイ!
専用のエディタがあればもっとイイ鴨
とどのつまりは自分自身が使いやすいほうを選ば吉

661 :デフォルトの名無しさん:03/07/15 20:06
>>660
ありがとうございます!
とりあえず、ワードパットでやってみます。

無理っぽかったらフリーソフト・・・。

限界が来たら専用エディッタ買ってみます

662 :デフォルトの名無しさん:03/07/15 21:11
>>661

使いやすいエディタって何よ?
http://pc2.2ch.net/test/read.cgi/php/991372719/l50

663 :デフォルトの名無しさん:03/07/15 21:22
Win->xyzzy以外ありえない
Unix->vi,emcas

664 :デフォルトの名無しさん:03/07/15 21:39
>>661
ワードパッドはどうかと思うがな……。

フリーソフトの開発環境なら「Perlを始めよう!」とか「Copal」があるな。
まぁ最終的にはテキストエディタに落ち着くわけだが、
これから始めるんであれば試しに使ってもいいと思う。

665 :デフォルトの名無しさん:03/07/15 22:20
E(G) = ω1 ∪ ω2

666 :デフォルトの名無しさん:03/07/15 22:35
ワードパッド使うくらいならとりあえず秀丸にしとけ


667 :デフォルトの名無しさん:03/07/15 22:40
>>666
秀丸はシェアウェアだから、『とりあえず』で選べるものではない。
...とか言ってみるtest。

668 :デフォルトの名無しさん:03/07/15 23:16
いまどき秀丸をすすめてる奴って何を根拠にすすめてるの?

669 :デフォルトの名無しさん:03/07/15 23:35
つか662が誘導してるんだからこっちで討論するな、と。

http://pc2.2ch.net/test/read.cgi/php/991372719/l50

670 :デフォルトの名無しさん:03/07/16 01:09
秀丸はシェアウエアだが警告無視すればお金払わずに使えるとか誰かがいってなかった

と言ってみるテスト。

671 :デフォルトの名無しさん:03/07/16 10:57
学生とかフリーウェアの作者なら無料とかなかったか?


672 :デフォルトの名無しさん:03/07/16 12:06
age

673 :デフォルトの名無しさん:03/07/16 12:16
>>671
要登録
Perl用強調表示などもあるので選択肢の一つとしてはアリだと思うが…

そんなことよりエディタを制御するスクリプトがPerl風のエディタない?

674 :デフォルトの名無しさん:03/07/16 13:11
ActivePerl5.8.0なんですが、Win32::APIライブラリを使えば
全てのWin32APIが使えるんですか??

675 :デフォルトの名無しさん:03/07/16 15:04
>>674
というよりは、DLL内の関数を呼び出すモノ。

676 :デフォルトの名無しさん:03/07/16 15:07
Win32:;APIの使い方は解っても、APIの仕様がわからないと使いにくかったりするんだけど
そこらへんの解説をしてる所って殆ど無いね・・・

677 :デフォルトの名無しさん:03/07/16 16:12
Iriaというダウンロード用のツールが独自のAPIを持ってて、
うまくすると多分perlから使えるんだけど、
どうやればいいのか判らない

678 :デフォルトの名無しさん:03/07/16 16:18
$c = [\ 'c'];

この¥ってなんですか?

679 :_:03/07/16 16:19
http://homepage.mac.com/hiroyuki44/

680 :デフォルトの名無しさん:03/07/16 16:35
> この¥ってなんですか?

リファレンスを求める演算子

$ref=\'c';
print "$$ref\n";


681 :デフォルトの名無しさん:03/07/16 16:51

Win32:;APIの使い方

ActivePerlでLHA
川合氏(河馬屋二千年堂さん)

http://member.nifty.ne.jp/hippo2000/perltips/perllha.htm


682 :デフォルトの名無しさん:03/07/16 17:14
難しいねえ

683 :_:03/07/16 17:48
http://homepage.mac.com/hiroyuki44/

684 :デフォルトの名無しさん:03/07/16 18:36
掲示板なんかで、引用符「>」「>」から先の文字の色を変えるにはどうしたらいいですか?

685 :デフォルトの名無しさん:03/07/16 18:50
Windows98でHTTP-Liteモジュールをインストールしようとして、
PPM> set repository ACTIVESTATE http://www.activestate.com/PPMpackages/5.6plus/
PPM> install HTTP-Lite
と入力したら
Error installing package 'HTTP-Lite': Read of http://www.activestate.com/PPMpackages/5.6plus/ failed
と出てうまくいきません。
どなたか対処法をお願いしますm(_ _)m


686 :デフォルトの名無しさん:03/07/16 18:52
>>684
Perlのコーディングと関係ないよ。
正規表現スレで聞いてみたら?

687 :デフォルトの名無しさん:03/07/16 19:05
>>676
Win32APIの仕様ならMSDN見るしかあるまい。Perlの範疇を超えている。

>>677
Iriaは忘れたがIrvineは doc\api.txt というファイルに仕様が書いてあるな。
まぁ、ActiveXなんだが。

688 :_:03/07/16 19:36
http://homepage.mac.com/hiroyuki44/

689 :デフォルトの名無しさん:03/07/16 19:39
>>684
正規表現スレってドコ?

690 :デフォルトの名無しさん:03/07/16 19:57
正規表現道場@2ch Part2
http://pc2.2ch.net/test/read.cgi/php/1038146241/l50

691 :_:03/07/16 21:03
http://homepage.mac.com/hiroyuki44/

692 :デフォルトの名無しさん:03/07/16 22:26
perlappで実行ファイルにコンパイルしたいのですが
やり方が分かりません
どなたか解説お願いします


693 :デフォルトの名無しさん:03/07/16 23:32
レベルが低すぎて笑えるw
もう次刷れたてんなよ>>1

694 :デフォルトの名無しさん:03/07/16 23:46
Win32::APIの話なんかは別にレベル低くないと思うんだが。
まぁAPIに限れば、スレ違いかも知らんケド。
さて、APIリファならASCIIの『Win32API オフィシャルリファレンス』がオススメでつ。

695 :デフォルトの名無しさん:03/07/16 23:48
喪前は>>496=>>499だろ
まだいたのか。しっしっ。

696 :デフォルトの名無しさん:03/07/19 15:08
教えてください.

自分の3Dソフトのオブジェクトをパイソンスクリプトでなく
Perlで一括操作したいと考えています.

3Dに限らずソフトSDKを使って,Perlを実装する話などの
書籍・HP等ございましたら,ご紹介願えないませんでしょうか.

よろしくお願い致します.


697 :デフォルトの名無しさん:03/07/19 15:36
>>696
man perlxs perlxstut

698 :696:03/07/19 15:53
>697さん
該当3DソフトようのPerlインタフェースPlug-inモジュールを
作るってことでしょうか?

699 :696:03/07/19 16:04
考えてみると,Perlのデータ型と3DソフトのSDK(C++)の
データ型を正しい受け渡しと3Dソフト側のオブジェクトの
生成・廃棄を自分でやっているだけですよね...多分

700 :デフォルトの名無しさん:03/07/19 16:06
★クリックで救えるオマ○コがあるらしい★
http://yahooo.s2.x-beat.com/linkvp/linkvp.html

701 :696:03/07/19 16:09
件のPerlxstutで検索したら
なんかそれっぽいのが見つかりました.
http://www.kt.rim.or.jp/~kbk/perl5.005/perlxstut.html
ありがとうございましたm(_ _)m


702 :デフォルトの名無しさん:03/07/20 01:20
Win32::APIについて先月号のハッカージャパンの
大人のスクリプト講座で詳しく説明してたな。
俺はそれだけの理由で買った。

703 :デフォルトの名無しさん:03/07/20 01:31
ハッカージャパンか
面白そうだな

704 :デフォルトの名無しさん:03/07/20 01:54
>>702
なんか面白い使い方載ってた?

705 :デフォルトの名無しさん:03/07/20 16:00
立ち読みしてきたけど何も載ってなかった。

って、先月号かよ_| ̄|○


先月までは何やら色々やってたみたいね。



706 :デフォルトの名無しさん:03/07/21 00:57
ごめん今見たら5月号だから先々月号だね。

707 :デフォルトの名無しさん:03/07/21 01:22
PC書籍の専門店は割とバックナンバー置いてるから
諦めずにGO

で、どんな内容?

708 :デフォルトの名無しさん:03/07/21 11:25
perlで書いたスクリプトをコンパイルするにはどうしたら。。

perlcc使ってみたら
Note(probably hermless)No library found for 'kernel32.lib'
とかいうのが10行くらい出て さらに

'cl'ゆーコマンドはありまへん とMS-DOSが抜かすわけだが。。

D以下にインスコしたのがいけなかったのか??

709 :デフォルトの名無しさん:03/07/21 12:28
Win32::APIのVer0.40を使った
「Susieのプラグインを使った、画像をBMPに変換するコンバーター」
の作り方とかが載ってます。

710 :デフォルトの名無しさん:03/07/21 13:01
このスレ読んでると頭痛がして来る。

インターネットは義務教育が終わってから、とか規制してくれないかなー…

711 :デフォルトの名無しさん:03/07/21 13:01
おお。結構使えそう。

712 :デフォルトの名無しさん:03/07/21 14:01
>>710
(突っ込みたいけどやめておくよ)

713 :デフォルトの名無しさん:03/07/21 14:14
>>708
perl filenameとしてくださいね^^;

714 :デフォルトの名無しさん:03/07/22 14:28
system関数と`(バッククォーテーション)の違いを教えてください。

715 :デフォルトの名無しさん:03/07/22 14:44
しばらく見ないうちに白痴化している……

716 :デフォルトの名無しさん:03/07/22 17:41
>>709
ほほー、なかなか面白そうだな。
そのうちバックナンバー探してみるか。

717 :デフォルトの名無しさん:03/07/22 20:09
>>714
$sys=system('ls');
print $sys;
$back=`ls`;
pritnt $back;
やってみそ。

718 :デフォルトの名無しさん:03/07/22 20:14
>>708
C言語でもやったら?

719 :デフォルトの名無しさん:03/07/22 20:30
'ls' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

720 :デフォルトの名無しさん:03/07/22 20:31
>>719
どこでうごかしてんだよ

721 :デフォルトの名無しさん:03/07/22 20:34
>>717
$sys=system(ls);


722 :デフォルトの名無しさん:03/07/22 23:08
jpegやGIFの画像を受け付けるCGIで、uploadされてきたファイルを
適正なサイズにリサイズして格納したいと思っています。
これは不要に大きなファイルを送られてサーバが圧迫されるのを
防ぎたいのですが、調べたら利用中のサーバにGDがインストールされて
いましたので、これでできるのかも、と自前のテストサーバにも、
GD1.19をインストールしました。(サーバはGD1.18です)

そもそもGDでこんな事は可能なんでしょうか。

またそんなGDの使い方があるサイトとかありませんか?

723 :デフォルトの名無しさん:03/07/22 23:10
調べてからインストールしろ。

724 :_:03/07/22 23:13
http://homepage.mac.com/hiroyuki44/hankaku05.html

725 :_:03/07/22 23:13
http://homepage.mac.com/hiroyuki44/

726 :デフォルトの名無しさん:03/07/22 23:23
>>722
CGIって何?
>>1の存在は無視?
お前の存在も無視していい?

727 :デフォルトの名無しさん:03/07/22 23:57
マルチポストで申し訳ありません。こちらのほうが適切かと思いカキコしました。
行の折り返しに挑戦しています。
format や Text::Wrap を使ってみましたが
文字化けして上手くいきません。
解決方法がありましたら教えて下さい。
参考になるサイトがありましたらよろしくお願いします。


728 :デフォルトの名無しさん:03/07/23 00:31
>>727
http://www.din.or.jp/~ohzaki/perl.htm#JP_Fold

729 :722:03/07/23 10:23
>>726
CGIはCGIだよ。gdはライブラリ。
GDはGD.pmって言ってperのモジュール。

でperlで書いたCGIスクリプトでGD.pm経由であんな事がしたい、
って事ですが、ここはもっと話題が限定的なんですね。

了解しました。

730 :デフォルトの名無しさん:03/07/23 11:33
>>726
この場合、「CGIについての質問」ではないと思うのだが?
背景として説明してるだけでしょ。

731 :デフォルトの名無しさん:03/07/23 12:48
ここはム板だし、スレの流れをCGIに向かわせないために
ここではCGIという単語は一切出さない方が良い。
>>722の質問でもCGIに言及せずに書ける。
722がスレ違いじゃなくても、それに釣られてスレ違いの質問が増えてくるだろ。

732 :デフォルトの名無しさん:03/07/23 13:39
>>731
もういいよ、そっとしといてやるから気にすんなよ。

733 :デフォルトの名無しさん:03/07/23 14:47
フォントデータらしきファイルがあるので、
解析しようと思って、bmpファイルに変換したいけど、
bmpのデータ構造が少し厄介なので、
そのへんを面倒見てくれるモジュールはありますか?

734 :デフォルトの名無しさん:03/07/23 14:48
>>730
「夏」ということで、過剰反応する香具師がどんどん増えるので、、

735 :デフォルトの名無しさん:03/07/23 16:29
質問なんすけど。

全角文字・半角文字の文字数をカウントする関数を作ったんですが
local($s) = @_;
local($l) = length($s);
$s =~ s/[\x81-\x9f\xe0-\xfc].//g;
local($zl) = ($l-length($s))/2;
($l-$zl*2,$zl);
↑こんなやつ

引数の文字列のなかに半角文字が入ってないにも関わらず
半角文字が検出されるようなパターンが発生するかどうか知りたいです。
アフォっぽい質問ですがよろしくおねがいします。

736 :デフォルトの名無しさん:03/07/23 16:59
>>735
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm

737 :デフォルトの名無しさん:03/07/23 19:37
よければ教えてください。

chompを使ってテキストの改行を取るコードを書いて、
以前はきちんと動いていたのですが、
別サーバーでやったら、改行が取れなくなりました。
もとのテキストは、自分で編集したテキストファイルです。
perlは5です。
理由がわかる方はいらっしゃるでしょうか?

もし、ここではしていけない質問だったらすいません…。

738 :デフォルトの名無しさん:03/07/23 19:42
ま、CGIという文字列にマッチした瞬間に顔真っ赤にさせて
必死になってる>>726みたいな香具師はお前が出てけよ。な?


739 :デフォルトの名無しさん:03/07/23 19:47
>>737
s/\x0D\x0A|\x0D|\x0A//g;

もしくは
chompを二回やるとか。

740 :デフォルトの名無しさん:03/07/23 19:59
737です

739さん、ありがとうございます!
できました。

以前はきちんと動いていたので、理由がわからず困っていました。
とても助かりました。

「chompを二回」も試してみたのですが、こちらはダメでした。

ともあれ、ありがとうございました。


741 :デフォルトの名無しさん:03/07/24 01:35
Perl6はParrotというVM上で動くとの話だけど、
そのParrotを作るのに手間取ってなかなかPerl6開発が進まないんだよね?
わざわざ新しいVM作らないでJavaのVMで動くようにすればいいのに。
そうすれば携帯とかもっと色々なプラットフォームでPerlが動くと
思うんだけどどうよ?

742 :デフォルトの名無しさん:03/07/24 01:50
>>741
確かに便利だな
しかし、そうするとPerlじゃなくてJavaを使う罠

743 :デフォルトの名無しさん:03/07/24 01:57
>>742
既存のPerlリソースがJavaVM上で動いたり、Perlソースから
Javaオブジェクトが使えたりするのは、有意義かもな。

Apache-BSF
http://jakarta.apache.org/bsf/
スクリプト言語とJavaBeansのインターフェイスを簡単に作れる
基盤は、IBMがApacheに寄贈してくれている。誰か作ってみそ。

744 :デフォルトの名無しさん:03/07/24 02:12
>>741
Jythonつかえヴぉケ
てめーが考えるようなことはすでにPerl6以前にやってんの
JPLっていうのんで結局開発はとまった
PerlはCISCにのっとったOP命令が多い言語
JavaはRISCにのっとったOPが少ない言語
このふたつをまぜこむのは大変なの
てかparrot<−>JVMはある
ぐぐれや夏厨が
あげんな
責任もって
このスレ削除してこい

745 :デフォルトの名無しさん:03/07/24 02:16
なんか全角記号を使ってる時点でかなり厨っぽいな

746 :デフォルトの名無しさん:03/07/24 10:50
たぶん上司に同じような口調で怒られて
自分でもどなってみたくなったんだろ


747 :デフォルトの名無しさん:03/07/24 16:13
Perlでアラームを短くプッって鳴らすにはどうすればいいの?

748 :デフォルトの名無しさん:03/07/24 16:20
短いアラームのwavファイルをsystemで鳴らす

749 :デフォルトの名無しさん:03/07/24 16:23
print "( ´,_ゝ`)プッ";

750 :デフォルトの名無しさん:03/07/24 16:23
print "\a";
これで鳴る

751 :747:03/07/24 16:35
\aではプーになってしまいます。そこをプッにしたいのですけど、
どうやったらいいのでしょうか?

752 :デフォルトの名無しさん:03/07/24 16:39
>>751
>>748

753 :デフォルトの名無しさん:03/07/24 16:42
いちいちウィンドウを出さずに、音だけ鳴らして
終了してくれるwindowsアプリを紹介して下さい

754 :デフォルトの名無しさん:03/07/24 16:45
>753
板違い過ぎ

755 :デフォルトの名無しさん:03/07/24 16:54
外部アプリ使わなくてもwindows標準でそういう機能無かったっけ
普通にアラーム鳴らす時に自分が使ってる奴

756 :747:03/07/24 16:56
サウンド関係はマザーボードについてるブザーしかないですが、
wavファイルでも大丈夫でしょうか?

757 :デフォルトの名無しさん:03/07/24 16:59
ttp://www.aa.wakwak.com/~pirafu/software/prwave/index.html
こんなのがあった

なに、サウンドボードが無い?
それはもう諦めるしか
っていうか、最初からハードウェア板の管轄だな

758 :デフォルトの名無しさん:03/07/24 17:07
           ,.、   .,r.、
          ,! ヽ ,:'  ゙;.
          !  ゙, |   }.
         ゙;  i_i  ,/          ,.、  .,r.、
         ,r'     `ヽ、       ,! ヽ,:'  ゙;.
        ,i"  _,  ._  ゙;       !  ゙;;  }
        !.  ・     ・ ,!.      ゙;  ii ,/
        ゝ_   x    ,::''      ,r'      `ヽ、
       (^ン''`'''''''''''''' 0∞o。    i"  _,   _  ゙;
        `"!     (  ::) ∧  !. ・     ・ ,! ←>>747
         ゙'ンーr-‐-'")  / < >ゝ_=   x  _::'
          (__ノ   (_,ノ   ∨  /`''''''''(⌒';’∵∴;;゙
                    (⌒ヾ;;,    `ソ :‘
                     ゙゙`ヽ、、、__,,ノ゙

759 :747:03/07/24 17:35
もうプ〜で我慢します。

760 :デフォルトの名無しさん:03/07/24 18:06
あのぷーの長さは誰が決めてるんだ?
鳴ってる以上、普通にドライバがあってどっかに
指令出してるんだろうけど。

761 :デフォルトの名無しさん:03/07/24 18:11
>>753
Dos上で動くんだからそれは無理。

762 :デフォルトの名無しさん:03/07/24 18:17
フロップーのギコギコ音で我慢しる。

open("A:\\GIKOGIKO") while(1);

763 :デフォルトの名無しさん:03/07/24 18:39
Win32::APIを使って再生してみるってのはどうよ。

……って、Windows限定でいいんだっけ?

764 :デフォルトの名無しさん:03/07/24 21:07
それならWin32::Soundでよくないか?

765 :デフォルトの名無しさん:03/07/24 21:42
バッチファイルでこれ使ってたりする
http://www.muconsulting.com/playwav/index.html
playwav.exe

766 :デフォルトの名無しさん:03/07/24 22:58
perlスクリプトってWindowsのサービスとして登録して、
開始とか終了とかできちゃう?無理?

767 :デフォルトの名無しさん:03/07/24 23:27
> 539 名前: 窓板住人 ◆winDOwS0aE :sage 投稿日:03/07/24 (木) 19:17 ID:???
> WIndowsとはそんなに関係ないですが、CGIでよく使われるらしい
> スクリプト、CGI.pmにクロスサイトスクリプティング脆弱性があるようです。
> CGI 職人、あるいはCGI使われている方々は最新のバージョンに
> アップデートすることを推奨します。
>
> http://archives.neohapsis.com/archives/bugtraq/2003-07/0267.html

768 :デフォルトの名無しさん:03/07/25 05:04
>>766
exeなんかをサービスとして動かす方法があったような気がした。
win系の板で聞いた方がよさげ。


769 :デフォルトの名無しさん:03/07/25 05:13
>>766
perl2exe?
perl/tk?

770 :デフォルトの名無しさん:03/07/26 17:46
ファイルをオープンできなかったときメッセージを表示するには
これでいいんですか?
$file_open_flg = open(IN,"<datafile.csv");
@lines = <IN>;
close(IN);
if($file_open_flg==undefine){
print "ファイルをオープンできません";
}

771 :デフォルトの名無しさん:03/07/26 17:47
★貴方をそそるエロティックな美女たちです・・・(;´Д`)ハァ〜★
http://endou.kir.jp/yuminet/link.html
http://endou.kir.jp/marimo/link.html

772 :デフォルトの名無しさん:03/07/26 17:49
>>770
無条件に読み込んでいるようですが、なんのために戻り値を受けているんですか?

773 :デフォルトの名無しさん:03/07/26 17:57
>>770
エラー処理はopen時にやっとけ。

774 :デフォルトの名無しさん:03/07/26 17:59
>>770
#TYPE1
if(!open(FILE,"file0.txt")){
print "NO\n";
#exit
}else{
print "OK\n";}

#TYPE2
open(FILE,"file0.txt") || die print "NO\n";



あいかわらずレヴェルの低いスレだ
泣きそうだ>>1を10000回惨殺したい
ていのうどもはphp板に引っ込んでろ

775 :デフォルトの名無しさん:03/07/26 18:01
そうやっていちいちテンポラリの変数の名前を
考える労力を使わないのがperl風

776 :デフォルトの名無しさん:03/07/26 18:32
>>774

>あいかわらずレヴェルの低いスレだ。泣きそうだ
ワロタ。
でも、まぁ、良いんじゃない。
良くわかってなくても取り合えず動いちゃうのがPerlで、
そこが魅力でもあるんだから。
770もガンガレな。

777 :デフォルトの名無しさん:03/07/26 20:52
#TYPE2
open(FILE,"file0.txt") or die $!;


778 :デフォルトの名無しさん:03/07/27 12:18
eval
{
  open(FILE,"datafile.csv") || die($!);
  @lines=<FILE>;
  close(FILE);
};
if($@)
{
  die($@);
}


779 :デフォルトの名無しさん:03/07/28 01:54
低レベルなのに、なぜか、CとPerlで同じ、すごい簡単なプログラムを書いて
どっちが楽か考えてみるべ。という話になりました。

何でもいいんですが、半径入れたら面積でるとか、全部半角にするとか
いや、ちょっとこれはいくら何でも簡単すぎるか、、。

どんなプログラム書くことにしましょう。
もちろんPerlに有利な(汗)

780 :デフォルトの名無しさん:03/07/28 02:28
アルゴリズムの部分では、Cもperlも変わらないような
Lispとかまで行くと違ってくるけど

perlはCから面倒な部分を極力取り払った感じ

781 :デフォルトの名無しさん:03/07/28 02:53
>>779
こういうのを作らせるのが一番Perlらしさが出るんじゃないかな。
perl -ne '/(if|while|for|switch|case)\b/ && print' hoge.cpp
正規表現の部分は色々変えて。

782 :デフォルトの名無しさん:03/07/28 03:10
正規表現とハッシュだろうな。

783 :デフォルトの名無しさん:03/07/28 03:43

   /⌒ヽ
  / ´_ゝ`)時間的に、ここ通らないと行けないので、通りますよ・・・
  |    /
  | /| |
  // | |
 U  .U


784 :デフォルトの名無しさん:03/07/28 18:20
こいつの顔、まるで死神だな。まさか、死出の旅へ。


785 :デフォルトの名無しさん:03/07/28 23:57
>perl -ne '/(if|while|for|switch|case)\b/ && print' hoge.cpp
これって何をやろうとしてるの?

786 :デフォルトの名無しさん:03/07/29 02:50
egrep '(if|while|for|switch|case)\b' hoge.cpp と同じ。

787 :デフォルトの名無しさん:03/07/29 21:56
質問です。

現在OSはWIndows98SEで、AcrivePerl5.8 をインストールして
Perlが正常に動作いたしました。
ところがopen関数で外部ファイルを読み込もうとすると失敗してしまいます。
具体的な例だと、

$pepfile = 'proteinseq.log';
open(PROTEINFILE,$pepfile);
$protein = <PROTEINFILE>;
print "$protein\n";

をMS-DOSで実行すると

readline() on closed filehandle PROTEINFILE at script/4-5.pl line 11.

となってしまいます。
ファイル名は間違っていません。
なぜ開けないのでしょうか?
ちなみに、これにHTMLのヘッダーをつけてCGIとしてブラウザで実行すると
proteinseq.logをちゃんと読み込んでくれました。

788 :ぼるじょあ ◆yEbBEcuFOU :03/07/29 21:58
>>787
とりあえずopenの戻り値は必ずチェックしろ

789 :デフォルトの名無しさん:03/07/29 22:01

line 11とは$protein = <PROTEINFILE>;の部分にあたります


790 :787:03/07/29 22:02
>>788
ごめんなさい。初心者でして、戻り値のチェックとはどういうことですか?

791 :ぼるじょあ ◆yEbBEcuFOU :03/07/29 22:06
>>790
うーん・・・
open(PROTEINFILE,$pepfile);
print $!;
とやってみな。多分それで原因が分かる。

792 :_:03/07/29 22:09
http://homepage.mac.com/hiroyuki44/hankaku09.html

793 :787:03/07/29 22:09
unless (open(PROTEINFILE,$pepfile)){
print "ファイル $pepfile は開けませんでした。";
exit;
}

としてチェックを入れるとやはり
ファイル $pepfile は開けませんでした。
が実行されてしまいます。
ファイル名は絶対に間違っていません。
このファイルとスクリプトは同じディレクトリにあるのですが、
ディレクトリの指定の仕方がまちがっているのでしょうか?


794 :787:03/07/29 22:12
>>791 ありがとうございます
#!/usr/bin/perl -w

$pepfile = '/proteinseq';

open(PROTEINFILE,$pepfile);
print $!;

$protein = <PROTEINFILE>;
print "$protein\n";

exit;

を実行したら
readline() on closed filehandle PROTEINFILE at script/4-5.pl line 8.
Use of uninitialized value in concatenation (.) or string at script/4-5.pl line
9.
No such file or directory
となりました。やはりディレクトリの指定法が間違ってるような気がするのですが



795 :ぼるじょあ ◆yEbBEcuFOU :03/07/29 22:13
>>794
今度はなんでルートディレクトリからの絶対パスになっているんだ?

796 :787:03/07/29 22:14
>>795
ごめんなさい。間違えました。
でも/つけてもつけなくても同じようです。

797 :ぼるじょあ ◆yEbBEcuFOU :03/07/29 22:15
>>796
ファイル名も変わっているんだけど・・・・

798 :デフォルトの名無しさん:03/07/29 22:16
アルェー

799 :787:03/07/29 22:17
お!
絶対パスで指定したらできました!
やはりパスの指定がおかしかったのですね。
でも相対パスではどうやるのでしょうかね・・・?
いろいろご迷惑おかけしました。
ありがとうございました。 >>ぼるじょあさん

800 :デフォルトの名無しさん:03/07/29 22:17
proteinseq.logってファイルは存在するのか?
そんざいしてないファイルを読み込もうとしても、、、

あと
なんで
$pepfile = "proteinseq.log";
じゃないんだ?

801 :787:03/07/29 22:21
>>797,800
proteinseqとproteinse.logを用意していたのです。
説明不足申し訳ありませんでした。

802 :デフォルトの名無しさん:03/07/29 22:24
起動した時のカレントがどこかだな

803 :787:03/07/29 22:29
>>802
そのようですね。perl.exeが置いてある位置からの相対パスだったようです・・・
違うフォルダにスクリプトファイルも読み込みファイルも置いてあったので

804 :_:03/07/29 22:30
http://homepage.mac.com/hiroyuki44/

805 :デフォルトの名無しさん:03/07/29 22:32
スクリプトと同じディレクトリじゃないのか!?
>>803
use Cwd;
print cwd(),"\n";
これで表示されるものがスクリプトのある場所とは異なる?

806 :805:03/07/29 22:33
おっと、Perlを呼んだときにいるディレクトリだ(^_^;)

807 :805:03/07/29 22:34
というわけで>>805は無視して。

808 :787:03/07/29 22:35
>>803
perl.exeとは別のフォルダにスクリプトと読み込みファイルが置いてあるという意味です。
両ファイルは同じフォルダです。
perl.exeがある場所が C:\Perl\bin
両ファイルは C:\Perl\bin\script
に置いてました。

809 :デフォルトの名無しさん:03/07/29 22:38
>>808
実行するときに
C:\> perl C:\Perl\bin\script\protein.pl
とかやったんでしょ?
スクリプトのある場所に移動してからやらないとね。

810 :デフォルトの名無しさん:03/07/29 22:41
>>1
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

       ヽ(・ω・)/   ズコー
      \(.\ ノ


811 :デフォルトの名無しさん:03/07/29 23:14
まあ、$LOGDIR = "/log" みたいに頭の方で定義して、
絶対パスで指定するのが結局楽だな

812 :デフォルトの名無しさん:03/07/29 23:36
普通はperlのフォルダにpathを通して、実行はスクリプトのあるフォルダから
やるもんじゃないのか?


813 :デフォルトの名無しさん:03/07/29 23:41
>>812
un

814 :_:03/07/29 23:42
http://homepage.mac.com/hiroyuki44/hankaku09.html

815 :_:03/07/30 00:25
http://homepage.mac.com/hiroyuki44/

816 :_:03/07/30 01:52
http://homepage.mac.com/hiroyuki44/

817 :_:03/07/30 03:00
http://homepage.mac.com/hiroyuki44/

818 :デフォルトの名無しさん:03/07/30 14:11
   /⌒ヽ
  / ´_ゝ`)時間的に、ここ通らないと行けないので、通りますよ・・・
  |    /
  | /| |
  // | |
 U  .U


819 :デフォルトの名無しさん:03/07/30 23:18
DES3で暗号化した文字列をファイルに書き込んで
復号化しようと読み込むと途中までしか読めないのは何が悪いんでしょうか?

ちなみにどこまで読めてるのかなーとprintしてみるとピーとかビープ音が出ます。

820 :デフォルトの名無しさん:03/07/30 23:51
>>891
コード晒せ
何のモジュールつかってるのか書けよ
2度使いまわすファイルなどは
書き込み用にopenしたファイルは必ずcloseしたあと
もういっかい読み込みようにopenするんだよ
てかopenしたらcloseすること

821 :819:03/07/30 23:59
>>820

use DES::TripleDES;

open ( FILE_IN ,"< $file_in" ) ;
open ( FILE_OUT ,"> $file_out" ) ;

my $des = new TripleDES;

while ( $line= <FILE_IN> ){
print $line;
$content = $content.$line;
}
close ( FILE_IN );

#Encode
if ( $transaction == 1 ){
print FILE_OUT $des->encrypt3 ( $content, $pass );
}
#Decode
elsif( $transaction == 2 ){
print FILE_OUT $des->decrypt3 ( $content, $pass );
}

close ( FILE_OUT );

DESはCPANから拾ってきたやつです。
http://search.cpan.org/author/JLISHEV/WebTools-1.27/lib/modules/additionals/TripleDES.pm


822 :デフォルトの名無しさん:03/07/31 00:04
>>891
そんなプログラム書いてると、FBIにマークされるぞ

823 :デフォルトの名無しさん:03/07/31 00:05
>>822は預言者


824 :デフォルトの名無しさん:03/07/31 00:29
これじゃだめか?ActivePerlだが

#!C:/perl58/bin/perl5.8.0.exe
#use DES::TripleDES;#(UNIXの場合)
use Crypt::TripleDES;#(ActivePerl/ppmの場合)
open(FILE,$ARGV[0]);
read(FILE,$plaintext,-s $ARGV[0]);
$passphrase="enigma";
my $des = new Crypt::TripleDES;
my $cyphertext = $des->encrypt3 ( $plaintext, $passphrase );
my $plaintext = $des->decrypt3 ( $cyphertext, $passphrase );

print $plaintext

825 :デフォルトの名無しさん:03/07/31 00:34
open(FILE,$ARGV[0]);#$ARGV[0]は最初の引数 $ARGV[0]にファイル名を入れる
read(FILE,$plaintext,-s $ARGV[0]);
#-s でファイルのサイズの取得、$plaintextにバッファを詰める

>>ピーとかビープ音
うーんこれはもっとプログラムの勉強しようC言語とかアスキーコードとか

826 :819:03/07/31 00:41
>>822
え?輸出制限はもうなくなったのでは?

>>824
それなら出来るんですけど一回ファイルに書き出して
それを読み込むと途中までしか読めないんです^^;
普通のファイルだと読めているので暗号化した文字列の問題なんでしょうか?

>>825
readで読んでも同じところで切れてしまいます。
C言語とかアスキーコードとかの勉強をするとビープ音が分かるようになるんですか?

827 :デフォルトの名無しさん:03/07/31 01:32
binmode

828 :819:03/07/31 07:30
>>827
解決、有難うございます。

ところでTripleDESって勝手に使っちゃいけないんですか?

829 :デフォルトの名無しさん:03/07/31 23:12
バレなければいいんじゃない?

830 :デフォルトの名無しさん:03/08/01 00:39
すみません、思いっきり初歩的な質問ですが2点ご教授願います。

$| = 1;
これはどういう意味でしょう?

print (pack 'H*', $1);
これも意味が分かりません。
H*は16進数文字列 (上位ビットが先)、だと思うのですが、$1は1文字???

Pascalでのプログラミングは慣れているのですが、Perlは初めてなので
どなたか教えてください。

831 :デフォルトの名無しさん:03/08/01 00:43
>>830
$| = 1;

現在selectされている(初めはSTDOUT)をバッファリング無しに設定する。
$|=1;
$i=10;
while($i--){print '>'; sleep(1);}
これを$|の値が0の時と比べてみると違いが分かるかも。

832 :デフォルトの名無しさん:03/08/01 00:44
×されている
○されている出力チャネル

833 :デフォルトの名無しさん:03/08/01 00:59
>>830
$| : http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq5.html
pack: http://homepage2.nifty.com/Catra/memo/perl_pack.html
$1: http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html

834 :デフォルトの名無しさん:03/08/01 01:14
>>831-833
Thanks!

835 :デフォルトの名無しさん:03/08/01 01:36
すみません、830です。もう一つだけご教授願います。
my $data_format = 'Lff';
my $data_length = 20;
syswrite FILE, $data, $data_length;
この$data_formatの形式を教えてください。
解説しているサイトへのリンクだけでも結構です。

836 :デフォルトの名無しさん:03/08/01 01:42
$data_format使ってないじゃん

837 :デフォルトの名無しさん:03/08/01 01:46
>>835
http://www.google.co.jp/search?num=100&q=format+Lff
http://www.hyuki.com/writing/techask.html

838 :デフォルトの名無しさん:03/08/01 02:37
>>835
man perlfunc で pack TEMPLATE のところ見れ。
つーかそれ以前にperlのマニュアルひととおり読め。

839 :デフォルトの名無しさん:03/08/01 06:57
>>836
思いっきりお馬鹿な質問の書き方してスマソ。
引用をとちってました。使っているのは
my $data = (pack $data_format, $time, $a, $b);
です。

>>837
だよな。本来だったら回線切って逝ってこなきゃいけないよな。
これだけ聞いたらもうご迷惑は書けないのでスマソ。
ぐぐってもローパスフィルターしか出て来ないんですよ。

>>838
ゴメン。今「はじめてのperl」の到着待ちっす。

840 :839:03/08/01 07:25
ごめん。分かった。
符号無しLongと単精度浮動小数点のことだったみたい。
回線切って逝ってくる。

841 :デフォルトの名無しさん:03/08/01 13:43
age

842 :デフォルトの名無しさん:03/08/01 13:45



843 :山崎 渉:03/08/02 02:06
(^^)

844 :デフォルトの名無しさん:03/08/03 17:17
WindowsでPerlを使ってシリアル通信をしたいんですけど、
(具体的には携帯電話のメモリ読み書きなど)
どうやればいいんでしょうか?

845 :デフォルトの名無しさん:03/08/03 17:45
ドライバとモジュールを用意して、ファイルのように読み書き

846 :デフォルトの名無しさん:03/08/03 19:34
open(AUX,">AUX");
select AUX;
print "ATD110\n";

847 :844:03/08/03 21:28
>>845
ドライバというのはシリアルケーブルのドライバのことでしょうか?
モジュールとはPerlモジュールですか?

>>847
AUXというのはシリアルケーブルにつながれた携帯電話を示すのでしょうか?


848 :844:03/08/03 21:30
>>847>>846でした。
print "ATD110\n";
というのは110番に電話をかけるということかな?(w


849 :デフォルトの名無しさん:03/08/03 21:53
読み書きする方法を確立するのはperl以前の話だし、
読み出した後のデータフォーマットの扱いは
既にperlの話ではないし

850 :デフォルトの名無しさん:03/08/04 04:43
>>844
まずググったのか?CPANでモジュールの検索をしたのか?と小一時間.........(ry

851 :デフォルトの名無しさん:03/08/04 12:18
>>850
いろいろ調べてみたら、
http://www.e-founder.net/serial.php
こうゆうのが出てきたんですけど、
open_prtの引数には何を入れれば入れればいいかが分かりません。
(そもそもWinでも使えるのか?)

他にはDevice::serialportとかありましたけど、
これもいまいち使い方がわかりません。

↓こことか見ると
http://www.att.or.jp/perl/faq/perlwin32faq/perlwin32faq8j.html#How_do_I_read_from_and_write_to_
普通に
open( PORT, "+>COM1" )
とかでいいみたいに書いてありますが。


852 :デフォルトの名無しさん:03/08/04 13:13
>>851
CPANにWin32-SerialPortというモジュールがある。
それをインストールして試せ。 インストールの仕方を聞くなんて野暮はすんなよ。
そのドキュメント読んで使い方を理解しろ。 英語は苦手なんて泣き言はいうなよ。
成功を祈る。

853 :デフォルトの名無しさん:03/08/04 15:26
つかレス読んでると通信自体が分かってないようだが。Perl以前の問題だな。

854 :デフォルトの名無しさん:03/08/04 17:56
>>853
>Perl以前の問題だな。

ホー、コンピュータ全般に通じてらっしゃる方は言うことが違う

855 :デフォルトの名無しさん:03/08/04 18:28
×言うこと
○仰ること

はい、もう一度

856 :デフォルトの名無しさん:03/08/04 19:12
>>854
「でばいすふぁいる」ってしってまちゅか?

857 :デフォルトの名無しさん:03/08/04 19:12
>>855
ご指摘感謝、謝々。 では、改めて

ホェー、コンピュータ全般に通じてらっしゃる方はホザクことが違う

858 :デフォルトの名無しさん:03/08/04 19:16
コンピュータ全般以前に、目的と手段の区別が付いてない。

859 :デフォルトの名無しさん:03/08/04 19:20
>>854
何言ってんだ?通信路さえ確保できればあとは言語に関係ないだろう。
逆切れすると誰も答えてくれなくなるよ。

860 :デフォルトの名無しさん:03/08/04 19:49
>>859
これは、これは。全知全能のカビ様。
あバレな私めをお救いくだざいましぇ(ケケケ

861 :デフォルトの名無しさん:03/08/04 20:14
>>859
お偉いさんの発言だね。うふ。
素人がカラスの時の苦労がわくぁんねぇだろな。

862 :デフォルトの名無しさん:03/08/04 20:38
なんかバカがくやしがってるな。(ケケケ


863 :デフォルトの名無しさん:03/08/04 20:52
南下、歯応江のないスレ
馬鹿は馬鹿なりに頭いいと思い込んでるんだろな

864 :デフォルトの名無しさん:03/08/04 21:43
>>863
>>6

865 :デフォルトの名無しさん:03/08/04 21:53
PerlはWEBプログラム言語かよ・・・狂ってるな

866 :デフォルトの名無しさん:03/08/04 23:15
PerlはShellScriptの代わりだよ。
今時WebProg板にスレがあるのがおかしい。後方互換のためにあるようなもんだ。

867 :デフォルトの名無しさん:03/08/04 23:39
まあ、ここは隔離スレなんだがな

868 :844:03/08/05 02:35
>>852
了解です。Win32::SerialPort使うことにしました。
ActivePerlではPPMに対応してないみたいですが、
見た感じPurePerlなのでそのまま使おうかと思います。

英語は何とか翻訳しつつできると思いますが、
>>853の言うとおりシリアル通信についてほとんど知識がないので
まだ使いこなせないかも・・・





869 :デフォルトの名無しさん:03/08/05 16:32
http://ingres.t.u-tokyo.ac.jp/Lecture/WebApplication/text/node223.html
のようにモジュールを作成し、
http://ingres.t.u-tokyo.ac.jp/Lecture/WebApplication/text/node224.html
のように呼び出すと

Undefined subroutine &main::tashizan called at keisantest.pl line 11.

のようなエラーがでます。

my $val3 = tashizan($val1, $val2);

のところを

my $val3 = Keisan::tashizan($val1, $val2);

すれば動きますが、これが正しいのでしょうか?
当方の環境は以下の通りです。

This is perl, v5.6.1 built for cygwin-multi


870 :デフォルトの名無しさん:03/08/05 17:40
>>869
理解して使えよ


871 :デフォルトの名無しさん:03/08/05 17:43
( ^▽^)<女の子理解してよ〜♪(ボエー

872 :852:03/08/05 19:47
>>868
Win32-SerialPortはWin32-APIを使ってシリアル通信関係のAPIをPerlで
使えるようにしたモジュール。->要インストール、Win32-API
だから、「Windows RS232C API」とか「Windows シリアル通信 API」などを
キーワードにしてググればperl以外でのAPIの使用例がヒットするはず。
参考になると思う。 ガンガレ!

873 :844:03/08/05 23:27
>>872
ありがとう、がんばります!

874 :デフォルトの名無しさん:03/08/06 09:10
>>870
ありがとう、がんばります!

といいたいところだけど、理解してないから聞いてんだけどなぁ。
つーか使ってるんじゃなくて使おうと思ってるだけだけど。

まあ、それはいいとして「perl 名前空間」というキーワードでぐぐってみたらExporterの使い方に問題があたかもしれない。

上記URLサンプル
@EXPORT = qw(Tashizan);

私的改訂版
@EXPORT = qw(tashizan);



875 :デフォルトの名無しさん:03/08/06 09:58
>>874
>>6

876 :デフォルトの名無しさん:03/08/06 15:28
数字の文字列があるとして(可変長)
それを初めてある数字が出てくる場所から文字列の最後までに切り詰めるにはどうすれば?
例)
123456789というのを
初めて5が出てくるところから最後までの
56789に切り詰める(置換する)

s/(5\d+)$/$1/ とやったら全部まるまるマッチしてしまう・・・

877 :876:03/08/06 15:40
置換対象の数字ですが
「初めて」の数字が先頭に来ることもありますし、最後の1文字(1桁目)だけになることもあるし
文字列に複数回出現することもあります

878 :デフォルトの名無しさん:03/08/06 15:44
s/(\d*)5/5/なんてどうよ

879 :デフォルトの名無しさん:03/08/06 16:00
s/(5\d+)/$1/ じゃだめ?

880 :デフォルトの名無しさん:03/08/06 16:01
>>876
ちなみにそれ、「全部まるまるマッチしている」わけじゃないよ。
マッチしているのは"56789"の部分だけ。
"123456789"の中の"56789"を"56789"に置き換えた結果が
元の文字列と何も変わらないのは当然のことだよ。

881 :デフォルトの名無しさん:03/08/06 16:09
$1をなにかに代入

882 :デフォルトの名無しさん:03/08/06 16:34
>>876
$num = 123456789;
$num = substr $num, index($num, '5');

883 :デフォルトの名無しさん:03/08/06 16:38
置換でやるなら
$num =~ s/^.*?(?=5)//;

884 :デフォルトの名無しさん:03/08/06 16:47
$num = s/^[^5]*//;


885 :デフォルトの名無しさん:03/08/06 17:04
>>880
あ、そうですね・・・(゚д゚;)

皆さんしょーもない勘違いに付き合って下さってどうもです

886 :デフォルトの名無しさん:03/08/06 17:38
「Perlについての質問箱 4箱目」スレをどうしても見たいんですけど
どうしたらいいですか?


887 :_:03/08/06 17:39
http://homepage.mac.com/hiroyuki44/

888 :デフォルトの名無しさん:03/08/06 17:40
Perl5のコードをPerl6の文法で記述することができる
プラグマってありましたっけ?

889 :デフォルトの名無しさん:03/08/06 17:42
>>886
●を買う

890 :デフォルトの名無しさん:03/08/06 17:43
って思ったらとっくにHTML化してんじゃん。
ほれ
http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html

891 :デフォルトの名無しさん:03/08/06 17:59
>>890 また騙されたスレ

892 :デフォルトの名無しさん:03/08/06 18:37
悪質ないたずらはやめてください

893 :デフォルトの名無しさん:03/08/06 19:04
>>886
2ちゃんねるプラスという雑誌に書いてあるIDとパスを(ry

894 :デフォルトの名無しさん:03/08/06 20:00
PerlはXMLデータの送受信ってできるんかな?
HTTP(S)のPOSTで。(CGI)

895 :デフォルトの名無しさん:03/08/06 20:53
>>894
できるよ。
> HTTP(S)のPOSTで。(CGI)
あっそ。(・∀・)カエレ

896 :デフォルトの名無しさん:03/08/06 23:23
>>888
Perl6::Classesとかだなぁ。
http://search.cpan.org/modlist/Perl6 を山椒。

つかもうcpan色戻ったのね。
戻ったら戻ったでなんだかまた落ち着かないなぁ。

897 :デフォルトの名無しさん:03/08/06 23:23
ファイルをカレントディレクトリ以外に作るとき、
open(FILE, ">c:\\dir\\file.txt");
と書けば作れますか?
chdirを使わないとダメですかねぇ?

まぁ自分で書いてみればいいんですけど…。

898 :デフォルトの名無しさん:03/08/06 23:57
>まぁ自分で書いてみればいいんですけど…。

分かってんならやれ

899 :デフォルトの名無しさん:03/08/07 00:02
釣れた

900 :デフォルトの名無しさん:03/08/07 00:04
釣れた

901 :デフォルトの名無しさん:03/08/07 00:58
釣れた

902 :デフォルトの名無しさん:03/08/07 01:25
釣られちゃった

903 :デフォルトの名無しさん:03/08/07 01:33
     /V\
    /◎;;;,;,,,,ヽ
 _ ム::::(,,゚Д゚)::| < (ry
ヽツ.(ノ:::::::::.:::::.:..|)
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U'

904 :デフォルトの名無しさん:03/08/07 02:18
釣れた

905 :デフォルトの名無しさん:03/08/07 06:41
HTMLファイルを読んで解析するCPANにあるモジュールの定番って
何でしょうか?
例えば、
<font size="+2" color="red">大きな赤い文字</font>
だと、タグ名=font、size="+2"、color="red"、値=大きな赤い文字
みたいに取り出すイメージです。


906 :デフォルトの名無しさん:03/08/07 09:25
>>905
perlをインストールしても、モジュールは何がインストールされていて
どういう事ができるか、ドキュメントを読みもしない香具師がこういう
クソな質問をする。

907 :デフォルトの名無しさん:03/08/07 09:33
>>906
まぁ落ち着け。
>>905は定番を聞いてるだけなんだからいいじゃないか。
それぐらい答えてあげようよ。

>>905
定番なんか聞いてどうすんだ。自分の使いやすい奴を使えばいい。

908 :デフォルトの名無しさん:03/08/07 09:41
>>905
質問する前に
http://www.cpan.org/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/ を
眺めたのか?と小一時間.....(ry
HTMLを(構文)解析するを英訳すると何になるか考えたことがあるのか?と小一時間.....(ry

909 :デフォルトの名無しさん:03/08/07 10:22
>>905
HTML::Parserだべ。解析するHTMLはutf8に変換した方が吉。
package FontParser;
use strict;
use HTML::Parser;
use base qw (HTML::Parser);
sub start {
my( $self, $tagname, $attr, $attrseq, $origtext ) = @_;
if ($tagname eq 'font') {
$self->{font}++;
for my $key (@$attrseq) {
my $value = $attr->{$key};
print "$key: $value\n";
}
}
}
sub text {
my($self, $origtext, $is_cdata) = @_;
print "text:$origtext\n" if $self->{font};
}
sub end {
my( $self, $tagname, $origtext ) = @_;
$self->{font} ='';
}
1;
use FontParser;
my $str = '<font size="+2" color="red">大きな赤い文字</font>';
$p = new FontParser;
$p->parse($str);


910 :デフォルトの名無しさん:03/08/07 10:26
>>909
s/$self->{font} ='';/$self->{font} ='' if ($tagname eq 'font');/

911 :デフォルトの名無しさん:03/08/07 18:28
perlまたはphpで、次のようなプログラムを作りたいと考えています。

スクリプトを置いているサーバーから、別のサーバーにおいてあるphpで書かれた
ファイルを実行したときに出力されるHTMLソースをコピーし、スクリプトを置いてある
サーバーに保存する。

どういう方法があるかお願いします。

912 :_:03/08/07 18:40
http://homepage.mac.com/hiroyuki45/

913 :デフォルトの名無しさん:03/08/07 18:41
>>911
ブラウザで〜.phpや〜.cgiにアクセスして表示されたページをファイルに保存する

これと同じ働きをするプログラムを組めばいい

914 :デフォルトの名無しさん:03/08/07 18:43
つーかPerl|php以前の話だな・・・

915 :デフォルトの名無しさん:03/08/07 18:50
>>913
いや、だからperlで〜.phpや〜.cgiにアクセスする方法を知りたいんですが。

916 :デフォルトの名無しさん:03/08/07 18:52
>>913
LWPモジュールを使えばできる。

917 :デフォルトの名無しさん:03/08/07 18:52
ヒント
LWP

あとはググれ
じゃーな

918 :デフォルトの名無しさん:03/08/07 18:52
>>913
http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FLWP


919 :デフォルトの名無しさん:03/08/07 18:55
>>916-918
ありがとうございます。LPWは入っているようなので、試してみたらできました。
・・・意外と簡単なんですね・・・

920 :913:03/08/07 18:56
おい、俺はLWPぐらい知ってるっての^^;

921 :デフォルトの名無しさん:03/08/07 19:41
おまえらケコーンしすぎだろ


922 :デフォルトの名無しさん:03/08/08 06:14
素朴な疑問なんだけどCGIは一切作らないけど、
perlを頻繁に使ってるって人はこの板にどのくらいいるの?

出来ればOSの種類とかも教えてくれると面白いカモ。

923 :デフォルトの名無しさん:03/08/08 06:16
ちなみに俺はCGIのperlだったから。
で、案外perlはやるなってコトでwinでもTk入れて遊びで動かしたりしてる。
unix系は持ってないし。

924 :デフォルトの名無しさん:03/08/08 06:35
漏れは、cgiもつくるけど、データコンバータなどを作ったりして重宝しとる。

あと、他にもやってるが素性がバレるでな(w

925 :デフォルトの名無しさん:03/08/08 06:56
cgiは作ったことないけど、各種テキスト処理とか、
ネットワーク絡みとか、何でもやらせてる。
バイナリも扱う。
モジュールは殆ど使ってない。

昔ならCで書いてたのを、より楽な言語でやってるだけ。

926 :デフォルトの名無しさん:03/08/08 07:09
4のころはいろいろツールを作るのに使ってたよ。
5で挫折した。

927 :デフォルトの名無しさん:03/08/08 09:12
俺も>924みたいな感じ。
簡単に組めるし文字列にも強いからちょっとしたデータコンバータに便利だな。

928 :デフォルトの名無しさん:03/08/08 10:06
>>924はアヤシイ会社のスパマー

929 :デフォルトの名無しさん:03/08/08 10:34
データコンバータってなんですか?

930 :デフォルトの名無しさん:03/08/08 11:17
データをコンバートするプログラム

931 :デフォルトの名無しさん:03/08/08 12:22
INCMのプラグイン作成とか

932 :デフォルトの名無しさん:03/08/08 14:14
>>922
漏れがそうだよ。翻訳をやっていて、辞書のデータをコンバートするために
覚えた。その後もユーザ管理とかデータ処理などに使っている。

933 :デフォルトの名無しさん:03/08/08 14:24
特定用途のシェアウェアがごろごろしてるのを見ると、
簡単なperlくらい必須科目にしたくなるな

934 :659:03/08/09 08:48
必須科目にしても使わない人のほうが多そうだから、あれじゃないかな。

CGI以外ではプログラマのための言語って匂いがするなぁ。。
自作実行、みたいな。
そうでもない?

935 :デフォルトの名無しさん:03/08/09 08:49
名前に変な数字入った。気にしないでくれ。

936 :デフォルトの名無しさん:03/08/09 10:49
ネタニマジレ(ry


937 :デフォルトの名無しさん:03/08/09 13:18
Perlのサクッと作ってサクッと実行できる感覚が止められない。
これでGUIもサクッとできたら(俺の中では)完璧だなぁ。
(Tkはかっちょ悪いので使いたくないです)

938 :デフォルトの名無しさん:03/08/09 16:21
>>934=Windowsしか使ったこと無い

939 :デフォルトの名無しさん:03/08/09 23:40
>938 = MZ-80K しか使ったことない。


940 :905:03/08/10 08:55
>>909
ありがとうございました。

そのモジュール、スレッド対応Perlでは動かなかった...


941 :デフォルトの名無しさん:03/08/10 09:27
>>939
キーボード半田付けした人

942 :デフォルトの名無しさん:03/08/11 14:26
>>940
> そのモジュール、スレッド対応Perlでは動かなかった...

HTML::Parserがスレッドセーフじゃないってことか?信じられんな。
HTML-Parser-3.28のソース眺めたけど、無問題と思えるのだが。

オイ、オマイ等の中で分かる香具師いらっしゃいますか?

943 :デフォルトの名無しさん:03/08/11 14:29
system("find data/ -type f -atime +1 -exec rm {} \\;");

このようにして1日更新のないファイルを削除するようにしているのですが
XREAというレンタルサーバーでは動いてくれません。
なにか回避方法はないでしょうか?

944 :デフォルトの名無しさん:03/08/11 14:48
>>943 perl で書きなおす。

945 :デフォルトの名無しさん:03/08/11 15:35
open(FH,"+>data.dat");
$line = <FH>;
print $line;

てやってもdata.datの内容が表示されないんだけどなんでですか?
data.datには文字列が一行だけ入ってます。

946 :デフォルトの名無しさん:03/08/11 15:39
open した時点で内容が消されるから

947 :デフォルトの名無しさん:03/08/11 15:40
>>945
何故それで読めると思いましたか?

948 :945:03/08/11 16:38
   / ̄ ̄ ̄ ̄ ̄ ミ
  /  ,―――─―-ミ
 /  //     \|
 |  / ,(・ )   ( ・)  ハァ
  (6       つ   |    ハァ
  |      ∪__  |
  |      /__/ /
/|     ∪   /\

夏厨だから

949 :デフォルトの名無しさん:03/08/11 18:50
スレッドセーフじゃないモジュールをスレッドで使用するのに
何か回避策はありますか?

950 :(・∀・)ニヤニヤ ◆IuDnGO5LnY :03/08/11 21:38
Rubyでライブラリをセルフテストする方法として

if $0 == __FILE__
  xxx
end

ってのがありますが、Perlで同等のことはできませんか?

Perlにはちゃんとテスト用の機構があるのは知ってますが、
・require/use等で使われたときは実行されず、
・直接起動したときだけ実行される
・Perl4でも動作する記法
を知りたいのです。

よろしくおながいします。

951 :デフォルトの名無しさん:03/08/11 22:08
>>942
5.005_03なのですが、Can't load ..... Parser.so
DynaLoader.pmでPL_stack_max(だったかな)でundefinedうんぬんて出てきました。
Perlのバージョンが悪いのかな。
Parser.pmはバージョン3.08でした。

952 :デフォルトの名無しさん:03/08/12 00:32
>>950
もともとPerlで使われてた手法だろ。

953 :ハッカ飴:03/08/12 00:57
CPANモジュールのAlgorithm::Diffってちゃんと動く?
少なくとも俺の環境では正しい結果を返さないんだが。

954 :デフォルトの名無しさん:03/08/12 01:00
なにやっても動かぬ。

955 :デフォルトの名無しさん:03/08/12 01:04
そうですか。

956 :ハッカ飴:03/08/12 01:08
そんなわけあるか。
ドキュメントにある
a x b y c z p d q
a b c a x b y c z
でさえ
a x b y c z p d q
a b c a x b y c z
になっちゃうんだぜ?

957 :デフォルトの名無しさん:03/08/12 01:13
へー・・

958 :ハッカ飴:03/08/12 01:14
違う違う、こうだこうだ。
a    x b y c z p d q
a b c a x b y c z

959 :デフォルトの名無しさん:03/08/12 01:16
ほー・・・

960 :デフォルトの名無しさん:03/08/12 01:16
ハッカ飴って人は、ただ単にメルフレ募集の人だね。
寂しそう。

961 :ハッカ飴:03/08/12 01:18
上手くいかないな。
じゃあ、こう。.は空白だと思ってくれ。

a.......x.b.y.c.z.p.d.q
a.b.c.a.x.b.y.c.z

サンプルスクリプトも載せようか?
俺はググってもこの話が見つからないことが不思議でしょうがないんだ。
何か教えてくれるなら、労力は惜しまないぞ。

962 :ハッカ飴:03/08/12 01:20
>>960
俺のポリシーだ。
それにここに書き込む話じゃない。

963 :デフォルトの名無しさん:03/08/12 01:27
以上、使えぬデシャバリさんですた。


ここ、スレッドあぼーんするかな。

964 :デフォルトの名無しさん:03/08/12 01:28
夏。

965 :デフォルトの名無しさん:03/08/12 01:33
>>963
どっちが使えないんだか分からん

966 :デフォルトの名無しさん:03/08/12 01:35
>>963
このスレッドに恨みでもあるの?

967 :デフォルトの名無しさん:03/08/12 01:39
   ∧_∧ 
   ( ´Д`) <みなさーん、お茶が入りましたよ〜 
  /    \ 
  | l    l |     ..,. ., .,
  | |    | _|。.:_::゜。-.;.:゜。:.:;。
  ヽ \_ .。'゚/   `。:、`;゜:;.::.。:.:。 
   /\_ン∩ソ\    ::..゜:: ゚。:.:.::.。.。:.  
.  /  /`ー'ー'\ \  ゜: ::..゜:: ゚。:.:.:,。:.:.
 〈  く     / / ::..゜:: ゚。:.:.:,.:.:.:。:.:,
.  \ L   ./ / _::..゜:: ゚。:.:.:,.:.:,.:.:.:,
    〉 )  ( .::旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
   (_,ノ    .`ー'旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.

968 :2バイト文字に対応したカレントディレクトリを取得するには?:03/08/12 12:44
getcwd()で、カレントディレクトリ名を得る時、
カレントパス名に、文字化けする40種の文字列
(「表」「能」等、所謂「\」コードを含む文字列)
があると、正しく処理されないのですが…

Windows のActive State Perlで、
例えばカレントが
 C:\表示\
である場合、

 use Cwd;
 print getcwd();
の結果は

C:/・示
となります。

どうしたら回避できるでしょう?
(2バイト文字を含むカレントパスを正しく得られるgetcwd
等はないのでしょうか?)
(EUCで書いても同じです。jperlはNGです)


969 :デフォルトの名無しさん:03/08/12 12:52
>>968
$path=`cd`;
`はバッククォート。

970 :デフォルトの名無しさん:03/08/12 13:15
>>969
cdは帰ってこないでしょ

971 :2バイト文字に対応したカレントディレクトリを取得するには?:03/08/12 13:16
>>969
ごめんなさい。perlappに内包したいので、
例え標準関数でも外部プログラムは使わず、
perlの中だけで済ませたいのですが…
何か方法はないでしょうか?

972 :デフォルトの名無しさん:03/08/12 13:44
>>968
use Cwd;
use File::Spec;

my $cwd = getcwd();
$cwd = File::Spec->canonpath($cwd);

print $cwd;


973 :972:03/08/12 13:50
>>972
自分で書いておいてなんだが、いいのか、これで?(w
なんかやばそうな気が。

974 :972:03/08/12 14:09
Cwd の _os2_cwd と _win32_cwd で \ を / に置換してるのが原因で、
File::Spec(File::Spec::Win32) の canonpath で / を \ に戻してるわけだから、
とりあえずWin32環境では問題なさそう。
他の環境も大丈夫だとは思う。

975 :デフォルトの名無しさん:03/08/12 15:54
WindowsでPerlによるGUIアプリを組むのにVBのように簡単に作りたいんですが、
探してたらこんなの見つけました(既出だったらごめん)。

http://www.bahnhof.se/~johanl/perl/Loft/

ただこれはソフトもマニュアルも英語なんですよね。
別に英語でもなんとか使えると思いますが、
二本のPerl界の発展のためにソフト・マニュアルのの日本語化を
してくれるような素敵な香具師はいらっしゃいませんか?

(By 日本のPerl界を憂うもの)

976 :デフォルトの名無しさん:03/08/12 15:56
>>975
二本→日本でした。

977 :デフォルトの名無しさん:03/08/12 15:58
>>975
あんたがやったら?

978 :デフォルトの名無しさん:03/08/12 16:02
ActivePerl ver6まだ〜?

979 :デフォルトの名無しさん:03/08/12 16:02
>>977
それ言われると思った。
残念ながら英語に関してはあまり得意ではないので、
誰か英語得意な方にお願いしたいなと思っております。

980 :ハッカ飴:03/08/12 16:07
diffの件なんだけどさー、Rubyのalgorithm/diffもCygwinのdiffも同じようになるんだが、おかしいよな?
ググっても相変わらずこの話は見つからないし。ホント謎だよ。

例1
テキスト1:
abc
テキスト2:
ababc

結果1
ab[ab]c
(テキスト1のbc間にabを追加しろ)

例2
テキスト1:
a
b
c
テキスト2:
a
b
a
b
c

結果2
a
b
[a]
[b]
c
(テキスト1の3行目にa、次の行にbを追加しろ)

981 :デフォルトの名無しさん:03/08/12 16:08
>>974
ActivePerl build 805 +WindowsXPでは駄目。
ActivePerlはMS-WindowsでShift-JISが
使われているということを無視してる。

982 :デフォルトの名無しさん:03/08/12 16:11
>>979
>残念ながら英語に関してはあまり得意ではない

得意になればいいじゃん

983 :ハッカ飴:03/08/12 16:40
>>974
/ 全てを \ に置き換えてもダメだろう。
シフトJISについて調べて、置き換えるべき / だけを置き換えないと。

シフトJISだから、第1バイトを探すのは簡単。
use Cwd;
$cwd = getcwd();
のあとで、$cwd =~ s%(シフトJISの第1バイトにあうパターン)/%\1\\%g;

984 :デフォルトの名無しさん:03/08/12 17:01
>>982
いや〜誰かにやって欲しいなぁ。
ホント他力本願なんだけど・・・

もう少しでこのスレも6箱目に突入ですなぁ。
(しみじみと)

985 :ハッカ飴:03/08/12 17:03
>>971
getcwd()だって内部でcdコマンド使ってるんじゃない?

986 :デフォルトの名無しさん:03/08/12 17:13
Cで使えるPerlライブラリみたいのってありませんか?

987 :2バイト文字に対応したカレントディレクトリを取得するには?:03/08/12 17:17
>>972
で無事解決しました。感謝ですm(__)m

canonpathというの自体初めて知りました。。
書き込み入れる前にも色々調べはしたんですけど…
こういうのって、何を参考に調べれば良いんでしょう?

988 :デフォルトの名無しさん:03/08/12 18:16
>>983
シフトJISなら2バイト文字で /(0x2F) が出てくることはないし、
Windowsじゃファイル名に / も使えないから、元々含まれてる
ことはないと判断して単純に全置換でいいと思ったんだけど……なんか抜けてる?

あ、それとも / 区切りのパスを得るために、ってこと?


989 :デフォルトの名無しさん:03/08/12 18:21
「\x9A」という16進数のデータを「\x9A」という文字列データに
変換したいのですがどうすればいいでしょうか?

990 :デフォルトの名無しさん:03/08/12 18:44
>>989
$str .= '\x9A";

991 :デフォルトの名無しさん:03/08/12 18:50
クオテーション間違えている上にだめじゃん。

$ch = char(0x9A);

992 :ハッカ飴:03/08/12 19:17
>>988
そうか。
全部置き換えて良かったのか。

993 :デフォルトの名無しさん:03/08/12 19:55
>>970
ハァ?

994 :(・∀・;)ニヤニヤ ◆IuDnGO5LnY :03/08/12 20:08
>>952
そうなんですか?

そうすると、Rubyの↓を

  if $0 == __FILE__
    xxx
  end

Perlに直すにはどうすればいいんでしょう。

  if ($0 eq ??) {
    xxx;
  }

??の部分が分かりません。。

995 :デフォルトの名無しさん:03/08/12 20:16
$ perl -e 'print __FILE__, "\n"'
-e


996 :デフォルトの名無しさん:03/08/12 20:23
次スレは?

997 :(・∀・;)ニヤニヤ ◆IuDnGO5LnY :03/08/12 20:30
>>995
えっ、えっ、・・・なんだかものすごい勘違いをしていたようです。

if ($0 eq __FILE__) {
  xxx;
}

これでいいのれすね。ありがとうございました。

んでは、逝ってきます★

998 :デフォルトの名無しさん:03/08/12 20:40
>>997
逝くまえに新スレ立てて

999 :(・∀・)ニヤニヤ ◆IuDnGO5LnY :03/08/12 20:51
>>998
建てますた。

1000 :デフォルトの名無しさん:03/08/12 21:02
1000000000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

224 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)