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

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

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

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

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

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
3get
>>1おつ
5getか?
   / ̄ ̄ ̄ ̄ ̄ ミ
  /  ,―――─―-ミ
 /  //     \|
 |  / ,(・ )   ( ・)  ハァ
  (6       つ   |    ハァ
  |      ∪__  |
  |      /__/ /
/|     ∪   /\

ここはム板のほうがかっこいいと思ってる厨房・痴呆専用のスレです
WEBプログラム板perlスレ本部に逝くことを押すすめします
CGIしか書けない痴呆は帰れ
8デフォルトの名無しさん:03/05/16 23:37
PerlはCGIじゃないあげ。
>>7>>6へだ。紛らわしくてスマソ。
10
$i = $a = $b = 0;
って使えないのか?
>>11
全部初期化されるよ
>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;
>>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使いになろうとしたらどれを選択するべきでしょうか?
>>17
4番目の方法においてなぜ引数を渡しているのか分からない。
#!/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;
}
sub test_v {
my $test = shift @_;
$test += 10;
}
だた
もうわけわからんな。全部引数渡してる意味ないやん。
修正した4番はともかく、な。
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;
}

暗号?
(,,゚Д゚)∩先生質問です
(warning: too few iterations for a reliable count)
ってエラーどういう意味でつか?

ちなみにベンチマークしてました。
26デフォルトの名無しさん:03/05/18 18:20
スレタイトルに「初心者無視!」って付けてほしいよ
↑初心者の為のスレだろ?
>>27
どこにそんなことが書いてある?
29デフォルトの名無しさん:03/05/19 00:19
じゃあ、予め答えを知ってる人のみ質問すること
つまり、知ったかを釣ることを目的としたスレなんですね?
31デフォルトの名無しさん:03/05/19 05:34
そうです。
IDは出ませんので、得意げに答える回答者の
不備をジサクジエーンで容赦なく追求して下さい。
32bloom:03/05/19 07:11
解凍者は元々バグを持っています
34デフォルトの名無しさん:03/05/20 00:15
Win32::APIを使えばPerlからdllを使うことができるらしいのですが、
VBのように使えるdllに制限などあるのでしょうか?
前スレ>>972の方
ありがdございました。おかげさまで、結構、先まで進みました。


全然違う話なのですが、エキスプローラだとコピーが出来るんだ
けど、Perlからは扱えない長いフルパスのファイルがあって、若
干困ってます。つうか、あんな深いネストにするなよ!!
>>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();
38bloom:03/05/20 11:11
>>37
use Symbol; して gensym
40デフォルトの名無しさん:03/05/20 13:02
ファイルかディレクトリかを判断するにはどうすれば?
>>40
google
4240:03/05/20 13:08
>>41 適切な回答ありがとう(・∀・)
4340:03/05/20 13:08
>>41
適切な回答ありがとう(・∀・)
ファイルテスト演算子にある。
4540:03/05/20 13:19
>>44
ふぁいるてすとえんざんし?
ぐぐります。
その後で逝ってきます。
46デフォルトの名無しさん:03/05/20 13:37
この判定条件の意味が分かりません。
教えてください。

$output = "a\\b";
if( $output =~ /\\$/ )
{
$output .= "\\";
}
>>46
末尾に\が無かったら、末尾に\を追加。
>46
正規表現
4946:03/05/20 13:50
>>47

助かりました。

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

っていうか、ちゃんと勉強しろよ・・・
正規表現勉強してるなら、^.*$ この辺は分かって当然だろ・・・?
5146:03/05/20 14:06
>>50

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

とりあえず助かりました。
ありがとうございます。
52デフォルトの名無しさん:03/05/20 14:12
Perl/Tkの質問はここでいいでしょうか?
メインウィンドウを画面の中央に配置したいのですが
リファレンスを読んでもやり方がわからず。可能でしょうか?
まずはオライリーの本でも買って読んでみようかな。
53デフォルトの名無しさん:03/05/20 14:21
すみません、初心者の質問答えてやってください。
Perlによる普通の掲示板でログの先頭行のタイトルだけを
取るにはどういう構文にすればいいんでしょうか?
普通の掲示板って何?
>>54
webに使う2ch見たいな掲示板です。
すみません,今すれ違いだと気づきました。
お騒がせ致しました。
56デフォルトの名無しさん:03/05/20 14:59
>>51
ちったぁ勉強するなり調べるなりしろよ。
聞けば解決的な考えでは一歩も前に進まんぞ。
前に見た正規表現で、
(.+)* ←これは何を意味してるのですか?
5852:03/05/20 15:20
(任意の文字の1回以上の繰り返し)の0回以上の繰り返し
これでわかる?使い道は良くわからないけど。

Perl/Tk使ってる人いませんか〜?
>>58
Perl/Tkねぇ〜・・・。
日本語通らねーし。
GUI使うなら、それ用の言語へ移行した方がよい。
6052:03/05/20 15:27
>>59
Win用のActivePerlなら日本語通ってますよ。
移行してもいいんだけど標準モジュールなので便利なんです…
>>57
何も表してません。全部の文字です。

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

Perl/Tkは最近のお気に入り
Perlで本格的にGUIが作れるのは嬉しい
ただノウハウがないせいか、希望の画面になかなかならない
いいGUIビルダが欲しい
63デフォルトの名無しさん:03/05/20 20:33
マウスとか使わずにGUIを設計するのは明らかに間違いだな
Tk用のGUI設計鶴なかったっけ?
>>63
いや、お前が何か勘違いしてる。
66棄教者 ◆egKIKYO7cg :03/05/21 01:24
>>58
何でもマッチする。
>>Perl/Tk
もれはガンガン使っている。
日本語が通らないのは我慢。
>>63
マウスを使ってGUI設計するのには限界がある。
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/
最初の探し方がいけなかったみたい。
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は最低限の実装といった感じだろうか。

# 三つともインターフェイスが全く異なるというのが痛いぞ…。
""と''の差はメタ文字の表示の仕方以外にもありますか?
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で管理するようなものは
書いてないので安心しました。
どうもありがとうございます
7971:03/05/23 10:24
>>72
ありがとうございます。
やっぱり、Configシリーズですよね。
Config::IniFiles使ってみようかな。

80デフォルトの名無しさん:03/05/23 20:44
だれかWin32::APIの詳しい使い方教えてくれ!
・・・と思ったら、今月号のハッカージャパンの
1コーナーで解説してくれてたので買いました。
そんなのをテキストにしたくないな
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;としたいズラ。
どうすりゃいいズラ。ウズラ。
一行レスならともかく
質問するなら普通の日本語使ってくれよ。
読みづらくてかなわん。
>>82
@array_all = (\@array_one, \@array_two, \@array_three);
$array_one_count = @{$array_all[0]};
だな。大体Perlで二次元配列なんてどこで教わったんだ?
85ズボラー:03/05/23 23:06
84さんどうも。
やっぱ連想配列でやるのが普通ですかね。。。
どこが連想配列なのか
87ズボラー:03/05/23 23:24
perl記述のスタンダードがわからんヅラ。
配列の要素数にしても、他にも色々あるにしても
$rigid = @array;
$rigid = $#array+1;
とりあえず上記の二つがあるヅラ。
84さんが
>大体Perlで二次元配列なんてどこで教わったんだ?
といってたんで、Perlって二次元配列とか
スタンダードじゃないんだーとか思ったヅラ。
そうするとスタンダードなのは連想配列かと。。。
そう思ったヅラ。ウヅラ。
$res[87] =~ s/ヅラ//g;
89 ◆hMJAPH9PWA :03/05/24 00:09
>>88
それだと最後の行が
> そう思った。ウ。
となり意味不明になってしまうよ。
>>89
でも全体的にはヅラとった方が読みやすいから。
>>89
意味不明度に違いはない。
92デフォルトの名無しさん:03/05/24 01:55
next if ($. == 87)
>>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
>>94
my $str = 'aaa "bbb ccc" ddd "eee fff" ggg';
push @str, $1 while $str =~ /([^ "]+|"[^"]*?")/g;
print join '/', @str;
>>96
なるほど
勉強になります。
ありがとうございました
>>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)
などを使えばそれらしいことができるかもと思っているのですが…
すんませんperl56.dllってなんでしょうか
どこかでDLするものなんですか?
perlDBIでODBCを使用する場合、ファイルDSNは使えないんですか?
>>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;
}
外部コマンドの入力も出力の両方をperlから入出色させるにはどうすればよいのですか?
open(INOUT, "| cat |");とかやると Can't open bidirectional pipe といわれてしまいます。
108デフォルトの名無しさん:03/05/25 17:05
Perlクックブック読もうね。はい次のひとー。
>>106
splice

>>107
IPC::Open2
>>105
Window&Perlでスレ立てるほど人がいるかな?
個人的にはこの話題をどんどん語ってほしいけど。

>>106
splice

>>107
わざと実装してないみたいな事がらくだ本に書いてある。
どうしても使いたいならIPC::Open2
>>110
この話題ってどの話題? いや、別に煽りじゃないんだが

Win&Perlって、結局はインストールが出来ないとか、モジュールの使い方を知らない ってレベルが多いような気がする
112デフォルトの名無しさん:03/05/25 21:19
>>111
Win32モジュール関係の話題とか。
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には数字が入ってます。
open( IN, "hoge |") とやった場合に、 hoge コマンドの終了コードを得るには
どうすればいいのでしょうか。
>>113
>perl -MCPAN -e 'shell'
でやってるけど、今のところ問題無いよ
121102: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
122114:03/05/26 13:23
>>114-115

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

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

