トップページ⇒tech
1001コメント347KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
"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-4あたり
0002デフォルトの名無しさんNGNG
2get
0003デフォルトの名無しさんNGNG
過去ログ
1 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc2.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc2.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/l50
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/l50
0004デフォルトの名無しさんNGNG
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

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

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

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

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
0005デフォルトの名無しさんNGNG
乙
0006デフォルトの名無しさんNGNG
乙あげ。最近スレッドの消費速度速いね。
0007デフォルトの名無しさんNGNG
初心者の質問が多いからな。でもまあ初心者がラクダ本を暗記する頃には
今度は質問を答える側に回っているわけで、そういった循環は大事にしたいな、と。
0008デフォルトの名無しさんNGNG
初心者質問はいいとしても、明確なスレ違いは答えずに誘導を徹底したいところ
0009デフォルトの名無しさんNGNG
今>>7が良いこと言った。試験に出るぞ。
0010デフォルトの名無しさんNGNG
問題は暗記するほど使い込む奴が何人いるか棚。
0011デフォルトの名無しさんNGNG
Thread.pmのpodを見ると

>新しいコードではThreadモジュールの使用は推奨されない。
>代わりにthreadsモジュールとthreads::sharedモジュールを直接利用することが推奨される。

と書いてあるんだけど、これってマジですか?
threads.pmなんて聞いたことも無いぞ?
しかも何でモジュールなのに小文字で始まってるんだよ!
0012デフォルトの名無しさんNGNG
Perl 5.6 introduced something called interpreter threads.
Interpreter threads are different from ``5005threads'' (the thread model of Perl 5.005)
by creating a new perl interpreter per thread and not sharing any data or state between threads by default.
0013デフォルトの名無しさんNGNG
ActivePerl5.8.3をインストールしたんですけど、
plファイルのアイコンがトカゲマークに変わってしもた・・・
どうせならpmファイルもデフォルトで関連付けろと言いたい。
0014デフォルトの名無しさんNGNG
>>12
Perl5.6から新しいスレッドモデルになったと。
Thread.pmが後方互換性のためだけの存在とは思わなかったです。

ついでに質問なんですが、ActivePerl5.8.0で
以下のようなスクリプトを動かすとエラーが出ます。
$resultを出力した後でエラーが出てるので
スクリプトの終わり方に問題があるのかと思うのですが、
原因がよく分からないです。対処法はありますか?

#ソース
use Thread;
my $t = Thread->new(\&hoge);
my $result = $t->join;
print($result);
exit;

sub hoge
{
foreach(0..10)
sleep(1);
}

#エラーメッセージ
Free to wrong pool 27c9f0 not 273f88 during global destruction.
001514NGNG
ちょっと修正です。

sub hoge
{
foreach (0..10) { sleep(1); }
return 1;
}
0016デフォルトの名無しさんNGNG
ActivePerl 809 windows 2000 で試したが、出ないよ
0017デフォルトの名無しさんNGNG
>>7
駱駝本一冊マスターするのに、何ヶ月くらいかかる?
0018デフォルトの名無しさんNGNG
>>7,10,17
数年使ってるはずだが、暗記していないと余裕で断言できるな。
ActivePerl の HTML リファレンスがすげー役に立ってる。

>>11
>しかも何でモジュールなのに小文字で始まってるんだよ!

小文字で始まる場合はプラグマだというのが慣習のはず。
で、strict とかも実際にモジュールがあるぞ。
0019デフォルトの名無しさんNGNG
暗記なんていらん。プログラミングは九九じゃないし、地理や歴史でもない。
せいぜい自分が使い易いように参考資料を整備しておけば困らない。
あとは、単に読んで理解する力があればいい。
0020デフォルトの名無しさんNGNG
ラクダ本に書かれてることある程度覚えてないと、
人のコードが読めないと思うけど。
0021デフォルトの名無しさんNGNG
調べながら読めばいい。
0022デフォルトの名無しさんNGNG
読んでから調べてもいい。
0023デフォルトの名無しさんNGNG
>>993
>>996
レスありがとうございます。

みなさんとやり取りで、自分の質問するべきことがやっとはっきりしました。
作ってみたいと思った処理の部分は、例えば、
5桁の数字をランダムに発生させ、その数字を発音させる、
という感じのものでした。これをwavファイルやmp3ファイルを使用して出力
させるとなるとファイル数がとても多くなると思います。
>>996 様が言われるように私には不可能かもしれませんが、「音声合成」と
ぐぐってやってみたいと思います。
0024デフォルトの名無しさんNGNG
1〜9 1刻み
10〜19 1刻み
20〜90 10刻み
100
1000
で「つうぇんてぃ・ふぉー・さうざんど・すりぃ・はんどれっど・ふぃふてぃ・ふぁいぶ」と順に流す。
ファイル数は29。…そんな多いか?
0025デフォルトの名無しさんNGNG
俺もラクダ本暗記してるとは言えないがどこを見れば知りたいことが載ってるか分ってる
どのスレで質問すればいいか察しは付く
何て単語で検索すればいいかだいたい分る
そうゆうもんでしょ
0026デフォルトの名無しさんNGNG
>>25
プログラム組め。
0027デフォルトの名無しさんNGNG
Windows200で ActivePerl v5.8.3を使っています。
UTF-16で"\n"を出力すると、00 0d 00 0a になることを
期待していたのですが、00 0d 0a になってしまいました。
これってどうすればよいでしょうか?
use Encode;
open $out, ">:encoding(UTF-16)", "out.txt";
print $out "\n";   # 00 0d 0a になる
print $out "\x0a"; # これでも 00 0d 0a になる
print $out "\x0d\x0a"; # 00 0d 00 0d 0a になる
close $out;
0028デフォルトの名無しさんNGNG
use utf8;
use Encode;
open $out, ">:perlio:encoding(UTF-16)", "out.txt";
print $out "hoge\x0d\x0ahoge\n";
close $out;

open $in,"<:bytes","out.txt";
local $/=undef;
my $a = <$in>;
$a =~ s/([\x00-\x20\%\x80-\xff])/'%'.unpack('H2',$1)/ge;
print $a;
0029デフォルトの名無しさんNGNG
>>28
そのプログラムの出力は
%fe%ff%00h%00o%00g%00e%00%0d%00%0a%00h%00o%00g%00e%00%0a
ですが、ファイルの中はやっぱり 00 0d 0a になります。
0030デフォルトの名無しさんNGNG
悪かった。

open $out, ">:raw:encoding(UTF-16)", "out.txt";
print $out "\x0d\x0a\n";
close $out;

open $in,"<:bytes","out.txt";
binmode $in;
003128,30NGNG
どうも :crlf と対になるのは :raw らしい。

しかしperlfuncのbinmodeには
Note that, despite what may be implied in ``Programming Perl'' (the Camel) or elsewhere,
:raw is not the simply inverse of :crlf
-- other layers which would affect binary nature of the stream are also disabled.

とあるんだよな。わからん。
003227,29NGNG
なるほど。:rawですか。
激しくありがとうございました。
0033デフォルトの名無しさんNGNG
$aa>=$aa[3]
0034デフォルトの名無しさんNGNG
>>23
>これをwavファイルやmp3ファイルを使用して出力
>させるとなるとファイル数がとても多くなると思います。

だから、
前スレ>>991
> http://www.lhs.com/realspeak/demo/ とか。
> http://demo.lhsl.com/realspeak/speak.asp に
> Language=Japanese&Frequency=8&Voice=Tomoko&UserText=tokyo
> を渡せばwavが返ってくる。
じゃあかんの?と聞いてるんだが。
0035デフォルトの名無しさんNGNG
WindowsでPerlスクリプトからexeを生成するのに
perl2exeしか知らなかったんですけど
ppっていう便利なツールがあるんですね。
皆さん知ってました?

http://perldoc.jp/docs/modules/PAR-0.75/script/pp.pod
0036デフォルトの名無しさんNGNG
>>24
※こういうやり方があるのですね。了解です。

>>34
> http://www.lhs.com/realspeak/demo/ とか。
※ここにはアクセスできて実際にファイルを作成してもらったのですが、
↓のアドレスにアクセスすることが出来ません。

> http://demo.lhsl.com/realspeak/speak.asp に
※アクセスすると、
”Error: Please try again later.”というエラーが表示されて、
↓を実行することが出来ません。

> Language=Japanese&Frequency=8&Voice=Tomoko&UserText=tokyo
> を渡せばwavが返ってくる。
※渡してみたいのですが渡すことが出来ません。
どうすればアクセスできるのでしょう?


0037デフォルトの名無しさんNGNG
>35
ActivePerl5.8.3で ppm>install PAR でインストールして
pp -o packed.exe source.pl で生成できました。
簡単ですね!
0038デフォルトの名無しさんNGNG
質問させて下さい。

上手く説明出来る自信がないのですが、
mainパッケージから呼び出したモジュールAが、
同じくmainパッケージから呼び出したモジュールHogeからも呼び出されていた場合、
二回呼び出される事になるのですか?

なんと言ったらいいのか、、メモリの中にモジュールAは二つ存在する事になるのですか?
実際にはありえない例ですが、大きいモジュール(例えばCGI.pmなんか)を各packageから呼び出しまくってた場合、
システムダウンするなんて事とかがありえるのかな、と。

{
  package main;
  use Hoge;
  use Foo;
  use A;
}
{
  pachage Hoge;
  use A;
}
{
  pachage Foo;
  use A;
}
0039デフォルトの名無しさんNGNG
>>36
POSTメソッドじゃないとダメよ。
0040デフォルトの名無しさんNGNG
>>38
一意な名前空間は一個しか存在し得ない
あんたが一章のマニュアルページを10回読んだからって
10章の知識を得た事にはならないし、
10ページに増えてたりしない
0041デフォルトの名無しさんNGNG
>>38
ラクダ本3版VOL2の29章のuseの項を読むと最初にこう書いてある

「use宣言は、指定されたモジュールを(まだロードされていなければ)
ロードして、そのモジュールからサブルーチンと変数を現在のパッケージ
にインポートする」

ここに書いてあるようにロードは1回しか行われないので安心すれ。
ただしインポートは何度も行われる。

たとえば上の例でAの中に変数$xというのがあってエクスポートされてた
としよう。

そうするとインポートされるたびに、同じ変数が$main::x, $Hoge::x, $Foo::x
という名前でも参照できるようになるが、変数の実体は一つで増えるわけ
じゃない。
0042デフォルトの名無しさんNGNG
まぁ、百万個以上ものシンボルをエクスポートするようなモジュールを
複数のパッケージからuseすれば、おそらくメモリ不足に陥るシステムもあるだろうな。
004338NGNG
>>40-42
丁寧なご説明有難うございます。非常に良く理解出来ました。
メモリを少しでも節約したいのならば、

use Module ();

と呼び出すのが良さそうですね。
# 名前空間も綺麗に保てるし一石二鳥、かな?

>>41 氏の解説を見る限り、
ラクダ本には私の細かい疑問の的確な答えが載ってそうな気がします。
激しく欲しいのですが、、




手が、、出ない、、orz
0044デフォルトの名無しさんNGNG
昨日買った黒ヒョウ本のevalの項を読んでいて思いついたのですが、

if ($word eq 'hoge') { hoge(); }
if ($word eq 'hage') { hage(); }
if ($word eq 'fooo') { fooo(); }
else { die; }

としていたのを

eval "$word();" or die;

とするのってアリですか?
0045デフォルトの名無しさんNGNG
>>41
たまたま手元にラクダ本があったから参照しただけで、perldoc -f use
すれば

It is exactly equivalent to

BEGIN { require Module; import Module LIST; }

except that Module must be a bareword.

とか

The "BEGIN" forces the "require" and "import" to happen at com-
pile time. The "require" makes sure the module is loaded into
memory if it hasn't been yet.

といった感じにちゃんと説明されてるのであきらめずによく調べよう。
0046デフォルトの名無しさんNGNG
間違えた。上は >>43 ね。

0047デフォルトの名無しさんNGNG
>>44
(1) $word()の戻り値が偽だったときにdieしてしまう。

(2) $wordの値がhoge,hage,fooo以外だがたまたま定義されているサブルーチン名だったときは
それが呼ばれてしまう

(3) それどころか$wordにとんでもないプログラムの断片が含まれていたらそれがそのまま実行される
たとえば$wordの値が'system "rm -rf /"; hoge'だったら...((((;゜Д゜))))ガクガクブルブル

ということでその置き換えはもとのとはかなり振る舞いが違うものになってしまっている。

たぶん$wordの値がその3つの値のどれかであるか調べるところはちゃんと
書かないとだめ。もちろん$wordの値になにか仮定をして良ければある程度
はサボれる可能性はあるけどね。

$wordが3つの値のどれかであることが保証されれば、呼び出しはevalを使うまでも
なく &$word() で十分。

if ($word eq 'hoge' || $word eq 'hage' || $word eq 'fooo') { &$word(); }
else { die; }

とか、だらだらeqを並べるのがかっこ悪いならあらかじめ
%CHECK = (hoge=>1, hage=>1, fooo=>1); というハッシュを用意しといて

$CHECK{$word} or die;
&$word();

といったあたりかな。
0048デフォルトの名無しさんNGNG
%ftbl = (
foo => \&foo,
bar => \&bar,
baz => sub{ BazClass->baz(@_) },
);

$x = $ftbl{ $word } or die;
$x->(@args); # or &$x(@args)
004944NGNG
ぐぁ、(3)がめっさキツイ。
ちゃんと変数の中に何が入っているのかチェックしないと駄目なんですね。
サボりすぎちゃイカン、と。

出なおしてきます。
0050デフォルトの名無しさんNGNG
Net::Telnet の waitfor() って、二つの条件で待つことってできるんですかねぇ??
'/>/' と '/quit/' とかで分岐させたいんですけど。
0051デフォルトの名無しさんNGNG
本当に初心者ですみません。
PealのIF文でマザーのビープ音をならさせたりすることって
可能でしょうか?もしよければ教えてほしいです。
へんな質問失礼しました
0052デフォルトの名無しさんNGNG
if ($word =~ m/^(hoge|hage|fooo)$/) { &$word(); }
とか
0053デフォルトの名無しさんNGNG
配列から要素を格納個数に応じた確率でランダムに選択するのに
@data = qw( a a a b b c );
$select = $data[ rand(@data) ];
とやっていましたが、個数が多いと配列が膨れ上がってしまいます。
(a が1000個とか)

%data = ( a => 3, b => 2 c =>1 );
というハッシュに対して同じように確率に応じた要素選択をするにはどうしたら良いでしょうか。

foreach (values(%data)){ $sum += $_; }
foreach (keys(%data)){ if( rand($sum) < $data{$_} ){ $select = $_; last} }

というのを思いつきましたが、Perlに熟練した皆さんならもっと美しいコードを書くような気がします。
0054デフォルトの名無しさんNGNG
>>50
waitforの引数にはパターンが使えるんだから | で区切って並べりゃいいと思うが。
マッチした文字列はリストコンテキストで呼べば返してもらえる。

あるいは

You can specify more than one pattern or string by simply providing
multiple Match and/or String named parameters.