× rename ("$source","$list");
○ rename ("$mail_dir/$source","$mail_dir/$list);
>>113
>>120
たしかバイナリ含むやつってなかったっけ?
そういうのは問題が起きると思う。
124nobodyさん :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のサーバに置こうとしています。
>>125
nohupとかそういう話じゃなくて?
127デフォルトの名無しさん:03/05/26 19:21
>>126

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

Thanks!
PerlとDelphi比べたらどっちが上ですか?
129デフォルトの名無しさん:03/05/26 19:40
>>125
cron
>>123
Cygwin 版の gcc をそのまま使うんじゃなくて、
cl とか bcc とか持ってきて cpan の設定ファイルいじればいい。
131デフォルトの名無しさん:03/05/26 22:56
125です。

>>129

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

自鯖じゃないから、cronは無理かも知れません・・・。
132デフォルトの名無しさん:03/05/27 03:11
あと10秒
と表示して同じ場所に数字をどんどん減らして表示するのはどうやりますか?
数字を減らす事は出来ますが、同じ場所に表示させる方法がわかりません。
133bloom:03/05/27 03:13
$|=1;
for ($i=10;$i;--$i) {printf "%2d\b\b", $i; sleep 1}
135132:03/05/27 04:32
>>134
ありがとうございます。\bを使うのですね。
でも1から1000までのように桁数が増える場合はどうするのでしょう?
136_:03/05/27 04:35
137デフォルトの名無しさん:03/05/27 06:11
Perlってもう終りなんですか?

>>134
そーゆのって、sleepできっかり1秒になるもんなの??
処理自体の時間の考慮って言うか、そうゆうのが必要だから
sleepはどうかと思ってたんだけど…。今まで。
>>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に移ってしまったので、実はあんまり覚えてない。
140132: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(復帰)をつかってみぃ。
143138: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を作業用ディレクトリと訳しただけじゃないか
>>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って趣味でしょ?
>>150
さっきVBスレでも聞いていなかったか?
仕事で使いたいならC++かJavaやりなよ。他の人のことはいい。
>>150

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

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

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

まぁ、プログラムの仕様でPerl使えって言われりゃPerlを使うわけで...
154デフォルトの名無しさん:03/05/28 02:02
仕事で、というのが個人レベルの問題解決なのか、
グループ内に配布して使うのか、
社内で正式リリースするのか、
それどころかクライアントに渡すのか、
で全然変わってくる罠。
155149:03/05/28 10:13
>>149 への自己レスです。
アスキーコードでシングルクオートを指定してやることで解決できました。
$ perl -n -l -e 'printf("INSERT INTO uniq_uri (uri) VALUES(\x27%s\x27);\n", $_);' source.txt
>>149
シェルの話なのでバックスラッシュ(\)でquoteするのが普通だけど、
$ perldoc -f q
$ perldoc perlop
という手もある。
>>144
Perlのエスケープ・シーケンスはCよりも多いぞ。Cには\eなんてない。
>>145
親プロセスのpwdを変えようとしてるんなら、単独では不可能。
ディレクトリ名を出力して親プロセスでそれを読んでcdするしかない。
159156:03/05/28 10:28
>>149
ごめん、この場合qはぜんぜんダメですね。
160149: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
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
新種の山崎登場につきage
164デフォルトの名無しさん:03/05/29 10:40
Rubyでいうところの
配列の初期化 a=Array.new(100,0)
===演算子 a===[1,2,3]
のようなものはありますか?
>>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 は正常に動作する。

チェックすべき点を教えて頂きたく候。
>>166
ありがとうございました
>>164
my @array = (0) x 100;
>>169
紙!!
171nobodyさん :03/05/29 16:01
でも、初期化って必要なん?
modperlとかならいりそうやけど・・・
>>171
99.5%のPerlユーザは初期値はどうでもいいと思っているけど、
0.4%のユーザは初期値に1を、
0.1%のユーザは初期値に3.1415をキボンヌしているという統計があります。
>>169
テストしたら正常に動いた!
紙!

でも、俺は変数の型宣言とか初期値とかあんま好きくない。
ましてやスクリプトなのになんでそんな事を…。
て言うかperlで宣言とかしたら重くなる。いらん処理増える。
>>173
perlだといきなり $a[10]+=1 とかしても動くからな。
rubyはnilと0は区別するから。
>>164
配列を確保するだけでよいなら、
$#a = 100;
それだと101個確保しないか。
えーと。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を検索。

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

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

…と言うか誰か馬鹿な俺に教えて下さい。
>>177
> あれれ。もしかして、この記述では実行ファイルと同じ場所には出来ないで、他の場所に出来るのかな?
カレントディレクトリって知ってる?
今やり直した所、超誤爆してました。
思いっきりファイル名を書き間違えてました。
ごめんなさい。
消滅してきます。

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 を落とした人いたら協力お願いしました。
>>174
perl にもundefあるじゃないか。
上手くやってくれるけどな
>>176
そだな。すまそ。
185デフォルトの名無しさん:03/05/30 14:25
>>182
作者にメールしてみるとか。
こうゆうことでメールするのって迷惑なのかな?
>>185
迷惑だ
すいません
GD::Graphモジュールを使用したくて
動作確認のため簡単なプログラムを走らせてみると、

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

となってしまいます。
なにが 起きてるのか教えて下さい。 お願いします。
188187:03/05/30 17:46
あ それと対処法も・・・
>>187
> なにが 起きてるのか教えて下さい。 お願いします。
エラー。

>>188
> あ それと対処法も・・・
デバッグ。
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してほしいけど。
192187:03/05/31 07:11
>>190
>>191
あ そういうエラーなんですね。
インストに苦労したから、GD::Graph自体がおかしいのかと思ってました。
プログラムもう一度見直してきます。
ありがとうございました。
ハッシュから、ランダムに要素を選びたいのですが、重み付けも行いたいのです
$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的なやり方ないでしょうか。
$a = int rand 10;
$a = ( $a < 5 )?1:
($a < 8)?2:
3;
>>194
>>193は、ハッシュの要素が1000個って事じゃないかな
>>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";
>>193
@weight = (25, 25, 150);
foreach (@weight) { $all += $_ }
until ( $weight[$key = int(rand(@weight))] > rand($all) ) {}
print $key;
>>197
そのやり方よりこっちの方が速いとおもわれ

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

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

要素の和じゃなくて、要素の最大値で十分だった。迂闊。
200197:03/05/31 19:41
時すでに遅しか(死
ところで foreach と map って優劣ある?
201193:03/05/31 20:20
割合を考えるだけでよかったのですね。
>>194 みたいに範囲のインデックスで上手くやる方法考えて詰まってました
ありがとうございました。
202202:03/06/01 08:10
m/^([0-9])([0-9])$([0-9])/;

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

__END__
2 + 0 = 2。
でした。
>>202
m/^(\d)(\d)(\d)$/;
$3 == $1 + $2 and die;
204202:03/06/01 18:06
ガ━━━(゚д゚;)━━━ン!! 
$ の付ける場所間違って覚えてた。
205デフォルトの名無しさん:03/06/01 21:56
perlのサブルーチンをツリー表示してくれるような
ソフトを知っている方いましたら、教えて下さいな!
206Tk:03/06/01 23:39
ActivePerlのTk.pmでGUIやっている人いますか ?
最近ちょっと作るものがあったのでやっているのですが、
これすごい落ちます。Cならメモリ管理関係で何かミスがあるのかと疑いますが、
Perlなので原因不明です。
もし、Tk使っている方がいましたら、よく落ちるのは普通なのか
漏れのプログラムがおかしいのか、漏れのPC(Windows)がおかしいのか助言頼みます。

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

WindowsXP, ActivePerl5.8.0です。
207nobodyさん :03/06/02 03:25
>>205
エディタでそういうのを使うとか・・・


まぁ、自分で作ってる場合ですけど・・・
>>206
日本語一気に読みこんだ事ないから分からない。
出来ればその読み込む時の記述を見せてもらいたいものだ。
また、読み込む文字列とやらは常に同じ物か?
途中正規表現にかけていないか?
などなど。条件によっては落ちる。

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

後者ならperlエディタってのがある。
>>205
エディタでツリー表示してくれる物探してるなら・・・・
PerlEdeitを・・・・と言う人が多いようだが、
JmEditの方が、まだ俺は使えると思う。
そうじゃなく、ただルーチンの一覧を出力したいなら、
Perlでも作れる。 勉強がてら作ってみるとよい。
perl質問箱に書き込みがなくて寂しい。。。(正確には面白くない、つまらない)
だから勝手になんか書きます。
どうしても返信したい人も勝手になんか書いてください。

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

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

でも、2ちゃんねるは連続投稿してると規制がかかるから、イキナリレス出来なくなるかもしれない。
211210: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づつ変えながら)

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

212210: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発目の乱数を取得する。
213210: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されたのでは切捨てられない。


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

アア、すみません、あまり意味が分かりません。
215210: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
216510: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
>>214
time や $$ は種として推測しやすい値だから、
その種によって生成される乱数列もバレやすい。
乱数列をバレにくくする為に、
srand にバレにくい種を指定するか、
srand を呼ばないか (5.005 以降)、
モジュールを利用する。

Perl のヴァージョンによる s?rand の挙動の違いは 5.005 の
perldelta に載っている。
http://www.kt.rim.or.jp/~kbk/perl5.doc/perldelta.html
218210:03/06/02 18:10
ええと、
左側が、int(小数点切り捨て)した時の数字で、
右側が、その数字が出た数です。

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

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

とりあえず、man srandしろ
220210: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などでランダムメッセージなどを表示するのに超都合が良い。
次に何が出るのか分からない上に、重複がほとんどないのだ。
221210:03/06/02 18:29
もし、上記を通常の書籍が勧めるように

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

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

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

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

Ps,解析はまだ続けています。解析プログラムもまだ作っています。
>>215,>>216
ひでぇ結果だな…。
やっぱ ActivePerl はショボイんだなという事がわかって
勉強になりました
サンクス!
とりあえず 210 には Perl 5.005 以降を使用して srand を使わないことをおすすめする。
226210:03/06/02 21:08
>>224
ちょ、ちょい。
perlの種類によってrandのアルゴリズムが違うの!?
標準関数の内部処理は全部同じだと思いこんでたよ…。
それと、出来ればそちらの環境と結果を書いてほしいな。
めんどうでしたらいいけど。
227210:03/06/02 21:10
>>225
いえ、ランダムの解析を楽しんでる(?)だけですから…。
あと、5.8の結果ですヨ。
折角だから、続き書いて欲しいんだけど・・・。
229224:03/06/02 21:18
>210=226
じゃあ、書いといておこう

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

結果は次
230224: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
231224:03/06/02 21:23
version 5.005_03 built for i86pc-solaris もあったので、
試してみますた

最初の十行のみね

0
131
7
138
14
145
21
152
28
159
232210:03/06/02 21:24
>>228
ええと、どうゆうのがお好みで?
取り敢えず適当に書きます。

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

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

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

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

でも、環境によって標準関数の仕様が違うらしいって話が出てきたので、
そっちを先に調査したいと思います。
悪しからず。
233224:03/06/02 21:27
>232
すまんが、それも俺の環境ではそんな結果にならんぞ、、。
234210:03/06/02 21:29
>>229-231
あ、ありがとうございます。
明らかにrandの仕様が違いますね…。

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

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

でも、めんどうになってきたのでしばらく解析はやめる。
そんなわけで役に立たない迷惑なレスを書き続けてしまいました。
ごめんなさい。
>>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
というかperlのrandはlibcのrand呼んでるだけだから
激しく実装依存なのだが。

無駄な努力ごくろうさん
>>237
あーあ、言っちゃった(w
読んだ。
線形合同法の場合、一発目は捨てるって言ってたけど二発目も捨てる必要あるよ。
一発目と二発目を捨てて、初めて線形合同法が意図する乱数が生まれる。といった覚えがある。

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

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

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

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

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

じゃあ、多大に失礼しました。
>>240
実行時にどういう順で呼び出されたか? なら、perl debuggerとかでダンプしてちょいと手を加えれば出来るけど。

呼ばれる可能性のツリーを期待してるなら俺には出来ん、スマソ
243デフォルトの名無しさん:03/06/03 20:16
perlでhttpのプロクシ経由でhttpsのURLにアクセスするにはどうしたらいいですか?
こんなこと調べて何か解析してる気になってる>>210 はリアル中学生ですかね?
まぁがんがれ
>>244
言っちゃダメだってば
246デフォルトの名無しさん:03/06/04 13:47
>>244
オメェーの方がつまんねぇ。何様のつもりだ?(w
>>244
source読む、ってことを知らないんだろ。ほっといてやれ
>>247
は?なにを言ってんの?
なんか微妙に必死なヤツがいるな(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
252210:03/06/04 19:16
あらら。
俺が検索不足の話してしまったせいで荒れて(?)しまって…。

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

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

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

それじゃ、今度こそ失礼しようかと思います。
>>252
ここはお前のメモ帳ではない。市ね。
windows/activeperl環境で、
画像解析のために、jpg/gif/png画像を読み込んで、
ピクセルサイズや、ピクセル単位でのrgb情報の取得を行いたいのですが、
GD.pm ver2.0以上ではgifが読み込めないし、GD.pmの旧バージョンはactiveperl5.6以上で呼び出すと
落ちてしまうのですが、他にそういったことが可能なモジュール等はあるのでしょうか?
まぁ、ソース読むのも面倒くさいし、
いい暇つぶしになったからいいや。
>>210
Perlを勉強中の漏れにとってはかなり面白かった。
これからも話題を提供してください。
210の能書きなんてPerlの勉強と何の関係もないじゃん。
210の自演ウザー
>>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";
}
既に 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)
にコストの違いってあるの?
コストが気になるところでPerl使うのはいかがなものか。
手を動かしてるといたという点では >>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なんで正規表現使ってドカン!と一発で出来ないでしょうか?
>>265
$subj =~ /No\.(\d+)/;
$count = $1;

$subj =~ /^\[回覧板 No\.(\d+)\].*$/; の方が確実だけど
>>265
$subj =~ /(\d+)/;
$count = $1;
268267:03/06/05 23:15
もう少しで結婚できたのに・・・。
($subj) =~ /(\d)/g;
+が抜けた
>>269-270
できないんだけど・・・?

$ perl -e '$subj = "abc 123 efg"; ($subj) =~ /(\d+)/g; print $subj;'
abc 123 efg
print $subj
ではなく、
print $1

$ perl -e '"abc 123 efg" =~ /(\d+)/ and print $1'
123
>>271
ああねぼけてる。ごめん。
($count) = ($subj =~ /(\d+)/g);
274デフォルトの名無しさん:03/06/06 00:01
jperlのスクリプトをperl5.8で動かせると聞きました。
いろいろ調べましたがどうしてもわかりません。
どなたか教えてくれませんか。
ちなみに使用OSはredhat8.0でつ。
275265: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);
にすると、タイトルに数字が入るとそれも取得してしまうよ。
close(F);だ・・・
tailを使う
>>280
tailってunixコマンドでは?
>>278
同意。

というか、
($count) = ($subj =~ /(\d+)/g);
これだと $count にはマッチしても 1 しか代入されないんじゃないか?
283265: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
284278:03/06/06 02:23
>>283
それなら大丈夫かな。

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

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


最後の行から読み出す方法ってreverseを使う以外になんかあったっけ?
pop
>>285
まだ>276の方がマシ
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のでいいと思うのですが。ちょっと思いついたので書いてみますた。
mmap
tailはどういうアルゴリズムなんだろう?
後ろから前に向かって一文字ずつ読み、改行文字の数を数えればいいのでは。
>>291 どうやって?
293デフォルトの名無しさん:03/06/06 13:11
Perl で作るのでまずここで聞かせてください。
ユリウス日を求める式みたいなのを教えてください。
入力はシステムクロックではなく年月日時分秒の数値です。
実は既にいろいろ見つけていますが、人によって係数などが違うので
何か正しそうなやつの例を1ついただければそれでいいです。
>>290
実装次第だが、GNUのは>>288みたいんじゃなかったかな。
295293:03/06/06 13:33
補足
1年の最初から何日目とかいうやつじゃなくて
紀元前4713年から何日目ってやつです。
http://search.cpan.org/search?query=Julian&mode=all
中身見てないけどこの辺?
ソース見ればその係数とやらは分かると思うけど
>>292
fseekとfgetcを組み合わせて。
効率が悪いなら最初に行数を調べるという手もある。
298293:03/06/06 14:23
>>296
あああ、そういうモジュールがあるんですね。
どうもモジュールは嫌いなので忘れてました。
そちらを見てみることにします。
どうもありがとうございました。
>>297
> 効率が悪いなら最初に行数を調べるという手もある。
行数を調べること自体効率悪そうだが。
>>297
死ぬほど遅そう。
seek ができるくらいなら mmap 使ったほうがいい。
>>300
標準だけでできる方法ってことで。
302301:03/06/06 14:46
メモリに展開するくらいなら標準でいくらでもできるか。でもファイルがでかいと・・・
304tail: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++];
}

305tail:03/06/06 14:58
open(FILE,$ARGV[0]) or die "failed";
@list=<FILE>;
こうだ
# こんなのどうよ?
my $line = 1;
my @line = ();
open(F,"file");
while(<F>) {
  push(@line, $_);
  shift(@line) while @line > $line;
}
close(F);

# shift,unshift,push,pop はウンコな位遅い気もするが。
お楽しみのところすみませんが
http://www.din.or.jp/~ohzaki/perl.htm#File_Reverse
すまん、これから会議で中見てる余裕無いんだが
http://search.cpan.org/author/MGRABNAR/File-Tail-0.98/Tail.pm
これ見てみると面白そうだな

つか、既に3分遅刻だ(ワラ
>>307
ややこしいのう
>>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;
まずどういうのを正しいとするか決めろよ
312311:03/06/06 22:39
ミス スマソ
0とヌル文字列とundef 以外は正しい。
>>311
早いものじゃないのかあ
美しいものは正しい

さて諸君、美しいを定義したまえ
私は美しい
その前に定義を定義しようよ
再帰を定義しようぜ!
斎木しげる
322デフォルトの名無しさん:03/06/07 10:31
サブルーチンの最初でmyで変数宣言みたいなことするのって
効率悪いですか?
sub answer {
my $res_number = shift;
print("それって普通じゃないか?$res_number\n");
}
&answer(">>322");
324デフォルトの名無しさん:03/06/07 10:43
>>173は?
>>324
myの処理は宣言無しと同じか、それより速いと思ったが。
use strict;マンセー。
それは局所化の宣言だから。
早くなる。
変数は使われるたびに自分がドコに所属してるのか記述をさかのぼって調べるけど、
myの場合さかのぼる量が極端に少なくなる。

by.173

>>322
初めて使われる時にmyするのが普通。
宣言したあと、使われる前にリターンされたら宣言自体がいらん処理になる。
もし、リターンのあとにmyなら、そんな変数自体もともとなかった。って方向で落ちつく。
ソースいじってるうちに、
使ってから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系列です。
diccionary
332330: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がけっこう面白いよ。まだバグだらけだけど。
337330: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
オアオアうるさいな
340デフォルトの名無しさん:03/06/09 08:31
orだよor。||じゃないんだよ。マニュアルと同じ書き方しなさいってこった。
341 ◆hMJAPH9PWA :03/06/09 10:31
>>337
$locが正しいファイル名で正しいパーミッションかどうかを確認する。
あと-wスイッチの元で動かしてみる。

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

>>340
このケースでは無関係
´−`)。oO( O_CREAT|O_RDWR でいけたなんてオチだとヤだな…。)
perlでファイルハンドルからパスを求める方法はありませんか?

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

俺のソースは癖ありすぎてだめぽ。
345デフォルトの名無しさん:03/06/09 21:34
>>343
そのファイルハンドルはどうやって生成したんでしょうか。
>>344
他言語とか言っているが実はCとそれに似せたC++、Java、C#だけのことしか言っていない罠。
実は世界が狭いのだよ。
PerlもCの構文をまねたものなんだから||の方があっていると思う。
優先順位
いちいち()をつけるくらいならorのほうが数倍いい。
>>345
適当な相対パスから生成しました。
求めたいのは絶対パスです。
>>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のときに使ったファイル名を保存しておくしかないよ。
優先順位もそうだけど、orの方が「さもなければ」って直感的に読めるから好き。
open() or die; 開け。さもなければ氏ね。
(同じ動作なら)どっちでもいいと思って使ってる漏れはボツでしょうか?
355330:03/06/10 00:35
>>341
>>342
Thxです。

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

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

とりあえずハッシュにデータ蓄えるだけのミニマルなスクリプトを書いて、
もし動かなかったら環境の再構築を考えてみます。
もしくは開発元に問い合わせ。
>>354
同じじゃないもん。
局面においては同じような挙動を示すけど、それって混乱の元じゃない?
357354:03/06/10 02:21
同じ動作をする場合の時って意味ね。
でも、orを使うことが多いかな。
極力||は使わないようにしてる。

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

って普段書くから。
$a or= $b
って使えたっけ?
$ 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::"が何を意味するのか分かって書いてる?
多分、何かを勘違いしてるよ。

とりあえずソース見せて。
ほっときゃいいじゃん。-w使わない>>330の自業自得だし。
メールをマルチパート分割して
添付ファイルと本文を抜き出す処理を工作しております。
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
>362
munpack
365デフォルトの名無しさん:03/06/12 00:59
まだ>>350はいるかー?
上の方にあがっていたスレを見てわかったぞ。
use POSIX;してPOSIX::getcwd();で得られるもの(現在の作業ディレクトリ)と相対パスをくっつければいいんだ。
開いた後にchdirしていたらそれだけではうまくゆかないけど。
366365:03/06/12 01:01
いや、Cwdモジュールを使えばいいか。
367デフォルトの名無しさん:03/06/12 18:11
スカラー変数(文字列)のサイズを知るにはどうすれば良いですか?
length($a);
369デフォルトの名無しさん:03/06/12 18:26
>>368
長さじゃねーよ馬鹿
サイズを知りたいんだよ。
length($a)*2
>>370
372デフォルトの名無しさん:03/06/12 18:54
>>370
上手く出来ました。ありがとう。
373367:03/06/12 18:55
質問が悪かったです。
スカラー変数の大きさ(バイト)を知りたいです。
ん?スカラー波でてる人?
375デフォルトの名無しさん:03/06/12 19:09
>>373
C言語のsizeofみたいなものか?
そんなものないよ。
376デフォルトの名無しさん:03/06/12 19:39
Perlのプログラム実行時間を計るのには、どうしたらいいですか??
time
use Benchmark;
stopwatch
>>376
プログラムの一行目に
$start=time();
最後に
$goal=time();
print $goal-$start;

とかけ。
381367:03/06/12 22:12
>>375
そうです。
どうすればいいんでしょう?
382m.m:03/06/12 22:24
こんにちは!誰か教えていただきたいんですけど、
私perlを使ってCGIで掲示板作りたいんです。まだ
初心者です。でも、最近カウンターの作り方は覚えました。
掲示板作りたいんですけど、いまいち検索かけても
掲示板の作り方とか見つけられないんです。本を買っても
いいんですけどお金かかりますし。。。。
いいサイトを知ってる方がいましたら是非是非教えてください!
minibbsのソースでも見てろ
そうだね、人のスクリプト見て色々いじりながら理解していって、
それから作るのがいいと思うよ
385名無し~3.EXE:03/06/13 00:44
perl入門書でスタンダードなのがありましたらお教えください。
386デフォルトの名無しさん:03/06/13 00:53
>>381
ないのは必要ないから。
いったいどんなことに使うんだよ。
>>381
バイナリでもいじるの?それなら pack,unpack 。
388デフォルトの名無しさん:03/06/13 00:58
perlのクラス間(継承関係はなし)のやりとりって可能ですか?
C++だとfriendとかあったと思うけど(勉強したの昔だから忘れた)
389 ◆hMJAPH9PWA :03/06/13 12:09
>>388
C++のfriendにあたるものなら、ない。というか、必要ないよ。
Perlでは基本的にメンバのアクセス制限は存在しないから。
プロトタイプ宣言した再帰関数って作れるの?
なんかよくプロトタイプが確定する前に呼ぶなやゴルァって
Perlタンに怒られうんだが
何故試さない?

#!/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
配列の中身をランダムに入れ替える方法を教えてくだそい
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 );

クックブックから
リア厨のころからずっとこのアルゴリズムだな
ポケコンでトランプゲームとか作るの

use List::Util qw/shuffle/;
my @a = (1..10);
@a = shuffle @a;
@after =
map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, rand] }
@before;
配列の中をランダムでいれかえる。

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

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

ランダムで抜き取る時は日頃から
$bbb = $aaa[int(rand(@aaa))];
こう書いてます。
駄目な気がする
397でsplice使えばいけそうだなぁ。それはそれで微妙そうだけど。
400デフォルトの名無しさん:03/06/17 23:48
ちょっとした疑問なんですが、
連想配列ってなんで hash って言うんですか?
ハッシュドビーフの hash ですよね。
切ってゴチャゴチャにするという。
連想配列が配列と紛らわしいからハッシュに名前が変わったらしいです。
>>400
「ハッシュテーブル」という古典的構造を使ってるから。
flock()について勉強している者です。
前々スレ554氏の
「openしてからflockまでの間によそのプロセスが開けちゃわない?」
という言葉が気になって気になって眠れません。
開けても読み込みがまだなら大丈夫なのか、この隙には割り込めないようになっているのか、
1行くらいの隙間は諦めるしかないのか、どうなんでしょうか?
554がおかしい。
開いても書き込み(又はファイルサイズをゼロにする)がまだなら大丈夫。
405403:03/06/18 01:13
そうなのですか・・どうもありがとうございます。

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

と言う事は、アクセスの集中による入力蹴られはflockでは防げないと考えて良いのでしょうか?
> そのプロセスで何かやってもよそのプロセスによってファイルへの書き込みが
> 上書きされてしまうような事になるように思います。

上書きしなければよい。
そもそもflockは(そのファイルを扱う)他のプロセス全てがflockすることが前提。
その条件なしでは、タイミングも何もない。
408403:03/06/18 07:53
多分理解しますた。
後は自分で実験して頑張ってみます。
どうもありがとうございました。
ところで、このスレ(前スレも)まとめてるサイトとかってありますかね
なにかと世話になってるんで、無いならママーリと作ろうかと思って
>>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宛にメールを出しても 〓 が出ますよね?
これと同じで仕方ないことなのでしょうか?
>>405
もう >>407 で分かったのかもしれないけど、flock は open や write を
排他するのではなく、(他プロセスの) flock を排他するもの。

他人が書けなくなる(=write がエラーするとか)、ではないことに注意
>>412
Docomoの絵文字はDocomoでないと無理。代替画像でも用意すれば?
ケータイの絵文字を画像に置換したらよい。
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
↑のエラーがでます。なにが原因なのでしょうか?
417403: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で言いたかったのはこのような事ですた。
418403:03/06/19 20:31
でももういいんです。
だってウチのMacPerlったらflock()使えなかったんだもの(鬱氏

長文スマソ。お騒がせしますた。逝ってきます…
419デフォルトの名無しさん:03/06/19 21:14
コマンドでperl hoge.cgiだと正常に動作するが(perl -wc hoge.cgiでsyntax OK)

web上からだとforbiddenになってしまうけど、
一番考えられる原因はどこよ。
パーミッション
421デフォルトの名無しさん:03/06/19 21:16
>>420
すまん。書き忘れた。
パーミッションぐらいで質問しないよ。
httpd の設定。
パーミッション
424 :03/06/19 21:31
多分パーミッション
425デフォルトの名無しさん:03/06/19 21:54
頭がパー以下略
>>411
リファレンスを渡すんじゃ駄目なの?
>>419
403ならパーミッション
>>419
デーモンの設定な気がするが...
cgiファイル置いてるディレクトリにCGIの実行権限はある?
って言うかCGI関連はスレ違いじゃなかったっけ?
429411:03/06/20 01:52
>>426
なるほど〜、リファレンスですか。
まったく考えていませんでした。
ありがとうございました。
430426:03/06/20 02:23
>>429
今見たら

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

のような気もせんではないけど・・・・
431411: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";
>432
s/(.)/AHO$1/g
436434:03/06/21 15:14
かぶらないようにまわりくどいほうほうをかいたんだ。
せいきひょうげんをしらなかったわけじゃないぞ。
フォルゴレはつよいんだ。みてろよー。
漏れも、434のかきかたするなぅ・・・

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

  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>438
map { $result .= "AHO$_"; } @splited_chars;
はmapの使い方として推奨されてない気が。
434だったら、
join "" => map { "AHO", $_ } split('', "abcde");
な感じでFA。
>>437
perlはunicodeもサポートしてますが(w
Unicode以外のコードもあるのを忘れとるよ〜
>>442
そのためのEncodeモジュールじゃないの?
といってもEncode::JPは変換がおかしいけど。
漏れも 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を取得しようと思ったのですが
どうしても上手くいきません。

どなたか、解決方法をご教授してください…(;´д`)
>>1
「どうしても上手くいきません」で解決方法がわかる人は宇宙人です。
あ、どもすみませんでした。Web板逝ってきます。
地球が宇宙にある以上、地球人も宇宙人です
もしかしたら、地球は宇宙じゃないのかもしれないよ。もしかしたらね。
× 地球 IS-A 宇宙
○ 宇宙 HAS-A 地球
45211: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;
>452
宿題は自分でやれ。
>>452
splice
45511:03/06/23 11:33
>453
宿題ではないですが、これを解きたいんです。
>454
ありがとうございます。
splitではなく、spliceという意味でしょうか?
>452
文字列の抜き出し=substr
文字数を調べる=$y-$x
自分で考えなきゃ問題解いた事にはならないだろ。
45711: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;