とあるのでパターンそのものを複数与えることもできそう。
0055デフォルトの名無しさんNGNG
Yahooで使っているような、ロボット対策の
idを画像で表示させて、それをテキストボックスに入力させる
認証ってどうやったらできますか?
005650NGNG
>>54
情報ありがとうございます。
明日、さっそく職場でためしてみます!!
0057デフォルトの名無しさんNGNG
>>53
>foreach (keys(%data)){ if( rand($sum) < $data{$_} ){ $select = $_; last} }
コードとやりたいことが違ってない?
これだとどれ一つとして選択されない場合があると思うんだが。
rand() は一回だけで、0<=x<1, 1<=x<1+2, 1+2<=x<1+2+3 のどこに入るかで判断するべきなんじゃないかと。
0058デフォルトの名無しさんNGNG
>>47
関連して聞きたいんですが、44じゃないです。
---main.cgi
use Mode;
use CGI;
my $cgi = CGI->new();
my %params = $cgi->Vars;
($params{'mode'} || 'foo')->new( \%params )->execute();
---Mode.pm
package Mode;
sub new{
my $class = shift;
my $params = shift || {};
bless $params => $class;
}
package foo;
use base Mode;
sub execute{# fooの処理}
package bar;
use base Mode;
sub execute{# barの処理}
package baz;
use base Mode;
sub execute{# bazの処理}
-----------------------------------
こんな感じで処理振り分けしてますが、なんか問題あるしょうか。
セキュリティ関係ちょっと疎くて不安なのですが。


0059デフォルトの名無しさんNGNG
$r = rand($sum); foreach (keys(%data)) { if ($r < $data{$_}) { $select = $_; last} $r -= $data{$_}; }

キーの数が十分少なければこれでいけると思う。一種のバカサーチなのでキーの数が
たくさんあるときは二分法ぽくするとかもう一工夫したいところ。
0060デフォルトの名無しさんNGNG
>>53
やってることは >>59 と同じだが。

use List::Util (sum first);

%data = ( a => 3, b => 2 c =>1 );
$idx = rand(sum values %data);
$select = first { ($idx-=$data{$_}) < 0 } keys %data;

>>58
セキュリティつうか、$param{mode} が foo, bar, baz 以外だったらエラーで落ちるけどいいの?
基本は外からやってくる値は信用しない、だと思う。
0061デフォルトの名無しさんNGNG
>>60 自己レス
×use List::Util (sum first)
○use List::Util qw(sum first)
0062デフォルトの名無しさんNGNG
>>58
modeパラメタで渡した任意の名前のモジュールのnewを呼べるってことだから、引数に
hashのreference渡されてOKなものに限定はされるけれども、とってもキケンそうな気が
します。横着しないでチェックしたほうがいいと思うよ。
0063デフォルトの名無しさんNGNG
>>53
5箱目の >>199 にこんなのがあった
これで上手く行く理由は俺には分からん

@weight = (25, 25, 150);
foreach (@weight) { $max = $_ if $_ > $max };
until ( $weight[$key = int(rand(@weight))] > rand($max) ) {}
print $key;
0064デフォルトの名無しさんNGNG
>>63
へーって感じのコードだ。
スクリプトの動きをよく見て、
3行目の二つのrandに着目してマトリクスを作れば納得いくと思う。
0065デフォルトの名無しさんNGNG
lwpってインスコするとコマンドラインから直で呼べるんだね
ActivePerlでtailコマンド自作して間違ってheadって打ったら色々出てきて気づいた
0066デフォルトの名無しさんNGNG
同じ振る舞いをさせているつもりなんですが、
これって使い方として正しいですかね?

# code1
if ($foo & $bar & $baz) { &hoge; }
die;

# code2
$foo and $bar and $baz and &hoge or die;
0067デフォルトの名無しさんNGNG
>>66
& はビットの論理積。 and と (ほぼ) 等価なのは && 。

code1 は常に die するが code2 は $foo、$bar、$baz、&hoge
の全てが真を返す場合は die しない。

http://perldoc.jp/docs/perl/5.6.1/perlop.pod
006866NGNG
>>67
あっ、、申し訳ない、typoです。
正確には、

# code1
if ($foo && $bar && $baz) { &hoge; }
die;

でした。

> code1 は常に die するが code2 は $foo、$bar、$baz、&hoge
> の全てが真を返す場合は die しない。

と言うことはcode2を以下のようにすることでほぼ同じ振る舞いになりそうですね。

$foo and $bar and $baz and &hoge;
die;
0069 NGNG
ディレクトリを作って、その下にファイルを書き込みで
オープンしたいと思い、

$dirname = "hoge";
$filename = "hoge.dat";
mkdir $dirname, 755 or die "error";
open WFILE ">$dirname/$filename";

としてもうまくいきません・・・
そこでディレクトリを移動してから作ろうと思って
chdir $dirname or die "error";
としたけどこれも失敗します。

ディレクトリを作って、そこにファイルを作成したいだけなんですけど
一般的にはどういう手順で行うのでしょうか?
どなたか知恵を下さい!
0070デフォルトの名無しさんNGNG
>>69
何が上手くいかないのがわからん。エラーメッセージくらい書けよ。

あと、openの構文が間違っているが、まさかその所為じゃないよな?
0071デフォルトの名無しさんNGNG
>>69
mkdir $dirname, 0755 or die "error"; # 8進 だから 0をつけれ
open WFILE, ">$dirname/$filename"; # , が抜けてた
007269NGNG
すんません。雑に書いてしまいまひた・・・
mkdir $dirname, 0777;
open WFILE, ">$dirname/$filename";
でうまくいきました。。。。お二人ともビンゴです。
0073デフォルトの名無しさんNGNG
>>72
マジメにエラーハンドリング書くほどのものじゃなくても or die "$!"; ぐらいは
つけといた方が何かといいと思うよ。
0074デフォルトの名無しさんNGNG
質問させてください。
ファイル名のチェック用にスクリプトを作成してるんですが、

my $str = "filename++";
my $key = "name++";
$str =~ /$key/i;

のような場合、$keyが変数展開されてしまい、エラーが出てしまいます。
$strや$keyは、都度変わる文字列にしたいため、''を使わずに、
マッチ時に変数展開させないようにする方法はありますか?
0075デフォルトの名無しさんNGNG
質問の意味が分からない。毎回 $key の内容が変わる可能性があるのなら
変数展開されないと困ると思う。エラーがでるのは、正規表現がおかしい
から。

$key に与える文字列で複雑な正規表現を使わないで、部分的なマッチで
いいのなら
$str =~ /\Q$key\E/i
のようにして、+ がメタ文字あつかいされないようにすればいい。
007653NGNG
>>57
あ... orz

>>59-60
スピードはさほど問題ではないので、この方法を使おうかと思います。
二分法まで使わなくても、サーチ方向を前からと後ろから使い分けるだけで私の場合は十分そうです。

>>63
カコイイけど分からん(汗
007774NGNG
御答えいただき、ありがとうございます。
お恥ずかしい限りですが、メタ文字扱いされない方法として、
変数展開されなければいいと短絡的に考えていました。
もう少し用語の勉強もしたほうがいいですね…。

やりたいことは無事出来ました。
ありがとうございました。
0078デフォルトの名無しさんNGNG
>>39
すみません、「POSTメソッドじゃないとダメ」という意味が分かりません。
ぐぐっても?でした。
自分でホームページを作って、
http://demo.lhsl.com/realspeak/speak.asp
をそこに埋め込めば良い、
ということなのでしょうか?
0079名無しさんNGNG
>>78
POSTメソッドでパラメータを渡す、つうのはCGIプログラミングの
初歩の初歩、の話なのだが。
まずはCGIの基礎から学んでこい。話はそこからだ。
0080デフォルトの名無しさんNGNG
decode処理のスクリプトどっかから
パクってこいばええよ。
あとは適当にやれ。Perlなんか適当にやればいいよ。
基礎から学必要ぜんぜんないよ
でも正規表現は覚えたほうがええよ。
0081デフォルトの名無しさんNGNG
>>79
了解です。
Perlの質問に始まって、CGIの基礎に向かってしまう。
Perlの質問へ戻ることができるのは、いつのことやら・・・。
先は長そう(^^;)
0082デフォルトの名無しさんNGNG
話を簡単にするために、@weight = qw ( 1 1 6 )とする。
想定する結果は、
8(1+1+6)分の1の確率で0が、
8(1+1+6)分の1の確率で1が、
8(1+1+6)分の6の確率で2が、
戻ってくればいいことがわかる。
で、3行目に着目。
最初の乱数が横軸、後者の乱数が縦軸とした場合、以下のような結果になる。
  0 1 2
0 0 1 2
1 * * 2
2 * * 2
3 * * 2
4 * * 2
5 * * 2
*:乱数の再計算。つまりは、振りなおし。
数字:$keyに代入される値。

気合入れてコード追えよ。
0083デフォルトの名無しさんNGNG
8(1+1+6)
64かとオモタ

自分で算出した確率がおかしいと思ったらuntilの条件部ばっか見てて「振りなおし」を考慮してなかったや
0084デフォルトの名無しさんNGNG
オブジェクト指向についてお聞きしたいのですが、
どの本を見ても良くわからないことがあるのです。

package main;
sub new {} # <- コンストラクタ

上記のように、mainパッケージの中でコンストラクタ作っても問題ないのでしょうか?

なんか自分でも何が聞きたいのかわかり難いのですが、なんと言うか、
どの本をみても本体から読み込む別のモジュールの事について話をしているような気がしまして、、

ってこれって意味無いのかな?
0085デフォルトの名無しさんNGNG
>>84
意味ないです。
JavaでMain.javaなんてクラス作らないのと同じです。
0086デフォルトの名無しさんNGNG
>>84

> ってこれって意味無いのかな?
意味があるかどうかはあんたが考える事。
コンストラクタったって単なるクラスメソッドだし、
sub newにしたからってコンストラクタになるわけじゃないし、
聞いてる事がよくわからないです。
0087デフォルトの名無しさんNGNG
>>82
そうか、matrixにすると一発で分かるな
試行毎の確率考えないで、振り直しの無限数列が収束するとか考えてた俺は馬鹿か
0088デフォルトの名無しさんNGNG
>>84
Javaとかだったら、そのクラスのコンストラクタはクラスの中に書くことが言語仕様によって規定されてるけど、
Perlではそうではない。
というか、Perlではそもそもルーチンやメソッドやコンストラクタなどを区別しない。
ルーチンに、コードによってメソッドやコンストラクタの能力を持たせることができるだけだ。
だから、どんな風に組もうともそれはお前の自由だが、逆に自己流のコーディングをすることで、
教科書的コーディングの持つ様々な利点や簡便さをドブに捨てていることになる。

……もしかしてお前、strictとか嫌いなんじゃないか?
0089デフォルトの名無しさんNGNG
package main;
sub new{
shift;
bless {} => hoge;
}
package hoge;
use base main;
sub method{
my $self = shift;
print ref $self;
}
package foo;
my $obj = hoge->new();
$obj->method();
# hoge です。あはは
0090デフォルトの名無しさんNGNG
ちょいと質問なんですが、
あるオブジェクトが、あるメソッドを持ってるかどうかが知りたいのです。
例として
$obj = TestObj->new();
で $obj->method(); をしてエラーにならないか
ということなのですが・・・
前スレあたりで名前空間の一覧を出す方法が出てた気がするのですが、
過去ログが見つからなくて・・_no

ご存知の方がいましたら、教えていただけないでしょうか?
0091デフォルトの名無しさんNGNG
威張るのはだめなん?
0092デフォルトの名無しさんNGNG
正規表現で
/((埼玉)....|......)県県庁/
を日本語に訳してくれ。
頼む。。。
0093デフォルトの名無しさんNGNG
>>90
名前空間の方はよく知らないけど、メソッドあるか調べるならそのもの
ずばりのcanというのがあります。

perlobj(1)のDefault UNIVERSAL methodsのあたり参照。
0094デフォルトの名無しさんNGNG
>>90
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlobj.html#Default_UNIVERSAL_methods
0095デフォルトの名無しさんNGNG
>>90 TestObj 名前空間の名前は %TestObj:: の中にある。
>>93-94 のように can を使うのが本筋だけど、>>91 のように
eval って $@ を調べるのもあり。名前空間にこだわるなら、

exists $TestObj::{method} && defined &TestObj::method

>>92 文字コードとPerlのヴァージョンによるのでなんとも言えない。
0096デフォルトの名無しさんNGNG
>>95
日本語1文字は2文字として見られる様です。
0097デフォルトの名無しさんNGNG
>>92
多分、文字コードがEUCで、no utf8なんだとは思うんだけど、正直、意味不明
のコード。>>96 の通りとして直訳すると、

「埼玉(全角2文字)県県庁」か「(全角3文字)県県庁」にマッチして、
$1 が「埼玉(全角2文字)」、$2 が「埼玉」か
$1 が「(全角3文字)」、$2 が undef。

「〜県県庁」に引っ掛けて「〜」の部分に取り出したかったのかなぁと思うん
だけど、その場合、EUC ならこう書くと思う(SJIS なら[\xA0-\xFF]{4}を
.... に替える)。

/([\xA0-\xFF]{4}|和歌山|鹿児島)県県庁/

ただし、$1 が本当に県名かは要チェック。
0098デフォルトの名無しさんNGNG
$symlink_check = (eval { symlink("",""); }, $@ eq "");
if (!$symlink_check) {
$c = 0;
while(-f "$LOC") {
$c++;
if ($c >= 3) { &error("■ロック中"); }
sleep(2);


上記で、symlinkが出来るかどうかのチェックをしているようなのですが、
1行目の(eval { symlink("",""); }, $@ eq "") がよく分かりません。どのような値が帰ってくるのでしょうか?
0099デフォルトの名無しさんNGNG
>>98
そのシステムでsymlinkをサポートしていれば真、なければ偽が返る。

symlinkをサポートしていないシステムでsymlinkを実行すると致命的
エラーになるので、evalしたあとに$@を見ることでそれをつかまえようと
しているわけだ。

symlinkの引数が空文字列なのは、わざと失敗させることでゴミが残らない
ようにしてるんだろうな。

perldoc -f symlinkには $symlink_exists = eval { symlink("",""); 1 }; という
同じような例がある。
0100デフォルトの名無しさんNGNG
>>99
詳しい説明
サンクスコ
0101デフォルトの名無しさんNGNG
>>93,94,95
助かりました ありがとうございます
0102デフォルトの名無しさんNGNG
>>91
うはっ「威張るってなんだろう?」とか思ってました(汗
evalだとあった場合に実行しちゃうので・・・ 存在するかどうかだけを知りたかったのです。
まぁ なんにせよありがとうございました。
0103デフォルトの名無しさんNGNG
#!/usr/bin/perl
open FILE, "test.txt";
print $! . "\n";

ってしか書いてないのに、実行すると
『デバイスに対する不適切なioctlです』
と必ず出てしまいます。リブートしても同じ。OSはRedHat9(2.4.20-8)。
FreeBSDに入れ直して同じようにしたら出ません。

これはRedHat9のせい?
0104デフォルトの名無しさんNGNG
三乗根をSqrtのように使いたいんですが、なんとプログラムすればよいでしょうか?
0105デフォルトの名無しさんNGNG
x**(1/3) # xの3乗根
これでできるかな。
0106デフォルトの名無しさんNGNG
>>103
RedHatは知らんが、必要がないならばprintに渡す引き数で文字列の連結はしない方が早いぞ
print $!, "\n";
0107デフォルトの名無しさんNGNG
>>103
openが成功してるときは$!の値は意味がないと思われ。
0108デフォルトの名無しさんNGNG
@x = split /-/, $y;
と同様の動きをするプログラムを
spiltを使わず、s///gなどを使って書いてください。
悩んでまつ(´・ω・`)へるぷ・・・
0109デフォルトの名無しさんNGNG
while($y =~ m/-?([^\-]*)/cg) { push(@x, $1) }
0110デフォルトの名無しさんNGNG
>>108
簡単じゃん、答えるまでもない。ああ、やりゃいい。
ヒント:m!!g
0111デフォルトの名無しさんNGNG
>>109
だせぇ、でもTMTOWTDIで許す。
って、優香、宿題にマジレスすんなよ。
悩め > 108。
0112デフォルトの名無しさんNGNG
誰がPerlの宿題を出すのよ。
0113デフォルトの名無しさんNGNG
>>108
@x = grep($_ ne '-' , ($y =~ m/(.)/g));
0114113NGNG
ごめん。$y囲む括弧いらんかった。
0115デフォルトの名無しさんNGNG
ここは馬鹿ばっかか?うpする前にちったぁ試せ。
特にオマエだ > 113
0116113NGNG
試せだと!ちゃんと試したさ!

$y = "a-b-c";

_('Д` )_ )_ ダメカ...
0117デフォルトの名無しさんNGNG
$y = "-aA-bB-cC-";でやれ。
0118デフォルトの名無しさんNGNG
@x = $y =~ m!([^\-]*)(?:-)!g;
0119デフォルトの名無しさんNGNG
@x = $y =~ m!([^-]+)!g;
unshift @x,'' if $y =~ m!^-!;

118は$y='abcd';のとき失敗。一行はむずい?
0120デフォルトの名無しさんNGNG
Perlスレの特徴は、こういう「ちょっとしたクイズ」っぽい話題になった途端、
水を得た魚のようにヘタレどもが集まってくることだな。
0121デフォルトの名無しさんNGNG
ワッチしてるオマエは(ry
0122デフォルトの名無しさんNGNG
splitクイズに参加の皆さん、

By default, empty leading fields are preserved, and empty
trailing ones are deleted.

の後半を忘れてませんか?

と重箱の隅をつついてみる。

0123113NGNG
解けた。
>>113の正規表現を(-|[^\-]*)にすれば一行だ。
0124113NGNG
*じゃなくて+だ。恥ずかしい…。
0125デフォルトの名無しさんNGNG
その前に何で
@x = split /-/, $y;
じゃだめなのかと・・・。
いいじゃんこれで
0126デフォルトの名無しさんNGNG
MIME::Parser についての質問はこのスレで良いんですか?
0127デフォルトの名無しさんNGNG
1行は無理でしょう。
@x = $y =~ m!([^-]*)(?:-|$)!g;
while (@x&&!$x[$#x]) {pop @x}

>>124
$y = '-aA-bB--cC---dD--';だったらどうなる?
0128デフォルトの名無しさんNGNG
108は中級釣り師
0129デフォルトの名無しさんNGNG
>>126
どーぞ。ただし答えられる奴がいるかどうかは又別問題
0130デフォルトの名無しさんNGNG
単純にこれでいいと思う

@x = ($y =~ m/[^\-]+/g);
0131デフォルトの名無しさんNGNG
しまった。これだった

@X=$y=~/-/g;
0132デフォルトの名無しさんNGNG
>>108
my @x = $y =~ /([^-]*)(?:-*$|-)/g;
--$#x;
0133デフォルトの名無しさんNGNG
インスタンス変数について教えてほしいのですが、モジュール内で使用しているインスタンス変数を、別のモジュール
で使用する場合どうしたらいいのでしょうか?

例えば、下の例でいくと$testは空白のままです。
fooの所でhoge->new();を追加すると11が帰ってくるのですが、
このようにしないと、インスタンス変数は使えないのですか?

package main;
my $hoge=hoge->new();
my $foo=foo->new();

package hoge;
sub new {
my $class = shift;
my $define = {};
$define->{'BUZ'} = '11';
bless $define,$class;
}
sub GetBuz {
my $self = shift;
return $self->{'BUZ'};
}

package foo;
use base hoge;
sub new {
my $class = shift;
my $define = {};
bless $define,$class;
my $test = $define->GetBuz;
print "$test";
}
0134デフォルトの名無しさんNGNG
>>133
> 例えば、下の例でいくと$testは空白のままです。
当然だろ、$define = {}だぜ。

> fooの所でhoge->new();を追加すると11が帰ってくるのですが、
> このようにしないと、インスタンス変数は使えないのですか?
普通はnew()も継承するけどな。オマエのも別に間違いではない。


あと、foo->new()で作られたインスタンスのrefは’’だよ、気つけな。
それからuse strict入れるとエラーなるぞ。
0135134NGNG
>普通はnew()も継承するけどな。
このままだと、語弊があるな。普通は明示的に$define = hoge->new();などのようにするつぅ事。
何もperlに限った話ではないと思うぞ。何か勘違いしてないか >133
0136デフォルトの名無しさんNGNG
>>133
fooはhogeを継承しているが、newはfooで定義しなおされているので、
foo->new()ではhogeのnewは実行されない。

hogeのnewは継承を意識したクラス引数を取るパターンになってるので
fooのnewを以下のようにすればいいんじゃないかな。あとprintのあとで
$defineを返してないのは凡ミスだろう。

sub new {
my $class = shift;
my $define = $class->SUPER::new();
my $test = $define->GetBuz;
print "$test";
$define;
}


0137デフォルトの名無しさんNGNG
$define = hoge->new() か、
$define = $class->SUPER::new() で一度、
hoge側のnewを呼び出しておかないと、いけないんですね。
継承ってことだから、use base qw(hoge); を行えば全部
利用できるかと勘違いしてました。

もちっと修行してきます。
0138枢軸 ◆AmzNr0BSVY NGNG
スマン
flock FH,2
sleep 1;
は、sleepがなくとも、同時期書き込み防止できるよね?
0139デフォルトの名無しさんNGNG
>>138
有っても無くても防止出来ないかもしれない。
0140枢軸 ◆AmzNr0BSVY NGNG
seekが必要って事でつか?
ならseek FH,0,2も追加。
0141デフォルトの名無しさんNGNG
>>140
sleepもseekもロックとは無関係。
よくある誤りだが、open FH, ">$file"などとしていると、
ロックする前にファイルを空にしてしまう。"+<$file"とするべき。

0142枢軸 ◆AmzNr0BSVY NGNG
>>141
サンクス、sleepは理解できたが、
seekの動きがいまいち理解できない(´;ω;`)ウッ…
0143枢軸 ◆AmzNr0BSVY NGNG
>>139
何故か教えれ!!
0144デフォルトの名無しさんNGNG
つか >138 のコードには肝心のオープンと書き込みが書かれてないんで
アドバイスしようがない。どういう使い方してるの?
0145デフォルトの名無しさんNGNG
関数についての説明ならリファレンスからくだ本でも読む方が。

0146デフォルトの名無しさんNGNG
標準入力から一文字取り出したいです。
read(STDIN,$data,1)などしてみましたがlinuxの入力バッファリングに阻まれているのが現状です。
0147デフォルトの名無しさんNGNG
>>146
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq5.html#How_can_I_read_a_single_characte
0148デフォルトの名無しさんNGNG
>>147
ありがとう。モジュールがないと厳しいみたいですね。
0149デフォルトの名無しさんNGNG
XML::Parser::Lite について。
ハンドラの中で正規表現を使うとSegmentation fault (core dumped)で落ちる。

# --- begin script --- #
use XML::Parser::Lite;
my $p = new XML::Parser::Lite;
$p->setHandlers(Start=>sub {my $tag = shift; $tag =~ s/a//});
$p->parse('<tag></tag>');
# --- end script --- #

環境は、
  $ perl -v
This is perl, v5.8.2 built for cygwin-thread-multi-64int

  $ less /usr/lib/perl5/site_perl/5.8.2/XML/Parser/Lite.pm
package XML::Parser::Lite;
# $Id: Lite.pm,v 1.1.1.1 2002/11/01 14:53:57 paulclinger Exp $
$VERSION = sprintf("%d.%s", map {s/_//g; $_} q$Name: release-0_60-public $ =~ /-(\d+)_([\d_]+)/);


おまいらの環境ではどうなる?
0150デフォルトの名無しさんNGNG
>>149
PERL58.DLL内でAccess Violation。

perl -v

This is perl, v5.8.3 built for MSWin32-x86-multi-thread
(with 8 registered patches, see perl -V for more detail)

Copyright 1987-2003, Larry Wall

Binary build 809 provided by ActiveState Corp. http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Feb 3 2004 00:28:51
0151デフォルトの名無しさんNGNG
文字列のソートについて質問です。
「"D","","A","C","B"」といった配列を通常にソートした場合、
「"","A","B","C","D"」と並び替えられますよね?
それを「"A","B","C","D",""」といったふうに、何も入ってない部分が一番最後に回ってくるように並び替えたいんです。
この場合、どのようなソート順の定義をすればいいか、何方かご教授お願いします。
0152デフォルトの名無しさんNGNG
>>151
map { chop; $_ } sort map { $_ . "\xff" } @input;
0153デフォルトの名無しさんNGNG
>>151
@tmp = sort grep length, @input;
push @tmp, ('') x (@input - @tmp);
0154149NGNG
>>150
ありがとう。ActivePerlでもダメなんだね。
俺がダメなことしてんのかなあ・・・?
0155デフォルトの名無しさんNGNG
>>154
callbackの中にregexpがあると落ちるみたいだね。
XML::Parser::Lite.pm覗いたけど、あたしの頭じゃ、よう分からん(^^;;;;
作者にレポートしたら?

XML::ParserならOKだよ。
あと、callbackはsub {my $expat = shift; my $tag = shift; $tag =~ s/a//}
0156デフォルトの名無しさんNGNG
>>151
ソート順の定義を素直にやるなら

sort { ($a eq '' || $b eq '')? ($b cmp $a): ($a cmp $b) } @input

てな感じになるだろう。でも比較方法指定なしのソートのほうがかなり速いので
153の方が速度的には有利だと思うよ。
0157デフォルトの名無しさんNGNG
小規模なスクリプトでのオブジェクト指向って無駄でしょうか。
例えば、サブルーチンを一つのパッケージに纏めるだけの単純なもののような。

必要無いなら使わなくても良いとも思ったのですが、
今のPerlはオブジェクト指向だなどという言葉もちょくちょく聞くので
特に必要が無くてもそのような記述にした方が良いのかとも思い迷ってます。
#確かに見た目は良くなるというか多少読み易くはなるのですが……
0158デフォルトの名無しさんNGNG
>>157
「オブジェクト指向デザインは、それが意味のある場合に使い、
そうでない場合には避けること」…と駱駝本には書いてある。
0159デフォルトの名無しさんNGNG
>>157
> 小規模なスクリプトでのオブジェクト指向って無駄でしょうか。
無駄って事はないと思うよ。
今複数カテゴリチームのBBSとML管理、及びそれぞれのチームのIndexページ
を統合するやつ書いてるんだけど、初めてOOPで書いた。
ついでにHTMLもテンプレート化してHTML吐き出しを排除。デザインもcssファイルで
外部ファイル化してる。
正直、もう戻れないなあ、と思ってます。
前回書いた奴は2500行のべた書きだけど、触る気にならないです。ってか
それがOOPで書いてみようか、っていう動機なんだけど。
だってちょっと触りたいな、と思ってもさっぱりワヤで自分で書いたものなのに
見る気もしない。
モジュールもせいぜい長くても100行程度、短いのは30行ぐらいしかないのもある。
オブジェクトにする意味があるのなら大きい小さいは関係ないと思います。
興味があるなら小さいものでもやってみるべきだと思う。
本当に新たな手法を手に入れる事になるから。

その上で、
「オブジェクト指向デザインは、それが意味のある場合に使い、
そうでない場合には避けること」
は、もっともです。

0160デフォルトの名無しさんNGNG
100行止まりのスクリプトなら、全部mainパッケージ内で
グローバル変数で書いた方が早い。いくつかサブルーティン化
したものと比べるとすぐ分かる。
0161デフォルトの名無しさんNGNG
明確に関連機能が分けれてパッケージング出来るときはoopやってて、
規模が中程度ならサブルーチン化
小規模ならば無名サブルーチン

みたいな使い分けしてるっぽ。
0162デフォルトの名無しさんNGNG
Linux 上で ACL を操作する libacl ライブラリを Perl で OOP 使っていじくるパッケージを作りますた。
よければみんなでよってたかってぃι"めτください。
0163149NGNG
>>149の問題なんだけど、XML/Parser/Lite.pmの中に
「splitやregexpは使えません」って書いてあった。

ソース解析してたら
>Start=>sub {my $tag = shift; $tag =~ s/a//}
で定義されたサブルーチンが直接正規表現の中に埋め込まれていた。
そのせいみたい。
0164157NGNG
ありがとうございました。
自分の書いているのは機能を分けるとなると
サブルーチン一つにパッケージ一つとかになるような
簡単なものばかりなので必要無いなら使わないの言葉に従う事にします。
#既に幾つかOOで書き直して居たりしますが
0165デフォルトの名無しさんNGNG
すみません、全くの初心者なのですが、perl 5.8.2での質問です。
文字コードのスレに書き込んだのですが確かな回答が得られませんでした。

test.txtという、shift-jisで保存されたテキストファイルがあります。
(ファイル名も、置かれているディレクトリも常に同じ。)
このファイルを、utf-8に変換したいのですが、やり方がわかりません。
いろんなサイトを参考にして、何種類かやり方があるようなことがわかり、
試しに、
use utf8;
$input_filename ='C:\hoge\test.txt';
$output_filename ='C:\hoge\test.txt';
open my $in,'<:encoding(shift_jis)',$input_filename or die "open $input_filename: $!\n";
open my $out,'>:encoding(utf8)',$output_filename or die "open $output_filename: $!\n";
while(<$in>){print $out $_;
}
close($in) or die "read $input_filename: $!\n";
close($out) or die "write $output_filename: $!\n";
という風に書いてみましたが、結果はtest.txtの中が空になるだけでした。
0166デフォルトの名無しさんNGNG
上の続きです。
また、別のやり方として、
use utf8;
$input_filename ='C:\hoge\test.txt';
$output_filename ='C:\hoge\test.txt';
use Encode qw(from_to);
open my $in, "<", $input_filename or die;
open my $out, ">", $output_filename or die;
while(<$in>){
from_to($_, "shift_jis", "utf8");
print $out $_;
}
という風なやり方も試してみましたが、結果は同じでした。
どこがいけないのでしょうか?
ちなみに、保存するファイル名を変えるとうまくいくのですが、
できれば同じファイル名にしたいのです。
どなたか詳しい方、よろしくお願いします。
0167デフォルトの名無しさんNGNG
$output_filename ='C:\hoge\test.txt';
↑!
0168デフォルトの名無しさんNGNG
>確かな回答が得られませんでした

あれだけはっきり書いてやったのに。失せろ。
0169デフォルトの名無しさんNGNG
>>165
>open my $out,'>:encoding(utf8)',$output_filename or die "open $output_filename: $!\n";
これやった瞬間にファイルが空になる。
0170デフォルトの名無しさんNGNG
開いたファイルは閉じような。
0171デフォルトの名無しさんNGNG
my $pass = <STDIN>; で標準入力からパスワードを得たいのですが、
この時に、Unix系のOSのログイン時のようにキー入力をエコーしないようにしたい
のですが何かいい方法があったら教えてください。
0172171NGNG
あ、スイマセンでした。sttyでできそうなのでやってみます。失礼しました。
0173デフォルトの名無しさんNGNG
use strict つかった場合 ハッシュにに変数
初期かええていないって

環境変数 は どう
0174デフォルトの名無しさんNGNG
お前らって入門書なに読んだんですか?
一度はラマ本読んだ方がいい?
駱駝本は買うべき?
0175デフォルトの名無しさんNGNG
>>173 ??? 意味わかんない
>>174
俺は 駱駝本⇒カワセミ本って来て、
常駐してるのはCGI&Perlポケットリファレンス
キレイなサンプルコードがあればそれ見たほうが早いかも(なかなかないがね)
0176デフォルトの名無しさんNGNG
174じゃないがカワセミ本って・・・
0177デフォルトの名無しさんNGNG
何?
0178デフォルトの名無しさんNGNG
Web上で配布されてる奴でお勧めになるコードとか聞きたいけど
大抵は自作自演以下略な流れになるんだよなあ……。
0179デフォルトの名無しさんNGNG
>>176
http://www.oreilly.co.jp/BOOK/msql/
http://www.pearsoned.co.jp/washo/prog/wa_pro41-j.html
http://pc2.2ch.net/test/read.cgi/php/1030209573/
http://pc2.2ch.net/test/read.cgi/tech/1079745865/
0180デフォルトの名無しさんNGNG
>>174
>>4 参考
とりあえずラマ本とEffective Perlは読んでおけ
ラクダは金あるなら買ってもいいけど、perldoc で大抵間に合う

0181デフォルトの名無しさんNGNG
かわせみの和訳はぼろぼろ
0182181NGNG
>>179
つーかそれじゃないだろ?
0183デフォルトの名無しさんNGNG
サンクス、
とりあいず今の本読み終ったら、ラマ本読んでみるよ。
0184デフォルトの名無しさんNGNG
あ、思わず前板のログ消してもーた
0185デフォルトの名無しさんNGNG
復帰オメデトあげ
0186デフォルトの名無しさんNGNG
183: デフォルトの名無しさん<><>04/03/25 11:46<>
サンクス、 <br>
とりあいず今の本読み終ったら、ラマ本読んでみるよ。 <>

184: デフォルトの名無しさん<>sage<>04/03/25 14:31<>
まずクックブックを薦める。後はperldocで間に合わない時だけでいい。 <>

185: デフォルトの名無しさん<><>04/03/25 17:38<>
「CGI&Perlポケットリファレンス」はPerlのリファレンス本としては <br>
最強でしょ。 <>

186: デフォルトの名無しさん<>sage<>04/03/25 18:03<>
下記のテンプレサイトのsmtpでのメール送信スクリプトを使用して、添付ファイルを送付することは可能でしょうか。 <br>
ttp://www5a.biglobe.ne.jp/~n_rieko/perl/smtp.htm#perl <br> 普通のメール送信までは出来たのですが、ログを添付ファイルとして送付したいと思っています。 <br>
<br>
net::smtpやqmailも使用出来るのでそちらを使ったほうが早そうですが・・。 <>
0187デフォルトの名無しさんNGNG
187: デフォルトの名無しさん<>sage<>04/03/25 18:39<>
ヘッダ、データ部の作成ってところで、$send_dataに自由に何でも <br>
入れられるできるようになってるので、添付ファイルつきのメールが <br>
どうあるべきかをよく調べて作ってやれば可能だと思う。MIMEの <br>
RFCを読むとか、出来合いのメールアプリで自分に添付ファイルつき <br>
メールおくって中身を見てテキトーに真似するとかね。 <br>
<br>
私ならCPANにあるMIME-ToolsかMIME-Liteあたりを使うと思うけど、 <br>
使い方調べたりする手間とどっちが楽かは微妙といえば微妙だな。 <br>
コレも一種の"There's more than one way to do it"ということで。 <br>
<>

188: デフォルトの名無しさん<>sage<>04/03/26 11:00<>
<a href="../test/read.cgi/tech/1079114157/187" target="_blank">>>187</a>さん <br>
ありがとうございます、検討してみます。 <br>
<br>
2Mのログ7つを固めて送らなければいけないので負荷の問題で、もっと軽い処理にしなきゃいけないかとも思っています。 <>
0188デフォルトの名無しさんNGNG
特定のドライブの空き容量を調べたいのですが、どのようなコマンドを使えばいいのですか?
0189デフォルトの名無しさんNGNG
use Class;
my $instance = Classs->new();

こんな感じのtypoとか、実行前にメソッド呼び出し先のクラスが正しくuseされているか
チェックするツールがあった気がするのですが、誰か知りません?
0190デフォルトの名無しさんNGNG
>>188
激しくシステム依存な予感

>>189
Perlは実行しないとクラスがuseされてるかどうか分からないし、
実行前にクラス名のtypoを見つけることは出来ない。残念だが。
C++なりJavaなりに移行するか、実行時エラーで我慢するしかない。
0191デフォルトの名無しさんNGNG

CGI::SessionをCPANよりインストールを試みましたが、
途中で、止まってしまいます。OSは、FreeBSDです。


~~~~~~~~~~
BEGIN failed--compilation aborted at blib/lib/CGI/Session/File.pm line 12.
dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED tests 2-14
Failed 13/14 tests, 7.14% okay
t/api3_mysql........skipping test on this platform
t/api3_obj_store....(offline mode: enter name=value pairs on standard input)
_(プロンプト)

何か入力を促されていると思うのですが、適当に入力しても反応が
見られません。

どのように対処すればよろしいでしょうか?
よろしくお願いします。
0192性器NGNG
Pattern Match で
(?{ last }) とか (?{ next }) とかするとPerlが止まってしまいます
何で???
0193189NGNG
>>190
厳密に文法を解析してエラーチェックしてくれなくてもよいのだけど、

my $f=shift @ARGV;
open(F,$f);
while(<F>){
  $classes{$2}=1 if(/(^use )(.*);$/);
  print "line $.: warn $2 have not been loaded.n" if( /(s{1,})(w*)->(.*)((.*)/ && !$classes{$2} );
}
close(F);

のような単純な正規表現よりは強力なのきぼんぬな感じなのですが、
何か良いツール無いですかね。
0194デフォルトの名無しさんNGNG
テスト
\\ \7 \n
0195デフォルトの名無しさんNGNG
質問です。使用してるのはActivePerl v5.8.2です。

$x = (2050 / 2.05) - 1000;
print $x;

としたとき、本来、$xは0になると思うのですが、0になりません。
正しい計算結果を得るにはどうしたら良いのでしょうか。

ぐぐっても、perlは倍精度浮動小数点だということしかわからず。
それが関係してるのでしょうか?
ちなみにgoogle計算機でも0にならなかったです。
0196デフォルトの名無しさんNGNG
>>195
$x = int(2050 / 2.05) - 1000; # 小数点以下切り捨て
$x = sprintf("%3.0d", 2050 / 2.05) - 1000; # 精度を明示的に指定
0197デフォルトの名無しさんNGNG
Javaのプロパティファイルを読み込むモジュールはありますか?
0198デフォルトの名無しさんNGNG
>>197
http://search.cpan.org/
http://google.com/
0199197NGNG
>>198 検索してみますた。

Data-Properties-0.02 # TODO:エスケープを処理していない。←論外
Config-Properties-0.56 # Unicodeエスケープにも対応!

というわけで、Config-Propertiesを使ってみます。
0200デフォルトの名無しさんNGNG
sub is_filehandle {
  my $fh = shift;
  # ファイルハンドルとして扱える、*FHや$fhが渡されたときだけ
  # 真になるようにするにはどう書けばいいですか?
  return $fh =~ m/^(GLOB|\*)/; # みたいな方法しか思いつきません。
  # 確実な方法を教えてくださいです。。。
}
open(FH, '<', 'test1.txt');
print is_filehandle(*FH), "\n";
open(my $fh, '<', 'test2.txt');
print is_filehandle($fh), "\n";
0201デフォルトの名無しさんNGNG
>>200
FileHandle モジュール使え
0202デフォルトの名無しさんNGNG
型グロブってなんですか?
C/C++でいうとなんですか?
0203デフォルトの名無しさんNGNG
sub is_filehandle {
my $fh = shift;

return defined *$fh{IO};
}

かな?
0204デフォルトの名無しさんNGNG
やっぱCもできた方がよろしいのかしら?
HTML→JavaScript→Perl→PHPときて今アセンブラに手を出してますが何か飛ばしてる気分
0205デフォルトの名無しさんNGNG
>>196
補足しとくと、2.05 ちうのは「中途半端な数」だ
浮動小数 演算 誤差 とかでぐぐれ
0206デフォルトの名無しさんNGNG
>>203
ありがとう!
0207デフォルトの名無しさんNGNG
浮動小数点数なんて貧乏臭い物使わず
use bignum;
$x = (2050 / 2.05) - 1000;
でいいじゃん
0208デフォルトの名無しさんNGNG
質問です。今、Perlで再帰的な構文の解析をしようとしています!
再帰的な構文をマッチする正規表現を構築するため、正規表現の
再帰部分を<HOGE>として、表現全体と置換するようにしてみました。
しかし、3層のネストをマッチする表現を構築しようとしたところで、
Perlの文字列型が溢れてしまい困っています。
そこで質問なのですが、Perlでは正規表現の一部をプリコンパイルしたり出来ますか?
あるいは、長い正規表現を短い正規表現で代替する方法はありませんか?
本物のパーサーは書きたくないです…。教えてエライ人!
0209デフォルトの名無しさんNGNG
>>208
perlの正規表現は再帰を扱う機能がある
0210デフォルトの名無しさんNGNG
>>208
(??{ code }) でいけると思われ。詳細はperlre(1)参照すれば
バランスしたカッコにマッチするパターンの例もあるよ。
0211195NGNG
いろいろ答えてくださった方たち、ありがとう。
0212デフォルトの名無しさんNGNG
本気で初心者で申し訳ないんですが質問です。
入力された文字列に特定の文字が入っているかどうかを
探すにはどうやればいいんでしょうか。
(たとえば"●"または"▲"の文字が入っていればOKと返すような)
0213デフォルトの名無しさんNGNG
m/●|▲/
0214デフォルトの名無しさんNGNG
>>213
ダウト。たとえばEUCなら

"□ゥ" =~ m/●|▲/

は真なので日本語のマッチは結構難しい。

ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Match

あたりが参考になると思う。

unicodeにしちまえばいいという話もあるらしいが
そっちはよくわからんので詳しい人ドゾー。
0215デフォルトの名無しさんNGNG
しょうもない質問で大変申し訳ありません。
当方、ここ数日でperlを詰め込んでいます。
とほほさんや色々のサイトを見ながらある文章の意味を調べているのですが、

if (/$XX=([^\;]+)\;?/)
{

の意味がさっぱりです。
すみません、どなたかヒントなどをいただければ大変ありがたいです。
0216デフォルトの名無しさんNGNG
>>215
\; -> ;
ヒントなど。
0217でふぉな名無しさんNGNG
>>215
1.正規表現を勉強する。
2.だいたい分かったら実際にうごかして確かめてみる。
0218デフォルトの名無しさんNGNG
>>217
わかんねーからきいてんじゃんかよ
ばかかおめー
0219デフォルトの名無しさんNGNG
>>212-214
普通このようとならindexじゃない?
0220デフォルトの名無しさんNGNG
>>215
ヒントなど。

「俺→胃袋→宇宙」
0221デフォルトの名無しさんNGNG
>>215
ヒントなど3。

Mハゲ=ベジータ;

>>215=ベジータ
0222デフォルトの名無しさんNGNG
2つのファイルがあって,
1つはid(id.txt)だけの
1
2
3
のようなファイルで,
2つめはidと名前の書いてある(db.txt)データベース
1,田中
2,鈴木
3,山田
があったとき,id.txtの内容をdb.txtを使って,
田中
鈴木
山田
のように置換したいのですが何かいい方法はありますでしょうか?
id.txtを1行ずつ読み込み,db.txtの内容を配列に格納し,
foreach文で配列を回して,idがマッチしたときにidに対応する
名前に置換しようと思ったのですが,名前の配列の取り出し方が
わかりませんでした.
0223デフォルトの名無しさんNGNG
>>222
open DB, '<' . $db_txt or die $!;
my %db;
while (<DB>) {
  /^(\d+),(.+)$/ or next;
  $db{$1} = $2;
}
close DB;

open ID, '<' . $id_txt or die $!;
open TMP, '>' . $tmp_txt or die $!;
while (<ID>) {
  /^(\d+)$/ or next;
  print TMP $db{$1}, "\n";
}
close TMP;
close ID;
rename $tmp_txt => $id_txt or die $!;

この処理を頻繁にやるなら db.txt は予め DBM 等に。
0224デフォルトの名無しさんNGNG
↑
ダッセーw
0225212NGNG
無事できました!
ありがとうございました!!
0226222NGNG
>>223さん

ありがとうございました!
Perlビギナーのため,ハッシュの使い方もわかりませんでしたが,
勉強になりました.
最初にidに対応する名前を配列に設定して,次にidファイルのidに
マッチした配列を書き込むということなんですね.
0227デフォルトの名無しさんNGNG
ifって予約語?
m// と //は同じって事でおk?
0228デフォルトの名無しさんNGNG
>>224 そうか?perlらしくていいとおもうけどな
0229デフォルトの名無しさんNGNG
>>215
if (/ # 正規表現開始(m/の省略形)
$XX # 変数XXの内容を正規表現の一部として展開
= # イコール文字
([^\;]+) # セミコロン以外の文字の一つ以上の連続
\;? # 任意のセミコロン
/x) # 正規表現中に空白とコメントを含めるためのオプション
{

$XX = 'hoge'; # のとき、
hoge=abcde; # や
hoge=abcde # がマッチする
hoge=; # と
hoge= # はマッチしない
foobar=agadgfaskdjagfasd #は当然マッチしない
# しかし
foobarhoge=abcde;abcde
# でも「hoge=abcde;」の部分がマッチするので、
# 使い方によっては/^$XX=([^\;]+)\;?$/としないと危険かもしれない。
0230デフォルトの名無しさんNGNG
んーとね、ここで教えてもらったモジュールで、無事コンペに応募できた。
まさに天からの助けだったよ。
前スレなので、もうどなたかもわからないけど本当に本当にありがとう。

勝ったらまたカキコしまつ。
0231デフォルトの名無しさんNGNG
>>228
224じゃ無いが、ここらへん俺もダサいと思う。
> open DB, '<' . $db_txt or die $!;
> open TMP, '>' . $tmp_txt or die $!;
0232デフォルトの名無しさんNGNG
open DB, "<$db_txt" or die $!;
ってことか?

0233デフォルトの名無しさんNGNG
TMTOWTDI
0234デフォルトの名無しさんNGNG
openに引数を3つで渡すのはいちお安全のためでもあるのだよ
0235デフォルトの名無しさんNGNG
@$ref[0][1]はどう解釈すればいいの?
0236デフォルトの名無しさんNGNG
syntax error
0237デフォルトの名無しさんNGNG
@{$ref[0]}[1]
と
{@$ref[0]}[1]
はどう解釈すればいいの?
0238デフォルトの名無しさんNGNG
後者はsyntax error
0239デフォルトの名無しさんNGNG
{} でデリファレンスする場合

スカラ ${ }
配列 @{ }
ハッシュ %{ }
グロブ { }

のようにグロブ以外は { の前にコンテキストを示す記号が入る。

もしグロブをデリファレンスしたかったのなら
perl -e 'use strict; my $ref =[\*STDOUT]; print {@$ref[0]}[1] '
は STDOUT に対して [1] の無名配列の文字表現を出力する。
0240デフォルトの名無しさんNGNG
>>238
アフォ
0241デフォルトの名無しさんNGNG
([^\;]+) # セミコロン以外の文字の一つ以上の連続
どうして"意外"なの?
0242デフォルトの名無しさんNGNG
>>239
グロブ(type glob)のデリファレンスは *{ $var } だぞ。

print {FILEHANDLE} (args)
これはグロブをデリファレンスしているわけじゃない。
間接メソッド呼び出し
method {object} (args)
と同じ構文でファイルハンドルを参照しているだけだ。



0243デフォルトの名無しさんNGNG
>>241
まず自分で勉強してこい
0244デフォルトの名無しさんNGNG
最近プログラム始めました。
どーしてもわからないところで詰まってるので、質問させて下さい。
テキストファイル(ハンドル:TXT)に、
1,名前,メール,内容
2,名前,メール,内容
3,名前,メール,内容
ってな感じでデータ保存してまして、
この最後の行の最初の文字から何行分データがあるか数えたいのですが、

open(TXT,"+>> $txtfile");
@txt = <TXT>; #全データを取り込み、
$last_txt=pop(@txt); #最終行の文字列を取り出して、
@words=split(/,/,$last_txt); #文字列を配列に変換し、
$last_id=shift(@words); #last_idを取り込む
push(@txt,$last_txt); #元に戻す
close(TXT);
ってな感じでやってるのに、$last_id=3となりません。
どこがいけないんでしょうか?


0245デフォルトの名無しさんNGNG
perl初めて一ヶ月の俺が言うのもなんだけど
テキストファイルの最後に改行が2つないかい?
俺が思うに改行が2つあるため
@txt = ("1...\n","2...\n","3...\n","\n");
って感じになったと思う。
ちなみに
@txt = ('1,名前,メール,内容', '2,名前,メール,内容', '3,名前,メール,内容');
$last_txt=pop(@txt);
@words=split(/,/,$last_txt);
$last_id=shift(@words);
push(@txt,$last_txt);
print $last_id;
で3になった。

漏れの質問だが
コンストラクタってなんだ?
教えてくれ。。。
0246デフォルトの名無しさんNGNG
>>244
何行分のデータがあるかを知るのに、最後の行の最初の項目から得なきゃならん特別な理由があるのか?

無ければ配列の要素数は配列をスカラに代入することで得れる。
$last_id = @txt;
0247デフォルトの名無しさんNGNG
>>245
http://www.google.co.jp/search?q=%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF%E3%80%80perl&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0248245NGNG
ていうか
open(TXT,"$txtfile");
print ((split /,/,(@x=<TXT>)[$#x])[0]);
この二行でいいじゃん。
ところで、
<FH>;
って感じに略したら、どの配列変数に代入されてるの?
0249デフォルトの名無しさんNGNG
>>248
一ヶ月にしては上達しすぎ。
0250デフォルトの名無しさんNGNG
ファイルを一気に読んで配列に入れて一気に書き込むとメモリを喰う。
一行ずつ読んで一行ずつ書き出すとヘッド動きまくりでHDDが痛む。

この辺りの取捨選択ってどう言う基準でやってますか。
0251デフォルトの名無しさんNGNG
>250 バッファリングって知ってるか? 1文字ずつ書いてもたいしてかわんねーよ
0252デフォルトの名無しさんNGNG
バッファ・リング【名】

固定長のバッファをリング状に連ねたもの。
一番古いバッファから、新しい書き込みによって破壊されていく。
少ないメモリーで効果が発揮されることが特徴。
現在は、メモリーに余裕があるため使われなくなった。
0253デフォルトの名無しさんNGNG
>>251
さすがに一文字ずつはCPUの無駄使いな余寒
0254デフォルトの名無しさんNGNG
>>253
このあたりはよく釣れますかね?
0255でふぉな名無しさんNGNG
>>252 それはリングバッファやろがー(つっこみ)
0256デフォルトの名無しさんNGNG
>>255
ありがとう。
あなたいいひと。
0257でふぉな名無しさんNGNG
う、送ってしまった_| ̄|○

>>250
Perlのよーな言語を使うなら気にするな。
そのあたりはOSにまかしとけ。特定環境を想定するもんじゃないし。
メモリがんがん使うと仮想記憶が動いてHDDを動かすわけだし
気にするときりがない。
そもそも最近のHDDはそんなにやわじゃないし、そこまで気にする
よーなでけープログラム書けるようになってから悩め(笑
0258244NGNG
プログラム初めて5日と、
一ヶ月では知識&発想がちゃいますね。
ありがとうございました。
246の人もサンキューデス。
配列の要素数を知るっていう配列操作調べたけど、
ないと思ってました。それでいけるんですね。
書き直してみます。
0259デフォルトの名無しさんNGNG
$file = <*>
この意味を教えてください
0260デフォルトの名無しさんNGNG
>>259
<*> はカレントディレクトリのファイル一覧(配列)を取得します。
で>>259ですが試してみたら、
そのファイル一覧配列の一番先頭のファイル名が代入されました。まる。
0261デフォルトの名無しさんNGNG
肛門
0262デフォルトの名無しさんNGNG
上から一行だけ読み込みでは?
0263デフォルトの名無しさんNGNG
webprogのほうで質問すべきかもしれませんが、むこうは人がすくないっぽい
のでこちらで質問させてください。

CGI::Sessionでセッションを使用しようとしてるんですが、セッションデータ
の引継ぎの方法がよくわかりません。
最初に
$session = new CGI::Session("driver::File", $sid, {Directory => $session_dir});
でセッションオブジェクトを生成し、
$session->param("aaa", "v_bbb");
$sid = $session->id();
のようにデータをいれ、セッションIDを取得し、そのIDで新しいセッション
オブジェクトを
$session = new CGI::Session("driver::File", $sid, {Directory => $session_dir});
のように取得しても、そのセッションオブジェクトからは前にいれたデータは
取り出せません。(もちろんセッションデータは指定のフォルダに存在しています)

質問したいのは、セッションデータを引き継ぐ方法として上記のやり方は
正しいのかということと(間違ってるからうまくいかないのだとおもいますが)、
もし間違っているのであれば、どうすればうまくいくかということです。

よろしくお願いします。
0264デフォルトの名無しさんNGNG
お帰りください
0265デフォルトの名無しさんNGNG
>>263
Webプログラミング板に行った方が適切な回答が得られると思うが、
手元で簡単に試した限りではそのやり方で問題ないはず。

% perl -e 'use CGI::Session; $s=new CGI::Session(undef, undef, {Directory=>"/tmp"}); $s->param("aaa", "bbb"); print $s->id(),"\n";'
cbcea6ee8470002e9a3f496fdb8a6c24
% perl -e 'use CGI::Session; $s=new CGI::Session(undef, "cbcea6ee8470002e9a3f496fdb8a6c24", {Directory=>"/tmp"}); print $s->param("aaa"), "\n";'
bbb

どっか別のところで間違えてんじゃねーの?
0266263NGNG
もすこし試してみます。
0267263NGNG
265さんとまったく同じコードでやってもだめでした。
やっぱりwindowsなのがいけないのかなぁ・・・
0268デフォルトの名無しさんNGNG
原因は多分コレだと思う。前ハマったから。

× Directory => "/tmp"
○ Directory => "C:\\tmp"

CGI::Sessionは、Windows上ではバックスラッシュつかわないとダメなのです。

これがあなたの助けになればいいのですが :)
0269デフォルトの名無しさんNGNG
@bar=qw(a b c d e);
hoge(\@bar);

sub hoge()
{
my @foo1 = @$_[0];
my @foo2 = @{$_[0]};
}
で@foo2の方が期待した結果を得れるのですが
@foo1と,@foo2ではどう違うのですか?
0270デフォルトの名無しさんNGNG
@$_[0];

は

@{ $_ }[0];

って意味なんじゃね?
0271デフォルトの名無しさんNGNG
@{ $_ }[0]; ってどういう意味なのですか?
0272245NGNG
>>247
サンクス。

<FH>;
って感じに略したら、どの配列変数に代入されてるの?
しつこい様だが誰か教えれ!
0273デフォルトの名無しさんNGNG
>>244
は大学生と見た!
0274デフォルトの名無しさんNGNG
>>272
たぶんどこにも代入されない
1行飛ばしたい時に使ったりする
空読みって言ったりする
0275デフォルトの名無しさんNGNG
@{ $_ }[0]; ってどういう意味なのですか?
0276デフォルトの名無しさんNGNG
>>274
一行飛ばすとは?
0277デフォルトの名無しさんNGNG
>>276

274 名前:デフォルトの名無しさん :04/04/05 01:45
>>272
たぶんどこにも代入されない
空読みって言ったりする
0278デフォルトの名無しさんNGNG
>>277,274
アリガト!(´▽`)
>>275
たぶん、配列の1個目の要素をデリファレンス。と思う。

#コンストラクタが理解できねぇ・・・
0279デフォルトの名無しさんNGNG
もういいや、やっぱり2chは2chだねw
0280デフォルトの名無しさんNGNG
>>279=>>275
0281デフォルトの名無しさんNGNG
ご指導いただきたいことがあります。

Perlの勉強を始めているのですが、初心者用の本「初めてのCGI&Perl」というを買いました。
しかし、詳しい文法・レファレンス・関数等やPerl独特の省略表現などについての記述が薄く、私にとってとても分かりにくいのです。
またPerlでよく利用されている正規表現についても、知識の薄い私にとって、この本は分かりにくいのです。

よろしければ、Perlについてこれらを満たすことの出来る良書を紹介していただけませんでしょうか。
具体例もあるに越したことは無いのですが、それよりも文法・リファレンス・正規表現について詳しく解説してあるものが欲しいです。
専門書でもかまいませんが、でぉるだけ安価な良書を紹介いただければ更に嬉しく思います。

参考までに私の知識レベルとしては、C、VB、C++、で一般的な業務アプリケーションが作成できるレベルです。
利用形態としては、CGIとローカルでのログ整理のスクリプト処理・データベースのローカル更新などを検討してます。

識者の皆様本当によろしくご指導くださいませ。
0282デフォルトの名無しさんNGNG
テキストの中に

name = "hoge1" value ="hoge"
name = "hoge2" value =1230

などを

while (m/name=\"(.*?)\".*value=(.*?)(\ |>)/g)
{
%data = (%data,$1 => $2);
}

と連想配列に入力するのですが""で囲まれた要素は""まで入力されてしまいます。
これから""を除くにはどうしたら良いでしょうか?
s /\"//s;とかすると要素に文字列にダブルクォーテーションが入った時に
期待どおりに結果が出ないので困っています。

どうかご教授を。
0283デフォルトの名無しさんNGNG
>>282
s/\"(.*)\"(?=.?value)/\1/g;s/value.?=.?\"(.*)\"$/\1/;
0284デフォルトの名無しさんNGNG
>>275
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html

>>281
>>4

>>282
$data{$4} = $8 while /
  name \s* = \s*
    (?:
      (")
    |  (')
    |  (\b)
    )
    (.*?)
    (?(1)")
    (?(2)')
    (?(3)\s)
  \s*
  value \s* = \s*
    (?:
      (")
    |  (')
    |  (\b)
    )
    (.*?)
    (?(5)")
    (?(6)')
    (?(7)(?:\s|$))
/gx;
0285282NGNG
>>283
>>284
ありがとうございます。
0286デフォルトの名無しさんNGNG
>>282
そのテキストファイルって、
 hoge1 = "hoge"
 hoge2 = 1230
とかじゃだめなの? name とか value とか冗長じゃね?

あと >>282のコードを、 %data = (%data, eval($1) => eval($2) ); とするのではだめ?
name = "hoge1" value ='hoge' x 10
name = "hoge2" value =1230 * 10
とかも書けるよ。危険だけど
0287250NGNG
あまり気にしないことにしました。

>>257
プログラムはでかくないけど読むファイルは数千行〜一万行くらいあるっす(´・ω・`)
まあサイズ自体は1M〜5Mくらいだけどアクセス結構あるので……。
#念のため言うと共有鯖では無く専用サーバっす。
#分割駄目・生テキストファイルでやってくれと言う謎の制約ががが。
0288デフォルトの名無しさんNGNG
perlの置換及び正規表現についての質問です。
「test,hoge1,testtest,hoge1,hoge1,hoge2,test」
という文字列があった場合、2番目に出てくるhoge1や最後に出てくるhoge1のみを
検出、置換する場合はどうすれば良いのでしょうか?

上のデータを用いて「2番目に出てくるhoge1をhoge3にする」場合の期待値
「test,hoge1,testtest,hoge3,hoge1,hoge2,test」

文字をsubstrで切り刻みながら置換するのではなく、正規表現で綺麗に一発で
出来そうな気がしないでもないのですが、どうやったらよいのか分かりません。
何か良い方法があれば教えてください。
宜しくお願いします。
0289デフォルトの名無しさんNGNG
s/^(.*?hoge1.*?)hoge1/\1hoge3/
0290デフォルトの名無しさんNGNG
>>281
正直お勧めです。
http://www.gihyo.co.jp/books/syoseki.php/4-7741-0817-0
0291デフォルトの名無しさんNGNG
>>287
一気読みダメ、1行ずつダメ
んじゃ間とって数十行ずつやれば?w
0292デフォルトの名無しさんNGNG
PerlってOOPができるんですよね?
ちょっとgoogleで検索してみましたが、どうもnamespaceといったキーワードがないです。
Perlでオブジェクト指向プログラミングをするとどんな感じになるんですか?
0293288NGNG
>>289
ありがとうございます。
最初は何故これで行くのかが分からなかったのですが

(.*?hoge1.*?)hoge1
が「前後に何か文字がある可能性があるhoge1とその後ろにあるhoge1」
で
\1hoge3
が「\1は最初の括弧の内容をそのまま、その後ろはhoge3に」

ということで良いんでしょうか?
$data =~ s/^(.*?hoge1.*?)(.*?hoge1.*?)hoge1/\1\2hoge3/;
で3番目のhoge1が置換されるから、こういう解釈であってると思うのですけど・・・
0294デフォルトの名無しさんNGNG
>>293
.*?と.*の違いを理解しよう。キーワードは最短マッチと最長マッチ。
0295デフォルトの名無しさんNGNG
>>294
答えじゃん!
0296デフォルトの名無しさんNGNG
>292
クラスはpackage に過ぎない。オブジェクトはblessされた物に過ぎない。
でnamespaceとOOPってなにか関係あるの? packageでじゅーぶんじゃん
0297デフォルトの名無しさんNGNG
>>288-289
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html#WARNING_on_1_vs_1

>>293
http://www5a.biglobe.ne.jp/~n_rieko/perl/8.htm

>>292 >>296
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlmod.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlobj.html
http://perl.infoware.ne.jp/documents/perlboot.ja.html
0298デフォルトの名無しさんNGNG
>>282
こんなのは?

# conf_file
$data = {
hoge1 => 'hoge',
hoge2 => 1230,
};

package main;
do('conf_file');
print $data->{hoge1}; # hoge
print $data->{hoge2}; # 1230
0299デフォルトの名無しさんNGNG
>>298
細かいツッコミだが

#--- conf_file ---
my $foo = 'hoge'; # 識別子 foo は script から見えない (見せない)
{
hoge1 => $foo,
hoge2 => 1230,
};

#--- script ---
#!/usr/bin/perl
use strict;
my $bar = do './conf_file' or die; # 謎の変数をいきなり出現させない
print $bar->{'hoge1'}; # hoge
print $bar->{'hoge2'}; # 1230
__END__
0300288NGNG
>>294
>>295
>>297
?の有無の差でなにがどうなるか分かりました。
>>297さんに教えていただいた先の情報は正直まだ理解できてるとはいえませんが
頑張って読んでます。
ありがとうございました。
0301デフォルトの名無しさんNGNG
>>282
yet another.
パース方法に悩むならXMLも一興。

# hoge.xml
<hoge1>hoge</hoge1>
<hoge2>1230</hoge2>

use XML::Simple;
my $xml = XMLin('hoge.xml');
my $hoge1 = $xml->{hoge1};
my $hoge2 = $xml->{hoge2};
0302デフォルトの名無しさんNGNG
↑
XMLの使い方を勉強しなおせ、ばか
0303デフォルトの名無しさんNGNG
$mname =~/([\s\S]*)\./;
これは何をやってるのか教えておくれ
0304デフォルトの名無しさんNGNG
>301
ルートエレメントが2つあっちゃダメだろ
データ構造も変だし。属性使え
0305デフォルトの名無しさんNGNG
>>301
うーん、なんとなく >>282 はもともとからXMLのような気がしてきた。
<hoge name=namae value=aaa />
↑こういうデータから抽出したいのかも。
0306デフォルトの名無しさんNGNG
メル欄がのこってた(w

>>303
\s : 「空白」一文字とマッチする正規表現演算子
\S :「空白以外」の一文字とマッチする正規表現演算子
\. : ドットにマッチ。

よって $mname =~/([\s\S]*)\./; は、
「空白と空白以外の続きで、最後がドット」の文字列にマッチする。
つまり、わからん。何がしたいんだ?
0307デフォルトの名無しさんNGNG
/^(.)\1+$/

この意味を教えてください
0308でふぉな名無しさんNGNG
>>281
もう定番だがEffective Perlなぞはどうだろう。
既にプログラミングの素養はあるわけだし、281に必要なのは
この本の趣旨である「Perlらしいプログラミング作法」とか
そのためのよりつっこんだ文法(トークン)への考察ではと推察する。
私もCあがりなのでなんかCっぽい記述になりがちで面白くない。
で、この本で改めて理解を深めている最中だ。ちなみに\2800
0309263NGNG
原因が判明したので一応報告です。

最初のセッションオブジェクトをファイルに保存するより早く二個めの
セッションオブジェクトが作成されていたので、最初のセッションオブジェクト
で生成したセッションIDが結果的に見つからず、新たなセッションオブジェクト
を生成していました。
0310でふぉな名無しさんNGNG
>>287
なんだ、いまどきたった数Mbyteなら気にするな。
その程度メモリに常駐しているプログラムなんてごろごろいるだろ。
キャッシュとかバッファリングとか仮想記憶とかそんなあたりで
ちょっとOSのファイルやメモリ管理論をかじれば全然気にならなくなる。
すれ違いになるんでこんぐらいで止めとく。
0311デフォルトの名無しさんNGNG
>>307
^ : 文字の先頭から検索
(.) : () は見なかったことにして、 . は何らかの文字 1文字。
\1: 直前の() 内で囲まれた正規表現にマッチ。した文字列
+ : 直前の正規表現が一回以上繰り返している場合マッチ。
$ : 文字列の最後

よって、「文字列の先頭から、1文字以上の何らかの同じ文字が文字列の終端まで続いている」文字列にマッチする。
つまり、なにがしたいんだ?
0312デフォルトの名無しさんNGNG
$ : 文字列の最後
ってなんですか?
0313デフォルトの名無しさんNGNG
>>307
連番トリップを検索する時に使う正規表現。
0314デフォルトの名無しさんNGNG
^ は行頭
$ は行末 だぜよ
0315デフォルトの名無しさんNGNG
じゃあ、
$hoge="bc";
$hoge=~s/^/a/;
print $hoge
はどんな結果でしょうか?
0316デフォルトの名無しさんNGNG
>>315
正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/l50
0317デフォルトの名無しさんNGNG
サブルーチンの局所化はどうすれば良いのでしょうか?
0318デフォルトの名無しさんNGNG
>>317
package
0319デフォルトの名無しさんNGNG
Net::SMTP を使ってformメールを使っていたのですが、
新たにサーバを移転し、SMTP認証が必要になったため

my $smtp = Net::SMTP->new('smtp_server');
$smtp->auth( $smtp_username, $smtp_password );

とauthの一行を追加したのですが全く送ってくれません。
perldoc.jpでは、

auth ( USERNAME, PASSWORD )
SASL認証を試みます。

とありますがSASL認証とSMTP認証って違うのでしょうか。
perldoc.jpにはSMTP認証についての記載はありませんでした。
0320デフォルトの名無しさんNGNG
モジュールの使い方とか
翻訳してあるいいページありませんか?
0321デフォルトの名無しさんNGNG
>>320
http://perldoc.jp/
0322デフォルトの名無しさんNGNG
>>318
localで*xxxの時、サブルーチンも局所化されてないのですか?
0323デフォルトの名無しさんNGNG
>>321
どうも。助かりますた。
0324デフォルトの名無しさんNGNG
>>322
それは型グロブの局所化。
なぜmyで出来ないのかは疑問。
0325319NGNG
>>319
あきらめてsendmail使おうと思いまして、

use Mail::Mailer;
$sendmail = '/usr/sbin/sendmail';
my $mailer = Mail::Mailer->new("$sendmail");

としたのですが、
syntax error at (eval 21) line 1, near "require Mail::Mailer::/usr/s"

と、おこられました。

Sends mail using any of the built-in methods.
You can alter the behaviour of a method by passing $command to the new method.
sendmail
Use the sendmail program to deliver the mail. $command is the path to sendmail.

perldocで読みましたが、僕には
sendmailへのパスをnew methodに渡せ、と読めるんですが。。
何か勘違いしてますか?
0326デフォルトの名無しさんNGNG
sub add {
local($x, $y) = @_;
return $x + $y;
}
  このプログラムの意味を教えてください!!
0327デフォルトの名無しさんNGNG
>>326
僕ちんはそんな釣りには引っかからないよーーーぺっぺっぺっ""
0328デフォルトの名無しさんNGNG
>>326
…ここに聞く前に、なんか初心者本でも買えば?
0329デフォルトの名無しさんNGNG
>>325
第一引数はメールクラスのタイプ。sendmail, qmail等。
第二引数以降にsendmailのパス等を指定する。
0330デフォルトの名無しさんNGNG
>>325
なんだかとってもわかりにくいマニュアルだが、SYNOPSYSに

$mailer = new Mail::Mailer $type, @args;

とあってあとの方のARGUMENTSってとこに

"new" can optionally be given a $command and $type. $type is one
"sendmail", "mail", ... given above. The meaning of $command depends
on $type.

と書いてあるのでなんとなく

my $mailer = Mail::Mailer->new('sendmail', "$sendmail");

とやれって意味じゃないかと思う。試してないのではずしてたらスマソ。



0331デフォルトの名無しさんNGNG
open(IN,"a.txt");
$a = <IN>;
$frg = &Sub_a($a);

print "$frg\n";
close(IN);

sub Sub_a{
$frg2=False;
if(@_ eq "a"){
$frg2=True;
}
return $frg2;
}
------------------------------------
>cat a.txt
>a
------------------------------------
なぜか上手くいきません〜。。。
すみませんが、ヒントください!

0332デフォルトの名無しさんNGNG
perlでプログラム組んでる奴バカじゃね〜の?
0333デフォルトの名無しさんNGNG
>>331

open(IN,"a.txt");
$a = <IN>;
chomp $a; # 改行があれば改行を削る
$frg = &Sub_a($a);

print "$frg\n";
close(IN);

sub Sub_a{
$frg2=False; # 通るけど、引用符で括った方が安全だよ
if($_[0] eq "a"){ # ここが一番問題。スカラーとリストのちがいに注意
$frg2=True; # 通るけど、引用符で括った方が安全だよ
}
return $frg2;
}
0334325NGNG
>>329
>>330
あ、なるほど。
早速やってみます。
ありがとうございました。
0335デフォルトの名無しさんNGNG
$array[0] = (10, 20, 30, 40); #?
print "$array[0][1]"; # 20

こんな感じに二次元配列を宣言したいのですが、どうもうまくいきません。
0336デフォルトの名無しさんNGNG
>>335
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
0337デフォルトの名無しさんNGNG
$array[0] = [10, 20, 30, 40];
0338デフォルトの名無しさんNGNG
>>287
1.データファイルについてMD5やstat()などでハッシュを取り別ファイルに保存する
2.データファイルについて、indexを作成しファイルに保存(行毎に探索するのではなくseekで飛べるように)
3.もしデータファイルに改変があってもハッシュとの整合性で検出できる。改変があったらハッシュとindexデータを再生成

っつー感じではどうか。
0339デフォルトの名無しさんNGNG
「perlではsegmentation faultやスタック破壊は起きない」は真でしょうか?
ただし、処理系や他言語で記述したモジュールのバグに起因するもの
とsyscallの不適切な使用によるものは除くとします。
0340デフォルトの名無しさんNGNG
>>339
Perlに限らずあらゆるアプリケーションにおいてそうなんだが、「100%ない」とは言い切れない。
ただ、俺自身は今まで3年以上Perlをいじっているが、単体のPerlでSEGVったことはない。
0341デフォルトの名無しさんNGNG
lacal (*in) = @_;
の意味がわかりません。
初めはlacal (*in) = \@_;のミスだと思っていたのですか、そうじゃないみたいです。
0342デフォルトの名無しさんNGNG
>>341
呼ぶ側が

foo(*X);

となっていたら、そうやって受けるのは自然だと思うが?
0343デフォルトの名無しさんNGNG
>>342
サンクス!
型グロブを引数として渡すのは頭に無かったです。
0344デフォルトの名無しさんNGNG
こんなクソ言語やめてrubyにしろよ
0345*NGNG
「Perl書法」(増井俊之 著)という本を見つけ、ASCIIから
anonymous ftpからソースをダウンロードしようと思ったが
10年前の情報だったので手に入らなかった
誰かソースコードを持っている人はいませんか?
0346デフォルトの名無しさんNGNG
>>345
著者に直接聞いたら?
0347デフォルトの名無しさんNGNG
文字列から2文字づつ取り出したいんだけど
スマートな方法はありますか?

$str="abcdef";
for $x (split(/(..)/g,$str)) {
print "$x\n";
}

ってやっても、ひとつおきに null が混ざるんだけど。
substr使うのが普通なのかな。
0348デフォルトの名無しさんNGNG
いろいろあるけど、正規表現にこだわるなら
$str="abcdef";
for $x ($str =~ /(..)/g) {
print "$x\n";
}
split について誤解があるみたいだから、
perldoc -f split
もしといてね。
0349347NGNG
>>348
すばらしいです!
split(//,$str) とかで1文字づつ取り出せたんで
誤解してました。勉強します。
0350デフォルトの名無しさんNGNG
> for $x ($str =~ /(..)/g) {
おおおおっ、正規表現オプション g の素敵な使い方ですね。
0351デフォルトの名無しさんNGNG
$str="abcdef";for ($str=~/(..)/g){print "$_\n"}
$str="abcdef";for (split(/(..)/g,$str)){print "$_\n"}
これの出力結果が違うのはどうしてですか?下のものには
余計な空の行が入ってしまうように思います。
0352デフォルトの名無しさんNGNG
>>351
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html
http://perldoc.com/perl5.8.0/pod/func/split.html
0353デフォルトの名無しさんNGNG
CGIの方に書くべきか迷ったんですが、こちらに書かせていただきます。
Perlで、メッセンジャーが起動されているかどうかチェックすることって可能ですか?
オンラインゲームの不正にメッセンジャーが使われることを回避したいのです。
0354デフォルトの名無しさんNGNG
>>353
可能でしょう。 でも、あなたの言ってるオンラインゲームがCGIゲームなんだったら、結構面倒かも。
でも、メッセ側でオンライン状態を通知しないとかされたらムリか。

>オンラインゲームの不正にメッセンジャーが使われることを回避したいのです。
ネトゲでメッセの使用を規制するって正気の沙汰とは思えないですがね。
0355デフォルトの名無しさんNGNG
そもそもやろうと思えばメッセンジャーじゃなくても通信手段は
いくらでもあるわけで、あまり気にしない方がいいんじゃ?
0356デフォルトの名無しさんNGNG
変数やファイルハンドルの名前について 命名規則or慣習ってありますか?
0357デフォルトの名無しさんNGNG
変数名については man perlstyle するべし。

ファイルハンドルは IO::File を使えば名前なんか考えなくていい。
0358デフォルトの名無しさんNGNG
STDINからの入力を受けたいんですが、
よくあるパスワードを入力する時のようにユーザのターミナル上に出力される文字を*に変換する方法を教えてください。
0359デフォルトの名無しさんNGNG
>>358
ハァー?
0360デフォルトの名無しさんNGNG
HTML勉強しなおせ
0361デフォルトの名無しさんNGNG
Perlで例外処理ってどうしますか?
dieだと catchできませんしね
Errorモジュールなるものがあるらしいですが、
アレを使ったほうがいいですか
0362デフォルトの名無しさんNGNG
>>360
いや、シェル上での話です。HTML勉強すればtemcapでも読めるようになりますか?プゲラ
0363デフォルトの名無しさんNGNG
いちお、質問者なんだから見当違いの回答者がいても
「プゲラ」とか煽るのは禁句だと思うぞ
0364デフォルトの名無しさんNGNG
use Term::ReadKey;
0365デフォルトの名無しさんNGNG
>361 exit,die は eval で捕捉できる。
0366デフォルトの名無しさんNGNG
>>363
ごめんなさい。
グーグルでもう一回探しなおしてきます。
0367デフォルトの名無しさんNGNG
>>365
>C:\>perldoc eval
>No documentation found for "eval".

よくわからなかったのでぐぐったのですが、よくわからないので
もう少し教えてください。

try { /*例外を投げたいような処理→*/ throw new NullPointerException; }
catch (Exception e){ /*例外処理*/ }
みたいなコードは

eval { #例外が起こるかもしれない処理、例えばゼロ除算
}
if($@){ #例外処理
}

って書けばいいわけですか?

簡単といえば簡単ですが、難しいといえば難しいですね。
気軽に使っても問題ないのかな
0368デフォルトの名無しさんNGNG
perlfunc の中だろ。 問題ないよ。
0369デフォルトの名無しさんNGNG
>>367,>>369
ガッ

このスレでぬるぽみるとは思わなかった・・・
0370デフォルトの名無しさんNGNG
>>367
気軽に使っていいよ。ほんの少しだけ遅くなるけど。
ちなみに、try-catchに馴染んじゃった人、例外に型が無いと抵抗がある人は、

http://search.cpan.org/~uarun/Error-0.15/Error.pm
とかもある。
0371デフォルトの名無しさんNGNG
>>368-370
どうもありがと。try-catchが大好きというわけじゃないので、
必要な場面でどんどん使って生きたいと思います。
ただ、catch(char* e){} catch(int e){} みたいに型で処理を分けられないみたいなので、
必要になったときはerror.pmのお世話にならせてもらいます。
実際には例外もそんなに出番が無いかもしれないけど。
open() or hoge();とか、ゼロ除算の場合でも$x = $a / $b unless($b);ってしたほうが楽かもしれない
0372デフォルトの名無しさんNGNG
__WARN__
0373デフォルトの名無しさんNGNG
__ヽ(`Д´)ノ__
0374デフォルトの名無しさんNGNG
ppmを実行しようとすると下記の様なエラーが発生するのですがどうしたらよいのでしょうか?
Error: neither 'HKEY_LOCAL_MACHINE/SOFTWARE/ActiveState/PPM//InstallLocation'nor
'HKEY_CURRENT_USER/SOFTWARE/ActiveState/PPM/InstallLocation'found in registry at
C:\Perl\bin\ppm.bat line 29.
と表示されてしまいます。何回かインストールしなおしてもこの様な状況で
ActivePerl-5.8.0.806-MSWin32-x86を使用しています OSはXPです
少々スレ違いかも知れませんがよろしくお願いします
0375デフォルトの名無しさんNGNG
>>374
build 809にupdate汁
0376デフォルトの名無しさんNGNG
デコードするときの質問なんですが

$value =~ s/</</g; <と>はタグ拒否だとおもうんですが
$value =~ s/>/>/g;  "と&を置き換えるのはなんでですか? 
$value =~ s/"/"/g;
$value =~ s/&/&/g;
0377デフォルトの名無しさんNGNG
htmlの仕様による。
ちなみに、君の書き込みで、変換前と変換後の文字が同じに
なってまつよ。
&& &>とか書かないとね。
0378デフォルトの名無しさんNGNG
<pre>&</pre>
0379デフォルトの名無しさんNGNG
ちなみに&ほげほげは他にもたくさんあるので、HTML::Entities
使うほうが楽だと思われる。
0380デフォルトの名無しさんNGNG
&amp;
0381デフォルトの名無しさんNGNG
>>376
最も大きな理由は、置き換えないと悪い人に利用されるから。
Googleで「XSS 脆弱性」を検索してみることをオススメする。

手抜きすると「致命的不具合」扱いになって、情報処理推進機構様がやってきますよ(w
0382デフォルトの名無しさんNGNG
>>375
解決しました。本当に感謝してます ありがとうございました
0383デフォルトの名無しさんNGNG
何故2chはperlで作られてるの?
phpとか、jspとかに移行する気はないの?
0384デフォルトの名無しさんNGNG
歴史的経緯だ。
もとはサーバ会社がサーバの宣伝に提供してたから、その会社の許可してる一般的な構成でないといけなかった。
0385デフォルトの名無しさんNGNG
php?jsp? 2chが移行するならCだと思う。
0386デフォルトの名無しさんNGNG
read.cgiはCになってなかったっけか。
0387デフォルトの名無しさんNGNG
bbs.cgiは一部の鯖で
perlccでバイナリになってたりする
0388デフォルトの名無しさんNGNG
ttp://espion.s7.xrea.com/diary/20040122.html#p01

perlcc よりもSpeedyCGIのが早い。


一番のネックはプロセス起動のコストなのよ
0389デフォルトの名無しさんNGNG
やっぱここはmod_perlで
0390デフォルトの名無しさんNGNG
mod_perl面倒だからいらねー。apacheとperlのコンパイルオプションあわせないといけないし。
0391デフォルトの名無しさんNGNG
httpdのプロセスサイズもmod_perlだと難。SpeedyCGIならスクリプトごとに最大バックエンド数設定できるし。
0392デフォルトの名無しさんNGNG
irc.2ch.netはSpeedyCGI使ってるね。NTさんの日記にかいてた。
0393デフォルトの名無しさんNGNG
板違い。WebProg板に逝け。
0394デフォルトの名無しさんNGNG
今ライブラリ作ってて そこからファイルを読み込みたいんですが、
このときのファイルパスってライブラリの呼び出し元からのパスになりますよね
これをライブラリからのパスにしたいんですが どうすればいいでしょうか
0395デフォルトの名無しさんNGNG
>394 @INCを順にたどってライブラリのファイルを検索、見つかったパスを使う
0396394NGNG
>>395
呼び出し元で @INC にパスを追加して
ライブラリ側で検索して使う
ってことですか?

@INC に追加するのが何となく気持ち悪い感じだけど
0397デフォルトの名無しさんNGNG
呼び出し先でもできるだろ
0398394NGNG
任意の場所から呼び出したいし、 CGI で使おうと思ってるんで絶対パスでの記述も嫌だなぁと
0399デフォルトの名無しさんNGNG
>>394
ライブラリのパスに依存という仕様自体が激しく気持ち悪いが、

#--- Foo/Bar.pm ---
package Foo::Bar;
use Cwd 'cwd';

my $my_path;
while ($my_path = each %INC) {
  $my_path =~ s|(?<=Foo/)Bar\.pm$|| or next;
  $my_path = cwd . "/$my_path" unless $my_path =~ m|^(?:[A-Z]:)?/|;
  last;
}
print "$my_path\n";

#--- script ---
#!/usr/bin/perl
use Foo::Bar;
__END__
0400デフォルトの名無しさんNGNG
毎月発売の刊行物を、発売日に忘れず書店へ購入に行くするように、
リマインダーみたいにその日にメールで通知してくれるような簡単
なスクリプトを cron で実行させたいと思っているのですが、ドシ
ロートなのでうまく動いてくれません。どこがマズイのか教えてい
ただけるとありがたいのですが。
------------------------------------------------------------------------------
#!/usr/bin/perl

$sendmail = "/bin/mail";
$mailto = "myaddress¥@example.com";
$subject = "Don't forget to get NHK textbook¥ !";
$body = "今日はNHK語学講座テキストの発売日です。¥n忘れず書店へ行って購入するように¥!";

$commandline = "$sendmail -s $subject -t $mailto ";

exec $commandline;
------------------------------------------------------------------------------
試しにコマンドラインから上記スクリプトを実行すると、以下のような
エラーが出ます。
------------------------------------------------------------------------------
sh: -c: line 1: unexpected EOF while looking for matching `''
sh: -c: line 2: syntax error: unexpected end of file
------------------------------------------------------------------------------
一行目には`なんて打ってないのでエラーの意味が分かりません。

## ちなみに、この場合のエラーメッセージが伝えるところの
##「一行目」というのは、スクリプト中の $sendmail = "/bin/mail";
## の行を指すのですよね?そこからして間違ってますか?

環境は Redhat8 です。Perl は上記の通り、/usr/bin/perl
0401デフォルトの名無しさんNGNG
>>400
とりあえず、smtpをtelnetで体験してみると良いかもですよ:-p

.
0402デフォルトの名無しさんNGNG
>>402
ちうか、HTTP SMTP POP3 IRC あたりは
telnet叩いて手で喋れないと、漢ならば!

いったんプロトコルを理解してから各モジュールを使えば
ぐっと理解は深まるし、何かあったときの解決も早い。
0403デフォルトの名無しさんNGNG
>>400
つーか、\を エンマーク¥(&yen;)にしている時点でネタ ケテーイ
0404デフォルトの名無しさんNGNG
$@を気にせずeval()/eval{}するモジュール大杉
autouse, List::Util, Scalar::Util お前らの所為で小一時間ほど悩んじまったじゃねーか
0405400NGNG
ありがとうございます。

>>401,402

んー、「 smtp を telnet で体験してみる」というのは、
つまり、コマンドラインから mail の送信をやってみる、
というような意味でしょうか?もしそういう意味なので
あれば、ウチのサーバ(上述のRedhat機)では telnet
を通さないようにしているので、代わりに ssh でのセッ
ションで、同等のことを何度かチェックしているのです
が.....つまり、その時(=ssh セッション中での mail コ
マンドでメールの送信をやってみたりすること)に、対
話式にコマンドが聞いてくる部分がスクリプトに盛り込
まれていないと、こっちが「返事」をしたことにならな
い、というような理解でよいのでしょうか?しかしもし
そうだとすると自分が書くにはちょっと荷が重いです。

>>403

んー、ネタではないつもりなのですが.....。\(←全角)
って、ここでは¥になっちゃいますよね?違うのかな?
0406デフォルトの名無しさんNGNG
Tk日本語乳力まずいな。
JPEGもうつらんし(window ,active perl 5.8)
TCL/TKにGUIは乾杯してる。。。
でもTCLは気持ち悪いしな
0407でふぉな名無しさんNGNG
>>400
ってゆうかさ、
shellから
/bin/mail -s Don't forget to get NHK textbook¥ ! -t myaddress¥@example.com
って打ってちゃんと動くか?動かないだろ。
そのスクリプトの exec $commandline; ってこれをやろうとさせてるんだよ?
で、これみればエラーメッセージの意味、理解できないかい?
ま、Perl云々以前の問題だな。

print $commandline;
で何を実行させようとしてるのか、ちゃんと確認してからexec なりしてやれよ。
0408デフォルトの名無しさんNGNG
401 に答えが出ている気がするんですけれど。。。

.
0409400,405NGNG
>>407
ありがとうございます。

https://www.stackasterisk.jp/tech/program/perl03_03.jsp
の猿真似で、以下のスクリプトにて送信できるようになりました。

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

$from = "myusername¥@mydomain";
$to = "myaddress¥@example.com";

open MAIL, "|nkf -j -mO| /usr/sbin/sendmail -f $from -t $to";

print MAIL "From: Schedule Reminder <$from>¥n";
print MAIL "Subject: Don¥'t forget to get textbook¥!¥n";
print MAIL "To: $to¥n";
print MAIL "¥n";
print MAIL "今日はNHK語学講座テキストの発売日です。¥n";
print MAIL "忘れず書店へ行って購入するように!¥n";

close MAIL;
---------------------------------------------------------

で、目的のものは得られたのこれで良しと言えばそうなのですが、
当初の自分がやろうとしていた >>400 の書式とは違うので気持
ちが悪いというか、これではまったく勉強になりません。
0410400,405,409NGNG
## 「改行が多すぎる」だの、それで改行を詰めたら
## 今度は「長すぎる行がある」だの言われて跳ねら
れるので分割しました。

確かに、今回の丸写しスクリプトは、書いてみればまぁなんとな
く納得は行くのですが、しかしいつまでも丸写しをしている限り、
ちょっとした応用も利きそうにありません。

>>400 のダメな例では、まずbodyが挿入されないのはダメダメと
して、次に、-s $subject の状態だと、>>400 の例に挙げている
ような定型 subject では、途中にスペースがあるので、最低でも
-s ¥"$subject¥" のようにしてやらねばならないこと、までは分か
りました。

しかし >>400 を叩き台にした場合、文字コードを変換するプロセス
をどこに噛ませてやればいいのかが分かりませんでした。そもそも
>>400 の書式では、どのように修正してもまったく見込みがないの
でしょうか?
0411デフォルトの名無しさんNGNG
>>410
man sendmail
0412デフォルトの名無しさんNGNG
自作のCGIを、ソース改変できない状態(二次使用できない状態)にしてサーバーに置いておきたいのですが、
何かいい方法はないでしょうか?
0413デフォルトの名無しさんNGNG
すいません、掲示板を作ったんですがどなたか
いろいろな機能を作るのを手伝ってくれませんか?
私はHTMLを勉強しているのですがperlも覚えたいと思っています
暇な時でもいいので掲示板のお手伝いをしてくれませんか?
http://windows.s56.xrea.com/ウザかったら普通にスルーしてください。
0414デフォルトの名無しさんNGNG
すいません、ageてしまいました・・・
0415デフォルトの名無しさんNGNG
CGIの話題はWebprog板へ
サイト作りの話題はWEB制作板へ
ここはPerlに関する質問や雑談などをするスレです。
0416遙皇 ◆HEHARUKAoo NGNG
int64使ってるスクリプトってperlcc通らないんですね。
Segmentation faultが出てビクーリしますた。
0417401NGNG
>>405
完全にperlの話ではありませんが乗りかかった船なので、、

> コマンドラインから mail の送信をやってみる、というような意味

まさしくその通り。

> ウチのサーバでは telnet を通さないようにしているので、

あーちとズレてますね。そー言う事じゃないんですよ。
何も考えず「smtp telnet」でググって下さい。
んで出てきたサイトを片っ端から開いて読んで下さい。
貴方のやろうとしている事の根本はソレです。
どんな事でもまずは根本を理解するのが近道ですよ。

# 全てを理解したならば、私が >>401 で書いた事もきっとわかるはず。

.
0418デフォルトの名無しさんNGNG
>>417
MAIL FROM: 408
RCPT TO: 417
DATA
こういう風に書いてあげるとよいかもですね。(わ

.
250 OK
0419デフォルトの名無しさんNGNG
みなさん、結構SMTPの生通信やってるんですね
俺も勉強せねば。メールはちょとやってみたい。
0420402NGNG
漏れのばやいは、本業がケータイ公式サイト鯖立て
その他社内鯖管理とかやってるんで
どーしても3〜5層には詳しくならざるを得ない罠






もちろん8層は苦手だ orz
0421デフォルトの名無しさんNGNG
>>412
Storable.pmを使ってデータをfreeze→ファイルに保存
freezeされたプログラムを実行する単なるローダだけをCGIで記述
0422デフォルトの名無しさんNGNG
>>421
DocumentRoot の外に置けば済むような。。。
0423デフォルトの名無しさんNGNG
$msg = "<hr>\n"
. "<div class=header>\n"
. "<span class=name>$FORM{'NAME'}</span>\n"
. "<span class=time>$time</span>\n"
. "</div>\n"
. "<div class=mesg>$FORM{'MESG'}</div>\n";

    この.の意味ってなんですか?

0424デフォルトの名無しさんNGNG
>>423
文字列を連結する演算子。Perlは型がいい加減な言語なので、数値と文字列で
加算/連結の演算子を分けないと混乱するとかしないとからしいYO。
0425デフォルトの名無しさんNGNG
>>424ありがとうございました
0426デフォルトの名無しさんNGNG
$| って出力をバッファリングしないものと本に書いてあるのですが、
何の役に立つのですか?
画面表示が速くなるだけ?
0427デフォルトの名無しさんNGNG
>>426 例題。
perl -e '$|=1;for(0..4,"\n",5..9){print;sleep 1;}' < /dev/null

非バッファリングはスループット的に見るとむしろ遅くなるが、
上記例題を見れば、どういう場面で必要かわかるだろう。
0428デフォルトの名無しさんNGNG
>>427
有り難うございます。ある問題を抱えてまして、どうやら$|=1が原因らしいと
いうところまでは分かったのですが、$|=1 の意味を正確に理解していなかった
為に質問させていただきました。あの例題で動きがよく理解出来ました。有り難
うございました。

最初の"ある問題"も質問しようと思ったのですが、もう少し調べて見ようと思います。
解決できなかったらまたお願いします(>_<)
0429デフォルトの名無しさんNGNG
以下のようにcgiで動かしているのですが、httpヘッダがそのまま表示
されてしまいます。

#!/usr/bin/perl
$| = 1;
print "Content-type: text/html\n";
print "Pragma: no-cache\n\n";
print "<html>test</html>";

-----------------------------------
tcpをダンプしたらこんな感じでした。ヘッダとして出しているつもりが本文となってしまっています。

HTTP/1.1 200 OK
Date: Thu, 15 Apr 2004 10:20:52 GMT
Server: Apache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=EUC-JP

18
Content-type: text/html

12
Pragma: no-cache


11
<html>test</html>
0
-----------------------------------
$| = 1; を外すと正常に動きます。何故なのでしょうか?
(apache2です)
0430デフォルトの名無しさんNGNG
>429

Transfer-Encoding: chunked

を調べろ。 君の悩みは HTTP RFCの範囲だ。
0431デフォルトの名無しさんNGNG
>>429
chunked coding 云々の話になるので
Webprog板へ逝け、と云いたいトコロなのだが

とりあえず $| = 1; を、ヘッダを吐いた直後にはさんでごらん?
0432デフォルトの名無しさんNGNG
というか \n\n じゃなくて \r\n\r\n だろ
0433デフォルトの名無しさんNGNG
>>432
\x0D\x0A\x0D\x0A だろ
0434デフォルトの名無しさんNGNG
open(OUT, ">file.txt");
print OUT "hoge";
flock(OUT, 2);
close(OUT);
これでhoge書き込み中の、読み書きは防げますか?(全てのプログラムにflock使用してます。)
0435デフォルトの名無しさんNGNG
ちょと待ってくれ。>>429 は
「18 や 12 や 11 や 0 みたいな謎の数字は何?」と訊いているんじゃなくて
「>>429 が HTTP ヘッダのつもりで出力したの文字列が,メッセージボディの方に
 来ちゃったのはなんで?」と訊いているように見えるけど,
それでもやっぱりチャンク形式エンコーディングの話題になるの?

つーかごめん。漏れも >>429 の悩みには答えられないわけだが。
0436デフォルトの名無しさんNGNG
>>435
そんなことより>>434に答えてくれませんか?
0437デフォルトの名無しさんNGNG
防げません
0438デフォルトの名無しさんNGNG
>435
apache2は知らんけど ネットワーク関係のプログラムで安易に \n を使うのはやめれ。
\nが指すものは環境によって変わる。 http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
HTTPメッセージヘッダの改行は \n ではなくて \x0d\x0a (CRLF) だ。
もしこれで直るならHTTPの範囲だし、apache関係のスレで調べた方がいいよ
0439デフォルトの名無しさんNGNG
このスレで>>1を読んでから質問する人いるのかな
0440デフォルトの名無しさんNGNG
open(OUT, ">file.txt");
print OUT "hoge";
flock(OUT, 2);
close(OUT);
は
open(OUT, ">file.txt");
flock(OUT, 2);
print OUT "hoge";
close(OUT);
と同様。
0441デフォルトの名無しさんNGNG
>>430-433,435,438,435,439
有り難うございます。
実際私が疑問だったのは、$|=1; を書くのと書かないのとでなぜ
こんな違いが出るのかが知りたかったのですが、apacheの機能と
関係があるようですね。
気軽に$|=1;とするのは止めるようにします。何故こうなるのか
をご存知の方がいないかなと思ったのですが。

あと、純粋なperlを聞くこの板でcgiの事を聞いてしまい失礼しました。
0442デフォルトの名無しさんNGNG
441はここの住人に失望したようだ。
0443デフォルトの名無しさんNGNG
つーかみんな、誰が誰だか混乱してるな(;´Д`)
0444デフォルトの名無しさんNGNG
ウチで使ってるapacheは1.3.29だけど、440のプログラムで

HTTP/1.1 200 OK
Date: Fri, 16 Apr 2004 12:01:17 GMT
Server: Apache/1.3.29 (Debian GNU/Linux) mod_fastcgi/2.4.0 DAV/1.0.3
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

11
<html>test</html>
0


という結果になる。なのでapacheのせいのような気がするんだよな。
$|=1だと各print毎にwriteシステムコールが呼ばれるが、$|=0だと
バッファされて全部が一気に一回のwriteでかかれると思うので
その辺の違いでapacheのバグでも踏んでるじゃないかと。

0445デフォルトの名無しさんNGNG
ファイルの入出力についての質問です。
sub tsu{
 $i=0;
 open(IN, "data.txt")||die"data.txtをオープンできません:$!\n";
 while($guho=<IN>){
  $xml1[$i]=$guho;
  $i+=1;
 }
 close(IN);
以下略

というようなサブルーチンを作ったのですが、Jperlで実行したところ、
data.txtをオープンできません:No such file or directory
とでてくるんですが、文法ミスでしょうか?わかりません。
あ、data.txtはちゃんとこの.plファイルのあるフォルダに存在します。
0446デフォルトの名無しさんNGNG
>>445
スペースがないのが気になる。
open IN, "data.txt" or die "data.txtをオープンできません:$!\n";

my する気がないのなら、、、
1 while push @xml1,<IN>;
0447デフォルトの名無しさんNGNG
>>446
@xml1 = <IN>;
0448デフォルトの名無しさんNGNG
プログラムに問題はないと思う、ファイルのパーミッションは?
ついでに
sub tsu {
$i = 0;
open IN,"data.txt" or die "$!\n";
while ($guho = <IN>) {
$xml1[$i] = $guho;
$i++;
}
close IN;
}
って書け、見にくい。
全角スペース使うな。
0449デフォルトの名無しさんNGNG
ここにこれ置いておきますね(AA略

&nbsp;
0450445NGNG
ありがとうございます。家のPCだとうまくうごかせました。
う〜ん、どうなってるんだ。現在調査中^^;
0451433 ◆60FZTwCTrE NGNG
>>429
ちょっと考えてみた。
$| = 1; ってのは、selectとかしてないんだったら
STDOUTのバッファリングを止める(=本来ブロックされるべき読み込み処理も、
行末などを待たず即座にreturnする)
という命令になるので、>>429の例では次のような感じか?

1.「$|=1;」した時点で、Apache側がCGIのSTDOUTをバッファしなくなり
  ソケットデータ読み込みからreturnする
2.不意にreturnしてしまい(このあたりがバグなのか?)
  Apacheはヘッダ読み込みが終わったと勘違いして、デフォルトのヘッダを出力
3.次のデータからは、本文扱いになってしまう
4.ちなみに、「18」「12」「11」と3分割されてしまうのは、print文の数による。
  1つのprint文で出力した場合は分割されないはず

間違っていたらスマソ
0452433 ◆60FZTwCTrE NGNG
すまそ、>>451の訂正
誤 ソケットデータ
正 STDOUTストリームデータ
0453デフォルトの名無しさんNGNG
>451
スレ違いだけどレスしとくな。
パイプって知ってるか?なんでCGI側の内部のバッファ動作いじるだけでapache側のreadが中断されるんだよ?
apache2で問題なのはread後のバッファ内容検査の部分だと思うが…

あと、CGIで$|をいじるってことは当然 nph- だよな?
でないとどうせapacheの子プロセスが一旦バッファするから意味ないぞ。
0454429NGNG
そのようですね。$|=1とした場合に『Transfer-Encoding: chunked』をapache
が付けるということは$|の段階でそこから本文扱いになってしまうようですね。

perlでは$|=1と$|=0で出力の方法が違うのでしょうか?
本文に 18,12,11などの数字が入るのは明らかにおかしいと思うのですが
バイナリで見るとperlがそういう文字列を出力しているのでしょうね。
apacheのバグかもしれませんが。
trussを使えばどういう出力をしているのか分かりそうですが、ちょっと
私には敷居が高いですね...。
0455429NGNG
上は >>451への返事です
0456デフォルトの名無しさんNGNG
Apacheのバグのわけねーだろ。
一体何人が使ってると思ってるんだ?
まず自分の設定ミスを疑えよ。
0457デフォルトの名無しさんNGNG
>>454
数字が入るのがおかしいと認識しているのならそれは間違い。
あらかじめ長さがわからないCGIの出力をchunkedで送るのは
HTTP/1.1を使う限りよくあることだ。chunkedエンコーディング
がよくわからなければ、HTTP1.1のRFCを読むとかしろ。
ttp://www.cresc.co.jp/tech/java/Servlet_Tutorial/Lesson_38.htm
あたりも例があってわかりやすいかな?

問題はCGIの出力のヘッダ部にあたるところがそう解釈されずに
本文としてclientに送られてしまっていることだと思う。
0458429NGNG
あの文字は次行のバイト数を表してるんですかね?
>>457で教えてもらったページで勉強します。

ということで終了。有り難うございました。助かりました。
perl板でこんな感じになってしまってすいません。

最後に一言。
>>453 でnph-じゃないと$|=1の意味がないって書いてあるけどそんな
ことはない。この場合apacheはバッファしない。確かにあのサンプル
だけみて意味がないと言ったなら理解はできるが。
>>1に従ってこれ以上は書きません。
0459デフォルトの名無しさんNGNG
このスレ、一気に殺伐になったな。
0460デフォルトの名無しさんNGNG
殺伐は珍しくないと思うが。。。
0461デフォルトの名無しさんNGNG
いや、漏れにはためになったが
0462デフォルトの名無しさんNGNG
そんあことより>>1よ聞いてくれよ。この前Perlについての質問箱に行ったんです、Perl質。
(中略)
要するに、Perlユーザは絶望的に親切なのだ。
0463デフォルトの名無しさんNGNG
いや、漏れにはよくわからなかったが
0464デフォルトの名無しさんNGNG
このスレの半分は質問レスで、
残り半分は病的に親切な解答レスでできています。
0465デフォルトの名無しさんNGNG
Apache::Session::MySQLについての質問なのですが
生成したセッションIDは前もって作っておいたsessionsテーブルのid(1番目のフィールド)に
保存されますが、そのセッションIDと対になるセッション変数の内容(tieしたハッシュの内容)は
a_session(2番目のフィールド)にバイナリの形で保存されているという解釈で良いんでしょうか?

一旦生成したセッションをdeleteで削除すると、該当するレコードが消えるというのと

tie %session, 'Apache::Session::MySQL', セッションID,\%attr;
tied(%session)->delete;
my $id = $session{visa_number};

の順番に処理するとセッションの情報は消えても%sessionの中身は消えないのは分かったのですが
(最初セッションを消したから、その時に%sessionも初期化されなおすのかと思い込んでました)
deleteせずに直接該当のレコードを削除したらセッションIDでtie出来なくなったので
a_sessionに情報が保存されてるのかと思ったのですが、それで良いんでしょうか?

宜しくお願いします。
0466デフォルトの名無しさんNGNG
>>1 読もうな
0467デフォルトの名無しさんNGNG
>>466
CGIというよりモジュールの使い方だからここでOKかと思ったのですが
板違いだったら申し訳ありませんでした。
0468デフォルトの名無しさんNGNG
>>465
まー、WebProg には↓というスレがあるんでそっちの方が適任かもね。
Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/

で、せっかくソースも提供されてるんだから、素直にソース嫁。
使ったことないがさくっとソース眺めたところではそのようだ。
シリアライズにはデフォルトでは Storable を使ってる。
そして、なぜ実装の詳細が知りたいのかが気になる。
0469465NGNG
>>468
そうですね、ソース読むべきでした。
ごめんなさい。

DBのデータに結びついているセッションのデータが別の場所にあって
deleteを使わずに直接レコードを消してしまったら、それが消えずに残っちゃうのかな?
と思っての質問でした。
・・・やはりソース読むべきでした、この内容なら。
申し訳ありませんでした。
0470デフォルトの名無しさんNGNG
Perlも日本語使えたら結構便利なんだけどね〜
一々convertするの面倒だよ
会社の中にアスキーコードしか使わない奴なんて何人いるんだろ?
0471デフォルトの名無しさんNGNG
>>470
どの部分の日本語のことだゴルァ

use encoding であまり困ってなかったりして。
0472デフォルトの名無しさんNGNG
確かに会社だと平気でファイル名やディレクトリ名に
マルチバイト文字使う人いるよね
0473デフォルトの名無しさんNGNG
>>472
WindowsXP日本語版はOSが使ってますが
0474デフォルトの名無しさんNGNG
だからといって「デスクトップ」と半角カナもいやだ
0475デフォルトの名無しさんNGNG
半角カナはマルチバイトではないんだが
0476デフォルトの名無しさんNGNG
質問です。
正規表現なのかforeachで処理するのかできないのかよくわからないのですが
たとえば 長い文字列の中で「<(xxxx)>」という文字列に複数一致させて
$1を用いてif文などの処理を1つづつ行うことは可能なのでしょうか?
0477デフォルトの名無しさんNGNG
>>476
for (/<(xxxx)>/g) { $1 }
0478デフォルトの名無しさんNGNG
>>476
m//演算子のgオプション

% perl -e '$a="gaga hoge"; while ($a =~ /(\S+)/g) {print $1,"\n"}'
gaga
hoge
0479デフォルトの名無しさんNGNG
Perlのようなもの
0480デフォルトの名無しさんNGNG
ファイルに対して $(<FH>)[0] や $#(<FH>) のような事をするにはどうすれば良いですか?
ファイルを配列に読み込まずに、本物の配列のように扱いたいのです。
0481デフォルトの名無しさんNGNG
>>480
tie して DB_File した方が楽かもねぇ。。。
0482デフォルトの名無しさんNGNG
>>480
けっきょくファイルを読んでくることに変わりはないし、
Perl(に限らず、ふつうのファイルシステム)は
可変長テキストのランダムアクセスには弱いぞ。

インデクスだけdbmで組んでみれば?
たぶん>>480は、数百万行規模のファイルを読ませたいと
想像したが、いかが?
0483デフォルトの名無しさんNGNG
いえそんな大層なものではなく、読み込むファイル自体は千行程度のCSVです。
で、それの特定の要素でソートするために今は配列に入れてやってますが、
その過程でファイル自体を完全に配列のように扱えれば楽なのに、と思ったのです。

要は、出来るだけメモリを喰わずにCSVファイルの中身をソートして
出力しようというのが動機です。
0484ひよこ名無しさんNGNG
ちょっと前にPerlでプログラムを作りました。
掲示板のようなプログラムです。
そのPerlで記述した文法の中で、文字化け対策を行っていました。
テストサーバでは良くある文字化けリストの文字を打っても
文字化けが起こりませんでした。
でも本番用のサーバでは良くある文字化けを打つと文字化けが
起こってしまいました。
これはサーバの環境が違うからでしょうか?
0485482NGNG
>>483
現在のPerlでは、そのような機能は実装されてないし、
CSVは一見固定長に感じるだろうがファイルシステムから見れば
可変長テキストデータだから、けっきょく全行読み込んでこないと
行を切り出すことすらママならないのだ。

@a = <FH>; で全行取ってこれるだけでもありがたいと思おう。

>>484 WebProg ニイケ (ぴゅう太風)
0486デフォルトの名無しさんNGNG
Perl 5.8.4 release age

メンテナンスリリースなんでそんなには変わってないが、個人的にはこれが嬉しい

・In place sort optimised (eg @a = sort @a)
0487デフォルトの名無しさんNGNG
>>478
ありがとうございました! そういう書き方ができるのに
気づきませんでした。いままでSplitで分割してました…。
0488デフォルトの名無しさんNGNG
>>483
環境によるだろうが、千行程度なら気にせずメモリに読み込んで構わないんじゃないか?
たかだか数十〜数百KBだし。
で、ファイルが非常に大きくてメモリに全部読み込めないとか、メモリをできるだけ節約するなら、
既に出ているインデックス案か、分割して普通にソート後、マージソートでいいんじゃないだろうか。
0489デフォルトの名無しさんNGNG
すみません、よろしければ教えてください。
WindowsXPでJperl(5.005_03)を使用しております。

ミリ秒単位を表示したいのですが、localtaimでは秒までしか取得できません。
ぐぐってみたところ
Win32::Timer
で可能と書いてあったのですが、よくわかりませんでした・・・
申し訳ないですが、どなたか教えてくださいませ。
よろしく御願いします。
0490デフォルトの名無しさんNGNG
Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/
0491デフォルトの名無しさんNGNG
>>477-478
これらの文って、
検索した結果を全部配列に入れた後にforによるループが始まるの?
それとも、検索して引っかかる毎にブロックの中が評価されてるの?
0492デフォルトの名無しさんNGNG
>491
forはいったん全部配列に入る。 whileは正規表現の中でループ回る。
お好みでどうぞ。
0493デフォルトの名無しさんNGNG
>>480
もういないかもしれないが、Tie::File というモジュール使えば配列通して行ごとにファイル内容を
扱えるようだ。
ttp://search.cpan.org/~mjd/Tie-File-0.96/lib/Tie/File.pm
ファイル全体をメモリに置かず基本的にオフセットで管理、キャッシュも使ってるようだ。
0494デフォルトの名無しさんNGNG
>>475
マルチバイトの半角カナもあるわけだが
0495デフォルトの名無しさんNGNG
WindowsXPが使ってる半角カナは単バイトなのだが
0496デフォルトの名無しさんNGNG
>>495
たぶんUCS-2だ。もはや単バイトではなかろうて。と、脱線してみる。
0497デフォルトの名無しさんNGNG
プライベートな変数ってどういう意味ですか
0498デフォルトの名無しさんNGNG
>497

プライベート
1.パブリックの反対
2.秘密の行為を指して使う(例:プライベート・セックル)

変数
1.定数の反対
2.変な数
0499デフォルトの名無しさんNGNG
秘密の変な数ってことか。
0500デフォルトの名無しさんNGNG
オブジェクト指向を勉強できる良いWebページありませんか?
今読んでる本は、殆ど何も書いてないので・・・。
0501デフォルトの名無しさんNGNG
OOそのものを知りたければわざわざPerlで勉強することないと思うけど。
http://www.rfs.jp/sitebuilder/perl/04/02.html
0502デフォルトの名無しさんNGNG
例えば、
@hairetu = ( 123, 456, 789)
となっている配列の値をを、
%hash{'a'} %hash{'b'} %hash{'b'}
というキーになっているハッシュに値として順番に入れるには
どういう方法をとるのが一番やはいですか?
初心者の私は場合わけして入れるしか思いつかないのです。
お願いします。
0503デフォルトの名無しさんNGNG
すいませんs/やはい/はやい/です
0504デフォルトの名無しさんNGNG
たびたびスイマセンあほな質問しました。
すぐに思いつきました。
酒飲んでると駄目ですね。
0505デフォルトの名無しさんNGNG
>502
解決したようだが一応。
上の質問の書き方だと何がやりたいのかよくわからない。特に
>@hairetu = ( 123, 456, 789)
>%hash{'a'} %hash{'b'} %hash{'b'}
の対応付け。なんで a, b, b なのか。
ついでに $hash{a} なんじゃないの?とか。
0506デフォルトの名無しさんNGNG
@k=qw( a b c);for(0..$#hairetu){ $hash{$k[$_]}=$hairetu[$_]}
0507デフォルトの名無しさんNGNG
%hash{'a'}というのは$hash{'a'}だよね?
まとめて入れるなら
@hash{ qw/a b c/} = @hairetu;
とか?
0508491NGNG
>>492
おお、forとwhileで違いがあるんですか。
whileの方が使い勝手よさそうですね。
0509デフォルトの名無しさんNGNG
昨日>>502を書き込んだものです。
誤表記等、今書きこみるとぐだぐだですね。
みなさんのおっしゃるとおりです。すみません>>505

これからは飲酒しての質問はしない様にします。

>>506,507ありがとうございます。
0510デフォルトの名無しさんNGNG
Perlをインスコしてコマンドプロンプトに
ppm、install time-hires、install io-zlib、install win32-api、install http-lite
と入力していくんですが、
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
C:\Documents and Settings\○○ ○○>ppm
PPM - Programmer's Package Manager version 3.1.
Copyright (c) 2001 ActiveState SRL. All Rights Reserved.

Entering interactive shell. Using Term::ReadLine::Stub as readline library.

Type 'help' to get started.

ppm> install time-hires
Cannot chdir back to C:/Documents and Settings/○○ ・○: No such file or direc
tory at C:/Perl/lib/FindBin.pm line 182
BEGIN failed--compilation aborted at C:/Perl/lib/FindBin.pm line 188.
Compilation failed in require at C:\Perl\site\lib\ppm-conf\ppminst.bat line 16.
BEGIN failed--compilation aborted at C:\Perl\site\lib\ppm-conf\ppminst.bat line
16.
Error: connect: Unknown error

C:\Documents and Settings\○○ ○○>install io-zlib
'install' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
0511デフォルトの名無しさんNGNG
と出てしまい実行できません。
再起動、再インスコを何度も繰り返してみたのですが実行できません。
なぜできないのか指導お願いします;;

環境
win xp H.E
CPU セレロン1.4G
インスコ ActivePerl-5.8.0.806-MSWin32-x86

このスレの発見が遅れてしまいマルチっぽくなってます。
向こうでも謝罪はしておりますが申し訳ありません。
0512510NGNG
と出てしまい実行できません。
再起動、再インスコを何度も繰り返してみたのですが実行できません。
なぜできないのか指導お願いします;;

環境
win xp H.E
CPU セレロン1.4G
インスコ ActivePerl-5.8.0.806-MSWin32-x86

このスレの発見が遅れてしまいマルチっぽくなってます。
向こうでも謝罪はしておりますが申し訳ありません。
0513遙皇 ◆HEHARUKAoo NGNG
>>512
ppmの前にcd\って打ってみたら?
0514デフォルトの名無しさんNGNG
Administratorでインスコしてごらん?

ユーザ名がマルチバイト故にハマってる症状にみえる。
0515デフォルトの名無しさんNGNG
初めて一週間の超初心者です。質問させてください。
名前一覧表(name.txt)があって
ミケ
ポチ
ハラス
と、中身が記述されています。個別にファイルも作ってあります。(ミケ.txt、ポチ.txt)
で名前から選んで削除するときに,name.txtの内容をリストに表示して選択して、
そのデータが $name として渡ります
unlink("$name.txt"); で個別のファイルは消えるんですが、その次に
name.txtの中身の$nameに該当する部分も削除したいのですが何かいい方法はありますでしょうか?
name.txtを1行ずつ読み込み,$nameにあたる行がきたら別のテキストに格納するか飛ばすかして,
もとのルーチンに戻そうと考えたのですが,思い通りにいきません。
(name.txtの中身が空白になるとか、途中までしか記述しないとか)
何か考え方が間違ってるのでしょうか?
if (open(IN, "name.txt")) {
while (<IN>) {
$dname .=$_;
chop;
if ($_ eq $name) {} ←ここをどうしたらいいのか?
}
close(IN);
}

どなたか答えていただけないでしょうか?お願いします。
0516デフォルトの名無しさんNGNG
>>515
name.txt を全部読んで削除するしかない。

以下、もし>>515がCGIで使われてる場合のアドバイス。
読む->変更->書く のような動作はファイルをロックしないとヒドい目に遭う。
ロック云々に関してはWebprog板にスレ立ってたようなので割愛。

ロックが嫌いならば、
「同じ長さの特別な記号で書きつぶす」
という手法も使えなくもない。
0517510NGNG
>>513
インスコ完了しました。
ありがとうございます。
>>514
まだ試していませんがまたおかしいようでしたら試すため
知識の1つにさせて頂きます。

ありがとうございました。
0518デフォルトの名無しさんNGNG
CGIから入った新参者ですけど、
CGI以外にどんな用途があるんでしょうか?
元々UNIX上でテキスト処理に使われていたらしいですが・・・
0519デフォルトの名無しさんNGNG
>>518
UNIX上でテキスト処理に使っておりますが、何か?
0520デフォルトの名無しさんNGNG
定期的に FTP接続でとあるファイルを取得するのに使っていますが、何か?
0521でふぉな名無しさんNGNG
とあるニュースサイトから記事を取得して自分の携帯に
自動メール配信していますが何か?
0522デフォルトの名無しさんNGNG
http proxyに使ってますが何か?
0523デフォルトの名無しさんNGNG
ハッキングに使ってますが何か?
0524デフォルトの名無しさんNGNG
量子計算に使ってますが何か?
0525デフォルトの名無しさんNGNG
Perl内蔵(ちうかActivePerlリンク)の2chブラウザ作ってますが何か?
0526デフォルトの名無しさんNGNG
Perlスクリプト作成補助ツールとして使っていますが何か?
0527デフォルトの名無しさんNGNG
とあるOSのカーネルモードに組み込もうとしてヤケドしましたが何か?



*このヌレは藻前らがPerl自慢をするヌレになりますた*
      *ごゆっくりお楽しみください*
0528デフォルトの名無しさんNGNG
遺伝子解析に使ってますが何か?
0529デフォルトの名無しさんNGNG
「そうかラムちゃんのTシャツを・・・」と思い出しながらしてますが何か?
0530デフォルトの名無しさんNGNG
何をですか?
0531デフォルトの名無しさんNGNG
質問させて下さい。
solarisサーバ上で動くソケット通信プログラムを作っています。
やる事は、あるポートで受けたデータを少し加工してファイルに書き込むだけです。
inetdで起動させようとしているのですが、ファイルが作成されません。
実際はデータ加工の処理が入るのですが大体の処理は以下のようなかんじです。

$|=1; # バッファリングしない
while (<STDIN>){
open(FILE,">> log.txt");
print FILE "$_\n";
close(FILE);
}

print文を、
print FILE "abcde\n";
等と変えてみたのですがダメでした。
クライアントとからは、サーバプログラムをinetdに登録する前は接続エラー(当然ですが)となり、
inetd登録後は接続エラーにならないので一応起動されてはいるようなのですが・・・。
inetdを使わずソケットを作成すればうまく行くのですが、これだとコンソールからの起動となり
大前提がコンソールを表示してはいけないとなっているので苦戦中です。
inetd使用時のファイルに扱い方に問題があるのでしょうか?
またinetdを使用しなくても、コンソールを表示せずにプログラムを起動する方法が
ありましたら教えて頂けないでしょうか?よろしくお願いします。
0532デフォルトの名無しさんNGNG
デーモン
0533デフォルトの名無しさんNGNG
>>531
Proc::Daemon はどうですか?
もしくはDaemontoolsで起動するとか。
0534515NGNG
>>>516
>name.txt を全部読んで削除するしかない。

すいませんが全く意味がわかりません。
name.txtを1行ずつ読み込んで削除するのはダメだということですか?
なんかすごい頭の悪い質問の仕方をしてるみたいで申し訳ないんですが・・・
0535デフォルトの名無しさんNGNG
>>534
ファイルシステムというのは、文字単位で挿入/削除するのに向いてないので、
テキストエディタでやっている「1行削除」のような簡単なことではないのだよ。
現にテキストエディタのようなものでも、先頭の1行を削除したら、
(エディタのメモリ上にある)ファイルイメージを全部元ファイルに上書きしてる。

>name.txt を全部読んで削除するしかない。
これの回答だけ書いておく。

open(F, "name.txt");
@a = <F>;
close(F);

splice(@a, 5, 1); # たとえば削除

open(F, ">name.txt");
print F @a;
close(F);

もっとアトミックに更新を行う方法もあるが割愛。

「同じ長さの特別な記号で書きつぶす」 の方が楽なケースもあるが、
(削除したい行へファイルポインタを持って行き、0x09 などを殴り書きするとか)

リストに「削除マーク」を追記していくという手法もあり。
(レコードが増えたら "うんこ\n" を追記し、
 レコードが消滅したら "\tうんこ\n" などの、他とは区別できる行を追記。
 name.txt を読み込みながら、メモリ上で有効リストの再構成を行う。
 リストが長くなりすぎたらときどき掃除)
0536デフォルトの名無しさんNGNG
>>534
んの前に、ファイル管理name.txtなんか作らなければいいじゃないかね。
その name.txt の内容って、ディレクトリの情報そのものじゃん。

ディレクトリの情報から取得するようにすればファイルを unlink したら
ディレクトリの一覧からは消えるんだから・・・ええと説明めんどい。

つまり、いいたいことは name.txt は捨てて opendir() 使え。
0537デフォルトの名無しさんNGNG
>>531
log.txt というファイルが作られるディレクトリはどこか
openに失敗した時のことを考慮しているか
失敗する理由はなにが想定されるか

これらの点を検討せよ
0538デフォルトの名無しさんNGNG
$foo =~ s///;
$bar = $foo;
を
$bar = $fooを置換しその結果を返す;
のようにやりたいのですが、どうすれば良いのでしょうか。
mapやgrepを試してみましたが配列が返って来るのでダメでした……。
0539デフォルトの名無しさんNGNG
>>538
$bar = $foo;
$bar =~ s///;
0540デフォルトの名無しさんNGNG
>539
すみません書く時に間違えてました。
そちらの方を一回でやりたいのです。
0541デフォルトの名無しさんNGNG
($bar = $foo) =~ s///;
0542デフォルトの名無しさんNGNG
優先度を変えるだけで良かったのですね。
ありがとうございました。
0543デフォルトの名無しさんNGNG
自分でHoge.pmというモジュールを書いているのですが、Hoge.pmのnewで
bless {
foo => undef,
bar => undef,
}, $self;

で、new内で初期化するサブルーチンinitを呼び出して、
sub init
{
my $self = shift;
$self->{foo} = new AAA::Foo;       # Fooオブジェクトを生成
$self->{bar} = $self->{foo}->newbar(); # Foo::Barオブジェクトを生成
}
とかしようとすると、
Can't use string ("Foo") as a HASH ref while "strict refs" in use at Hoge.pm
というエラーが出ます。

実際のスクリプトでは、Hoge = Fooだったり、CPANから落として来て入れたモジュールに
Fooというモジュールがあったりして、名前が被ってるからstrictが怒ってるのかなぁと思ったのですが、
googleで調べてみると、ハードリファレンスじゃなくてシンボリックリファレンスだから
駄目なんだ、とか書かれており、よく分かりませんでした…。
どうすれば良いのでしょうか?
Perlのバージョンは5.6.1です。よろしくお願いします。
0544デフォルトの名無しさんNGNG
>>543
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlobj.html

sub new {
my $self = shift;
bless { foo => undef, bar => undef }, $self;
$self->init();

としているに 300 ペリカ。
0545デフォルトの名無しさんNGNG
>>544
とりあえずリンク先を読む前に支払いを…
ノ⌒[300ペリカ]

…読んで参ります
0546デフォルトの名無しさんNGNG
use Error qw(:try);
my @array = (1,2,3);
foreach(@array){
 try {
  throw Error();
 } catch Error with {
  next;
 };
}
これって無限ループになるのだけど、なぜ?
use Error; にしたり、ループにラベルつけると期待通り。
0547デフォルトの名無しさんNGNG
>>546
Error.pmのcatchの処理をするところでwhile(1){...}
があるので、そのループへのnextになっちまってるんだ
と思う。ラベルつけるとOKなのはそのせい。

use Error;だと期待通りってのは勘違いじゃないかと。
tryの前にprint "$_\n";いれるとわかると思うが
use Error qw(:try);のままでラベルつけたときと
全然動作違うよ。
0548546NGNG
>>547
ありがとう。 while(1) ありました。
use Error; は勘違いでした。stacktrace を始めてるみたいです。
あとでもう少しコードを追ってみるです。
# 件の問題でコケた瞬間 apache のログが数十GBに→停止。
# なかなか良いトラップでした。。。
0549デフォルトの名無しさんNGNG
いきなりサーバーで実行ってか?なかなか良いクラッカーになれるぞ。。。
0550デフォルトの名無しさんNGNG
オブジェクト指向の、メソッドの継承に関する質問なんですが、
Aというクラスと、Aを継承するBというクラスがあったとして、
Aのメソッドsay()が
sub say {
 print "I'm ";
}

Bのメソッドsay()が
sub say {
 # super.say()みたいなもの
 print "20 years old.";
}

で、$b->say();とした時に、I'm 20 years old.と表示させたいのですが、
super.say()みたいなものって、Perlではどうすればいいのでしょうか?

$b->SUPER::say();
$b->say();
とやれば、結果的には同じ結果が出るみたいですが、モジュールのカプセル化とか
そういうの考えると、あまりこういうやり方は良くないんじゃないかと思いまして…。
0551デフォルトの名無しさんNGNG
Perk/TkでScrolledウィジッドに日本語を表示すると、ウィンドゥを閉じるときに
エラーが出ます。「問題が発生したため、Perl Command Line Interpreterを
終了します。」と出力されます。プログラムは一応動くのですが、終了時にエラー
が出るのが気持ち悪いのです。

どなたか解決法をしりませんか?表示にはフォントとして"System"フォントを指定
しています。環境はWindowsXP HomeとActive Perl 5.8.0.805です。

0552デフォルトの名無しさんNGNG
>>550
SUPER::say()
0553デフォルトの名無しさんNGNG
>>550
B は A を継承しているのだから、A の事を「知って」いて構わない。

sub say {
  my $self = shift;
  $self->SUPER::say();
  print "20 years old.";
}

$b->say(); # I'm 20 years old.

use B; するスクリプト中で $b->SUPER::say(); とするのはマズいが、
子の中で親クラスのメソッドを呼んで悪い道理はあるまい。

http://perl.infoware.ne.jp/documents/perlboot.ja.html
0554デフォルトの名無しさんNGNG
>>552,553
あ、なるほど$selfからさかのぼればいいのですね。
ありがとうございました。
0555デフォルトの名無しさんNGNG
無名ハッシュや無名配列の存在意義が良くわかりません。
名前付き(?)ハッシュや配列のリファレンスでは駄目なのでしょうか。
確かに、例えばモジュール等でリファレンスが欲しい場合の手間は省けますが。
0556デフォルトの名無しさんNGNG
>>555
>確かに、例えばモジュール等でリファレンスが欲しい場合の手間は省けますが。
その理解でいいよ。

これらの神髄は、入れ子構造、Cで言う struct とか
リストを作るときに発揮される。
リファレンスはスカラが収まる場所にはほとんど格納できるから。

Perl4の頃は、配列のハッシュのようなものを実現するためには
デリミタをつけた文字列をハッシュの各エントリに .= (文字列追加)して
取り出すときに split したりとか…苦労したもんだ。

%h = ('foo', [0..2], 'bar', [4..6]); とか。
要素の参照は $h{'bar'}[2] -> 6 でできる。

リファレンスはそれ自体が型を持っているというのもポイント。
元々Perlは型が緩い言語だったが、リファレンスはけっこう型に厳しい。
そして、「何のリファレンスか」を得ることもできるので、文脈依存の処理が書きやすい。
0557デフォルトの名無しさんNGNG
>>555
リファレンスが欲しい場合に
名前付き配列/ハッシュを作ってからそのリファレンスを得る方法
でも、五割がたはまぁ、いい

でも、残りの半分は 無名配列/ハッシュ を使った方がスマートだ。
# Perlの性質上、どうしても使わなきゃダメって場合は少ないけれど
# 無名配列を使うよりも非常に複雑で無駄な手間がかかる


嘘だと思ったら、ためしにシュワルツ変換を無名配列を使わずに書いてごらん。
0558デフォルトの名無しさんNGNG
変数名考えるのがマンドクサイ時とか('A`)
0559デフォルトの名無しさんNGNG
perl2exe使ってる人いる?
wperlが指定できい(?)っぽくてDOSがウザいんだけど。。。。
ちなみに俺は金払ってません_| ̄|○
0560デフォルトの名無しさんNGNG
>>559
-gui で窓なし可。









                             コピペ
                             ただしウザイ「金払え」ダイアログが出てきた(w
                             ショートカットが実用的かも。
0561デフォルトの名無しさんNGNG
>>560
>>35
0562デフォルトの名無しさんNGNG
膨大な辞書ファイル(64Mほど)の中から、検索ワードのワードの意味を探索
して新しいファイルに書き込むプログラムを書いているんですが、探索方法
を逐次探索でやるというまでもなくものすごい時間がかかってしまいます。
こういうときはどのような探索方法をどのようにして実現すればよいでしょうか?
なにか常套手段などありますでしょうか?

ちなみに辞書ファイルはアルファベット順になっており、一行の形式はcsvです。
"単語","意味1","意味2",・・・
0563デフォルトの名無しさんNGNG
使ってるよー
コンテキストメニューに自作のツール登録してる
0564デフォルトの名無しさんNGNG
>>563は>>559に対してです^^;

>>562
妥当な線でインデックスを作成しとくとか
もしくはアルファベットごとに辞書ファイルを分けちゃうとか
0565デフォルトの名無しさんNGNG
>>562
ちみのやりたいことは、perl dbm でぐぐると解決するものと思われ

64Mの元ファイルを処理するのが1度でいいのなら、
もっと手抜きできる方法はいくらでもある。
0566562NGNG
>>564,565
ありがとうございますた。
とりあえずがんばってみます。
0567デフォルトの名無しさんNGNG
>>562
Search::Dictでいけるかも
0568デフォルトの名無しさんNGNG
あるオブジェクトManagerの中で、別のオブジェクト(子孫とかではない)Memberを大量に管理したいのですが、
何か比較的かしこい方法はありますでしょうか。
Memberは、それぞれユニークなIDを持っています。のでハッシュを使うのが筋だとは思うのですが、
Managerで$bless {member => \%member}, $pkg;
で、$self->{member}->{'ID'} = new Member();
とかやるのも、あまり美しくない気がして…。
0569デフォルトの名無しさんNGNG
「大きいファイルはインデックスを作っておく」というのが良くわかりません。
どうやって作るのでしょうか。
0570デフォルトの名無しさんNGNG
>>569
意味がわからないの?やり方がわからないの?
どっち?
0571デフォルトの名無しさんNGNG
両方といえば両方です。

漠然と、例えば行頭の位置を index() で検索して
別のファイルに記録して置いたりするのかな等とは思ったのですが、
でも内容が変わったらその度に作り直さないと駄目な気がして、
書き込みが多い場合は却って負荷が大きくなるのではないかと思ったのです。

で、もしかしたらこの考え方は間違いで別の良い方法が有るのかと思い、
そうであればやり方が思いつかないのでご教授願えたらと。
0572デフォルトの名無しさんNGNG
>>571
ディスクの容量に制限がなけりゃDB_FileかGDBM_Fileを使って
HASHにするのが一番速い。
>>567 の Search::Dictは見たのか?
Search::Dictは2分探索だがこれを補完探索に書き換えれば
もっと速くなるだろう。
0573デフォルトの名無しさんNGNG
Serch::Dictについてはログを良く読んでいませんでした。
これから少し試してみます。
0574デフォルトの名無しさんNGNG
>>574
いっぱい試せ。
0575デフォルトの名無しさんNGNG
モジュールあるならモジュール使おう
0576デフォルトの名無しさんNGNG
>574
自戒の意味が篭められているように見受けられました。
0577デフォルトの名無しさんNGNG
オライリー以外でまったくのPerl初学者に薦める本はなんですか?
>>4のEffective Perlは初学者向けじゃない?
0578デフォルトの名無しさんNGNG
Effective Perlは
Perlはまったく初学者だけど他の言語ならプログラミングできるよ
つうひとにはお薦めできると思う。
0579577NGNG
Javaしか経験ないのだけれど
じゃじゃじゃじゃあ、effective perlかってみます。
サンクス。
0580デフォルトの名無しさんNGNG
pure perlのコードでSegmentation Faultを起こすことはできますか?
0581デフォルトの名無しさんNGNG
>>580
>>149
0582デフォルトの名無しさんNGNG
>>580
perl -e 'kill(11,$$)'
0583デフォルトの名無しさんNGNG
>>578
Effective Perlは
他の言語の経験があって、「飲み込みの速い奴」ならお勧めできるな

なんでオライリーを避けるかよく分からんが
ラマ本より優れた入門書はないと思うけどな
0584デフォルトの名無しさんNGNG
packageで定義された変数やら関数やらの一覧を
取る方法ってありませんでしたっけ?

例えば、main で定義された関数やら変数やらの一覧とる方法
0585デフォルトの名無しさんNGNG
>>584

%main:: とか、package hoge; なら %hoge:: とか
0586デフォルトの名無しさんNGNG
ふと mod_perl 上で undef %main:: してみたらサーバリスタートかかったハァハァ
0587デフォルトの名無しさんNGNG
>>586
お前勇気あるな。
そういうのって心理的抵抗があって無意識のうちに避けるものだが。
0588デフォルトの名無しさんNGNG
rm -rf /に近いものあるな。
0589デフォルトの名無しさんNGNG
>>585
キタ━!!ありがとう。
一生懸命 %{main} こうやっててできなかった…。
::つければいいのね。
0590デフォルトの名無しさんNGNG
>>586
敬意を込めてバカ勇者と呼んでいいか?
undefするとは思いつかなかった、俺もやってみるよ
0591デフォルトの名無しさんNGNG
↑テロリスト
0592デフォルトの名無しさんNGNG
↑テロリスト
0593デフォルトの名無しさんNGNG
↑ロリスト
0594デフォルトの名無しさんNGNG
↑リスト
0595デフォルトの名無しさんNGNG
まあどうせ mod_perl (registry)使える鯖なんて大抵自分専用にレンタルしてるとこか
ローカル鯖だろうから良いんじゃない(例外もあるけど)。
ウチはWin2K+Apache2+mod_perl2のローカル鯖で>586に載せた事をやった。

元々は途中でパッケージ名書き換えたときに書き換え前のパッケージ名が
テーブルに登録されたままなのを発見して、
面倒だから undef() すれば初期化されるかなとか思ってやってみたら失敗したという話(´∀`)アハハ
0596デフォルトの名無しさんNGNG
↑
(´∀`)アハハ
0597デフォルトの名無しさんNGNG
IRCクライアントを弄ってみてるのですが、Net::IRCのイベントループを止めて、
サーバとの接続を切って、Net::IRC::Connectionオブジェクトと
Net::IRCオブジェクトを捨てるにはどうすればいいのでしょうか。
モジュールのソースも読んだのですが、Net::IRC::Connection::quit()で
サーバとの接続を切る(と思われる)くらいの事しかわかりませんでした…。
標準入力からコマンドを入れて、安全に終了させたいのですが…。
0598デフォルトの名無しさんNGNG
Windowsで初めてCPAN使ってモジュールインストールしたらルートに「.CPAN」なるフォルダが生成されました。
これは消してもかまいませんか?
0599遙皇 ◆HEHARUKAoo NGNG
>>598
キャッシュだから消してもいいと思うけど
毎回初期設定からやりなおしになったりすると思う
0600デフォルトの名無しさんNGNG
ルートに置かれるのはなんか気持ち悪いよな
0601デフォルトの名無しさんNGNG
っていうか場所指定出来たような。
0602デフォルトの名無しさんNGNG
っていうか普通は$HOME/.cpan/なのでは?
0603デフォルトの名無しさんNGNG
$honbun = "aaabbbcccdddeeefffコーヒー";
$honbun =~ s/$FORM{'text'}/<font style=\"background:#00ffff\">$FORM{'text'}<\/font>/g;
print "本文=$honbun";
というプログラムで本文を置換したいんですけどフォームからaaaなどを入力してもエラーにはならないけど
コーヒーと入力するとエラーになってしまいます。
どうしたらコーヒーと入力してもエラーがでないんでしょうか?
0604デフォルトの名無しさんNGNG
>>603
CGI/Perlの質問はWebprogで。

「ー」=0x815B ゆえに起こってる問題。'[' = 0x5B.
完璧な答えを書くのマンドクサので

quotemeta
\Q

あたりのキーワードで、Perlマニュアル調べれ。
0605デフォルトの名無しさんNGNG
コーヒー
ヤッターマン
ライター

以上の3つの単語を正しい順に並べなさい。
0606デフォルトの名無しさんNGNG
おこし
につけ
たきび
○○○
0607デフォルトの名無しさんNGNG
だんご
0608597NGNG
こちらもwebprog板で聞いた方が良い内容なのでしょうか?
毎回Ctrl+cで止めるのはきついです…。
0609デフォルトの名無しさんNGNG
>>608
start() でNet::IRCにイベントループさせるのではなく
do_one_loop() を使って自前でループさせれば?
0610デフォルトの名無しさんNGNG
>>609
つまりstart()を止めるメソッドとかは実装されていないということですか…。
わかりました。do_one_loop()使ってみます。
ありがとうございました。
0611デフォルトの名無しさんNGNG
>>610
つーか、start() の中身が

while(1){
$self->do_one_loop();
}

こんな感じ
0612デフォルトの名無しさんNGNG
>>610
Net::IRCのドキュメント読まずに書くけど

start()メソッドの実装は
sub start {
my $self = shift;

while (1) {
$self->do_one_loop();
}
}
なので、自前でループしても全然問題ないみたいね。
0613デフォルトの名無しさんNGNG
すみません、ちょっと力を貸してください。

現在、掲示板を改造しているのですが
名前につけるトリップの他にMACアドレスで生成する
トリップの機能をつけたいのですが

どのようにMACアドレスを取得すればよろしいでしょうか。

イメージはこんな感じです。

名前 山田太郎◆KdCIエD  ◎CDgfg87Dg2

◆は名前のトリップ     ← 使うか使わないかは自由
◎はMACアドレストリップ ← 自動的に付く
0614デフォルトの名無しさんNGNG
>>613
IP アドレスではなく MAC アドレス?
0615デフォルトの名無しさんNGNG
MACアドレスの意味わかってないだろ
0616デフォルトの名無しさんNGNG
インターネット掲示板じゃなくてイーサネット掲示板とは珍しいな。
0617デフォルトの名無しさんNGNG
ていうかWebprogに逝く前に回線切って首吊って(tbs
0618デフォルトの名無しさんNGNG
MACアドレスでトリップ…
凄い、画期的だ。

ぜひともそれが実現するまで2chに来ないでほしい。
自鯖なら実現出来るよ。

いいか、実現するまでくるなよ。
0619デフォルトの名無しさんNGNG
MACアドレスをCGIに送ればいいだけでしょ。
0620デフォルトの名無しさんNGNG
どんなAPIがあるかは調べてないから分からないけど
ipconfig.exe /all
でPhysical Addressを取り出せば取り敢えずできる。
標準出力をつないで取れ
0621デフォルトの名無しさんNGNG
>>619-620
誰が送るんだ?
詐称出来る情報に意味あるか、ヴォケ
ネットワーク板にでも行ってこい
0622デフォルトの名無しさんNGNG
ネタをネタと見抜けない人に(2chで釣るのは)難しい
0623デフォルトの名無しさんNGNG
>>621
送信したデータがどういう経路をたどるか分かってます?
そんなこと言ったら、全ての上りデータに意味がなくなってしまいますが。
ネットワークの仕組みを勉強してみては?
0624デフォルトの名無しさんNGNG
>>623
へぇ……
IP アドレス詐称して TCP で通信するのはかなり難しいが
0625デフォルトの名無しさんNGNG
>623
ヴァカ発見
マジワロタage
0626デフォルトの名無しさんNGNG
超初心者でスマソ 座標を指してある数字が4つある場合左からXYXYでいいんでしょうか? あと座標0,0は画面左上であってますか?
0627デフォルトの名無しさんNGNG
>>626
使ってる座標系を明示しろ。極座標系なら r, θ, φ, t かもしれんし、
同次座標系なら x, y, z, w だろうし。

> あと座標0,0は画面左上であってますか?
その座標系の定義による。
0628デフォルトの名無しさんNGNG
>>623
>ネットワークの仕組みを勉強してみては?
ワロタ、お前がしろよ

0629626NGNG
>>627
???
自分のプログラミングレベルが低すぎるのでLANケーブルで首つっt(ry
0630デフォルトの名無しさんNGNG
ただ単に矩形領域の指定なのではないかと推測
それならば、普通は (x1, y1, x2, y2) だわな
0631デフォルトの名無しさんNGNG
>>623
PerlスレなんだからPerl(CGI動作上)で取得する方法例を明示して下さいよ。
ののしり合いはそれからにしてください。

>>629
座標系はいくつかの表現方法があって数学的素養です。
どういう座標系かは扱うライブラリ等に依存しますので一般論はありません。
その世界でどう定義しているかが話の出発点です。
0632デフォルトの名無しさんNGNG
>>631
>Perl(CGI動作上)で取得する方法例を明示して下さいよ
サーバ側から取れるわけないでしょ。バカですか?
0633デフォルトの名無しさんNGNG
>>632
オチツケ!煽る方間違ってるぞ!
0634デフォルトの名無しさんNGNG
>>631
方法1:MACアドレスを送るようIEを改造する
方法2:MACアドレスを送るブラウザを自作
方法3:MACアドレスを送るプロ棋士を自作して自分のマシン設置。IEからそのプロき(ry
方法4:諦める
方法5:泣く
方法6:逆切れする
0635デフォルトの名無しさんNGNG
>>633
いや、間違ってるつもりはないが・・・?
0636634NGNG
ああ、IEだけじゃなくてIISとかApacheも改造する必要があるかな?
0637デフォルトの名無しさんNGNG
>>634
ちゃうちゃう。俺がいいたかったのは、元の質問ではクライアントが限定されてないでしょってこと。
だからクライアントでMACアドレス取って送ればええやんって言ったの。
そしたら何か勘違い君が「Perl(CGI動作上)で取得する方法例を明示して下さいよ」とか自身満々に言ってるわけ。
0638デフォルトの名無しさんNGNG
>>615
>>618
>>621
>>624
>>625
>>628
>>631
残念でしたね(プ

まぁMACアドレスも偽装できるんで>>621の2行目には同意。
0639デフォルトの名無しさんNGNG
>>637
まあたしかに。サーバ上で動くPerlだけでは実現不可能だ罠
0640デフォルトの名無しさんNGNG
そして世の中には、PPPのようなMACアドレスを持たないインタフェイスも
あることを知って、くずれおちるのであった orz
0641デフォルトの名無しさんNGNG
もひとつあるな。
ルータの内側のセグメントじゃ、MACアドレス衝突さえしなきゃいいので
MACアドレス偽装され放題で、謝罪と賠償を要求されるニダ...チォブ
0642デフォルトの名無しさんNGNG
>>625
>>628
謝罪はまだですか?こっちはひどく傷ついているんですが。
ごめんなさいの一言も言えないぐらい恥ずかしいですか、そうですか。
0643デフォルトの名無しさんNGNG
WebProgの初心者スレかと思った。
0644デフォルトの名無しさんNGNG
>>638
> まぁMACアドレスも偽装できるんで

て言うか、IP アドレス持ってても MAC アドレス持ってないこともあるんだから、どんな方法使ってもダメだよ。
0645644NGNG
>>640 で外出だった...。
0646デフォルトの名無しさんNGNG
MACアドレス偽装出来るかどうかなんてことじゃなく、
ネットワークそのものに対する知識でヴァカにされてるのに
マジウケルw
0647デフォルトの名無しさんNGNG
お前ら、レイヤーって言葉知ってるか?(w
0648デフォルトの名無しさんNGNG
>>646
で、どこがおかしいと思う?言えないの?ふーん。
0649デフォルトの名無しさんNGNG
レイアースなら知ってるよ
0650可哀想になってきたのでマヂレスNGNG
大前提:
MACアドレスはレイヤー2で使うアドレスなので
レイヤー3(IP)やレイヤー4(TCP)では全く使わない、情報として含まれていない。
故に、サーバ側がヘッダ等からMACアドレスを取得するのは不可能

# 細かいところは突っ込むな、スレ違いで解説なんかしたくねぇ > 分かってる人

クライアントが送るとか言ってる奴
 → ネットワーク越しのアプリケーションで、クライアントが自称する情報なんか信用できないって

>>631 は皮肉だろ
クライアントが送ることに意味はないから、(出来るものなら)サーバ側で取得する方法言ってみろと
0651デフォルトの名無しさんNGNG
マジレスって言ってるけど今まで出てきた話をまとめてるだけやん。何がしたいのやら。
0652デフォルトの名無しさんNGNG
単なる知ったかだろ。
言ってることも微妙に間違ってるし。

> ネットワーク越しのアプリケーションで、クライアントが自称する情報なんか信用できないって

なんていってる奴は、ネットで電子決済なんてできないといってるようなもんだよ。
PKI ぐらい勉強してから書き込んだ方が恥をかかなくていいと思う。
0653デフォルトの名無しさんNGNG
信用出来ないからこそ信用性を確保しなきゃならんのだろうが
0654デフォルトの名無しさんNGNG
偽装されてても信頼性なくてもどうでもいいんじゃねーの?
だって最終的には>>613の

名前 山田太郎◆KdCIエD  ◎CDgfg87Dg2

◎CDgfg87Dg2 に使われるだけですよおまいら。
◎CDgfg87Dg2ですよおまいら
おまいら ◎CDgfg87Dg2 ですよ
0655デフォルトの名無しさんNGNG
↑の流れがPerl厨の無能さを晒す結果になったなワラ
0656デフォルトの名無しさんNGNG
そもそもスレ違い
0657デフォルトの名無しさんNGNG
おまえら、GWはもう終わりましたよ
0658デフォルトの名無しさんNGNG
>>657
厨は、明日までかもしれない罠。鬱。
0659デフォルトの名無しさんNGNG
よくこれだけ盛り上がれるなぁ・・・
ひょっとして元質問者は送信元IPのMACアドレスを取得できると思ってたのかなぁ
0660デフォルトの名無しさんNGNG
>>659
降り出しに戻す気ですかー(w

↓では次の方ドゾー
0661デフォルトの名無しさんNGNG
すっげード素人な発言なのですが、
windowsとかで.pl使うと、エラー表示が一瞬でて消えてしまいます。
どうにかならないでしょうか?
0662デフォルトの名無しさんNGNG
質問の仕方も素人だな。
とりあえずだな、
.pl拡張子のファイルをダブルクリックするとっていう意味か?
Windowsのバージョンは?
それならDOSプロンプトかコマンドのプロパティの設定がらみだ。
もしくは専用のツール使え。
0663デフォルトの名無しさんNGNG
>661
ActivePerl
http://www.activestate.com/Products/ActivePerl/

入れてる?
0664デフォルトの名無しさんNGNG
どうもありがとう。
>>662
>質問の仕方も素人だな。
お手を煩わせます。
>.pl拡張子のファイルをダブルクリックするとっていう意味か?
そうゆう意味です。
>Windowsのバージョンは?
2000です。
>それならDOSプロンプトかコマンドのプロパティの設定がらみだ。
やってみます。
>>663
入れてます。this is perl, v5.6.1と出ました。
0665デフォルトの名無しさんNGNG
そりゃスクリプトが終わったらperl.exe も終わってコンソールは閉じるのが普通だわな。

それじゃ困るんなら

・cmd開いてそこから実行
・batファイル書いてそのプロパティで閉じないように指定
・スクリプトが終了しないように <STDIN>; などの行を末尾に入れる
 (これで改行かCTRL-C入れるまで終わらない)

等の手段をとる。
0666デフォルトの名無しさんNGNG
>>655
ありがとう。あれから探して専用ツール入れてみました。
慣れてないので妙です。

<STDIN>; は試してみましたが、なんだか上手くいきませんでした。
他の二つは、後で調べてやってみたいと思います。
0667デフォルトの名無しさんNGNG
>>664 なんか勘違いしてた。すまん。
Windows2000だったら
[フォルダオプション]-[ファイルタイプ]からplを探して
拡張設定のほうをいじるようかな。
"c:\perl\bin\perl.exe" "%1" %* とかなってるのを
cmd.exe /k c:\perl\bin\perl.exe "%1" %*
にするぐらいしか思いつかん。バッチ作るとか面倒ってことだろ。
でもこれだとperlでの引き数指定できないし、開発とかする目的なら
Copalとかだったかの統合環境もどきツール使った方が楽かも。
0668デフォルトの名無しさんNGNG
>>667
いえ。こっちの質問の仕方が良くなかったのです。ありがとう。
>http://homepage3.nifty.com/aokura/#Perlを始めよう!
これ入れてみました。アイコンだけ元の黄○に戻して今使ってます。
Copal後で調べてみます。Copalがよさげだったら乗り換えます。
0669デフォルトの名無しさんNGNG
質問なのですが、現在次のようなことをしたいと思ってperl で
プログラムを作ろうと思っています。

1 住所を日本語で入力(Excel等で)
 東京都 港区 芝浦 1-1-1

2 入力したファイルを読み込み
 順番を逆にする
 東京都 港区 芝浦 1-1-1 を
 1-1-1 芝浦 港区 東京都
と。
3 逆の順番に並び替えたものを
ファイルに書き込み

読み込みは open を使って
順番を逆にするのは、reverse とか sort を使うのってのは
わかるんですけど、具体的にそれらを組むってなるとちょっと
わからないんです。
ヒントでもかまいませんのでどなたかご教授いただけますか?
よろしくおねがいします。
0670デフォルトの名無しさんNGNG
>>669
1.読み込みは open を使って
2.一行読み込んで配列に格納
3.順番を逆にするのは、reverse とか sort を使う
4.ファイルに書き込み
5.2へ戻る

質問は何ですか?
0671デフォルトの名無しさんNGNG
>669
ああそれは、
whileで回しながらspritをスペース区切りで使って
@なんたらにブチ込んでやれば良いんですよ。
0672デフォルトの名無しさんNGNG
splitだった・・・寝ます。
0673デフォルトの名無しさんNGNG
>>669
やりたい順番にやりたいことを書けばよいです
ヒントは全部自分で言ってますよ
あとはgoogleなどの検索サイトで調べてみて下さい
0674デフォルトの名無しさんNGNG
おまえら真性のアフォだろ
日本語で入力(Excel等で)って書いてあんじゃん
            ~~~
0675デフォルトの名無しさんNGNG
>>674
ふーん、だから?
0676デフォルトの名無しさんNGNG
>>674
Excelで「名前を付けて保存」→「ファイルの種類」のところを調べてごらん。
(ってなんでム板でこんな低脳なことを教えなきゃならんのだ)
0677デフォルトの名無しさんNGNG
Excel等ですが・・・
   ~~~
0678デフォルトの名無しさんNGNG
>>674は今顔を真っ赤にしてレス削除の方法を探しまくっているところですから
そっとしてあげてくれませんか
0679デフォルトの名無しさんNGNG
Excelで開けるファイルはxlsだけだと思ってる阿呆(>>674)が
いるというのはこちらのスレでよろしかったでしょうか?
0680デフォルトの名無しさんNGNG
わざわざCSVなんかで保存しなおさなくても
COM経由でセルを書き換えていけばいいだけじゃん。
0681デフォルトの名無しさんNGNG
>>680
なるほど。どんな感じのプログラムになるの?
雰囲気だけでもいいから書いてみてくれないかな。
0682デフォルトの名無しさんNGNG
669です。
とりあえず現状では、ファイルを読み込んで、別名のファイルに
書き込むってのはできました。
わからないのは
reverse や sort を組み込むのがよくわかりません。
今の時点で作成したのは以下の通りです。

open(in, "<address.txt");
open(out, ">revaddress.txt");
while (<in>){
print(out);

}
close(in);
close(out);

今の段階では txt 形式で住所を読み込んでいます。
プログラム初心者なんで…お願いします。
0683デフォルトの名無しさんNGNG
@a = split(/ /);
print reverse @a;
0684デフォルトの名無しさんNGNG
Perlで大量のデータを扱う時に、様々な方法があるでしょうけど、
どういう場合にはこういう方法を取るべきとか、こういう特徴を求めてるなら
これを使うべきとか、この程度のデータ量ならこうだとか、このタイプのデータなら
これで十分とか、メリット・デメリット・ポピュラーかそうでないか、用途別、
そういう比較・解説をしてくれているサイトはないでしょうか?
DB関係はさっぱり触ったことがないので、何をどうするのがポピュラーなのか知りたいのです。

それともPerlでデータを取り扱う時はこれ一択だとか決まってるのでしょうか?
0685デフォルトの名無しさんNGNG
perlmagick を使って画像に文字を埋め込んでいます。
その際にどのようなフォントが利用できるのか、
また、どのようにして利用できるのか、が分かりません。
できれば、HG創英角ポップ体にしたいのですが、こういうことは
可能なのでしょうか?

環境は Debian woody で、
ii perl 5.6.1-8.7 Larry Wall's Practical Extraction and Report
ii perl-base 5.6.1-8.7 The Pathologically Eclectic Rubbish Lister.
ii perl-modules 5.6.1-8.7 Core Perl modules.
ii perlmagick 5.4.4.5-1woody A perl interface to the libMagick graphics r
です。
有識者の方、アドバイスよろしくお願い致します。
0686デフォルトの名無しさんNGNG
<a href="http://xxx.xxx.xxx/"></a>
<a href="http://zzz.zzz.zzz./"></a>
を
<a href="http://xxx.xxx.xxx/">http://xxx.xxx.xxx/<;/a>
<a href="http://zzz.zzz.zzz./">http://xxx.xxx.xxx/<;/a>
としたいのですが、これを自動で処理させるには、どのように
記述すればいいですか?
0687デフォルトの名無しさんNGNG
http://xxx.xxx.xxx/
http://zzz.zzz.zzz./
を
<a href="http://xxx.xxx.xxx/">http://xxx.xxx.xxx/<;/a>
<a href="http://zzz.zzz.zzz./">http://xxx.xxx.xxx/<;/a>
とするのではなくて?
0688デフォルトの名無しさんNGNG
度々の質問ですみません。669です。
open(in, "<address.txt");
open(out, ">revaddress.txt");
while (<in>){
@a = split(/ /);
print reverse @a;
}
close(in);
close(out);
と作成して実行させると DOSの画面上では問題ないのですが
revaddress.txt には何も入力されていません。
どこか問題があるのでしょうか?
0689デフォルトの名無しさんNGNG
printにファイルハンドルを付けろ。
0690デフォルトの名無しさんNGNG
>>686
まずURLを取り出す。マッチングで()使って$1使うとか。
次にタグの間で分割して取り出したURLをいれりゃぁええやろ。
0691デフォルトの名無しさんNGNG
>>681
http://member.nifty.ne.jp/hippo2000/perltips/Spreadsheet/ParseExcel.htm
嫁。
0692デフォルトの名無しさんNGNG
669です。
ヒントを出してくれたみなさんありがとうございました。
無事に完成することができました。
0693デフォルトの名無しさんNGNG
>>691 ありがとうございました。
CSV保存でSTDINのほうが楽な場合が多そうだけど、場合によっては
これも使えそうですね。
0694デフォルトの名無しさんNGNG
関数に文字列を渡す時にヒアドキュメントを使う場合、
foo(<<TEXT;
my text
TEXT
);
のように最初の終端文字列の後にセミコロンをつけるとエラーが出て、
省くと正常に動作するのですが
これはどのバージョンの perl でも同じですか?
ウチは 5.8 を使っているのですが、仕様なのかバグなのか良く解らないので。
0695デフォルトの名無しさんNGNG
↑のは引数を括弧で括った場合だけのようですね。
0696デフォルトの名無しさんNGNG
>>694
&foo(<<TEXT);
my text
TEXT
0697デフォルトの名無しさんNGNG
ああー、口では良く説明できませんが何となく仕組みがわかりました。
ありがとうございます。
0698デフォルトの名無しさんNGNG
>>697
もういっちょ補足。

my @array = (<<H1, <<H2, <<H3);
ヒアドキュメント1
H1
ヒアドキュメント2
H2
ヒアドキュメント3
H3

なんてことも出来る。
0699デフォルトの名無しさんNGNG
なんか気持ち悪いね・・・
0700デフォルトの名無しさんNGNG
>>699
鏡見ちゃったの?
0701デフォルトの名無しさんNGNG
>>700
いや、君を見ちゃったのさ
0702デフォルトの名無しさんNGNG
お〜い山田君!
>>701に座布団一枚!
0703デフォルトの名無しさんNGNG
<<HOGE から HOGE までを一括りと考えてはダメで
<<HOGEが変数と同じ、そして(少し離れたところで)ヒアドキュメントが始まり、HOGEで終わると考えよう。

そうすると foo(TEXT); がOKで foo(TEXT;); がNGなのはすぐに納得行くね
foo($a); と foo($a;); の違いだ。
0704デフォルトの名無しさんNGNG
>703
説明下手くそだな〜
0705デフォルトの名無しさんNGNG
今日はじめました!
しかし何から始めたら良いか分からない・・・w

誰か超初心者な問題だしてください。
0706デフォルトの名無しさんNGNG
>>705
あなたは何者ですか?
0707デフォルトの名無しさんNGNG
>>706
日本人です
0708デフォルトの名無しさんNGNG
ハズレ。出直して来い。
0709デフォルトの名無しさんNGNG
perllerです。
0710デフォルトの名無しさんNGNG
Perlistです。
0711685NGNG
>> 685
どなたか分かりませんか?
よろしくお願いします。
0712デフォルトの名無しさんNGNG
>>711
http://www.imagemagick.org/www/perl.html#seta
0713684NGNG
あの〜、どなたか…。
最近はSQLでなくXMLなんかも使われてきてるようですが…。
0714デフォルトの名無しさんNGNG
>>713
csv 使え。それで困ったら他の手段を考えろ。
0715デフォルトの名無しさんNGNG
>どなたか分かりませんか?
こういう質問の仕方をよく見るが、喧嘩うってんのかと思う。
アホウはテメエだけ。
0716デフォルトの名無しさんNGNG
>>715
>こういう質問の仕方をよく見るが、喧嘩うってんのかと思う。
こういうつっこみの仕方をよく見るが、DQN度高いなと思う。
字義通りとるアホウはテメエだけ。

「おはようございます」に「はやくねえよ」と答える知能の低さ。
0717デフォルトの名無しさんNGNG
>>716
気にならないなら、さっさと>>685の質問に答えてやれよ。
それとも>>685と同類のアホウか?(w
0718デフォルトの名無しさんNGNG
そんなことより、俺は今日ヒアドキュメントのセミコロンの位置の意味がわかって感動した
(ありがとう >>696)
0719デフォルトの名無しさんNGNG
ここは本当にプログラム技術を語る板なのか
0720デフォルトの名無しさんNGNG
>>719
それ思い込み
0721デフォルトの名無しさんNGNG
ここは分かったつもりになってるだけの初心者が何も分からない初心者の質問に答えるスレですよ
0722デフォルトの名無しさんNGNG
ちがうだろ、気に入らない質問のしかたをしてきた人をいびるスレだろ。
0723デフォルトの名無しさんNGNG
自分の気に入る質問が来ない暇人が適当にだらだらとレスるスレだろ?
0724デフォルトの名無しさんNGNG
雑談スレです
0725デフォルトの名無しさんNGNG
chompってなんて読むの?
0726デフォルトの名無しさんNGNG
ちょんぷ
0727デフォルトの名無しさんNGNG
超マジックパワー
0728デフォルトの名無しさんNGNG
チョン ( ´,_ゝ`)プッ
0729685NGNG
もし質問の仕方が気に障ったなら申し訳ありません。
perlmagick で annotate を使って書き込むデフォルトのフォントは
あまりかっこいいフォントではないので、変更したいのです。
調べたところ、-font オプションで指定できるということは分かっているのですが、
どのようなフォントが指定できるのか、他から持ってきたフォントでも
使えるのか、そのためにはどうすればよいのか、が分かりません。
そのため、こちらでお分かりになる方がいらっしゃれば・・・とお伺いしました。
もし、お分かりでしたらぜひご教授ください。
よろしくお願いします。

>perlmagick を使って画像に文字を埋め込んでいます。
>その際にどのようなフォントが利用できるのか、
>また、どのようにして利用できるのか、が分かりません。
>できれば、HG創英角ポップ体にしたいのですが、こういうことは
>可能なのでしょうか?
0730デフォルトの名無しさんNGNG
分るけど教えてやんね、自分で何とかしろ
0731デフォルトの名無しさんNGNG
ここで質問しても返事なんて期待してはいけない
0732デフォルトの名無しさんNGNG
プラットホーム依存でいいならWin32::APIつかってDIBつくってDCつくって描画するのが正解。
0733デフォルトの名無しさんNGNG
%x% という文字列を aaa に置換する場合、
s/%x%/aaa/;
で良いでしょうか?s/\%x\%/aaa/ とエスケープすべきでしょうか?
どちらでも置換できてしまうんですが。
0734デフォルトの名無しさんNGNG
>>733
<q cite="http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html">
Perlにおけるバックスラッシュ付きメタキャラクターはすべて
\b, \w, \n のように alphanumeric であることに気がついて
いるでしょ う。他の正規表現言語の幾つかのものとは異なり、
alphanumeric でないバックスラッシュ付きシンボルはありません。
ですから、\\, \(, \), \<, \>, \{, \} のようなものは常に、メタ
キャラクターではなくリテラルキャラクターとして解釈されます。
</q>
0735デフォルトの名無しさんNGNG
>>733
%はメタ文字ではない。だからエスケープする必要は無い。そのくらい調べろ。

>>734
的外れな回答は止めろ。
その文章では「英数字以外の文字をエスケープすると常にそのものとして扱われる」とあるだけだろ。
0736デフォルトの名無しさんNGNG
<q> は引用ですね(・∀・)ニヤニヤ
0737デフォルトの名無しさんNGNG
>どちらでも置換できてしまうんですが。
に対する回答にはなってると思うが

心の狭い奴が多いものだなぁ
0738735NGNG
>>736
自分だけが特別物知りだと思い込むのは良くないな。
>>734<q>で囲まれてなければ「その文章では」ではなく「お前のレスは」とでも書くのが普通だろ。

>>737
なるほど悪かった。「的外れな回答」ではなく「中途半端で役に立たない回答」とでもするべきだったな。
質問者の質問は「エスケープすべきか否か」だぞ。



0739733NGNG
>>734
なるほど。つまり % はメタキャラクターじゃないから \% としても % と同じことで、
わざわざエスケープする必要は無かったわけですね。
ありがとうございました。
0740デフォルトの名無しさんNGNG
まあ自信が無ければとりあえずエスケープしておけば良いよ。
\wとか全く使わないなら\Q使うのが楽だけど。
0741遙皇 ◆HEHARUKAoo NGNG
citeには誰も反応しないのか・・・
0742デフォルトの名無しさんNGNG
>>741
どう反応すればいいんだ?
0743デフォルトの名無しさんNGNG
>>741
お前、恥ずかしい奴だな

0744デフォルトの名無しさんNGNG
>>741
0745デフォルトの名無しさんNGNG
誰か骨のある質問してくれ〜〜〜〜
0746デフォルトの名無しさんNGNG
SMART! ウェブ講座の中の人たちはいつまで江ノ島旅行に行ってるのですか?
0747デフォルトの名無しさんNGNG
俺、最近思うんだけどさ・・・
Perlにオブジェクト指向って必要なのかな・・・?

・・・と、言うか、オブジェクト指向自体必要なのかと疑問に思う。
0748デフォルトの名無しさんNGNG
モジュールの多くがオブジェクトで書かれているけど
0749デフォルトの名無しさんNGNG
>>748
それは何故なんだろうね・・・
オブジェクトにしなくてもいいような・・・
パッケージ概念があるんだから、変数の衝突もないし、
さらに、Perlのオブジェクトにはプライベート変数なんて概念ないし。

リファレンスで構造体を作成。
その構造体の変数にアクセスする関数を作成。

使う時は、その関数を呼び出すだけで、
無理にオブジェクトにする必要ないのでは・・・?と思う。
0750デフォルトの名無しさんNGNG
>>749
> 使う時は、その関数を呼び出すだけで、
> 無理にオブジェクトにする必要ないのでは・・・?と思う。
「関数を呼ぶだけ」と「メソッドを呼ぶだけ」の違いがそんなに無理なことなの?
0751デフォルトの名無しさんNGNG
>>750
そう、だからほとんど違いがないでしょ。
だから、オブジェクトにする意味があまりないような・・・って感じ。

Perlのオブジェクト指向って何のためにあるのだろう?って考えると、
C++とか使う人が、扱いやすいように。そんな理由から。
それ以外に利点が考えられないんだよね。

なんて言うか・・・
オブジェクトなんぞ必要ない!と言い切る人とかいてるけど、
最近、そういう人の気持ちが分かってきたような・・・
0752名無し募集中。。。NGNG
記法に過ぎんと俺は割り切ってるが
結局構造体のリファレンス返す程度のもんでしょ?
0753733NGNG
>>734
>>735
分かりました。ありがとうございました。

ちなみに、>>739 さん、私を騙るの辞めて下さい。
0754デフォルトの名無しさんNGNG
>>749
っていうかそれ自体が既にオブジェクト思考なんだと思うが。
指向とか嗜好とかでもいいんだけどね。
オブジェクト指向ってあくまで思想的なものだったりプログラムの
保守技術やら記述の美しさや再利用性とかそういうメリットを求めての
結果というかテクニックとか実装みたいなもんだろ。
言語仕様にあるのはあくまでオブジェクト指向を支援するものであって
そのひとが必要ないなら必要ないでいいし、使うとメリットがあると思えば
使えばいいだけのこと。あたりまえなはなし。

で、小さいプログラム作っているうちはあまり感じないが数百人を超える
プロジェクトとかになってくればそれだけ厳密性や独立性が大きく問われる
ことになりオプジェクト指向という一種の作法をみんなで使うことが重要だったりも
するってことやろ。
0755デフォルトの名無しさんNGNG
>>752
>>754
まぁ、な〜んとなくオブジェクトって物が無駄な気がして言っただけなんだけど・・・
オブジェクト指向を使えば保守性が格段にあがるとか、
あまりそうは思えないんだよな・・・
独立性も、オブジェクトを使わなくても独立性を持たせれるし・・・

しかし、オブジェクト指向って作法をみんなで使うって部分は利点があるな。
ちょっとなるほどと思った。
0756デフォルトの名無しさんNGNG
もう答え出てるかもしれんけど、同じ物(オブジェクト)をポコポコ作る時は雛型(クラス)があった方が楽じゃん。そんだけ。
0757デフォルトの名無しさんNGNG
ついでにいうと>>749は勘違いしてるかもしれんが、

# pacage Windowがあるとして
$window = &Window::new(); # 構造体へのリファレンスを返す
&Window::setup($window, @args)
&Window::show($window);

とか言うのも立派なオブジェクト指向になってる。それを

$window = new Window();
$window->setup(@args);
$window->show();

と書けるようにしただけ。
君が言ってるのは、「オブジェクトなんていらないジャン。変数$windowがあればいいじゃん」ってことだろうけど、
その変数$windowをオブジェクトって呼んでるんだよ。
0758デフォルトの名無しさんNGNG
>>755
>>757の例で言えば
後者の方がなんとなく(・∀・)イイ!!って感じれればそうかけばいいし
べつに前者みたいでいいじゃんって思えば前者で書けばいい。
保守性が格段によくなるわけじゃないけどなるべく簡素にかけたほうが
いいのはいうまでもないでしょ。何度もいうけど格段に変わるもんじゃあない。
非常につまらない例で恐縮だが
&Window::show($widow);
なんていうつまらんバグをやっちまう確率がへる訳だ。そういう効果もある。
バグなんて結構こんなつまらない勘違いの類いであったりもするだろ。
例えば変数のスコーピングに関してもより人間が管理する部分が減るだけ
バグの確率が減少する。
確率は0にはならないだけにこういう言語の仕様の活用で減らせるバグは
ほんの少しでも減らして行こうという姿勢もある訳だ。
0759横入君NGNG

俺、あんま自分でオグジェクト作らんけど、あれだよね。
インポート式のモジュールはサブルーチンの名前空間汚す。
多少なりとも意識して使えば問題ないけど、なんとなく気持ち悪い。
オブジェクト指向はあれさ、パッケージ名一つ汚すだけ。

でもあれなんだよね、プロトタイプが使えないんだよね。
俺はルーチン作る時プロトタイプに頼りまくってる。

もしかして、間違ったこと書いてたら突っ込んでやって下さい。
0760デフォルトの名無しさんNGNG
OOの一般論は他のスレでやるべきだということはわかってるんだろう。
perlの実装がいいか悪いかという話ならともかく。
0761デフォルトの名無しさんNGNG
while(<STDIN>){
  if($_ == 'a'){ print("a\n"); }
}
上のコードを実行して「a」以外の文字
例えば「b」を入力しても、if文が実行されてしまいます。
この書き方は間違ってるんでしょうか?
0762デフォルトの名無しさんNGNG
>>757 >>758
う〜ん?
その構造体がオブジェクトなの?
たしかに、オブジェクトと言えばオブジェクトなんだろうけど・・・
オブジェクト指向の利点の一つは、
グループ化して関数わかり易いですよ(?)ってヤツじゃないの?

たとえば・・・
$window = new Window();
$window->setup->size(200, 100);
$window->setup->color("red");
$window->show();

・・・みたいな。
この辺に、わかりやすさがあってみんな使ってたんだとばかり思ってた。
でも、これってあまり意味ないな〜とか思い出したって訳。
書き方も「$」が「&」になるか、「->」が、「::」になるかの違いだけで済むし。
たしかに、引数を書かないといけないから一行が少し長くはなるけどね。

でも、まぁ記法としてオブジェクト使うって言うのなら多少利点があるかな〜と思った。
Aさんは第1引数に構造体を渡してもらうのを期待してる関数を作って、
Bさんは第2引数に構造体を渡してもらうのを期待してる関数を作って・・・
そんな事になったら、わかりにくくなるしね。
・・・まぁ、引数の順番がめちゃくちゃでも大丈夫にする事もできるんだけど。

しかし、その構造体事態がオブジェクトだと言うのなら俺の勘違いですた。
・・・でも、C言語にも構造体はあるぞ・・・
でも、オブジェクト指向では・・・ まぁいいっか。
要は、好きにしろって事だね。(w
0763デフォルトの名無しさんNGNG
>>759
たしか、オブジェクト内でプロトタイプ宣言は無視されるんだっけ?
俺は、プロトタイプ宣言しない派なんだよ。
理由は、忘れちゃったけど・・・
それも、あまり意味がないって理由でプロトタイプ宣言を使わないようにした。

>>760
そりゃいえてるね。
じゃ、この話題は終了で。

>>761
if ($_ eq "a") { print "a\n"; }
0764デフォルトの名無しさんNGNG
Yes
0765761NGNG
eqですか… ずっと困惑してましたので助かりました。
Perlは、C言語知ってる人には馴染みやすいとよく聞くんですが
どうもまだシックリきませんねぇ…
0766デフォルトの名無しさんNGNG
>>765
C屋なら、らくだの最後だけ立ち読みしといたほうがいい。
よけいな手間が減る。
0767デフォルトの名無しさんNGNG
>>765
文字の比較と数字の比較は違う。

数字で等しいと真 「==」
文字で等しいと真 「eq」
数字で等しくないと真 「!=」
文字で等しくないと真 「ne」

文字の比較で、大なり小なりの比較もあるけど、
あまり使わないだろうから、覚える必要なし。
0768761NGNG
>>766
「プログラミング Perl」(通称青らくだ本)
という書籍があるみたいですね。
有意義な情報をありがとうございました。
0769761NGNG
>>767
Perlは変数のデータ型がないんで、比較の時はキャストされるのだと思ってました…
文字と数値は比較の仕方が違ったんですね。
0770デフォルトの名無しさんNGNG
オブジェクト指向ネタは荒れがちな気がすると思いつつ。

オブジェクト指向的な考えは、現実の操作や状態なんかをもとに
設計したり実装するのに便利。例えばUIまわりとかね。

あと、保守も多少は楽になる。
少なくともコピペを繰り返すよりはいいし、仕事をしててよく依頼される
「似てるけど、ちょっと違う」処理を何度も書くときは重宝します。

というわけで自分の経験としては、趣味的なプログラムより
業務系のプログラムと相性が良い、という印象。
あと、ネットゲーみたいにバシバシ機能追加/変更するようなものも、
オブジェクト指向のほうが機能追加/変更しやすいです。


まあ、ラリーさんもオブジェクト指向の必要性は感じているから
Perl6はその辺りがより強化されるのでしょう。
個人的には楽しみにしてますけど、Perl6は人気ないっぽいのが残念。
0771デフォルトの名無しさんNGNG
>>769
型がないから「どうキャストすれば分からない」ため、
==とeqみたいな違いがある、と考えればよろしいかと。
0772デフォルトの名無しさんNGNG
>>762
> しかし、その構造体事態がオブジェクトだと言うのなら俺の勘違いですた。
> ・・・でも、C言語にも構造体はあるぞ・・・
> でも、オブジェクト指向では・・・ まぁいいっか。
Cでオブジェクト指向するって話はぐぐれば出てくる。
classキーワードがなければオブジェクト指向じゃないってのは偏見
0773デフォルトの名無しさんNGNG
Perl の場合は、例えば HTML::Template なんて
Perl にオブジェクト指向があって良かった一例だと思うよ。

何にせよ、既に言われている通りソレを必要だと感じている人が使えば良い。
0774デフォルトの名無しさんNGNG
>>762
構造体ですら、どうでもいいんだよ
言語仕様によるところのメソッド呼び出しだとか、構造体はどうでもいい
オブジェクト指向ってのは考え方なの
その考え方でコードを書くときに便利なように、幾つかの約束事が用意されていたり、強制されていたりするだけ

蛇足だけど、「オブジェクト指向」って言葉はおかしいんだよね
「オブジェクト指向ほげ」だとか「オブジェクト指向ふが」と言うべき
それをしないから混乱する。

オブジェクト指向プログラミングをする際に、オブジェクト指向プログラミング言語は必要じゃないよ
それこそC言語でも出来るし、BASICでも出来るんじゃない? 俺はやりたくないが(w
0775デフォルトの名無しさんNGNG
確かにオブジェクト指向的なコードを書くのにオブジェクト指向言語は必要ないね。
僕はPerlでプログラムを書いていて、ある日とつぜん
特定の関数群を呼ぶときは常に第1引数が特定のハッシュ変数になるのに気づいて
「あ」
とか思って、以降は素直にオブジェクト指向的な書き方をするようになったのさ(苦笑)。

0776デフォルトの名無しさんNGNG
ちょっと、このスレの趣旨とズレているかもしれませんが
Perl用の開発環境とかエディタは、皆さんどういう物を使用してますか?
何か良い物があれば教えて頂きたいのですが。
0777デフォルトの名無しさんNGNG
>>776
http://pc5.2ch.net/test/read.cgi/php/1014357485/
0778デフォルトの名無しさんNGNG
     ∩  
     |∧∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (  ,)∩  <  >>777 が!!
     丿  ノ    \________
    〜  .つ
     し~

   彡


 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     |||  ガリ
     |||    ガリ
     ∩  .|||
     |∧∧ |||   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (TД)∩  < オレの >>777 がぁぁぁぁぁああ!!!
     丿  ノ    \______________
    〜  .つ��
     し~


 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0779776NGNG
>>777
こんなスレがあったんですね!
今からジックリ見て来ます。
どうもありがとうございました。
0780デフォルトの名無しさんNGNG
何処かにPerlの日本語ヘルプはありませんか?
0781デフォルトの名無しさんNGNG
>>780
http://www.excite.co.jp/world/text/
0782デフォルトの名無しさんNGNG
>>780
http://www.cpan.jp/
0783デフォルトの名無しさんNGNG
緊急なので、お願いします!
print 100000000000000000000000000;
とすると、出力結果は
1e+026
となってしまいます。
100000000000000000000000000
と出力させるにはどうすればいいでしょうか?
よろしくおねがいします。
0784デフォルトの名無しさんNGNG
print "100000000000000000000000000";
0785783NGNG
>>783
レスありがとうございます。
変数に、
$x = 10000000000000000000000000;
と入ってる場合はどうすればよいのでしょうか?
0786デフォルトの名無しさんNGNG
変数に何が入ってたって、>>784 で問題ないと思うが。
0787783NGNG
>>786
$xには数値の1000000000000000000が入っています。
誤解させてお面なさい!
0788まあ、ネタだろうが。NGNG
>>787
> $xには数値の1000000000000000000が入っています。

はぁ ?
「変数に何が入ってたって」 って書いてあるんだが...。
0789デフォルトの名無しさんNGNG
>>786
ワロタ

>>787
イヤイア、786は$xに123が入ってても
10000000000000000000000000がプリントされるぜ。
それがお望みなんだろ。

こういうのもある。
use Math::BigInt;
$x = Math::BigInt->new(10000000000000000000000000);
print $x,"\n";
0790デフォルトの名無しさんNGNG
perl -e "print sprintf('%.0f',10000000000000000000000);"
0791783NGNG
すいません!
どれも、1111111111111111111111111111111111の場合うまくいきません。
本当に説明不足でごめんなさい。
0792デフォルトの名無しさんNGNG
>>791
それは、変だな。
俺の環境なら、ちゃんと
100000000000000000000000000
と出力される。
PC を買い換えるか、プログラマに向いていないとあきらめることを推奨する。
0793783NGNG
100000000000000000000000000
と出力したいのではなく、
1111111111111111111111111111111111
と出力したい場合です。
0794デフォルトの名無しさんNGNG
>俺の環境なら、ちゃんと
>100000000000000000000000000
>と出力される。
プッ、日本語勉強しようね。792ちゃん。
>>793
792は無視しといていいよ。
0795アヒャヒャヒャNGNG
print "1111111111111111111111111111111111";
0796デフォルトの名無しさんNGNG
ワロタw
0797デフォルトの名無しさんNGNG
>>794
> プッ、日本語勉強しようね。792ちゃん。

ネタにマジレス、かっこいいなぁ。(藁
0798デフォルトの名無しさんNGNG
>793
・BigIntを使う
・コードに数値を直接書き込まない。newには生の数値でなく文字列を渡す

OK
perl -MMath::BigInt -e "print Math::BigInt->new('1111111111111111111111111111111111')"

NG
perl -MMath::BigInt -e "print Math::BigInt->new(1111111111111111111111111111111111)"
0799デフォルトの名無しさんNGNG
792はマジで勘違いしたのだと思うが。
0800783NGNG
みなさん、親切にレスありがとうございます。

2**1000
などの計算の場合はどうすればいいでしょうか?
0801デフォルトの名無しさんNGNG
>800
もちろんMath::BigInt のperldoc は見てから質問してるんだろうな?
0802780NGNG
>>782
情報をありがとうございます!助かりました!

>>781
はは…
0803デフォルトの名無しさんNGNG
>>799=>>794 なのか ?
「プログラマに向いていないとあきらめることを推奨する。」
と書いておけば、ネタだと言うことに気づくと思ったが、俺もまだまだだな。(藁
0804デフォルトの名無しさんNGNG
>>800
1に2を1000回掛ける
0805デフォルトの名無しさんNGNG
>>804
   2 * 2 ⇒ 4
   4 * 4 ⇒ 16
☆ 16 * 16 ⇒ 256
   256 * 256 ⇒ 65536
☆ 65536 * 65536 ⇒ 4294967296
☆ 4294967296 * 4294967296 ⇒ 18446744073709551616
☆ 18446744073709551616 * 18446744073709551616 ⇒ 3.4028236692093846346337460743177e+38
☆ 3.4028236692093846346337460743177e+38 * 3.4028236692093846346337460743177e+38 ⇒ 1.1579208923731619542357098500869e+77
☆ 1.1579208923731619542357098500869e+77 * 1.1579208923731619542357098500869e+77 ⇒ 1.3407807929942597099574024998206e+154

として、☆ がついている数値を掛けると言う方法もあるよ。
0806デフォルトの名無しさんNGNG
>>805
んな事しっとるわい
0807デフォルトの名無しさんNGNG
はいはい、あとからなら何でも言えるからねぇ。
0808デフォルトの名無しさんNGNG
ていうか、どうしてperlは16桁以上の数値をあんな形にするのよ?
0809デフォルトの名無しさんNGNG
>>807
阿呆だね、尾マイは。783を囲んで駄弁る会をぶち壊すような真似はすんなょ。
0810デフォルトの名無しさんNGNG
ところで、783は逃亡か(w
0811デフォルトの名無しさんNGNG
CGI初心者です。
あるCGIから別のCGIにPOSTするにはどうしたらよいですか?
また、その際に送信側でパラメータのセット、
受信側で取得する方法も教えてください。
ちなみにPerlのバージョンが古いので
CGI.pmモジュールは使えません。
cgi-lib.plか何かでできないものでしょうか?
どなたかお知恵を。
0812デフォルトの名無しさんNGNG
>>811
WebProg板へ
0813デフォルトの名無しさんNGNG
>>811
板違い
0814デフォルトの名無しさんNGNG
浮動小数点くらい学校で習うよなぁ。
0815デフォルトの名無しさんNGNG
学校で習うつーより一般常識だろ
0816デフォルトの名無しさんNGNG
流石に一般常識では無いだろ(w
コンピュータ使ってりゃ常識だけどな

0817デフォルトの名無しさんNGNG
浮動小数点計算は小学生で勉強します。
0818デフォルトの名無しさんNGNG
たぶん浮動小数点計算という言葉に面食らってるのかも知れない。
0819デフォルトの名無しさんNGNG
面食らってるのは「浮動小数点に」ではなく、「指数表記に」ではないのか?
0820デフォルトの名無しさんNGNG
複数行(行数不明)のファイル(test.txt)
--test.txt--------------
1=2=3
4=5=6
・
・
・
7=8=9
------------------------


open(FIL, "test.txt")
@mes = <FIL>;

foreach(@mes){
@w = split(/=/, $_);
push( @$DataArray, \@w );
}
print LOG "[0][0]:$DataArray->[0][0]\n";
print LOG "[1][0]:$DataArray->[1][0]\n";

結果が以下ののようになり最後のレコード分のデータしか格納されません。
[0][0]:7
[1][0]:7
どなたか、全てのデータを上手く格納する方法教えて頂けないでしょうか。
0821デフォルトの名無しさんNGNG
>@w = split(/=/, $_);

my @w = split(/=/, $_);
0822デフォルトの名無しさんNGNG
Cのコードの
#include <stdio.h>
void set_a(int *p);

int main()
{
int a[10], i;

  set_a(a);
  for(i = 0; i < 10; i++){ printf("%d ", a[i]); }
  return 0;
}

void set_a(int *p)
{
int i;
  for(i = 0; i < 10; i++){ p[i] = i; }
}

と同じコードをPerlで書こうと思って
以下の様に書いたのですが、配列にうまくデータを格納出来ません。
正しい書き方を教えて頂けませんか?
@a;
set_a(@a);
foreach $i(@a){ print("$i "); }

sub set_a
{
  for($i = 0; $i < 10; $i++){ $_[$i] = $i; }
}
0823デフォルトの名無しさんNGNG
>>820
open FIL, '<' . 'test.txt' or die $!;
while (<FIL>) {
  chomp;
  push @$DataArray, [ split /=/ ];
}
0824デフォルトの名無しさんNGNG
perl -e 'sub{for($i=0;$i<10;$i++){$_[0][$i]=$i}}->(\@a);for(@a){print "$_ "}'
0825デフォルトの名無しさんNGNG
>>822
それ、関数内で書き換えただけで終了してるぞ。
結果を受けないとダメに決まってる。

2行目
@a = &set_a(@a);

関数内で最後書き換えた値を返す。
return @_;

それと、関数呼び出す時は、「&」を頭につける。
付けたくない場合は、関数を使用前に作る。
main関数内で使う関数は、プロトタイプ宣言するか、
main関数より前に定義しておくってのはC言語と同じだろ。
0826デフォルトの名無しさんNGNG
>それと、関数呼び出す時は、「&」を頭につける。

これは間違いでしょ。リストを付ける、これが正解。
0827デフォルトの名無しさんNGNG
>>822 >>825
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsub.html
0828デフォルトの名無しさんNGNG
>>827
正直、お前は必要ない。
0829822NGNG
>>825
配列はポインタで渡して、関数内で書き換える事が出来ないんですか?
普通の変数は、参照渡し出来ますよね。
$d = 0;
&set_d($d);
sub set_d{ $_[0] = 10; }

>関数呼び出す時は、「&」を頭につける。
>付けたくない場合は、関数を使用前に作る。
822のコードでも普通に動くみたいなんですが、
「&」を付ける意味って何なのでしょうか?
0830デフォルトの名無しさんNGNG
>822
ラクダ本の参照について書いてあるところ読みなはれ。
その例は参照渡しにすらなってない。

>「&」を付ける意味って何なのでしょうか?
Perl4はサブルーチンの呼び出しに&をシンボルの頭につけてた。
これは古い仕様。Cのようにカッコをつけるか、プロトタイプ宣言して
カッコを省略するかどっちか。
0831デフォルトの名無しさんNGNG
&set_d(\$d);
sub set_d( local(*d)=@_; $d[0]=10;}
0832デフォルトの名無しさんNGNG
>822 スマソ
@_に関しては少し特別だったの忘れてた。
ただし関数の引数がC++で言うところの「参照」と同じ扱いに
なるのは、いくつか条件があったはず。俺は紛らわしいから
いつもリファレンスでやり取りしてるけど。
0833822NGNG
>>830
>その例は参照渡しにすらなってない。
う〜んでも、関数から帰って来た後、print("$d")で表示すると
しっかり「10」になってるんですが…
これって参照渡しとは違うのですかねぇ?

>Perl4はサブルーチンの呼び出しに&をシンボルの頭につけてた。
>これは古い仕様。Cのようにカッコをつけるか、プロトタイプ宣言して
>カッコを省略するかどっちか。
結局どういう事なのかイマイチよく分からないのですが、
うちの環境、ActivePerl5.8.3だと、関数呼び出し時に
&付けようが付けまいが、括弧付けようが付けまいが
プロトタイプ宣言しようがしまいが 全部普通に動くんですが…
0834デフォルトの名無しさんNGNG
>>830
知ってて言ってるならいいが

sub foo { print "[@_]\n" }
sub bar { print 'bar:'; foo }
sub baz { print 'baz:'; &foo }
sub boo { print 'boo:'; &foo() }

bar(1,2,3); # bar:[]
baz(1,2,3); # baz:[1 2 3]
boo(1,2,3); # boo:[]

>>833
>>827 は読んだか?
0835デフォルトの名無しさんNGNG
>>833
好きにしろ。

ただし、お前のソースは読みたくない。
0836822NGNG
>>834
見過ごしてました。
今からじっくり見てみますよ。
0837デフォルトの名無しさんNGNG
>>833
ここで聞いても正確な答えが返ってくるとも限らないからラクダ本嫁としか言えない。
俺が言い得るのは、関数呼び出しに&をつけるのは古いということだけ、か。
暇なPerlerの人が答えてくれるかも。

>sub baz { print 'baz:'; &foo }
この書き方大嫌い。動的スコープ死ねw
0838デフォルトの名無しさんNGNG
>>832
引数のリストは展開されたあとにそれぞれの要素が一つずつスカラーへのリファレンスと
して@_に頭から入れられるので、f($d)なら必ず$dを変更することはできるが、f(@a)だと
@aのその時点で存在するところまでしか変更できない。極端な話@aがまだ空ならなにも
できないということじゃないかな。

とはいえわかりにくいのでオレもすぐにmy(〜) = @_;で受けてしまうし、引数で値返したければ
リファレンス使うようにしてるね。
0839デフォルトの名無しさんNGNG
>>838
>f(@a)だと
>@aのその時点で存在するところまでしか変更できない。

あ、なるほど。
0840デフォルトの名無しさんNGNG
教えてください。。。

use strict文を使うと定義されていない変数は怒られますよね。
Can't use an undefined〜、とかって。

ソースにですね、
@aaa = @{$bbb}
とか
foreach(@{$bbb}){

とか書きたいのですが、
@{$bbb}を定義しろと怒られてしまいます。

use strict文を使用すると上記のような書き方はできないのでしょうか?

ご存知の方、お教えくださいませ。。。
0841デフォルトの名無しさんNGNG
>>840
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html#Symbolic_references
0842デフォルトの名無しさんNGNG
>>841
わーできました!
ありがとうございます!!
0843デフォルトの名無しさんNGNG
サーバーの管理人(root)でない人がCPAN入れることは可能ですか?
しょうもない質問かもしれませんがよろしくです。
0844デフォルトの名無しさんNGNG
>>843
http://member.nifty.ne.jp/hippo2000/perltips/CPAN.htm#CONFIGURATION
http://member.nifty.ne.jp/hippo2000/perltips/CPAN.htm#FAQ
0845822NGNG
827のサイトを見てると、Perlは古い文法が残ってたりとか
関数にも色々な書き方のパターンがあったりして分かり難いですね…

で、結局PerlではCみたいに
配列を別のポインタで操作するみたいな事は出来ないんでしょうか?
Cでいうこんな感じ↓
int a[] = {0,0,0};
int *p = a;
for(int i = 0; i < 3; i++){
  p[i] = i;
  printf("%d ", a[i]);
}
0846デフォルトの名無しさんNGNG
@a=(1,2,3);
*p = \@a;
print "$p[0], $p[1], $p[2]\n";
0847デフォルトの名無しさんNGNG
>>845
Perl と C は別の言語なので、C の概念や流儀は捨てて考えた方がいい。

my @a = (0, 0, 0);
local *p = \@a; # no strict 'vars'
for (my $i = 0; $i < 3; $i++) {
  $p[$i] = $i;
  print "$a[$i] ";
}
0848822NGNG
>>846
なるほど。
どうもありがとうございました。
0849822NGNG
>>847
ご丁寧にありがとうございます。
確かにちょっと頭を切り替えた方がいいかもしれませんね。
0850デフォルトの名無しさんNGNG
すいません 質問があります。
perlでsetuidを立ててsystem関数を動作させようとしている
cgiがあるのですがアパッチのログには下記のように出てうまくいきません。
Insecure dependency in system while running setuid at createHomeDir.cgi


このcgiスクリプト内では
my $result = system("mkdir /home/hogehoge");
とディレクトリを作成する作業をしようと思っています。
スクリプトを作成した後
#chown root createHomeDir.cgi
#chmod 4755 createHomeDir.cgi
とやってrootで動作させるようにしているのですが、、、

何か情報をお持ちなかたはお教えいただけますとありがたいです。
0851851NGNG
う
すいませんCGIの質問は
WEBプログラム板ですね。
失礼しました。
0852850NGNG
どっひー ↑は850です。

えーっと板違いなのは重々承知ですが
850の情報をお持ちな方はご教授いだだけますとありがたいです。
0853デフォルトの名無しさんNGNG
>>852
ダメです。
0854デフォルトの名無しさんNGNG
>>852
useradd すればいぃのでは?
perl=>CGI 繋がりで webmin なんていかがです?
0855デフォルトの名無しさんNGNG
>>852
setuidしてるからtaintモードで実行されてるので、
本当にsystemにそう書いてるんなら、環境変数が
汚れてるんだろうな。

とりあえずperlsec(1)よく読め。ぐぐれば日本語訳も
みつかるだろう。
0856デフォルトの名無しさんNGNG
>>850
動くかどうかわからないが、-Uつけてみれ。
#!/usr/bin/perl -U
0857デフォルトの名無しさんNGNG
いったい何時になったら日本語が使えるの?
世界中のハッカー諸君がんばってよ
0858デフォルトの名無しさんNGNG
いったいどういうコードかいてんの?
0859デフォルトの名無しさんNGNG
いつまでたっても日本語つかえねーじゃんかよ
バグばっかでw
Perl改めApacheにしろよ>Larry
0860デフォルトの名無しさんNGNG
>>858
いや、日本語の勉強してるんだろ。
0861デフォルトの名無しさんNGNG
いつまでたっても(俺は)日本語つかえねーじゃんかよ
(俺の頭が)バグばっかでw
0862デフォルトの名無しさんNGNG
じゃあ、perlで日本語つかるってとこみせてみろよ
0863デフォルトの名無しさんNGNG
放置で頼む皆の衆
0864デフォルトの名無しさんNGNG
>>862
Perl 5.8では既に多国語対応はかなりのところまで来ている。
http://d.hatena.ne.jp/tateisu/20040112

お前の使ってる安物プロバイダがどのバージョンのPerl使ってるかはしらねーけどな。
0865デフォルトの名無しさんNGNG
日本語つかる
0866デフォルトの名無しさんNGNG
UTF-8 使えるし、文字コード変換もあるし、だいぶ使い物になる気がするんだが
0867デフォルトの名無しさんNGNG
use utf8;

binmode($_, ":encoding(cp932)") for STDIN;
binmode($_, ":encoding(????)") for STDOUT;
$input=<STDIN>;
print STDOUT $input;

というプログラムにcp932の"〜"を食わせてeucの"〜"が出てくる
ようにするには????の部分に何を指定すればいいですか?

0868デフォルトの名無しさんNGNG
よくわからんが、それが普通にできる処理系ってあるのか?
0869デフォルトの名無しさんNGNG
最近のiconvだとEUCJP-MSとか使えるようになってるでしょ。
perlではどう書くのか知らないけど。
0870デフォルトの名無しさんNGNG
perlの問題じゃなくてUnicodeの変換テーブルの問題だな。
Unicode作ってる団体に抗議しとけ。

現実的な対応はこんな感じ。

use utf8;
{
package Encode::MyEUCJP;
use base qw(Encode::Encoding);
__PACKAGE__->Define(qw(MyEUCJP));

sub encode{
$_[1] =~tr/\x{ff5e}/\x{301c}/;
return Encode::JP::encode("euc-jp",$_[1],$_[2]);
}
sub decode{
die "not implemented\n";
}
}

binmode($_, ":encoding(cp932)") for STDIN,STDERR;
binmode($_, ":encoding(MyEUCJP)") for STDOUT;
$input=<STDIN>;
print STDOUT $input;

〜 だけじゃなく http://euc.jp/i18n/ucsnote.ja.html にある文字も処理することになるだろね。
0871867NGNG
>>870
新しいEncodingをPerlで書いて追加できるってのはおもしろい
ですけど、ここまで大掛かりにやらないとならないものだった
とは... 単に自分の検索能力が低くて名前を見つけられてない
だけだと思ってましたが本当になかったのですね。回答ありが
とうございます。

0872デフォルトの名無しさんNGNG
Perlを使ってDNAからRNAへの転写をしようとしてます。

print "転写したいDNA配列を入力してください。\n\n\n";
$dna = <STDIN>;
chomp $dna;#改行コードを除く
if ( $dna =~ /^\s*$/ ){#何も入力がないなら
exit;
}
$DNA = "\U $dna \E";#大文字に変換
#####
$RNA = reverse $DNA;#逆にする
$RNA =~ tr/ATGC/UACG/;#AはU TはA GはC CはGに変換
print "転写されたRNA配列は\n";
print "$RNA\n";
print "です。\n\n\n";
exit;#終了

######の部分に
「ACGT以外の文字があった場合はプログラム終了」
というのをしたいんですが、
if ($DNA =~ /[^ACGT]/ ){
exit;
}
ではうまくいきません。
どこがいけないんでしょうか?
0873デフォルトの名無しさんNGNG
$DNAには常に空白が入ってるから、その正規表現には常にマッチする。
0874872NGNG
$_ =~ s/\s//g;だ!
忘れてました。
0875デフォルトの名無しさんNGNG
むしろ
$dna = <STDIN>;
$dna =uc $dna;
$dna =~s/[^ACGT]//g;
length $dna or exit;
では?
0876872NGNG
できましたできました。
ありがとうございます。
ありがとうございます。
0877デフォルトの名無しさんNGNG
>>875
それだとACGTが一文字でもあれば、他の文字がさりげなく
削られて何事もなかったかのように先に進んでしまうような
気がする。

$DNA =~ /^[ACGT]+$/ or exit;

とかの方がいいんじゃないだろうか。
0878名無し募集中。。。NGNG
die if $DNA =~ tr/ACGT//c;

これでもいけるな
0879デフォルトの名無しさんNGNG
みなさんこんにちは。

今回は教えを乞いたくてやってきました。
私は今、sendmailを使ったメール転送CGIに取り組んでいます。
ところがやってみると
No recipient addresses found in header
というエラーがでました。
これは、受け取り側アドレスがヘッダーの中にないというような
内容だと思うのですが、
To: $mailadr_toと指定していますし、変数にもアドレスは入っているのです。
あれこれいじってみても結果がかわりません。
if(open(SENDMAIL,"| $sendmail")){;
print SENDMAIL <<"EOM";

To: $mailadr_to
EOM
close(SENDMAIL);
}
受け取り側部分を取り出すとこんなソースです。
$sendmailのなかはsendmailのパスが-tをつけて入ってます

お気づきの点があれば、教えてください。

0880デフォルトの名無しさんNGNG
>>879
http://pc5.2ch.net/tech/
>Javascript は Web 制作板、CGI は Web プログラミング板へ。
0881デフォルトの名無しさんNGNG
>>879
>お気づきの点があれば、教えてください。

CGIとsendmail(8)の質問であることに気づいた。



open(F, "| /usr/sbin/sendmail -t");
print F <<EOS;
To: [email protected]

body
EOS
close(F);

ヘッダパートとボディパートは空行で区切りだこんちくしょう
手で sendmail 叩いて実験しろうんこ
0882デフォルトの名無しさんNGNG
ここの連中は絶望的に親切だな
0883デフォルトの名無しさんNGNG
正規表現万歳
0884デフォルトの名無しさんNGNG
性器表現万○
0885デフォルトの名無しさんNGNG
あなたは知らない。親切の裏に隠された本当の真実を…
0886デフォルトの名無しさんNGNG
世界人類総Perler化計画……



うわだれだやめろなにをすr
0887デフォルトの名無しさんNGNG
組み込み関数の乱数を発生させる関数より、
もっとユニークな乱数を発生させる関数ってないですか?

組み込み関数の乱数だと、変に同じ数字がつづく事があるんで・・・
0888デフォルトの名無しさんNGNG
>>887
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq4.html#Why_aren_t_my_random_numbers_ran
http://search.cpan.org/search?query=random
0889デフォルトの名無しさんNGNG
変に同じ数字が続くのも乱数といえなくもない。
同じ数字がまるで続かないのもそれはそれで
不自然だろ?(笑)

とりあえず最近のOSなら/dev/randomから読む
のが最強といっていいのだろうか? 手軽に使う
ならCPANのCrypt::Randomとかね。

ただモンテカルロ法みたいにたくさん必要だと
/dev/randomじゃ足りないと思うので、適当な
擬似乱数を使うことになるだろう。
Math::RandomとかMath::Random::MTとか試して
みるのがいいんじゃない?
0890デフォルトの名無しさんNGNG
>>888
いい加減、うざいからやめてくれ。
0891デフォルトの名無しさんNGNG
>>890
オマイのほうが(ry
0892デフォルトの名無しさんNGNG
>890
別にここ初心者スレじゃないし資料読ませりゃ大抵わかるだろ。
それでもわからんなら仕方ないけど。
0893デフォルトの名無しさんNGNG
>>890が何に切れてるのか分からないのはオレだけ?
0894デフォルトの名無しさんNGNG
>>893
リンク先を見ようともしない奴なんだろ
0895デフォルトの名無しさんNGNG
>>893
サイトの宣伝だと思ってるんだろ。
0896デフォルトの名無しさんNGNG
sjis 漢字コードかどうか調べる部分ですが、

my $c = ord substr($str, $pos, 1);
if (($c >= hex("81") && $c <= hex("9F")) ||
 ($c >= hex("E0") && $c <= hex("EA")) ||
 ($c >= hex("FA") && $c <= hex("FF"))) {

こんなBasicみたいな、Cみたいな書き方でないPerl風の
もっといい方法を教えてください。
0897デフォルトの名無しさんNGNG
$str =~ /^[\x81-\x9F\xE0-\xEA\xFA-\xFF]/
0898デフォルトの名無しさんNGNG
hex("81") => 0x81 (16進数値を書く記法がある
ord substr => ord $str (ordは文字列の先頭1文字を見る
0899896NGNG
>>897 ポン!そうですた・・・ありがとうございます。
>>898 難しく考えすぎてました・・ありがとうございます。
0900デフォルトの名無しさんNGNG
>>893
リンクを貼るだけで回答した気になっているのが気に入らない。
0901デフォルトの名無しさんNGNG
BSDのman嫁もそうだけど、リンクを示すなら、
該当箇所のヒントぐらい与えないと、ハッキリ言って
情報価値ゼロ。本人は得意げにリンクを貼るぐらいだから
そのドキュメントに書かれていることに熟知してるんだろ?w
0902デフォルトの名無しさんNGNG
>>901
>該当箇所のヒントぐらい与えないと、ハッキリ言って
>情報価値ゼロ。

んなこと言ってるから、いつまでもアホウのまんまなんだよ。
0903デフォルトの名無しさんNGNG
>>902
だったら放置すればいいだろ
0904デフォルトの名無しさんNGNG
>>888
はきちんとした回答だと思うが。情報価値ゼロとか言ってる香具師はリンク先見てないだろ。
0905デフォルトの名無しさんNGNG
>>904
せめてなにか一言でもかけ。
0906デフォルトの名無しさんNGNG
age荒らしの言うことなんかどうでもいい。
0907デフォルトの名無しさんNGNG
perlでAutoIt(他アプリケーションの操作の自動化)みたいな事出来ますか?

荒らしじゃないですよ、一応言っとく。
何処かに初心者板とかないですかね?
0908デフォルトの名無しさんNGNG
Win32::APIたたけば可能は可能。
しかしそれに特化した利便性はない。
0909デフォルトの名無しさんNGNG
>>907
Win32::GuiTest使ってみたら?
0910893NGNG
つまり>>890 = >>900 = >>905 と >>901は
単にやる気がない人ってことか。
0911デフォルトの名無しさんNGNG
リンクだけ貼るやつは知ったかの臭いがしていやだってこと。
0912デフォルトの名無しさんNGNG
>>911
ソースの先を我がものでコピペするより1024倍好感が持てるが?
0913デフォルトの名無しさんNGNG
受け取り方の個人差なんだからガタガタいわんと。
0914デフォルトの名無しさんNGNG
RTFM! は昔からの伝統で

ぐぐれ は、今の常識だろーよ。

少なくとも俺は機嫌が悪くても、正答のヒントくらいは書く。
0915デフォルトの名無しさんNGNG
http://search.cpan.org/search?query=random
の方はともかくとしても

http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq4.html#Why_aren_t_my_random_numbers_ran
の方はヒントの書き様もクソも無いだろ
リンク先どころかURLすらも読んでない奴にバカ丁寧にしてやる必要があるのかねぇ
0916デフォルトの名無しさんNGNG
こんばんは。
perl勉強中の名無しです。
今、TSVに区切られたファイル(約200件)を、
Postgresのテーブルに流し込むということをやっています。
調べてみたところ、Postgresに[copy]コマンドというものを発見。
これで流し込む事は出来ました。
しかし、copyはPostgreSQLのプロンプトでしか使えないようです。
perlの中で[insert]文を書いて流し込みたいのですが、
この場合どのような書き方をすれば良いのでしょうか。
どうぞ宜しくお願いいたします。
0917デフォルトの名無しさんNGNG
>916
http://perldoc.jp/docs/modules/DBD-Pg-1.22/Pg.pod
0918デフォルトの名無しさんNGNG
>>917
ありがとうございます。
DBD::Pgですか。
ド頭に宣言するアレですね。
今日は徹夜でやってみます。
結果は後ほど報告まで。
0919デフォルトの名無しさんNGNG
うざい性格。。。
0920デフォルトの名無しさんNGNG
perlの場合ドキュメントはそこそこ読みやすいからな。
親切に書かれてるものをさらにくだいて書く必要があるかどうかってのがポイントだろ
誰が書いても同じものを書き直すのはただの手間でしかない。
0921デフォルトの名無しさんNGNG
○○嫁っていうの、文系DQNみたいでなんかいや
0922デフォルトの名無しさんNGNG
ドキュメントを参照すれば正しいし、関連する事も書いてるし
それで不十分ならその旨質問すればちゃんと答えてくれてるだろ
何が気に入らないのか分からんな

「man読め、CPAN行け」だけなら俺もちょっと酷いかとは思うが
具体的なポインタまで示してくれてるんだから十分に親切だと思うぞ
0923デフォルトの名無しさんNGNG
このスレ的にはラクダ本のページ数で答えよう。
そうすれば本も売れてウマー
0924デフォルトの名無しさんNGNG
じゃあ2nd Editionで。
0925デフォルトの名無しさんNGNG
ラクダ本高くて買えない。。。
0926デフォルトの名無しさんNGNG
実は誰も第3版持ってない予感
0927デフォルトの名無しさんNGNG
>>926
意外と有り得るかも、持ってたとしてもほんの数人じゃない?
以前からPerlやってりゃ要らないもん、特に2版とか持ってる人は

0928デフォルトの名無しさんNGNG
趣味的にやってみよう、とか思ってプログラミング初心者なのに買いましたよ3版。
順当に初めての〜から買うべきだったのかと思ってちょっと欝。
テキストをHTMLにコンバートしたかったんです。
あと自作の掲示板とか。
0929デフォルトの名無しさんNGNG
>>927
新機能の差分は欲しいんだけどねぇ。
Cookbookのほうが重宝するですよ。

0930907NGNG
レスくれた人ありがとう、頑張ってみるよ。
0931デフォルトの名無しさんNGNG
>>928
ちょっとすればラクダ本買ったことが間違ってなかったことに気がつくよ。
それまでの辛抱。
0932デフォルトの名無しさんNGNG
ラクダ本もそうだが、ラマ本とかあのシリーズは翻訳がカスだからいけない。
理系人間が生真面目に正確に翻訳しただけの技術文書。
プロの翻訳家が翻訳すればもっとわかりやすくて魅力的な文章になりperlにより親しめるというものだがな。
日本語訳なんだから変数名も$hanakoとか$tarouとかに変えればいいんだよ。
@sushi = qw(toro ikura hirame);とか。

あのくそ面白くも無い翻訳文章を、何度も何度も読み返して体に慣れさせないとラクダ本は読了できない。
苦痛でしかないと思うが、>>928ガンガレ
体がラクダになれた頃、君は一皮剥ける。
0933デフォルトの名無しさんNGNG
木佐貫は「ムケてない」堀内監督が酷評
http://news14.2ch.net/test/read.cgi/mnewsplus/1084965631/
0934デフォルトの名無しさんNGNG
>>932
そりゃ訳者に言い過ぎ。
0935928NGNG
>>931
がんばります。

>>932
2巻はまだ買ってないし、プログラミング用語にも疎いので、スカラーとかレキシカルとか難しい
英語は(時々日本語も)意味を調べなおして自分で訳しなおさないと理解できなかったりしますw
スカラーコンテキスト→単数扱い、リストコンテキスト→複数扱い、評価→判定とか
まぁ、文系なので・・・・・・
0936デフォルトの名無しさんNGNG
>>928
古いラクダ本持って無いなら、買っても間違いじゃないと思うよ
正しく歩けるから、そこらのCGI向け初心者本とか買うよりはずっと正解
0937デフォルトの名無しさんNGNG
>>936
「初心者のためのPerl」じゃなくて、「初心者が書いたPer」だろ、
って言いたくなる本もあるしね。

>>932
オライリー本のほとんどは訳者がわかって訳してる。
それだけでコンピュータ本の翻訳としては平均以上。

0938デフォルトの名無しさんNGNG
>>937
訳者がわかって訳していても、その本を読むPerl初心者が取っ付き難いのが問題だといっているんだよ。
オライリー本を訳したのは訳者であって翻訳家でないというのが我々の不幸。
英語の言い回しをそのまま忠実に訳すから日本語になった時面白くない。
0939デフォルトの名無しさんNGNG
ラクダ本の訳にケチつけてるやつら…
一度「プログラミングC++」の訳読んで見れ。泣くから。
0940デフォルトの名無しさんNGNG
オライリー本(訳書)は
「日本語から英語(原文)を想像してそれを日本語に訳す」
のが正しい読み方だと俺は思ってる。

「プログラミング言語C++第3版」の訳はあまりにもひどすぎる。
訳者に「ニホンゴワカリマスカ?」って聞きたくなるし
正誤表を印刷したら26ページにもなったし
そこに載ってない間違いも少なくないし...
まあPerlスレで言うことじゃないか。
0941デフォルトの名無しさんNGNG
ことさら騒ぐほど訳のひどい本とは思わんけどなあ。
むしろかなりましな部類だと思う。
0942デフォルトの名無しさんNGNG
>>938の要求が過剰なだけ。
0943デフォルトの名無しさんNGNG
忠実に訳してもらえば原語の想像はしやすいが、こなれた訳だと全然想像できなくなるので、
難しい問題ではある。一つの語を全然別の語に訳しなおすとか。
0944デフォルトの名無しさんNGNG
>>938
存在するならば、コンピュータ書籍を翻訳できる翻訳家を列挙してくれ。
0945デフォルトの名無しさんNGNG
「リファクタリング」の訳はまともじゃないかな。
0946デフォルトの名無しさんNGNG
パスの通っていないところにある perlのファイルを全く違うところから
相対パスなどで実行するとき、

$ ../../tools/mytool.pl foo.txt

そのperlファイルが自分と同じディレクトリにあるライブラリをrequireで
呼んでいる場合、下のように実行パスを調べて付加してやらないと
カレントを探してないといわれていまいます。

#/usr/bin/perl
#mytool.pl
if ($0 =~ /^(.*\/).*$/) { $epath = $1; } else { $epath = './'; }
require $epath .'mylib.pl';

なにかもっといい方法があるのでしょうか?
0947デフォルトの名無しさんNGNG
my $path=$0; $path=~s/[^\/\\]+$//; require $path.'mylib.pl';
0948デフォルトの名無しさんNGNG
Win の ActivePerl 5.8.3 で日本語を使おうと思ったら、なんかすごく訳わかんないんですけど・・・
use utf8 とか use encoding 'shiftjis' して、
-f に utf8 で全角を含む文字列を渡すと結果が間違いとか。(多分このせいで File::Find がおかしくなるとか)
system ('echo OKあ'); の結果が予想したようにならないとか。
なんか設定があるのかと思って探しましたが、見つかりませんでした。

(元が Unix のツールだから、システムコールで unicode は考えてないのかと思いましたが、
open は大丈夫なのでちょっと不思議だなあ、と)


use utf8 とか use encoding 'shiftjis' しないと、SJIS でスクリプト書くの大変ですし。

みなさんスクリプトやデータに日本語(SJIS)使いたい時、どうしてます?

use encoding や use utf8 しないで、EUC でスクリプト書いて、I/O を jcode などで自分で変換するのが
一番確実な気がしてきました。(特に unicode を使いたい訳でもないので)
が、そんなもんなんでしょうか?

今書いてる奴は実行環境の問題で jperl は使えないし。
0949デフォルトの名無しさんNGNG
>>948
こんなのは。
use encoding 'shift_jis';
use Encode;
sub en{
    encode('shift_jis',$_[0]);
}
sub de{
    return decode('shift_jis',$_[0]);
}

my $path='c:\test';
opendir(my $dir,en $path);
my @files=grep {$_ ne '.' && $_ ne '..'} map {de $_} readdir($dir);
closedir($dir);
0950デフォルトの名無しさんNGNG
たぶんファイルの文字コードを指定できるように、
ファイル名の文字コードやコマンド引数の文字コードを
指定しとくとunicode文字列を適当に変換してくれる
ような仕組みも必要なんだろうね。いちいち自分で変換
するなんてめんどくさくてやってられん。
0951949NGNG
追記
Win32::OLEとかを使う時などは結構役に立つと思う。
myopendirとか作ってラップするという手もあるけど、この手法なら非標準の出力先・入力元(Win32::OLEなど)でも使えるので。
ただし入出力するものにde en とつける必要があるが(ただdecodeとかそのまま使うよりは楽)
system (en 'echo OKあ');
>>950
読み込んだり書き出したりする時に文字コード変換する仕組みはあったと思うぞ。
my $sjisfile='sjisfile.txt';
my $utf8file='utf8.txt';
my $eucfile='euc.txt';
open my $in,  "<:encoding(shiftjis)", $sjisfile or die;
open my $out, ">:encoding(utf8)",   $outfile or die;
open my $out2, ">:encoding(euc-jp)",   $outfile or die;
while(<$in>){print $out $_;print $out2 $_}
close($in);
close($out);
close($out2);
0952デフォルトの名無しさんNGNG
ファイル名とか、システムコール/APIに渡す文字列をエンコード/デコードする仕組みがどうって話しじゃないの?

ストリーム中のデータはPerlIOが処理してるれるけど、それじゃなくて。
0953948NGNG
私もとりあえず自分で SJIS 変換してごまかしたんですけど、
それだと結局、ファイル名に SJIS にない Unicode 文字使われた時に File::Find::find が
おかしくなるとか、結構ツライんですよね。

個人的にはいらないんですけど、Win だと意識せずにファイル名に使ってる人とかいるんで。

open のファイル名では使えたような気がしたんですけど、今ためしたらダメでした。

なるほど、現時点の Perl では、ストリームI/O でしか Unicode を意識してないって事ですか?
それならそれで判断しやすいんで、当面は自分でコード変換しますけど・・・。

そもそも Win 版は ANSI 版の API しか使ってないのかな。
最近 Win では ActivePerl しか使ってないけど、本体を自分でビルドしたら変わるかもしれないですね。
ヒマできたら調べてみよ・・・
0954948NGNG
そういえば、find については、普通の SJIS 文字でもおかしくなった事がある気がします。
別の原因だったかもしれないですけど。
0955948NGNG
たびたびスンマソン。
私の勝手な思いとしては、変換というよりは、システムコールが Unicode 対応なら
そのまま渡すと思っていたんですが、結局はそうじゃないんですね?
0956デフォルトの名無しさんNGNG
Perl自体がUnicode対応でも、モジュールが全てそうだというワケではないよ
File::Findについては調べてないけど
0957325NGNG
>>938
オライリーの本、そんなにわかりにくいとは思わないけど。。。
オブジェクト指向perl勉強しようと思ってマスターコース読んだけど、
イマイチしっくりこず、「実用perlプログラミング」読んで目から鱗でした。
0958教えてモンゴメリー伯爵NGNG
たとえばだ CSV形式のデータ 1,2,3,4,
               a,b,c,d
              あ,い,う,え
というデータがあるとしよう。
これをだな
              1,a,あ
              2,b,い
3,c,う

というふうにしたいわけだが....
どうしたらいいのじゃ

0959教えてモンゴメリー伯爵NGNG
明日またくるからなー
0960デフォルトの名無しさんNGNG
>>958
@csvData1 = split (/,/, $csv1);
@csvData2 = split (/,/, $csv2);
@csvData3 = split (/,/, $csv3);

for ($i=0; $csvData1[$i]; $i++) {
$newData = join (',', ($csvData[$i], $csvData[$i], $csvData[$i]));
push @newCsvData, $newData;
}

実際動かして試してないから、わからんが、
これで行けんだろ。
眠いから寝る。
0961デフォルトの名無しさんNGNG
>>960
間違えた。
>$newData = join (',', ($csvData[$i], $csvData[$i], $csvData[$i]));

ここの所。
$newData = join(',', ($csvData1[$i], $csvData2[$i], $csvData3[$i]));
へ変更。
0962デフォルトの名無しさんNGNG
このスレのやつらはどんなエディタつかってんだ?


スレ違い?
0963デフォルトの名無しさんNGNG
大昔 WordStar
昔  Vz
今  Meadow
0964デフォルトの名無しさんNGNG
emacs cperl-mode
0965デフォルトの名無しさんNGNG
サクラエディタ
0966デフォルトの名無しさんNGNG
Jedit
0967デフォルトの名無しさんNGNG
vi
って、なんか上の方にも似たような話なかったか
0968デフォルトの名無しさんNGNG
別に埋め立てるためだからって
手垢のついた話題、無理に持ち込まなくてもいいぞ
0969デフォルトの名無しさんNGNG
> aaa.pl *.txt
と指定したとき、ファイル名の大文字・小文字の違いを無視して
ファイルを読み込ませる方法ってありますか?
0970デフォルトの名無しさんNGNG
>>969
意味ふめー

> aaa.pl *.txt
でどうになって欲しいの? (どこがまずいの?)
0971名無しさん@初回限定NGNG
拡張子が、txt、TXT、Txtみたいに大文字小文字がバラバラでも、
*.txtって指定したら全部対象になるようにしたい。

元々がDOS使いの人間で、ファイル名の大文字小文字の違いを意識してなかった。
おかげで、*.txtって指定して、*.TXTが処理してなかったというテイタラクをしてしまった…
0972デフォルトの名無しさんNGNG
>>971
シェルが処理すべき問題で、Perlが処理すべき問題じゃない
readdir()とかと正規表現使えば出来ない事は無いけどな
0973デフォルトの名無しさんNGNG
while(<*.{txt,TXT}>){print "$_\n"} じゃだめか?カッコ悪いかそうか。
0974デフォルトの名無しさんNGNG
>>971
aaa.pl *.[tT][xX][tT]
0975デフォルトの名無しさんNGNG
>>973
カッコ悪くはないです。

拡張子といっても、3文字だけでも大文字小文字の組み合わせで8種類あるし、
txt、htm、doc、cntなど色々とあるので、もう少し流用しやすい方が嬉しい。

まぁ、txTなんて拡張子をつける人なんて考えられないけど、人のやることだし…

>>974
こんな手があるとは…
ってことは、973の {txt,TXT} を [Tt][Xx][Tt] とする手もアリですね。
0976デフォルトの名無しさんNGNG
最近のPerlの文字コードサポートについて解説したページを紹介してもらえますか?
0977デフォルトの名無しさんNGNG
File::DosGlobは?
$perl -MFile::DosGlob=glob -e 'print <*.txt>'

>>972さんが言っているように、aaa.pl *.txtと打ち込んだ時、
*.txtを展開しているのはPerlじゃなくてシェルだから、解法は
シェルの機能に依存しちゃうので厳密に言えば板違いかも。
0978デフォルトの名無しさんNGNG
Perlのパーサーは他のスクリプト言語と比べても重そうなのに、
どうしてPerlはこんなに速いんでしょうか。
0979デフォルトの名無しさんNGNG
とりたてて速いという程でも。
ユーザーが多いからそんだけバグも早くつぶれるし、
色々口出し^H^H^H助言してくれる輩もいるから、
自然と処理系も最適化されるんじゃないの。
0980教えてモンゴメリー伯爵NGNG
>>960
960よ あっぱれじゃ見事処理できたぞよ
              
ほうびをやろう   これほうび→ (ω)
0981デフォルトの名無しさんNGNG
>>978
プリコンパイル方式だからとかそういう話でなくて?
0982デフォルトの名無しさんNGNG
パーサなんてどれも速度かわんねーだろ
0983デフォルトの名無しさんNGNG
C にしたってコンパイルが遅いのは、普通は毎回巨大なヘッダをコンパイル
しててるとか最適化のせいでしょ。そもそも Perl はネイティブコードのジェネレートも無いし。

何万行もあるコードかいたらそれなりに遅いとおもうけど、普通のスクリプトのサイズじゃ
たかが知れてるわな。
0984デフォルトの名無しさんNGNG
未だにPHPは速いとか言ってる人いるのかなあ
0985デフォルトの名無しさんNGNG
PHPは速い
0986デフォルトの名無しさんNGNG
>>985
はいはい
0987デフォルトの名無しさんNGNG
webPron板に行けばPHPが早いって言ってるヤツいぱーいいてる。
0988デフォルトの名無しさんNGNG
VBとPerlに詳しい方教えて下さい。
VBでPowerPointを操作するVBAをマクロ記録機能を使って作ったのですが、
これをPerlに置き換えられなくて困っています。
わかる方がいたら教えて下さい。

ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:="D:\test\test.bmp", LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=75, Top:=-74, Width:=570, Height:=689).Select
With ActiveWindow.Selection.ShapeRange
.Fill.Transparency = 0#
.Height = 344.62
.Width = 285.12
End With
With ActiveWindow.Selection.ShapeRange.ActionSettings(ppMouseClick)
.Hyperlink.Address = "D:\test\test.bmp"
.SoundEffect.Type = ppSoundNone
.AnimateAction = msoFalse
End With
With ActiveWindow.Selection.ShapeRange.ActionSettings(ppMouseOver)
.Action = ppActionNone
.SoundEffect.Type = ppSoundNone
.AnimateAction = msoFalse
End With

環境は
Pen3:1GHz
Memory:2GB
OS:Windows2000Professional
Soft:MSPowerPoint2002SP-2
    ActivePerl5.6.1.635
です。
0989デフォルトの名無しさんNGNG
そろそろ次スレ誰か立ててくり。
俺は立てられないので。
0990デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1085564875/
新スレ
0991デフォルトの名無しさんNGNG
>>990
乙!
0992デフォルトの名無しさんNGNG
>>988
ひょっとして、全くやり方がわからんから、お前ら Perl で書いてアップしろって言ってるのか?
だったら、とりあえず \Perl\html\faq\Windows\ActivePerl-Winfaq12.html でも読めよ。

5.6.x にはこのファイルないかもしれんけど。無かったら 5.8.3 入れてドキュメントだけ見なよ。


がんばって書いてみたけど思ったように動かないなら、どう書いたのか書きなよ。

大体が、Perl でそれを書いたとして、できるのは実行した時に開いてるファイルに対する
処理だけなんだけど、それでいいのか?
0993988NGNG
>>992

Perlを使ってPowerPointでいくつかのグラフや画像をスライドに貼り付けていく作業の中で
「マウスクリック時の動作として指定ファイルのハイパーリンクを開く」
というのだけがどうしてもうまくいかないのでその部分の記述を教えて欲しくて書き込みました。

ドキュメントは5.6.xにもあるので見てみました。
OLDでの基本的なExcelやWordの動きのサンプルが載っていましたが
今回のものにはあまり参考になりませんでした。
一応これまでもPowerPointでグラフを挿入したり、
Excelで表を作りその文字列に同ブック内別シートの
指定セルへのハイパーリンクとかはやっているのですが、
どうにも今回のPowerPointでスライドに貼り付けた画像に
ハイパーリンクを設定するという作業がうまくいきません。

my $ppt = Win32::OLE->new('PowerPoint.Application') or die "PowerPoint start Error";
my $doc = $ppt->{Presentations}->Add(msoTrue);
$ppt->ActivePresentation->Slides->add(1,1);
my $pic_file = 'C:\test\test.bmp';
my $NewPic = $ppt->ActivePresentation->Slides(1)->Shapes->AddPicture($pic_file, 0, 1, 225, 115, 285, 345);

これでPowerPointの起動からスライドを1つ作ってそこへ画像の貼り付けまで出来ます。
この続きでその貼り付けた画像をマウスでクリックした時の動作として
その画像をハイパーリンクで開くという事をしたいのです。

my $NewMouse = $NewPic->ActionSettings(ppMouseClick);
$NewMouse->{Hyperlink}->{Address} = $pic_file;

こんな感じとかいろいろやってみているのですがマウスクリック時の動作の設定は全く変わりません。
その設定方法を教えて欲しいのです。
開いているファイルに対する処理の記述だけで結構ですので宜しくお願いします。
0994デフォルトの名無しさんNGNG
print (1=>2=>3=>4=>5);
これは仕様ですか?というかリストのセパレータはカンマじゃなくて
=>でもいいのね
0995デフォルトの名無しさんNGNG
記念カキコ v(^-^=)
0996デフォルトの名無しさんNGNG
あと、これがエラーになってしまうのはどうしてでしょうか?
perl -e 'print (1=>2=>3=>4=>5)[4]'
perl -e 'print $tmp=(1=>2=>3=>4=>5)[4]' これならOKです
0997デフォルトの名無しさんNGNG
>>994
http://perldoc.com/perl5.8.4/pod/perlop.html#Comma-Operator

>>996
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldata.html#List_value_constructors
http://perldoc.com/perl5.8.4/pod/perlop.html#Named-Unary-Operators
0998デフォルトの名無しさんNGNG
>>997
http://perldoc.com/perl5.8.4/pod/func/die.html
0999デフォルトの名無しさんNGNG
>>996
print(1=>2=>3=>4=>5) [4]
最初の括弧が関数の引数の括弧になっている。
print 関数に引数に 1=>2=>3=>4=>5 を渡して、
print 関数の戻り値の[4]番目を参照してエラーになってる。

print "", ( 1=>2=>3=>4=>5 )[4] なら大丈夫
10001000NGNG
># シンタクスエラーとなる
>$time = stat($file)[8]; # おおっと、括弧を忘れた
print ((1=>2=>3=>4)[3]);
これでいいということか、なるほど。

=>はComma演算子と同義語だけど、その左辺値に対しては
Stringとして解釈されることを強制するわけね。
ハッシュではなくて、普通のリストに=>を使ったら、一番右の値以外の全てが
文字列になるということなのかな?

と、送信しようと思ったら>>999レスありがとうございます。
>最初の括弧が関数の引数の括弧になっている。
なるほど。
print +(1=>2=>3=>4)[3];
これでもOKでした。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。