$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;
perlでは論理シフトと算術シフトってどう区別されてるんでしょうか?
$ perl -Minteger -e "print(-8 >> 3)"
-1

となるから算術シフト?
461デフォルトの名無しさん:03/06/25 01:14
Windowsでperl -Dができるperlパッケージってないですか?
ActivePerlのFTPとかにおちてないかなぁ
無いだろ。自分でコンパイル汁
>>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()する意味はないけどね。
配列の中身(文字列)が全て同一かどうかを「スマートに」判別する方法って
ないでしょうか?
最初の要素を保持してループを回し、異なる要素が出てきたら
同一でないと判断するのはPerlっぽくない(他に手段がある)気がするので。
どこが違っているかを見るなら、grepという手もあるが、
単に同一かどうかだけでいいのなら、
"@array1" eq "@array2"を評価しては?
468466:03/06/26 11:24
>>467
すみません、ちょっと書き方がまずかったようです。
二つの配列をマッチングさせるのではなく、一つの配列の中にある
全ての要素が同一かどうかを見たいのです。

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

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

perlよりほかの言語のほうが適しているのかもしれませんが、いろいろ調べても
よく分からなかったので、多少は分かるperlスレで質問しました。
スレ違いであれば別スレに誘導していただけると助かります。
よろしくお願いします。
おまいさんは何が聞きたいんだ
472デフォルトの名無しさん:03/06/26 15:35
すいません。
こういうプログラムはperlで作成することが可能かどうかをお聞きしたいです。
もしできるなら、その作成例などがあるサイトを紹介していただければありがたいです。
そういうのをperlでやることになったら鬱だ
出来る
アクセスカウンターとかの画像を合成しているのを参考にするのが良いのかな
Web 系みたいだから、WebProg 板のスレの方がいいと思う
http://pc2.2ch.net/test/read.cgi/php/1054992610/
>>470
まず、プログラムの実行環境から整理して書け。
めっちゃ意味分からん。
476470,472:03/06/26 16:14
>>474
ありがとうございました。行ってみます。
>>467
my @array1 = (123, 456, 789);
my @array2 = ("123 456", 789);
(つД`)
>>477
@array1 == @array2;
"@array1" eq "@array2";

じゃあこう。
2つとも通過でOK。
って質問主の要望に沿ってないし。
479509:03/06/26 21:51
2つ(以上)の jpeg 画像ファイルを入力とし、
横に連結した1つの jpeg 画像ファイルを出力するプログラムを書け。
また、指定した位置に連結できるようにもせよ。

どなたか作っていただけませんか?
>479
偉そうにマルチポストか。死ね。
>>479
うわぁ、最悪
>>479
マジレスしてもいいの?
じゃ、PerlMagic使えば〜
>>482
やめろ。続きが想像できる。
「PerlMagicって何ですか?必死で調べましたが分かりませんでした。教えてください」
「インストールってどうすればいいんですか?」
「インストールでなんかエラーが出たんですが、どうすればいいんですか?」
以下略
484464: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;
ごめんなさい、これもスレ違いだったか...
ばっかでーぇ。
>>484-485
適当な記憶で書くけど、ループは繰り返されるたびに再コンパイルされていて、
ループ自体をevalから実行させると1回しかコンパイルされないので良い。
ってオライリーに書いてあった気がする。

俺はループの中でやむなくeval連発するプログラム作った事あるけどね…。
490デフォルトの名無しさん:03/06/28 16:16
再コンパイルされるってのは正規表現のことで
処理自体には関係ないよね。
積んどいた「オブジェクト指向Perlマスターコース」というのを今見てるが、
訳も悪いが誤植もひどい・・・
と思ったら、本家本も誤植が多いのね。
>>491
スレ違い
>>492
どうせしょうもない話しかしてないじゃん
>>490
>465の最後のケースならevalのたびにパーズから必要。
>>491
洩れはPerlネットワークプログラミング読んでるんだけど、
これも誤植ひどいよ。
ピアソンエデュケーションって。。。
次スレからは「質問箱」ってスレタイを変えて
「情報交換」とでもしないかい?
本一冊読んでりゃしないような質問と回答ばかりじゃつまらない。
しかし、そういう質問スレは依然として需要はあるので、
質問箱のスレも立ててくれ。

つまりトータルで見ると、情報交換のスレをお前が別に立てれ。
Perlの情報交換のスレなんかいらない。
間違いなくCGIの話題が溢れ返る。
>>497 >>498
わかったよ。もうこのスレの質問には答えない。
教えたがり体質の人は常に一定数いるので、
適当に新陳代謝していってくれ
コテハンとか名乗らなくていいから
>>499みたいのに限って、まともな回答なんて書いたことないんだよな。
自意識過剰なんだよ、役立たずのくせにw
やーい、ハゲ、インポ
えー、困りますよー。
2ちゃんでPerlの質問に答えられる天才は>>499様しかいないんですからー。



( ´,_ゝ`)プッ
おっと。
さらにもましてスレが下らない方向に進んでるぞー。
Q&Aのはまだましだぞー。
505デフォルトの名無しさん:03/06/29 20:15
文字列中で演算結果を出力する方法を教えて下さい。
$a=1;
$b=2;
print "$a+$b=",$a+$b;


print "$a+$b=($a+$b)";
のような書き方で同じ出力を出したいのです。
>>505
$a=1;
$b=2;
$c=$a+$b;
print "$a+$b=$c";
>>505じゃないけど>>506ってアホ?
それをしたくないから質問してるのに。
>>507
なら代わりに答えてください。
普通に働いてお金持ちになれるのは全体の1%のみって本当!?
本当にお金持ちになるにはやはり「副収入」が必要!
一日30分 おうちでコピペ、コピペ!
嘘だと思うんならランキング見てみてくださいよ↓↓
(直リン不可)
http://www.adultshoping.com/addclickport.cgi?pid=1053353765(直リン不可)

..............
>>505
my $a = 1;
my $b = 2;
print "$a+$b=@{[$a+$b]}";

こんな感じ?
511棄教者 ◆egKIKYO7cg :03/06/29 21:26
>>505
Perlクックブックの第一章に同じようなネタがあったけど、
会社に置いてあるので、自宅から2CHに繋げている今は答えられない。
誰かPerlクックブック手元にある香具師いたら見て、変わりに答えておくれ。
512505:03/06/29 21:54
>510
ありがとうございます。
小数も平気みたいですね。
自分には原理がまだ良くわかってないんですが。
$_="1/2.69**3";
print "$_=@{[eval($_)]}";

こんなんも出来るんか。
510なら${\( )} でよくないですか?
まぁ@の方が拡張性あるとは思うケドね。
どう違うの?
516 ◆hMJAPH9PWA :03/06/29 23:15
$[\( )}や${\do{ }}のほうが@{[ ]}より若干高速だし、メモリも少なくてすむ。
まぁ、単純なものならsprintfでいいと思うけどね。
${\( )}の\ってなんで必要なんだろう。
なんでprint "$a+$b=",$a+$b;やprint "$a+$b=".($a+$b)を嫌がるんだろう さっぱり分からない。
やっぱり>>506が正解のような
ヒアドキュメントとか。
>>517
${} の中身を(スカラー)リファレンスにするため。
あ、デリファレンスの${}なわけか。産休
普通にこう

$a=1;$b=2;
printf ("\$a + \$b = %d",$a+$b);
""の中の変数が勝手に中身に置き換わって不思議〜、
というのを式でやりたいだけなのでは
>>505じゃないけど>>523ってアホ?
それをしたくないから質問してるのに。


・・・一番アホなのは>>505だが。
どういうデメリットがあるから何を避けたいのか、
というのが質問からさっぱり読み取れない
おじいちゃんの遺言なので。
そういうのをやってみたいだけじゃない?実用性はともかく。
みんなで質問者の知的好奇心を満たしてあげようじゃないの。
式が不定で実行時にevalする必要があるならともかく、
最初から決まってるなら、それを文字列の中に入れる
メリットは無い、というかフィロソフィーがおかしい
>>528
もしそうなら隔離板のWebProg板で聞いてほしいな。
このスレが6になるのとperlが6になるの
どっちが早いのですか?
実はこっちが隔離板
>529
真の正解は
print "1+2=3";
だと言いたいのだね。
"Perlクックブック"という本がこのスレではよく出てきますが、
その本は丸っきりの初心者向けでは無いようなので質問します。
Perlをまったく知らない状況から勉強しようとして本を買うなら、
最初歩としてはどの本が良いのですか?
なるべく分かりやすく、飽きにくいものをお願いします。
>>528
rubyではできるからperlではどうなのかと思ったとか

a=1
b=2
print "a+b=#{a+b}"
確かに、変数を中身に変換してくれる機能がありながら、
それが不十分である為にprintfに切り替えたり、
予め別変数に書き出しておいたり、という作業が入るのは
言語としてちっとも完備していない

でもそれがperl
確かに不十分かもしれんが、リファレンス使えりゃ問題無い
>>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
というか、 ^ と $ を同時に指定できない理由はあるのでしょうか?
意味不明、同時に指定できるだろ?
>>540
取り敢えず . は改行にはマッチしない。
なお、「.*」の場合、最長マッチなので ^ と $ は全然いらない。
そもそも、この記述を使いたい意味が全く分からない。

> ^ と $ を同時に指定できない理由はあるのでしょうか?
同時に指定できる。
取り敢えず、正規表現の動作を理解してから出直して。
544543:03/07/02 02:04

ああ、書き忘れたけど、
m/^.*$/
これは
!(m/\n/)
これとほぼ同義。
>>544
ダウソ。DOS改行の場合とか・・・。mいらんよ。
俺はふつー m 付けます。
デミリタの定義を目視出来るからね。

perlの改行(\n)は、システムにおいて意味合いが変わってくるのでDOSだからどーこーなる事はありません。
547デフォルトの名無しさん:03/07/02 20:24

$cmd = FileHandle->new( "|command" );
print( $cmd "hogehogehoge" );
...
でコマンドにパイプでデータを流し込んでコマンドの実行結果を得るには
どうしたらいいですか?
>>546
CSVファイルの中身がそのスクリプトを動かしているシステムに合った改行コードとは限らない。
今回の場合は決めてあるのかもしらんけど。
549548:03/07/02 21:02
>>548
別のスレと激しく勘違いした


_| ̄|○
550 ◆hMJAPH9PWA :03/07/02 22:59
>>547
IPC::Open2/IPC::Open3を使う。
ただしいとも簡単にデッドロックしてしまうため、素人にはお勧めできない、
というようなことがドキュメントに書いてあるので注意されたし。
小数点以下第2位までの数値を得たいのですがどのようにすればいいでしょうか?

a=12.34567
初手からperlでない
>>551

int(($a/100)+0.05)*100で出るかな? 適当だけど。
>>553
誤爆。四捨五入じゃないのか。'sprintf'を使えば?
555551:03/07/03 20:24
>>553
解決しました。
ありがとうございました。
print sprintf('%.2f', $a);
557デフォルトの名無しさん:03/07/04 03:45
Windows2000
ActivePerl5.8
ですが
setsockopt(SOCKET,SOL_SOCKET,SO_RCVTIMEO,30)が成功しません
>557
あーそうですか。
報告ありがとうございます。
>557
乙〜
560デフォルトの名無しさん:03/07/04 10:24
win環境でperl使ってポーリングしたいと思ってるんだけど、
一般的な方法ってありますかね?
ユーザーが意図してポーリングの開始、終了を制御できるようにしたいんですが。。。
サービスとして実行させようにもアプリケーションじゃないとだめそうだし。。。

どなたかいい方法知ってる方いらっしゃいませんか??
何をポーリングするんだ?
油田
鼻の穴
ケツ拭くといつも赤い
ストライク
ポーリングって、燃焼系〜燃焼系〜アミノ式、のアレ?
指ぱっちん
質問するなら
Perl コーディング初心者質問コーナー Part25
http://pc2.2ch.net/test/read.cgi/php/1056730690/
自分の質問のせいで荒れてしまってスイマセンでした。
気にするな。
荒れてない。
なんとなくネタスレになっただけ。
572デフォルトの名無しさん:03/07/06 19:50
perlのCPANを使うときの最初に設定をするでしょ?
そのときの地域選択のときに候補が上がってこないんだけど、どうしたらいいの??
数字を入れても起こられるからまぢわからんです。
573デフォルトの名無しさん:03/07/07 01:48
実効ユーザーID実効グループIDを表示させるCGIはどうするの?
574デフォルトの名無しさん:03/07/07 01:49
すいますぇん。板違いでした。
質問です。当方あまりperlについて詳しくないので初心者でも分かるよう
ご教授いただけるとありがたいです。

トップページがCGI(top.cgi)でそこにアクセスするとURLを変えないまま
実際はA.shtmlを表示させています。
そのA.shtmlにはSSI式カウンタが設置してあります。

普通にA.shtmlを表示させればカウンタは表示できるんですが
top.cgiからアクセスしてもカウンタが表示されないで困ってます。

○A.shtml→SSIカウンタ=見える
×top.cgi(A.shtml)→SSIカウンタ=見えない

そのSSI式カウンタの設定では相対パス絶対パスも全て試しましたが
表示されません。なにか表示できる方法はありますでしょうか?

そこから先に進めず困っています。よろしくお願いします。
Perl関係ないし
>>576
すいません・・このような質問はWEB制作板とかのほうがいいんでしょうか
はい。
579デフォルトの名無しさん:03/07/07 06:50
perlで階層化されたデータ構造って作れますか?
例えばHTMLのエレメントの構造の様なものを記憶しておきたいんですが。
(HTMLを読みたいというわけではない)

・・・ぶっちゃけた話、LISPのS式(そのものじゃなくても良い)を
perlでも扱えないかと。
>>579
アルゴリズムの問題じゃない。
lispでできてPerlにできないことなんてないでしょ。
この場合は、フラグ処理が適切と思われ。
開始タグと終了タグの個数を差し引きして、階層を作る。
582デフォルトの名無しさん:03/07/07 13:50
Windows2000
ActivePerl5.8.0を使用しています。
-Vオプションで設定を見ると
「usethreads=undef」となっているのですが、
これを有効にする方法はありますでしょうか?

>>582
Perl のソース拾ってきてコンパイルし直し。
584デフォルトの名無しさん:03/07/07 18:13
>>579
[$a,[$b,[$c,[$d,]]]]ってのはどう?

scalar( %hoge )の返り値は何?
585579:03/07/07 18:41
まだ良くわかっていませんが、多分>>581さんのリンクの
perlref の仕組みで大丈夫っぽいです。
厳密にリスト構造を似せる必要はないので。
586579:03/07/07 18:45
流し読みした感じでは、perlobjというのでもよさそうです。
ありがとうございました。
[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
>>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;

s/as_string/content/
593デフォルトの名無しさん:03/07/08 00:55
592さん
かたじけない!
594デフォルトの名無しさん:03/07/09 10:47
WindowsでPerlやる場合、
cygwinの使うのとwin用の使うのの利点、欠点教えて
ActivePerlのほうがいいよ。
ppmでモジュール管理が楽。
windowsのインターフェースがなぁ。command.comとか
cmd.exeとか使いにくいから、cygwinの方がイイ!
ま、簡単なことやるなら、copalなんか使う手もあるが。
>>595
「ppmモジュールねぇよ」
って怒られること多くない?
どうせ perl -MCPAN すりゃ同じだし

system()とか`` 考えるなら、断然cygwinだな
Cygwinの方がいいだろ
system() になにか違いがあるんですか?
>>599
偉い人じゃないから、system()自体の違いは知らんけど
Windowsだったら system('echo hoge'); とか @list=`ls`; とかできないじゃん
両方イレトケ
bash上でActivePerl使うのが楽
どっちかでしかコンパイルできないmoduleもあるし
両方入れてるが、PATHとかで無駄にはまる時あって初心者にはオススメできない
分かってるならいいんだけどね
PATHは優先順位さえ覚えておけば問題ないんじゃないの?
オレッチはCygwin入れるときPerlは入れないでActivePerl入れてる。
凝ったことをしたいなら、linuxを入れる
winからperlを便利に使いたいだけならActivePerl
cygwinからActivePerlが最強。
ActivePerlのが気楽だし、個人でCGI作る程度ならそっちのがいいかと。
UNIXコマンドを使うようならcygwin...ってかUNIXいれろ、と。
perlを比較しているのにbashが便利wwwとか言ってる椰子は香具師
椰子は香具師
椰子は香具師
椰子は香具師
椰子は香具師
椰子は香具師
純粋にどう勘違いしていたのか気になる
> 椰子は香具師
610デフォルトの名無しさん:03/07/09 21:54
perlってなんてよむんですか?
ピィール
ぺるる
ピロリだろ。初心者を騙すなよ。
>>609
俺の予想: 彼は「香具師」をいわゆる「厨房」の意味と思っており、
        「ヤツ」の変化の歴史を知らなかった。
ありえない: 実はネタである。
こうぐしでも変換できるし、なんか香ばしい輩の
ことだと思っちゃったんだろうなあ
ピーナスだよ
618デフォルトの名無しさん:03/07/10 04:22
掲示板作りたいんですが、Activeperl5.8って無料なのですか?英語わけわからない。
後、ダウソする時のメアド記入欄ってちゃんとしたメール記入した方がいいのですか?
なんか怖い
619_:03/07/10 04:35
>>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はフリー
メアドは適当でいい
英語嫁ないならどうせそのうち挫折するだろ
>>618
英語がわからない人がプログラミングをするとこは法律で禁じられています。
>>607が大アフォということで決着。
Perlを使う環境がPerlそのものと並んで重要なことくらい
分からない>>607は・・・
大事だけど。でもそれはperlの比較じゃないよね?
どーでもいいけど、そろそろコーティングやアルゴリズムの質問が見たくなった。
最後言わしてくれ。
>>623、話の発端は、ActivePerlとcygwinPerlのどっち
入れたほうがいいでつか、っていう質問だっただろ。
そもそもPerlの比較じゃなかったんよ。漏れ、粘着?
> 英語嫁ないならどうせそのうち挫折するだろ

エラーメッセージをコピペして
「どういう意味なんでしょうか……」
お前らも英語わかんないくせにーwwwwwwwwwwwww
分かんないけど、自分で調べるよ。
>>626
エラーメッセージコピペするのは質問者として非常に正しい。
ダメな質問者は 「何かエラーが出て動かない」 としか言わない。
>>629
そのまえにエラーメッセージでググッてみるとなお良い。
perlでgetaddrinfo関数って使えないの?
633631: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
と同じ意味。

これをうまく処理するためには、どんな感じにするのがよいでしょうか。

636635:03/07/11 19:09
{
local $/ = undef;
$text = <STDIN> ;
}
$text =~ s/\\\n//gd ;

私はこんなのとか、$/ = " \n" ; とかしか思いつかないのですが、
もうちょっと軽い感じにできないかと。
>>635
それをどう処理したいの?
>>635
意味がわからん。出直せ。
まぁまぁ、636見りゃやりたい事は分かろう
日本語意味分かんないから放置するけどな

640 ◆hMJAPH9PWA :03/07/12 09:32
なんかsearch.cpan.orgの色が変わってるけど、どうしたんだろう。
>>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 のような書き方でやれないでしょうか?
644643:03/07/14 10:25

code-B で閉じ括弧二重タイプしてしまいました。
for(@array) {
 /deleted/ && push(@new, $_)
}

ちょっとせこいケド。
646645:03/07/14 11:02
あぁ、除くのか。 && を or にしといてください(´Д`;)
647645:03/07/14 11:10
@array = grep { not /deleted/ } @array
何度もすいませんw
for(@array) {
}
@array = grep{!/deleted/} @array;

はダメ?
649648:03/07/14 11:13
かぶった(´Д`)
 o000O
 (⌒⌒)
  ヽ  (
  (_)


           O000o
           (⌒⌒)
            ) /
           (_/
activePerl5.8.0を使っている者です。
並列処理(Thread)を使いたいのですが、どなたか使われた方いらっしゃいませんか?
簡単なサンプルソースを見せていただきたいのですが。。。
初期化すらままならない状態でして。。。
駄目だろ、普通。
動かなくは無いけど、スレッドのリリース処理が上手く出来ない状態。
#!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;
655654:03/07/15 01:54
テスト用のものの域出てないけど基本的に全ての変数はスレッドローカルになり
my $name : sheard;
でスレッド間で共有する変数は作る。
制限としてリファレンスとかが使えなかった気がする。
これ以上知りたかったら自分で調べるか実験するかしてくれい。
まあほかに試した人いたら聞きたいけど。
shared
657山崎 渉:03/07/15 09:46

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
658651:03/07/15 10:14
>>654
ありがとうございます。
サンプルソースをベースにもう少し調べてみようと思います。
何かわかれば報告いたします。
perlを1からやりたいんですけど、エディッタってメモ帳とかでいいんですか?
それとも専用のエディッタが必要ですか?
>>659
メモ帳でもイイ!
専用のエディタがあればもっとイイ鴨
とどのつまりは自分自身が使いやすいほうを選ば吉
>>660
ありがとうございます!
とりあえず、ワードパットでやってみます。

無理っぽかったらフリーソフト・・・。

限界が来たら専用エディッタ買ってみます
>>661

使いやすいエディタって何よ?
http://pc2.2ch.net/test/read.cgi/php/991372719/l50
Win->xyzzy以外ありえない
Unix->vi,emcas
>>661
ワードパッドはどうかと思うがな……。

フリーソフトの開発環境なら「Perlを始めよう!」とか「Copal」があるな。
まぁ最終的にはテキストエディタに落ち着くわけだが、
これから始めるんであれば試しに使ってもいいと思う。
E(G) = ω1 ∪ ω2
ワードパッド使うくらいならとりあえず秀丸にしとけ
>>666
秀丸はシェアウェアだから、『とりあえず』で選べるものではない。
...とか言ってみるtest。
いまどき秀丸をすすめてる奴って何を根拠にすすめてるの?
つか662が誘導してるんだからこっちで討論するな、と。

http://pc2.2ch.net/test/read.cgi/php/991372719/l50
秀丸はシェアウエアだが警告無視すればお金払わずに使えるとか誰かがいってなかった

と言ってみるテスト。
学生とかフリーウェアの作者なら無料とかなかったか?
672デフォルトの名無しさん:03/07/16 12:06
age
673デフォルトの名無しさん:03/07/16 12:16
>>671
要登録
Perl用強調表示などもあるので選択肢の一つとしてはアリだと思うが…

そんなことよりエディタを制御するスクリプトがPerl風のエディタない?
ActivePerl5.8.0なんですが、Win32::APIライブラリを使えば
全てのWin32APIが使えるんですか??
>>674
というよりは、DLL内の関数を呼び出すモノ。
Win32:;APIの使い方は解っても、APIの仕様がわからないと使いにくかったりするんだけど
そこらへんの解説をしてる所って殆ど無いね・・・
Iriaというダウンロード用のツールが独自のAPIを持ってて、
うまくすると多分perlから使えるんだけど、
どうやればいいのか判らない
678デフォルトの名無しさん:03/07/16 16:18
$c = [\ 'c'];

この¥ってなんですか?
679_:03/07/16 16:19
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
難しいねえ
683_:03/07/16 17:48
掲示板なんかで、引用符「>」「>」から先の文字の色を変えるにはどうしたらいいですか?
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
>>684
Perlのコーディングと関係ないよ。
正規表現スレで聞いてみたら?
>>676
Win32APIの仕様ならMSDN見るしかあるまい。Perlの範疇を超えている。

>>677
Iriaは忘れたがIrvineは doc\api.txt というファイルに仕様が書いてあるな。
まぁ、ActiveXなんだが。
688_:03/07/16 19:36
>>684
正規表現スレってドコ?
691_:03/07/16 21:03
perlappで実行ファイルにコンパイルしたいのですが
やり方が分かりません
どなたか解説お願いします
レベルが低すぎて笑えるw
もう次刷れたてんなよ>>1
Win32::APIの話なんかは別にレベル低くないと思うんだが。
まぁAPIに限れば、スレ違いかも知らんケド。
さて、APIリファならASCIIの『Win32API オフィシャルリファレンス』がオススメでつ。
喪前は>>496=>>499だろ
まだいたのか。しっしっ。
696デフォルトの名無しさん:03/07/19 15:08
教えてください.

自分の3Dソフトのオブジェクトをパイソンスクリプトでなく
Perlで一括操作したいと考えています.

3Dに限らずソフトSDKを使って,Perlを実装する話などの
書籍・HP等ございましたら,ご紹介願えないませんでしょうか.

よろしくお願い致します.
>>696
man perlxs perlxstut
698696:03/07/19 15:53
>697さん
該当3DソフトようのPerlインタフェースPlug-inモジュールを
作るってことでしょうか?
699696: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
701696: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について先月号のハッカージャパンの
大人のスクリプト講座で詳しく説明してたな。
俺はそれだけの理由で買った。
ハッカージャパンか
面白そうだな
>>702
なんか面白い使い方載ってた?
立ち読みしてきたけど何も載ってなかった。

って、先月号かよ_| ̄|○


先月までは何やら色々やってたみたいね。

ごめん今見たら5月号だから先々月号だね。
PC書籍の専門店は割とバックナンバー置いてるから
諦めずにGO

で、どんな内容?
perlで書いたスクリプトをコンパイルするにはどうしたら。。

perlcc使ってみたら
Note(probably hermless)No library found for 'kernel32.lib'
とかいうのが10行くらい出て さらに

'cl'ゆーコマンドはありまへん とMS-DOSが抜かすわけだが。。

D以下にインスコしたのがいけなかったのか??
Win32::APIのVer0.40を使った
「Susieのプラグインを使った、画像をBMPに変換するコンバーター」
の作り方とかが載ってます。
このスレ読んでると頭痛がして来る。

インターネットは義務教育が終わってから、とか規制してくれないかなー…
おお。結構使えそう。
>>710
(突っ込みたいけどやめておくよ)
>>708
perl filenameとしてくださいね^^;
714デフォルトの名無しさん:03/07/22 14:28
system関数と`(バッククォーテーション)の違いを教えてください。
715デフォルトの名無しさん:03/07/22 14:44
しばらく見ないうちに白痴化している……
>>709
ほほー、なかなか面白そうだな。
そのうちバックナンバー探してみるか。
>>714
$sys=system('ls');
print $sys;
$back=`ls`;
pritnt $back;
やってみそ。
718デフォルトの名無しさん:03/07/22 20:14
>>708
C言語でもやったら?
'ls' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
>>719
どこでうごかしてんだよ
>>717
$sys=system(ls);
722デフォルトの名無しさん:03/07/22 23:08
jpegやGIFの画像を受け付けるCGIで、uploadされてきたファイルを
適正なサイズにリサイズして格納したいと思っています。
これは不要に大きなファイルを送られてサーバが圧迫されるのを
防ぎたいのですが、調べたら利用中のサーバにGDがインストールされて
いましたので、これでできるのかも、と自前のテストサーバにも、
GD1.19をインストールしました。(サーバはGD1.18です)

そもそもGDでこんな事は可能なんでしょうか。

またそんなGDの使い方があるサイトとかありませんか?
調べてからインストールしろ。
724_:03/07/22 23:13
725_:03/07/22 23:13
>>722
CGIって何?
>>1の存在は無視?
お前の存在も無視していい?
727デフォルトの名無しさん:03/07/22 23:57
マルチポストで申し訳ありません。こちらのほうが適切かと思いカキコしました。
行の折り返しに挑戦しています。
format や Text::Wrap を使ってみましたが
文字化けして上手くいきません。
解決方法がありましたら教えて下さい。
参考になるサイトがありましたらよろしくお願いします。
729722:03/07/23 10:23
>>726
CGIはCGIだよ。gdはライブラリ。
GDはGD.pmって言ってperのモジュール。

でperlで書いたCGIスクリプトでGD.pm経由であんな事がしたい、
って事ですが、ここはもっと話題が限定的なんですね。

了解しました。
>>726
この場合、「CGIについての質問」ではないと思うのだが?
背景として説明してるだけでしょ。
ここはム板だし、スレの流れをCGIに向かわせないために
ここではCGIという単語は一切出さない方が良い。
>>722の質問でもCGIに言及せずに書ける。
722がスレ違いじゃなくても、それに釣られてスレ違いの質問が増えてくるだろ。
>>731
もういいよ、そっとしといてやるから気にすんなよ。
フォントデータらしきファイルがあるので、
解析しようと思って、bmpファイルに変換したいけど、
bmpのデータ構造が少し厄介なので、
そのへんを面倒見てくれるモジュールはありますか?
>>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);
↑こんなやつ

引数の文字列のなかに半角文字が入ってないにも関わらず
半角文字が検出されるようなパターンが発生するかどうか知りたいです。
アフォっぽい質問ですがよろしくおねがいします。
737デフォルトの名無しさん:03/07/23 19:37
よければ教えてください。

chompを使ってテキストの改行を取るコードを書いて、
以前はきちんと動いていたのですが、
別サーバーでやったら、改行が取れなくなりました。
もとのテキストは、自分で編集したテキストファイルです。
perlは5です。
理由がわかる方はいらっしゃるでしょうか?

もし、ここではしていけない質問だったらすいません…。
ま、CGIという文字列にマッチした瞬間に顔真っ赤にさせて
必死になってる>>726みたいな香具師はお前が出てけよ。な?
>>737
s/\x0D\x0A|\x0D|\x0A//g;

もしくは
chompを二回やるとか。
737です

739さん、ありがとうございます!
できました。

以前はきちんと動いていたので、理由がわからず困っていました。
とても助かりました。

「chompを二回」も試してみたのですが、こちらはダメでした。

ともあれ、ありがとうございました。
741デフォルトの名無しさん:03/07/24 01:35
Perl6はParrotというVM上で動くとの話だけど、
そのParrotを作るのに手間取ってなかなかPerl6開発が進まないんだよね?
わざわざ新しいVM作らないでJavaのVMで動くようにすればいいのに。
そうすれば携帯とかもっと色々なプラットフォームでPerlが動くと
思うんだけどどうよ?
>>741
確かに便利だな
しかし、そうするとPerlじゃなくてJavaを使う罠
>>742
既存のPerlリソースがJavaVM上で動いたり、Perlソースから
Javaオブジェクトが使えたりするのは、有意義かもな。

Apache-BSF
http://jakarta.apache.org/bsf/
スクリプト言語とJavaBeansのインターフェイスを簡単に作れる
基盤は、IBMがApacheに寄贈してくれている。誰か作ってみそ。
>>741
Jythonつかえヴぉケ
てめーが考えるようなことはすでにPerl6以前にやってんの
JPLっていうのんで結局開発はとまった
PerlはCISCにのっとったOP命令が多い言語
JavaはRISCにのっとったOPが少ない言語
このふたつをまぜこむのは大変なの
てかparrot<−>JVMはある
ぐぐれや夏厨が
あげんな
責任もって
このスレ削除してこい
なんか全角記号を使ってる時点でかなり厨っぽいな
たぶん上司に同じような口調で怒られて
自分でもどなってみたくなったんだろ
Perlでアラームを短くプッって鳴らすにはどうすればいいの?
短いアラームのwavファイルをsystemで鳴らす
print "( ´,_ゝ`)プッ";
print "\a";
これで鳴る
751747:03/07/24 16:35
\aではプーになってしまいます。そこをプッにしたいのですけど、
どうやったらいいのでしょうか?
いちいちウィンドウを出さずに、音だけ鳴らして
終了してくれるwindowsアプリを紹介して下さい
>753
板違い過ぎ
外部アプリ使わなくてもwindows標準でそういう機能無かったっけ
普通にアラーム鳴らす時に自分が使ってる奴
756747:03/07/24 16:56
サウンド関係はマザーボードについてるブザーしかないですが、
wavファイルでも大丈夫でしょうか?
ttp://www.aa.wakwak.com/~pirafu/software/prwave/index.html
こんなのがあった

なに、サウンドボードが無い?
それはもう諦めるしか
っていうか、最初からハードウェア板の管轄だな
           ,.、   .,r.、
          ,! ヽ ,:'  ゙;.
          !  ゙, |   }.
         ゙;  i_i  ,/          ,.、  .,r.、
         ,r'     `ヽ、       ,! ヽ,:'  ゙;.
        ,i"  _,  ._  ゙;       !  ゙;;  }
        !.  ・     ・ ,!.      ゙;  ii ,/
        ゝ_   x    ,::''      ,r'      `ヽ、
       (^ン''`'''''''''''''' 0∞o。    i"  _,   _  ゙;
        `"!     (  ::) ∧  !. ・     ・ ,! ←>>747
         ゙'ンーr-‐-'")  / < >ゝ_=   x  _::'
          (__ノ   (_,ノ   ∨  /`''''''''(⌒';’∵∴;;゙
                    (⌒ヾ;;,    `ソ :‘
                     ゙゙`ヽ、、、__,,ノ゙
759747:03/07/24 17:35
もうプ〜で我慢します。
あのぷーの長さは誰が決めてるんだ?
鳴ってる以上、普通にドライバがあってどっかに
指令出してるんだろうけど。
>>753
Dos上で動くんだからそれは無理。
フロップーのギコギコ音で我慢しる。

open("A:\\GIKOGIKO") while(1);
Win32::APIを使って再生してみるってのはどうよ。

……って、Windows限定でいいんだっけ?
それならWin32::Soundでよくないか?
バッチファイルでこれ使ってたりする
http://www.muconsulting.com/playwav/index.html
playwav.exe
perlスクリプトってWindowsのサービスとして登録して、
開始とか終了とかできちゃう?無理?
> 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
>>766
exeなんかをサービスとして動かす方法があったような気がした。
win系の板で聞いた方がよさげ。
>>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
>>770
無条件に読み込んでいるようですが、なんのために戻り値を受けているんですか?
>>770
エラー処理はopen時にやっとけ。
>>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板に引っ込んでろ
そうやっていちいちテンポラリの変数の名前を
考える労力を使わないのがperl風
>>774

>あいかわらずレヴェルの低いスレだ。泣きそうだ
ワロタ。
でも、まぁ、良いんじゃない。
良くわかってなくても取り合えず動いちゃうのがPerlで、
そこが魅力でもあるんだから。
770もガンガレな。
#TYPE2
open(FILE,"file0.txt") or die $!;
eval
{
  open(FILE,"datafile.csv") || die($!);
  @lines=<FILE>;
  close(FILE);
};
if($@)
{
  die($@);
}
低レベルなのに、なぜか、CとPerlで同じ、すごい簡単なプログラムを書いて
どっちが楽か考えてみるべ。という話になりました。

何でもいいんですが、半径入れたら面積でるとか、全部半角にするとか
いや、ちょっとこれはいくら何でも簡単すぎるか、、。

どんなプログラム書くことにしましょう。
もちろんPerlに有利な(汗)
アルゴリズムの部分では、Cもperlも変わらないような
Lispとかまで行くと違ってくるけど

perlはCから面倒な部分を極力取り払った感じ
>>779
こういうのを作らせるのが一番Perlらしさが出るんじゃないかな。
perl -ne '/(if|while|for|switch|case)\b/ && print' hoge.cpp
正規表現の部分は色々変えて。
正規表現とハッシュだろうな。

   /⌒ヽ
  / ´_ゝ`)時間的に、ここ通らないと行けないので、通りますよ・・・
  |    /
  | /| |
  // | |
 U  .U
こいつの顔、まるで死神だな。まさか、死出の旅へ。
>perl -ne '/(if|while|for|switch|case)\b/ && print' hoge.cpp
これって何をやろうとしてるの?
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>;の部分にあたります
790787:03/07/29 22:02
>>788
ごめんなさい。初心者でして、戻り値のチェックとはどういうことですか?
791ぼるじょあ ◆yEbBEcuFOU :03/07/29 22:06
>>790
うーん・・・
open(PROTEINFILE,$pepfile);
print $!;
とやってみな。多分それで原因が分かる。
792_:03/07/29 22:09
793787:03/07/29 22:09
unless (open(PROTEINFILE,$pepfile)){
print "ファイル $pepfile は開けませんでした。";
exit;
}

としてチェックを入れるとやはり
ファイル $pepfile は開けませんでした。
が実行されてしまいます。
ファイル名は絶対に間違っていません。
このファイルとスクリプトは同じディレクトリにあるのですが、
ディレクトリの指定の仕方がまちがっているのでしょうか?
794787: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
今度はなんでルートディレクトリからの絶対パスになっているんだ?
796787:03/07/29 22:14
>>795
ごめんなさい。間違えました。
でも/つけてもつけなくても同じようです。
797ぼるじょあ ◆yEbBEcuFOU :03/07/29 22:15
>>796
ファイル名も変わっているんだけど・・・・
アルェー
799787:03/07/29 22:17
お!
絶対パスで指定したらできました!
やはりパスの指定がおかしかったのですね。
でも相対パスではどうやるのでしょうかね・・・?
いろいろご迷惑おかけしました。
ありがとうございました。 >>ぼるじょあさん
proteinseq.logってファイルは存在するのか?
そんざいしてないファイルを読み込もうとしても、、、

あと
なんで
$pepfile = "proteinseq.log";
じゃないんだ?
801787:03/07/29 22:21
>>797,800
proteinseqとproteinse.logを用意していたのです。
説明不足申し訳ありませんでした。
起動した時のカレントがどこかだな
803787:03/07/29 22:29
>>802
そのようですね。perl.exeが置いてある位置からの相対パスだったようです・・・
違うフォルダにスクリプトファイルも読み込みファイルも置いてあったので
804_:03/07/29 22:30
805デフォルトの名無しさん:03/07/29 22:32
スクリプトと同じディレクトリじゃないのか!?
>>803
use Cwd;
print cwd(),"\n";
これで表示されるものがスクリプトのある場所とは異なる?
806805:03/07/29 22:33
おっと、Perlを呼んだときにいるディレクトリだ(^_^;)
807805:03/07/29 22:34
というわけで>>805は無視して。
808787:03/07/29 22:35
>>803
perl.exeとは別のフォルダにスクリプトと読み込みファイルが置いてあるという意味です。
両ファイルは同じフォルダです。
perl.exeがある場所が C:\Perl\bin
両ファイルは C:\Perl\bin\script
に置いてました。
>>808
実行するときに
C:\> perl C:\Perl\bin\script\protein.pl
とかやったんでしょ?
スクリプトのある場所に移動してからやらないとね。
810デフォルトの名無しさん:03/07/29 22:41
>>1
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

       ヽ(・ω・)/   ズコー
      \(.\ ノ
まあ、$LOGDIR = "/log" みたいに頭の方で定義して、
絶対パスで指定するのが結局楽だな
普通はperlのフォルダにpathを通して、実行はスクリプトのあるフォルダから
やるもんじゃないのか?
>>812
un
814_:03/07/29 23:42
815_:03/07/30 00:25
816_:03/07/30 01:52
817_:03/07/30 03:00
   /⌒ヽ
  / ´_ゝ`)時間的に、ここ通らないと行けないので、通りますよ・・・
  |    /
  | /| |
  // | |
 U  .U
DES3で暗号化した文字列をファイルに書き込んで
復号化しようと読み込むと途中までしか読めないのは何が悪いんでしょうか?

ちなみにどこまで読めてるのかなーとprintしてみるとピーとかビープ音が出ます。
>>891
コード晒せ
何のモジュールつかってるのか書けよ
2度使いまわすファイルなどは
書き込み用にopenしたファイルは必ずcloseしたあと
もういっかい読み込みようにopenするんだよ
てかopenしたらcloseすること
821819: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
>>891
そんなプログラム書いてると、FBIにマークされるぞ
>>822は預言者
これじゃだめか?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
open(FILE,$ARGV[0]);#$ARGV[0]は最初の引数 $ARGV[0]にファイル名を入れる
read(FILE,$plaintext,-s $ARGV[0]);
#-s でファイルのサイズの取得、$plaintextにバッファを詰める

>>ピーとかビープ音
うーんこれはもっとプログラムの勉強しようC言語とかアスキーコードとか
826819:03/07/31 00:41
>>822
え?輸出制限はもうなくなったのでは?

>>824
それなら出来るんですけど一回ファイルに書き出して
それを読み込むと途中までしか読めないんです^^;
普通のファイルだと読めているので暗号化した文字列の問題なんでしょうか?

>>825
readで読んでも同じところで切れてしまいます。
C言語とかアスキーコードとかの勉強をするとビープ音が分かるようになるんですか?
binmode
828819:03/07/31 07:30
>>827
解決、有難うございます。

ところでTripleDESって勝手に使っちゃいけないんですか?
バレなければいいんじゃない?
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
×されている
○されている出力チャネル
>>831-833
Thanks!
すみません、830です。もう一つだけご教授願います。
my $data_format = 'Lff';
my $data_length = 20;
syswrite FILE, $data, $data_length;
この$data_formatの形式を教えてください。
解説しているサイトへのリンクだけでも結構です。
$data_format使ってないじゃん
>>835
man perlfunc で pack TEMPLATE のところ見れ。
つーかそれ以前にperlのマニュアルひととおり読め。
>>836
思いっきりお馬鹿な質問の書き方してスマソ。
引用をとちってました。使っているのは
my $data = (pack $data_format, $time, $a, $b);
です。

>>837
だよな。本来だったら回線切って逝ってこなきゃいけないよな。
これだけ聞いたらもうご迷惑は書けないのでスマソ。
ぐぐってもローパスフィルターしか出て来ないんですよ。

>>838
ゴメン。今「はじめてのperl」の到着待ちっす。
840839:03/08/01 07:25
ごめん。分かった。
符号無しLongと単精度浮動小数点のことだったみたい。
回線切って逝ってくる。
841デフォルトの名無しさん:03/08/01 13:43
age

843山崎 渉:03/08/02 02:06
(^^)
844デフォルトの名無しさん:03/08/03 17:17
WindowsでPerlを使ってシリアル通信をしたいんですけど、
(具体的には携帯電話のメモリ読み書きなど)
どうやればいいんでしょうか?
ドライバとモジュールを用意して、ファイルのように読み書き
open(AUX,">AUX");
select AUX;
print "ATD110\n";
847844:03/08/03 21:28
>>845
ドライバというのはシリアルケーブルのドライバのことでしょうか?
モジュールとはPerlモジュールですか?

>>847
AUXというのはシリアルケーブルにつながれた携帯電話を示すのでしょうか?
848844:03/08/03 21:30
>>847>>846でした。
print "ATD110\n";
というのは110番に電話をかけるということかな?(w
読み書きする方法を確立するのはperl以前の話だし、
読み出した後のデータフォーマットの扱いは
既にperlの話ではないし
>>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" )
とかでいいみたいに書いてありますが。
>>851
CPANにWin32-SerialPortというモジュールがある。
それをインストールして試せ。 インストールの仕方を聞くなんて野暮はすんなよ。
そのドキュメント読んで使い方を理解しろ。 英語は苦手なんて泣き言はいうなよ。
成功を祈る。
つかレス読んでると通信自体が分かってないようだが。Perl以前の問題だな。
>>853
>Perl以前の問題だな。

ホー、コンピュータ全般に通じてらっしゃる方は言うことが違う
×言うこと
○仰ること

はい、もう一度
>>854
「でばいすふぁいる」ってしってまちゅか?
>>855
ご指摘感謝、謝々。 では、改めて

ホェー、コンピュータ全般に通じてらっしゃる方はホザクことが違う
コンピュータ全般以前に、目的と手段の区別が付いてない。
>>854
何言ってんだ?通信路さえ確保できればあとは言語に関係ないだろう。
逆切れすると誰も答えてくれなくなるよ。
>>859
これは、これは。全知全能のカビ様。
あバレな私めをお救いくだざいましぇ(ケケケ
>>859
お偉いさんの発言だね。うふ。
素人がカラスの時の苦労がわくぁんねぇだろな。
なんかバカがくやしがってるな。(ケケケ
南下、歯応江のないスレ
馬鹿は馬鹿なりに頭いいと思い込んでるんだろな
>>863
>>6
PerlはWEBプログラム言語かよ・・・狂ってるな
PerlはShellScriptの代わりだよ。
今時WebProg板にスレがあるのがおかしい。後方互換のためにあるようなもんだ。
まあ、ここは隔離スレなんだがな
868844: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
>>869
理解して使えよ
( ^▽^)<女の子理解してよ〜♪(ボエー
872852:03/08/05 19:47
>>868
Win32-SerialPortはWin32-APIを使ってシリアル通信関係のAPIをPerlで
使えるようにしたモジュール。->要インストール、Win32-API
だから、「Windows RS232C API」とか「Windows シリアル通信 API」などを
キーワードにしてググればperl以外でのAPIの使用例がヒットするはず。
参考になると思う。 ガンガレ!
873844:03/08/05 23:27
>>872
ありがとう、がんばります!
874デフォルトの名無しさん:03/08/06 09:10
>>870
ありがとう、がんばります!

といいたいところだけど、理解してないから聞いてんだけどなぁ。
つーか使ってるんじゃなくて使おうと思ってるだけだけど。

まあ、それはいいとして「perl 名前空間」というキーワードでぐぐってみたらExporterの使い方に問題があたかもしれない。

上記URLサンプル
@EXPORT = qw(Tashizan);

私的改訂版
@EXPORT = qw(tashizan);

数字の文字列があるとして(可変長)
それを初めてある数字が出てくる場所から文字列の最後までに切り詰めるにはどうすれば?
例)
123456789というのを
初めて5が出てくるところから最後までの
56789に切り詰める(置換する)

s/(5\d+)$/$1/ とやったら全部まるまるマッチしてしまう・・・
877876:03/08/06 15:40
置換対象の数字ですが
「初めて」の数字が先頭に来ることもありますし、最後の1文字(1桁目)だけになることもあるし
文字列に複数回出現することもあります
s/(\d*)5/5/なんてどうよ
s/(5\d+)/$1/ じゃだめ?
>>876
ちなみにそれ、「全部まるまるマッチしている」わけじゃないよ。
マッチしているのは"56789"の部分だけ。
"123456789"の中の"56789"を"56789"に置き換えた結果が
元の文字列と何も変わらないのは当然のことだよ。
$1をなにかに代入
>>876
$num = 123456789;
$num = substr $num, index($num, '5');
置換でやるなら
$num =~ s/^.*?(?=5)//;
$num = s/^[^5]*//;
>>880
あ、そうですね・・・(゚д゚;)

皆さんしょーもない勘違いに付き合って下さってどうもです
886デフォルトの名無しさん:03/08/06 17:38
「Perlについての質問箱 4箱目」スレをどうしても見たいんですけど
どうしたらいいですか?
887_:03/08/06 17:39
888デフォルトの名無しさん:03/08/06 17:40
Perl5のコードをPerl6の文法で記述することができる
プラグマってありましたっけ?
>>886
●を買う
って思ったらとっくにHTML化してんじゃん。
ほれ
http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
>>890 また騙されたスレ
悪質ないたずらはやめてください
>>886
2ちゃんねるプラスという雑誌に書いてあるIDとパスを(ry
PerlはXMLデータの送受信ってできるんかな?
HTTP(S)のPOSTで。(CGI)
>>894
できるよ。
> HTTP(S)のPOSTで。(CGI)
あっそ。(・∀・)カエレ
>>888
Perl6::Classesとかだなぁ。
http://search.cpan.org/modlist/Perl6 を山椒。

つかもうcpan色戻ったのね。
戻ったら戻ったでなんだかまた落ち着かないなぁ。
897デフォルトの名無しさん:03/08/06 23:23
ファイルをカレントディレクトリ以外に作るとき、
open(FILE, ">c:\\dir\\file.txt");
と書けば作れますか?
chdirを使わないとダメですかねぇ?

まぁ自分で書いてみればいいんですけど…。
>まぁ自分で書いてみればいいんですけど…。

分かってんならやれ
899デフォルトの名無しさん:03/08/07 00:02
釣れた
900デフォルトの名無しさん:03/08/07 00:04
釣れた
901デフォルトの名無しさん:03/08/07 00:58
釣れた
釣られちゃった
     /V\
    /◎;;;,;,,,,ヽ
 _ ム::::(,,゚Д゚)::| < (ry
ヽツ.(ノ:::::::::.:::::.:..|)
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U'
904デフォルトの名無しさん:03/08/07 02:18
釣れた
HTMLファイルを読んで解析するCPANにあるモジュールの定番って
何でしょうか?
例えば、
<font size="+2" color="red">大きな赤い文字</font>
だと、タグ名=font、size="+2"、color="red"、値=大きな赤い文字
みたいに取り出すイメージです。
>>905
perlをインストールしても、モジュールは何がインストールされていて
どういう事ができるか、ドキュメントを読みもしない香具師がこういう
クソな質問をする。
>>906
まぁ落ち着け。
>>905は定番を聞いてるだけなんだからいいじゃないか。
それぐらい答えてあげようよ。

>>905
定番なんか聞いてどうすんだ。自分の使いやすい奴を使えばいい。
>>905
質問する前に
http://www.cpan.org/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/ を
眺めたのか?と小一時間.....(ry
HTMLを(構文)解析するを英訳すると何になるか考えたことがあるのか?と小一時間.....(ry
>>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);
>>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
>>911
ブラウザで〜.phpや〜.cgiにアクセスして表示されたページをファイルに保存する

これと同じ働きをするプログラムを組めばいい
つーかPerl|php以前の話だな・・・
915デフォルトの名無しさん:03/08/07 18:50
>>913
いや、だからperlで〜.phpや〜.cgiにアクセスする方法を知りたいんですが。
>>913
LWPモジュールを使えばできる。
ヒント
LWP

あとはググれ
じゃーな
919デフォルトの名無しさん:03/08/07 18:55
>>916-918
ありがとうございます。LPWは入っているようなので、試してみたらできました。
・・・意外と簡単なんですね・・・
920913:03/08/07 18:56
おい、俺はLWPぐらい知ってるっての^^;
おまえらケコーンしすぎだろ
素朴な疑問なんだけどCGIは一切作らないけど、
perlを頻繁に使ってるって人はこの板にどのくらいいるの?

出来ればOSの種類とかも教えてくれると面白いカモ。
ちなみに俺はCGIのperlだったから。
で、案外perlはやるなってコトでwinでもTk入れて遊びで動かしたりしてる。
unix系は持ってないし。
漏れは、cgiもつくるけど、データコンバータなどを作ったりして重宝しとる。

あと、他にもやってるが素性がバレるでな(w
cgiは作ったことないけど、各種テキスト処理とか、
ネットワーク絡みとか、何でもやらせてる。
バイナリも扱う。
モジュールは殆ど使ってない。

昔ならCで書いてたのを、より楽な言語でやってるだけ。
4のころはいろいろツールを作るのに使ってたよ。
5で挫折した。
俺も>924みたいな感じ。
簡単に組めるし文字列にも強いからちょっとしたデータコンバータに便利だな。
>>924はアヤシイ会社のスパマー
データコンバータってなんですか?
データをコンバートするプログラム
INCMのプラグイン作成とか
>>922
漏れがそうだよ。翻訳をやっていて、辞書のデータをコンバートするために
覚えた。その後もユーザ管理とかデータ処理などに使っている。
特定用途のシェアウェアがごろごろしてるのを見ると、
簡単なperlくらい必須科目にしたくなるな
934659:03/08/09 08:48
必須科目にしても使わない人のほうが多そうだから、あれじゃないかな。

CGI以外ではプログラマのための言語って匂いがするなぁ。。
自作実行、みたいな。
そうでもない?
名前に変な数字入った。気にしないでくれ。
ネタニマジレ(ry
Perlのサクッと作ってサクッと実行できる感覚が止められない。
これでGUIもサクッとできたら(俺の中では)完璧だなぁ。
(Tkはかっちょ悪いので使いたくないです)
>>934=Windowsしか使ったこと無い
>938 = MZ-80K しか使ったことない。
940905:03/08/10 08:55
>>909
ありがとうございました。

そのモジュール、スレッド対応Perlでは動かなかった...
>>939
キーボード半田付けした人
>>940
> そのモジュール、スレッド対応Perlでは動かなかった...

HTML::Parserがスレッドセーフじゃないってことか?信じられんな。
HTML-Parser-3.28のソース眺めたけど、無問題と思えるのだが。

オイ、オマイ等の中で分かる香具師いらっしゃいますか?
system("find data/ -type f -atime +1 -exec rm {} \\;");

このようにして1日更新のないファイルを削除するようにしているのですが
XREAというレンタルサーバーでは動いてくれません。
なにか回避方法はないでしょうか?
>>943 perl で書きなおす。
945デフォルトの名無しさん:03/08/11 15:35
open(FH,"+>data.dat");
$line = <FH>;
print $line;

てやってもdata.datの内容が表示されないんだけどなんでですか?
data.datには文字列が一行だけ入ってます。
open した時点で内容が消されるから
>>945
何故それで読めると思いましたか?
948945:03/08/11 16:38
   / ̄ ̄ ̄ ̄ ̄ ミ
  /  ,―――─―-ミ
 /  //     \|
 |  / ,(・ )   ( ・)  ハァ
  (6       つ   |    ハァ
  |      ∪__  |
  |      /__/ /
/|     ∪   /\

夏厨だから
スレッドセーフじゃないモジュールをスレッドで使用するのに
何か回避策はありますか?
950(・∀・)ニヤニヤ ◆IuDnGO5LnY :03/08/11 21:38
Rubyでライブラリをセルフテストする方法として

if $0 == __FILE__
  xxx
end

ってのがありますが、Perlで同等のことはできませんか?

Perlにはちゃんとテスト用の機構があるのは知ってますが、
・require/use等で使われたときは実行されず、
・直接起動したときだけ実行される
・Perl4でも動作する記法
を知りたいのです。

よろしくおながいします。
>>942
5.005_03なのですが、Can't load ..... Parser.so
DynaLoader.pmでPL_stack_max(だったかな)でundefinedうんぬんて出てきました。
Perlのバージョンが悪いのかな。
Parser.pmはバージョン3.08でした。
>>950
もともとPerlで使われてた手法だろ。
953ハッカ飴:03/08/12 00:57
CPANモジュールのAlgorithm::Diffってちゃんと動く?
少なくとも俺の環境では正しい結果を返さないんだが。
954デフォルトの名無しさん:03/08/12 01:00
なにやっても動かぬ。
そうですか。
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
になっちゃうんだぜ?
へー・・
958ハッカ飴:03/08/12 01:14
違う違う、こうだこうだ。
a    x b y c z p d q
a b c a x b y c z
ほー・・・
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
以上、使えぬデシャバリさんですた。


ここ、スレッドあぼーんするかな。
夏。
965デフォルトの名無しさん:03/08/12 01:33
>>963
どっちが使えないんだか分からん
966デフォルトの名無しさん:03/08/12 01:35
>>963
このスレッドに恨みでもあるの?
   ∧_∧ 
   ( ´Д`) <みなさーん、お茶が入りましたよ〜 
  /    \ 
  | l    l |     ..,. ., .,
  | |    | _|。.:_::゜。-.;.:゜。:.:;。
  ヽ \_ .。'゚/   `。:、`;゜:;.::.。:.:。 
   /\_ン∩ソ\    ::..゜:: ゚。:.:.::.。.。:.  
.  /  /`ー'ー'\ \  ゜: ::..゜:: ゚。:.:.:,。:.:.
 〈  く     / / ::..゜:: ゚。:.:.:,.:.:.:。:.:,
.  \ L   ./ / _::..゜:: ゚。:.:.:,.:.:,.:.:.:,
    〉 )  ( .::旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
   (_,ノ    .`ー'旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
9682バイト文字に対応したカレントディレクトリを取得するには?:03/08/12 12:44
getcwd()で、カレントディレクトリ名を得る時、
カレントパス名に、文字化けする40種の文字列
(「表」「能」等、所謂「\」コードを含む文字列)
があると、正しく処理されないのですが…

Windows のActive State Perlで、
例えばカレントが
 C:\表示\
である場合、

 use Cwd;
 print getcwd();
の結果は

C:/・示
となります。

どうしたら回避できるでしょう?
(2バイト文字を含むカレントパスを正しく得られるgetcwd
等はないのでしょうか?)
(EUCで書いても同じです。jperlはNGです)
>>968
$path=`cd`;
`はバッククォート。
>>969
cdは帰ってこないでしょ
9712バイト文字に対応したカレントディレクトリを取得するには?:03/08/12 13:16
>>969
ごめんなさい。perlappに内包したいので、
例え標準関数でも外部プログラムは使わず、
perlの中だけで済ませたいのですが…
何か方法はないでしょうか?
>>968
use Cwd;
use File::Spec;

my $cwd = getcwd();
$cwd = File::Spec->canonpath($cwd);

print $cwd;
973972:03/08/12 13:50
>>972
自分で書いておいてなんだが、いいのか、これで?(w
なんかやばそうな気が。
974972: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界を憂うもの)
>>975
二本→日本でした。
>>975
あんたがやったら?
ActivePerl ver6まだ〜?
>>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を追加しろ)
>>974
ActivePerl build 805 +WindowsXPでは駄目。
ActivePerlはMS-WindowsでShift-JISが
使われているということを無視してる。
>>979
>残念ながら英語に関してはあまり得意ではない

得意になればいいじゃん
983ハッカ飴:03/08/12 16:40
>>974
/ 全てを \ に置き換えてもダメだろう。
シフトJISについて調べて、置き換えるべき / だけを置き換えないと。

シフトJISだから、第1バイトを探すのは簡単。
use Cwd;
$cwd = getcwd();
のあとで、$cwd =~ s%(シフトJISの第1バイトにあうパターン)/%\1\\%g;
>>982
いや〜誰かにやって欲しいなぁ。
ホント他力本願なんだけど・・・

もう少しでこのスレも6箱目に突入ですなぁ。
(しみじみと)
985ハッカ飴:03/08/12 17:03
>>971
getcwd()だって内部でcdコマンド使ってるんじゃない?
986デフォルトの名無しさん:03/08/12 17:13
Cで使えるPerlライブラリみたいのってありませんか?
9872バイト文字に対応したカレントディレクトリを取得するには?:03/08/12 17:17
>>972
で無事解決しました。感謝ですm(__)m

canonpathというの自体初めて知りました。。
書き込み入れる前にも色々調べはしたんですけど…
こういうのって、何を参考に調べれば良いんでしょう?
>>983
シフトJISなら2バイト文字で /(0x2F) が出てくることはないし、
Windowsじゃファイル名に / も使えないから、元々含まれてる
ことはないと判断して単純に全置換でいいと思ったんだけど……なんか抜けてる?

あ、それとも / 区切りのパスを得るために、ってこと?
989デフォルトの名無しさん:03/08/12 18:21
「\x9A」という16進数のデータを「\x9A」という文字列データに
変換したいのですがどうすればいいでしょうか?
>>989
$str .= '\x9A";
クオテーション間違えている上にだめじゃん。

$ch = char(0x9A);
992ハッカ飴:03/08/12 19:17
>>988
そうか。
全部置き換えて良かったのか。
>>970
ハァ?
994(・∀・;)ニヤニヤ ◆IuDnGO5LnY :03/08/12 20:08
>>952
そうなんですか?

そうすると、Rubyの↓を

  if $0 == __FILE__
    xxx
  end

Perlに直すにはどうすればいいんでしょう。

  if ($0 eq ??) {
    xxx;
  }

??の部分が分かりません。。
$ perl -e 'print __FILE__, "\n"'
-e
996デフォルトの名無しさん:03/08/12 20:23
次スレは?
>>995
えっ、えっ、・・・なんだかものすごい勘違いをしていたようです。

if ($0 eq __FILE__) {
  xxx;
}

これでいいのれすね。ありがとうございました。

んでは、逝ってきます★
998デフォルトの名無しさん:03/08/12 20:40
>>997
逝くまえに新スレ立てて
>>998
建てますた。
1000000000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。