トップページ⇒tech
992コメント317KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001Mr. Moonlight ◆r0zx1vMqaw 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のみに関係する質問を取り扱っていこうと思います。
0002デフォルトの名無しさんNGNG
2げと
0003Mr. Moonlight ◆r0zx1vMqaw NGNG

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

前々スレ 2箱目
http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html

0004nobodyさんNGNG
>>1
スレたて乙
0005デフォルトの名無しさんNGNG
>>1 オツカレ
0006デフォルトの名無しさんNGNG
Perl 初心者コーナー Part21
http://pc2.2ch.net/test/read.cgi/php/1047980851/l50

一応誘導用に張っておきます。
# 前スレの最後のほうに見苦しいやり取りがあったので..
0007デフォルトの名無しさんNGNG
★男はココを見るべし★女と金と???★
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
0008デフォルトの名無しさんNGNG
4箱目おめ。
Perlの未来に幸あれ。
0009デフォルトの名無しさんNGNG
亀だが、>>前スレの958
環境はWindowsでいいんだよな?
ここから落としてこいや。
http://ppm.activestate.com/PPMPackages/zips/8xx-builds-only/Windows/
0010前スレ958NGNG
>>9
レスありがとうございます。
ダウンロードしてREADMEのとおりに

ppm > install DBD-ODBC.ppd

やってみたんですけどダメでした。
ppdファイルはC:\Perl\binの中に入れたんですけど
場所が違いますか?
0011デフォルトの名無しさんNGNG
サブルーチンに配列のコピーを渡す場合は sub(@a) とすればできるんですけど
2次元配列もどき(配列へのリファレンスの配列をコピーして渡したい場合は
逐一自前でコピーするしかないのかな?
0012デフォルトの名無しさんNGNG
>>11
普通に渡していいよ。

@array = ( [0,1,2], [3,4,5] );
&hoge(@array);

sub hoge {
print $_[1][0]; # 結果:3
}
0013デフォルトの名無しさんNGNG
>>12

sub hoge {
$_[1][0] = 0;
}

としてしまうと、サブルーチンから抜けたとき、データが破壊されてますよね?
サブルーチン内で変更するけど、抜けたら始めのデータと同じというようにしたいんです。


0014 ◆hMJAPH9PWA NGNG
>>13
一番いいのは変更しないこと。配列のコピーは高くつくよ。

それでもやりたいならStorableモジュール(5.8より標準)を使う。

use Storable qw(dclone);

sub hoge{
my $arg = dclone \@_;
$arg->[1][0] = 0;
}
0015デフォルトの名無しさんNGNG
前スレでcpanからのpackage installについて質問した者です。
SolarisでGNUの/usr/local/bin/ldではなくOS付属
/usr/ccs/bin/ldを使ってしまうためld option invalidで
止まるというトラブルは/usr/ccs/bin/ldを一時的に別名にして
回避できました。しかし今度は
Term::ReadKeyなどの幾つかのmoduleは今度は別のエラー
で止まります.(installできるpackageもある。)曰く、
Running make test
PERL_DL_NONLAZY=1 /usr/local/bin/perl "-Iblib/lib" "-Iblib/arch" -w test.pl
1 .. 8
*** Error code 139
make: Fatal error: Command failed for target `test_dynamic'
/usr/ccs/bin/make test -- NOT OK
Running make install
make test had returned bad status, won't install without force
どうもtest_dynamicというtargetのtestでかなりのmoduleのinstall
がこけます.なにか糸口を思いつく人いますか.
0016デフォルトの名無しさんNGNG
エラーの内容がわからないとなんとも。
0017デフォルトの名無しさんNGNG
正規表現スレが、マム板双方で見つけられなかったので、
ここで質問しまつ。
正規表現を使って、次のような文字列から、"http://hoge.com"
だけを抜き出したいのでつ。

例1: <a href="http://hoge.com" target="_top">

例2: <a target="_top" href="http://hoge.com">

どのような記述になるでしょうか?
"m!<(a|A)\\s*(href|HREF)\\s*=\\s*\"\\s*([^\"]*)\"\\s*!"
っていう書き方では、例2が当然ながらひっかからないわけですが。。。
0018デフォルトの名無しさんNGNG
>>17
/<a\s+href="(.+?)">/i
0019デフォルトの名無しさんNGNG
/<a.+?href="([^"]*)"/i
0020デフォルトの名無しさんNGNG
^^
0021デフォルトの名無しさんNGNG
/\"http:\/\/hoge.com\"/


冗談だよ。
0022デフォルトの名無しさんNGNG
>>17
正規表現スレは、webprog板にあるよ。
002317NGNG
>>18-22
クスコ。
それらを元に、この表現で落ち着いたヨカンでつ。

/<(a|A).+?(\s*)?(href|HREF)\s*=\s*"([^"]*)"/i
0024デフォルトの名無しさんNGNG
>23 冗長
0025デフォルトの名無しさんNGNG
>>24
冗長と余計は意味が違うと思うぞ。
0026デフォルトの名無しさんNGNG
>>23
single quote や bare word を考慮しなくてよいのですか。
002723NGNG
>>26
W3Cの仕様と違うのでは、、、
(そのように書いてるサイトはありますけど)
0028デフォルトの名無しさんNGNG
>>17,>>22
ちなみにWebProg板の正規表現スレを貼っておく
(テンプレ入りにしてもいいんじゃない?)

正規表現道場@2ch Part2
http://pc2.2ch.net/test/read.cgi/php/1038146241/
0029デフォルトの名無しさんNGNG
Perl正規表現雑技団
ttp://www.din.or.jp/~ohzaki/regex.htm
Perlメモ
ttp://www.din.or.jp/~ohzaki/perl.htm
は必読。
0030デフォルトの名無しさんNGNG
配列を2つ渡すと、一つになっちゃうんですが、なんとかなりませんか?

(@a, @b) = &sub(@a, @b);

sub a {
 my (@a, @b) = @_;

return @a, @b;
}

ってすると、@aだけになっちゃうんですけど。
リファレンス使う方法しかないかな?
0031デフォルトの名無しさんNGNG
>>30
> リファレンス使う方法しかないかな?
まあそれがベストだろうね。
0032デフォルトの名無しさんNGNG
>>30
サブルーチンに渡すだけならプロトタイプがある。
受け取る時は使えないが配列の長さが分かるならこんな手がある。

(@a[0 .. 3], @b[0 .. 3]) = &a;
0033有名だよなNGNG
sub join_array {
  return @_
}
0034DQN ◆POoODQNNNQ NGNG
ちょっとここは違うかなぁと思いつつこれ以上の場所が分からないので質問させてくだつぁい。

Namazu の filter の sub filter ($$$$$) は具体的にどの様な処理を行っているんでしょうか?
また、この関数に適当な情報を与えてフィルターでこした情報をもらいたい場合、どんな感じ
にすればいいんでしょうか・・・・?

ちょっと場違いかもしれませんが暇な人教えてくだつぁい!!
0035デフォルトの名無しさんNGNG
その文が perl なら今さっき話題に出てたプロトタイプ、
その変数を呼ぶ時はスカラー変数5つ渡せって意味だな。
あいにくと Namazu の filter 関数の使い方は知らんがな。
0036デフォルトの名無しさんNGNG
perl でJAVA の interface みたいなことできますか?
0037デフォルトの名無しさんNGNG
>>36
JAVAが分からんので、どういう動作をするものなのか解説してちょ。
0038デフォルトの名無しさんNGNG
>>36
そもそも厳密な方チェックを行わない言語にinterfaceとか必要ないわけで。
0039DQN ◆POoODQNNNQ NGNG
>>35
そうですかぁ。
わざわざありが豚
0040デフォルトの名無しさんNGNG
>>36
CPAN にこんなのあるようだが?

MRP::Interface
defines object interfaces
0041デフォルトの名無しさんNGNG
パソコンとパールの初心者です

MS-dos プロンプトで

perl -v

と入力しても
コマンドまたはファイル名が正しくありません
と出てしまいます。

正しくやればperl のバージョンが表示されるはず
と本に書いてあるのですが何が間違っているのでしょう?
0042デフォルトの名無しさんNGNG
>>41
ぱす
0043デフォルトの名無しさんNGNG
>>41
> パソコンとパールの初心者です
正直かなりきつくないか?
0044デフォルトの名無しさんNGNG
>>41
まずはお使いのOSの基本機能を極めてみてはどうでしょう?
0045デフォルトの名無しさんNGNG
perlをインストールしてないことに一票だな
0046デフォルトの名無しさんNGNG
>>41
ここではそういうラベルの人はサポート対象外です。
とりあえず "Hello! World" が動くようになってからまた来てください。
0047デフォルトの名無しさんNGNG
perl-v
って打ってたら笑うんだけどな。
0048デフォルトの名無しさんNGNG
perlで範囲を指定してその中から特定の文字列を抜き出すということは可能でしょうか?

たとえば
SELECT A FROM テーブル名 WHERE 〜

という文があったときにFROMからWHEREの間のテーブル名だけを
抜き出すときはどのようにするのでしょうか?

0049デフォルトの名無しさんNGNG
>>48
/FROM ([^\s]+) /;

print $1;
005048NGNG
>>49
回答ありがとうございます。

しかし処理がよくわからないのですが
FROM以降で空白以外の文字を抜き出しているのでしょうか?
あまりperlに慣れていないものでして申し訳ないです。
0051デフォルトの名無しさんNGNG
>>50
じゃあ、慣れてください。
0052デフォルトの名無しさんNGNG
>>50

[^〜]は、〜以外ってこと。
0053デフォルトの名無しさんNGNG
>>52
>空白以外の文字を抜き出しているのでしょうか
どう考えても彼はそれは理解していると思うが。
005448NGNG
すみません、文章が下手であまりよく伝わってないかもしれませんが

FROM A,B WHERE C=1 AND D=1 ORDER BY
という文があったとしたら
FROM と WHERE の間にある文字列(A,B)、及び
WHERE と ORDER BY の間にある文字列(C=1 AND D=1)
を抽出することができるのかどうかということです。

ちなみにABCDはそれぞれ決まった値ではないです。
0055デフォルトの名無しさんNGNG
>>54
1行じゃ無理でしょ。何らかの解析処理が必要。しかし、SQLパーサを書くのはバカらしい。
って言うかクエリーから情報抜き出さなきゃいけない局面ってどんなのよ?
0056デフォルトの名無しさんNGNG
WebProg板にあるのに、なんで重複スレを立てるの?
0057デフォルトの名無しさんNGNG
>>56
>>1嫁。理解できないならWebProg板に帰れ。
0058デフォルトの名無しさんNGNG
>>57
あっちにPerlのみのスレがあるよ?
0059デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/php/1047980851/
http://pc2.2ch.net/test/read.cgi/php/1030548610/

これら
0060デフォルトの名無しさんNGNG
>>55
SQLパーサくらいならどこかのマニアが正規表現化してそうだな(藁
0061デフォルトの名無しさんNGNG
>>59
CGIに依存しない…なら、向こうが板違いだろ。初心者スレとは重複してないし。
0062デフォルトの名無しさんNGNG
http://search.cpan.org/author/JZUCKER/SQL-Statement-1.005/lib/SQL/Parser.pm

使ったことないけど
0063デフォルトの名無しさんNGNG
>>54
SQLあんまり知らないけど、WHEREとORDER BYは必ずあるの?
あるなら $query=~/FROM\s(.+?)\sWHERE\s(..+?)\sORDER BY/;
で$1と$2に入らないかな?
0064デフォルトの名無しさんNGNG
optionalだよ
0065デフォルトの名無しさんNGNG
>>63
だったら楽なんだけどな。
0066デフォルトの名無しさんNGNG
汎用的なスクリプトを書きたいのですけれど、
perlではどのようにplatformの判別をするのでしょうか?

もしくは、汎用的に使えるパス区切り文字を持った変数などないのでしょうか?
0067デフォルトの名無しさんNGNG
>>66
>perlではどのようにplatformの判別をするのでしょうか?

LinuxのバイナリはWindowsでは動かんからなぁ。
0068デフォルトの名無しさんNGNG
>>67
性格悪いってよくいわれるでしょ?
0069デフォルトの名無しさんNGNG
>>68
悪いね。裏表の激しい人間なんだ。
0070デフォルトの名無しさんNGNG
どういうボケなのか全然分からない
0071 ◆hMJAPH9PWA NGNG
>>66
$^OでOSの名前が得られる。

単にファイルパスの処理ならFile::Specモジュールで事足りるよ。
0072デフォルトの名無しさんNGNG
>>66
そういうことをやっているモジュールはいろいろあるから、
探してみそ。
007366NGNG
>>71, 72
ありがとうございます。
$path = File::Spec->catfile($a, $b);
で、できました。

それにしてもモジュールの多さにびっくりです。
初めてのPerlしか持ってないのですが、
これはリファレンス系の本が入りますね。
英語が読める人ならいらないんでしょうけど。。汗
0074デフォルトの名無しさんNGNG
>>73
日本語のリファレンスの本買ったってモジュールの話なんか書いてないぞ
(標準モジュールとかメジャーなヤツは別として)
perldoc 読めるようになった方が早い
英語読めなくてもPerlが読めれば意外と何とかなる、がんばれ
0075Mr. Moonlight ◆r0zx1vMqaw NGNG
英語アレルギーの人って、「何とかなる」人には想像もつかないくらい
凄いですからねー。(その割に日本語プログラミング言語はもの凄い勢いで叩かれたりするんだよな)
エラーメッセージとか、ちょっぴりくだけて書いてあるぐらいでもう全然ダメだったりして。

モジュールまわりを懇切丁寧に日本語で書いた本があったら結構売れるかもね。(ないのかな?)
0076デフォルトの名無しさんNGNG
>>75
貴方はまず日本語から勉強してください。
0077デフォルトの名無しさんNGNG
Perl/Tkについての質問です。Canvas->postscript() で出力したファイルがghostscriptでよめません...。例えば

use Tk;
$t=new MainWindow();
$c=$t->Canvas(-width=>600, -height=>480)->pack();
$c->createRectangle(100,200,400,100);
$c->update();
$c->postscript(-file=>"result.eps");
MainLoop;

を実行するとresult.epsができますが、gvで開くとError: /undefined in AdjustColor云々というエラーが出ます。
なぜでしょうか...。アドビイラストレータでも開けない..
0078デフォルトの名無しさんNGNG
>60
DBI用でないかなー。そういうの。
0079デフォルトの名無しさんNGNG
駱駝本に解説が載ってるモジュールだけでもそれなりの数のような。
特に新版にはたくさん追加されたと聞いたけど、どうなんだろう?
0080デフォルトの名無しさんNGNG
ラクダ本ぐらい入荷しろよ。>近所の書店全部
0081デフォルトの名無しさんNGNG
ソートについて質問します。

クライアント(妻)の要望で数字は全角数字を使っているのですが、ソートすると1,100,2になっちゃうんです。
それを1,2,100にするために、いったん半角に変換してソートし、また全角に戻すってことをやっています。
しかもそれを
$data =~ s/0/0/g;
$data =~ s/1/1/g;
$data =~ s/2/2/g;
$data =~ s/3/3/g;
$data =~ s/4/4/g;
$data =~ s/5/5/g;
$data =~ s/6/6/g;
$data =~ s/7/7/g;
$data =~ s/8/8/g;
$data =~ s/9/9/g;
なんていう風に。

なんかもっとスマートに出来ませんか?
0082デフォルトの名無しさんNGNG
>>81
全角数字の配列が@dataに格納されてるとして、

%num = ('0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4,
     '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, );

@data = sort { $temp{$a} <=> $temp{$b} }
     map { ($temp{$_} = $_) =~ s/(0|1|2|3|4|5|6|7|8|9)/$num{$1}/g; $_; }
     @data;

なんてのはどうです?
0083デフォルトの名無しさんNGNG
>>81
こんな感じかな。けど、比較の度に全角→半角を行うから多分遅い。
結局、全部半角に変換して比較して元に戻す方がよさそう。

@a = qw(1 200 3 123);
print join " ", sort num @a;

sub num {
@N=qw(0 1 2 3 4 5 6 7 8 9);
($A,$B)=($a,$b);
for($i=0;$i<10;++$i){
$A=~s/$N[$i]/$i/g;
$B=~s/$N[$i]/$i/g;
}
return $A<=>$B;
}
008483NGNG
>>82
うあ。私のよりずっといいや。逃げよ、、、
008581NGNG
>>82
出来ました!
おかげさまでスクリプトがすっきりしました!
どうもありがとうございました。

>>83
またよろしくお願いします。
0086デフォルトの名無しさんNGNG
>>81
全角数字は、逆立ちしても文字列でしかないのでは? とりあえず素のperlでは。
内部的には数字であつかって、表示の際に変換するようにできるような
システムではないのかな?

ちなみに、Jcode.pmのtrとかいうのも使えるよ。
0087デフォルトの名無しさんNGNG
>>86
「文字列」の定義からだな。

EUCなシステムでのSJISはただバイトストリームでしかないわけで。
0088T女の竹田NGNG
>>81
@datas = sort { ('0' x ((30 - length $a) / 2). $a) cmp ('0' x ((30 - length $b) / 2). $b) } @datas;
…ごめん、一行でやってみたかっただけ。
比較の度に文字列操作するから、データ量が多いとめちゃくちゃ遅いはず。
0089T女の竹田NGNG
あ〜。
dataって、もともと複数形だった…

0090デフォルトの名無しさんNGNG
質問です。
例えば
system ('ftp hogehoge.com');
みたいなことをして
この後ftpコマンドに対する入力はどうすれば出来るのでしょうか?
よろしくお願いします。
0091デフォルトの名無しさんNGNG
>>90
うまくいけば標準入力が使えるのでファイルをリダイレクトするとかパイプ使うとか。

そもそもそんなことせずにftpなモジュールでも使った方が良いと思うけれど。
009290NGNG
あ、
ftpは例えばの話です。
ftpコマンドから帰ってくるメッセージを受け取って
使いたい時などはどうしたらよいのでしょうか?
0093デフォルトの名無しさんNGNG
>>92
バッククォート使うとかじゃだめ?
0094デフォルトの名無しさんNGNG
>>92
つまり、ftpの標準入力に書き込んで標準入力を読み込みたいと?
それは素のperlではデッドロックになりやすいからと意図的に外されていて、
使いたい場合は標準添付の IPC::Open2 か IPC::Open3 を使えとか。
けど、単に ftp を扱いたいだけなら >>91 に同意。
009590NGNG
バッククォート調べて見ました。
メッセージを受けとる方法は理解できたのですが
渡す方法がよく解らなくて困っています。

>>91さんの方法ってどういうふうに
書けばいいのでしょうか?
0096デフォルトの名無しさんNGNG
>>95
open(FILE,,"| ftp");
009790NGNG
IPC::Open* 調べてみたのですが日本語の文献があまり無いようで…
バッククォートとパイプでがんばってみます。
ありがとうございました。
0098デフォルトの名無しさんNGNG
人々は無力感を感じた……
0099デフォルトの名無しさんNGNG
Windows2000 で ActivePerl を使ってます。
c:\tool\ にある hoge.pl を、perl hoge.pl と
ファイル名のみで呼び出すにはどうすればいいですか?

たとえばJavaではWindowsの環境変数CLASSPATHにc:\toolを追加すれば
そのフォルダ内のclassファイルをファイル名のみで指定できますよね。
これと同じようなことをしたいんです。
0100デフォルトの名無しさんNGNG
C:\> CD C:\tool\
C:\tool> perl hoge.pl
010199NGNG
回答ありがとうございます。
どこのディレクトリからでもファイル名のみで
呼び出せる環境を作れると助かるんですが、無理ですか?
0102デフォルトの名無しさんNGNG
「perl C:\tool\hoge.pl」の1行を書いた"foo.bat"を
"C:\WINDOWS\"に置くとかじゃダメなの?
0103102NGNG
あ、ファイル名はfoo.batじゃなくて、
"hoge.bat"にすれば
> hoge
で実行できるけど。
0104デフォルトの名無しさんNGNG
>>101
pathが通った場所にhoge.plを置けば
C:\>hoge.pl
で呼び出せない?
0105デフォルトの名無しさんNGNG
ちなみに、環境変数CLASSPATH って、Javaでは関係あるけど、Perlには関係ないと思う。
01064NGNG
質問です。
Unixのsuコマンドのパス入力などはキーボード叩いた文字が
画面に反映されませんが、あの様な画面に反映しない入力は
Perlで実現できないのでしょうか?
0107デフォルトの名無しさんNGNG
>>104
関連付けしてないと無理じゃない?
0108デフォルトの名無しさんNGNG
>>106
cursesとか使えないの?
0109デフォルトの名無しさんNGNG
局所変数に、ハッシュなどのリファレンスの値を入れて、returnで、その局所変数を返すのは間違ってますか?
0110デフォルトの名無しさんNGNG
>>109
メモリ解放されなきゃ良いね。
0111109NGNG
>>110
そう、それが気になってます。
どんな仕様になってるんですか?
やっぱり、メモリの解放されちゃうんですか?
0112デフォルトの名無しさんNGNG
>>109
合ってる
0113109NGNG
>>112
え?合ってるの???
たまたま、他に使われてなくて、
アドレス先参照したら値が残ってたって事じゃなくて?
ちゃんと、アドレス先は、保証してくれるの???
0114デフォルトの名無しさんNGNG
>>109
http://216.239.39.101/search?q=cache:ZhAHQfTXFMAC:www.geocities.co.jp/SiliconValley-Oakland/1680/xperl/perl19.html+Perl+%E3%83%A1%E3%83%A2%E3%83%AA+%E3%82%B4%E3%83%9F&hl=ja&ie=UTF-8
これで疑問は解ける?
0115デフォルトの名無しさんNGNG
ごめん>>114は忘れて。全然関係なかった。
0116デフォルトの名無しさんNGNG
とりあえず言っとくと、>>109は問題ない
0117109NGNG
>>114
>>115
いいえ、レスありがとうございます。
一応、読ませてもらいますね。

考えてみると・・・
局所変数のアドレスがメモリに残ってたら、
そのサブルーチンを何度も呼び出していると、すごいメモリリークになるのかなぁ〜?
そうすると、やっぱ、メモリ解放されるのが普通なのかな〜と思うのですが・・・
自分でも調べたりしたのですが、あまり詳しく載ってる所がないので困ります・・・。
みんなは、容赦なく局所的に作られたアドレス返してるんですか???
0118デフォルトの名無しさんNGNG
直接Perlを使っているわけではないので、スレ違いかもしれませんが、出来ればよろしくお願いします。
Perl互換の正規表現エンジンをDelphiで使っているのですが
HTMLファイルから
<H1>
ほげほげ
</H1>
の’ほげほげ’の部分をマッチさせて取り出したいのですが、
<H1>ほげほげ</H1>
の場合、
m/<h[1-6]{1}[^>]*>(.+)<\/h[1-6]{1}>/i
でいけますが、前者の場合うまくマッチしてくれません。
どのような正規表現であればマッチするのでしょうか?
0119109NGNG
>>116
あ・・・本当に問題ないんですか?
うん、ありがとうございました。
無駄なポインタを引数に渡すのを止める事にします。
0120デフォルトの名無しさんNGNG
>>117
>そうすると、やっぱ、メモリ解放されるのが普通なのかな
使ってる奴は解放されないよ。解放されるのはどこからも参照されなくなったやつだけ。

ちゃんとした文献は見つけられなかったので、どうしてもキニナルなら
http://www.perldoc.com/perl5.6/pod/perl.html
で探してちょうだい。
0121デフォルトの名無しさんNGNG
>>118
デフォルトでは改行はマッチングされないよ。
PerlだったらMultiLine指定できるけど、embededは知らない。
\x0d,\x0aを加えてみてはいかが?
0122デフォルトの名無しさんNGNG
>>121
MultiLine指定が使える場合、正規表現は変わるのでしょうか?
0123118=122NGNG
122は
MultiLine指定が使える場合、どんな正規表現に変えればマッチさせることが出来るのでしょうか?
の意味です。
あと追加で
> \x0d,\x0aを加えてみてはいかが?
は具体的にどうすればいいのでしょう?
0124デフォルトの名無しさんNGNG
$ perl -e '$_="<H1>\nほげほげ\n</H1>"; print m/<h[1-6]{1}[^>]*>((?:.|\x0d|\x0a)+)<\/h[1-6]{1}>/i;'
こんなんかな。
まあ、\s使って
$ perl -e '$_="<H1>\nほげほげ\n</H1>"; print m/<h[1-6]{1}[^>]*>((?:.|\s)+)<\/h[1-6]{1}>/i;'
か(何か汚いな)
0125デフォルトの名無しさんNGNG
あと、単一行として処理するオプションはsだった。
m/<h[1-6]{1}[^>]*>(.+)<\/h[1-6]{1}>/i
を
m/<h[1-6]{1}[^>]*>(.+)<\/h[1-6]{1}>/is
に替えればいいと思う。
0126118=122NGNG
う〜ん、mとかsとかつけてみましたが変化無しでした。
結局、124氏の表現でうまくいきました。
うまくいったんですが、気になるのでついでに聞きます。
124氏の表現中の’?:.’はどういう意味があるんでしょう?
Perlは未だ触ったことがないので・・・。
でも、正規表現を扱ってみてPerlってテキスト処理にぴったりだと納得しました。
こんど暇を見つけて色々遊んでみようかと思います。
0127デフォルトの名無しさんNGNG
( ) … $1,$2,...で参照できるカッコ
(?: ) … 参照しないカッコ
0128デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/php/1030548610/
混乱中です。
0129デフォルトの名無しさんNGNG
まあ向こうはネタスレだろ。こっちの方が数倍まとも。ホットケ
0130デフォルトの名無しさんNGNG
検索エンジンの検索式を解析するモジュールってありますか?
0131デフォルトの名無しさんNGNG
>>130
?
0132デフォルトの名無しさんNGNG
例外処理はevalで実現するんですか?
0133デフォルトの名無しさんNGNG
evalは最後の武器でつ
0134デフォルトの名無しさんNGNG
最終兵器エバル
0135デフォルトの名無しさんNGNG

>>99
環境変数pathにActivePerlのperl.exeの場所を記述する。
私は、d:\perl\bin\perl.exeという構成なので
PATH=d:\perl\bin;〜省略
としている。

ちなみにxp環境ではperl hoge.pl ではなく、hoge.pl だけで実行できるんですけど
これはなぜなんですかね。
よくわからない。

0136118=122NGNG
>>127
あぁ、そういうことなんですね。
皆さん親切にありがとうございました。
0137デフォルトの名無しさんNGNG
おまいら怠惰だな。
0138デフォルトの名無しさんNGNG
>>135
質問内容がわかってない
0139デフォルトの名無しさんNGNG
>>135
Windowsの関連付けに従っているだけです。
私の場合*.plはエディタに関連付けてるので、同じ事をするとエディタが起動します。
0140デフォルトの名無しさんNGNG
>>126
これはどうよ。
undef $/;
while(<>) {
s/\r\n?//g;
while (s|<H1>(.+?)</H1>||i) {
print $1, "\n";
}
}
0141デフォルトの名無しさんNGNG
文字列を先頭から調べて指定した文字列にマッチしたら
イベントが発生するようにしたいんですけど、
どうすればいいですか?
0142デフォルトの名無しさんNGNG
指定した文字列にマッチするかどうかだけでいいの?
0143デフォルトの名無しさんNGNG
>>141
イベント?
こんなのでなくて?

foreach $b ($a =~ /(.)/g) {
 # 何か実行
}
0144141NGNG
ループで文字列$strを先頭から調べて、
ある正規表現にマッチしたら何かを処理。
文字列を最後まで調べ終わったらループを抜ける
ということをやりたいんですけど。

イメージ的には↓こんな感じ

while(???)
{
 if($str=~m/AAA/g)
 {
  #何か実行
 }
 elsif($str=~m/BBB/g)
 {
  #何か実行
 }
}
0145デフォルトの名無しさんNGNG
>>144
イベントが発生してないぞ。
0146デフォルトの名無しさんNGNG
while(というかループ)はいらねーんじゃねーの?
0147141NGNG
例えば
$str='AAABBBCCCAAACCCBBBCCCAAA';
のようになっていたときに

$strを先頭から調べて
・AAAの文字列にマッチしたらAAA用の処理。
・BBBの文字列をマッチしたらBBB用の処理。
・CCCの文字列をマッチしたらCCC用の処理。
を順次実行していく。

文字列を最後まで調べ終わったら終了。
という感じなんですけど。
0148デフォルトの名無しさんNGNG
>>147
イベントは?
0149デフォルトの名無しさんNGNG
VBと言うクソ言語は他の言語習得時に何の役にも立たないと言うことが証明されたわけだが。
0150デフォルトの名無しさんNGNG
requireやuseでモジュールを読み込んでるのですが、
Can't locate XXXXX in @INC(......)
ってなってしまいます。どうやったら@INCの指定するパスを変更できるのでしょうか?
もしくは他の解決方法があるのでしょうか?
どなたかご教授ください。
0151デフォルトの名無しさんNGNG
>>147

$str='AAABBBCCCAAACCCBBBCCCAAA';

while ($str)
{
if ($str =~ /AAA/)
{
print "$&\n"; # 「$&」はマッチした部分の文字列
$str = $'; # 「$'」はマッチした部分より後ろにある文字列
}

if ($str =~ /BBB/)
{
print "$&\n"; # 「$&」はマッチした部分の文字列
$str = $'; # 「$'」はマッチした部分より後ろにある文字列
}
}

こんなん?
0152testNGNG
>>148
冬物処分セール
0153デフォルトの名無しさんNGNG
なんか一気に書き込みが増えた(汗
0154デフォルトの名無しさんNGNG
>>150
use lib
0155151NGNG
>>147

gc修飾子を使った場合はこうかな?
俺は>>151の「$'」使うやつのほうが分かりやすい。

$str='AAABBBCCCAAACCCBBBCCCAAA';

while ($str =~ //gc)
{
 if ($str =~ /AAA/gc)
 {
  print "$&\n"; # 「$&」はマッチした部分の文字列
 }

 if ($str =~ /BBB/gc)
 {
  print "$&\n"; # 「$&」はマッチした部分の文字列
 }

 if ($str =~ /CCC/gc)
 {
  print "$&\n"; # 「$&」はマッチした部分の文字列
 }
}
0156デフォルトの名無しさんNGNG
>>151 >>155
イベントが発生してないから間違い
0157151,155NGNG
>>156
いや、俺は>>147だけにレスしたんだけど…
>>147の全文章を「イベント」でgrepしてもヒットしないんだけど…
0158デフォルトの名無しさんNGNG
イベントに固執してる阿呆が一匹いるな。
イベントの意味を理解しているのかねぇ。
0159デフォルトの名無しさんNGNG
それをイベントで処理したいっていうのが>>141の主張だろ。
イベントクラスとコールバックルーチン作るんじゃないのか?
0160デフォルトの名無しさんNGNG
>>158
イベントの意味が分からないなら黙ってた方がいいんじゃない?
0161デフォルトの名無しさんNGNG
>>159
クラスを継承してそのとき呼び出されるメソッドをオーバーライドしたりとかな。
0162デフォルトの名無しさんNGNG
ちょっと簡単に書いてみた。>>158は黙ってろ。

sub Callback($)
{
print @_,"\n";
}


$str='AAABBBCCCAAACCCBBBCCCAAA';
$func = \&Callback;
while($str=~//gc) {
if ($str=~/AAA/gc) {
&$func($&);
}
if ($str=~/BBB/gc) {
&$func($&);
}
if ($str=~/CCC/gc) {
&$func($&);
}
}
0163デフォルトの名無しさんNGNG
スペース潰れた(鬱死
>>162は文字列しか渡してないけどあとは自力でできるだろ>>>141
0164デフォルトの名無しさんNGNG
>>163
かちゅでぽっぷうぷした時にきれいだからいいよ。

全角スペースか、
&nbsp;&nbsp;&nbsp;&nbsp;    として欲しい。
0165デフォルトの名無しさんNGNG
>>141はどこいったんだ・・・・
0166デフォルトの名無しさんNGNG
my @a='AAABBBCCCAAACCCBBB'=~/
(?:(AAA)(?{print 'unko', $1, "\n";}))|
(?:(BBB)(?{print 'unko', $2, "\n";}))|
(?:(CCC)(?{print 'unko', $3, "\n";}))/gx;
0167デフォルトの名無しさんNGNG
釣りか?
0168141NGNG
レスしてくれた人ありがとうございます。
イメージ的にはHTML_Parserみたいなものを作ろうとしてたんですが、
説明が分かりにくかったですね。
あとは自分でがんばってみます。
0169デフォルトの名無しさんNGNG
sub AAA{print 'unko',$_[0],"\n";}
sub BBB{print 'thinpo',$_[0],"\n";}
sub CCC{print 'mamuko',$_[0],"\n";}
while('AAABBBCCCAAACCCBBB'=~/AAA|BBB|CCC/g){&{$&}($&);}
0170デフォルトの名無しさんNGNG
use strict;
sub AAA{print "__CHINPO__$_[0]\n";}
sub BBB{print "__MAMUKO__$_[0]\n";}
sub CCC{print "__UNKO__$_[0]\n";}
my %subs=(AAA=>\&AAA,BBB=>\&BBB,CCC=>\&CCC);
while('AAABBBCCCAAACCCBBB'=~/AAA|BBB|CCC/g){&{ $subs{$&}}($&);}
0171151NGNG
>>168
あ、偶然。
俺もIEやNN用に書かれた汚いHTMLも解析できるパーサを書いたから、
>>147を見て、「ああ、こりゃ俺と同じでHTML解析したいんだな」って思ったよ。
がんばれ。

それから、俺は正直、IEやNNが処理するユルユルHTMLの完全な仕様が知りたい。
下は俺が調べた結果の一部なんだけど…

●IEやNNは、「< p>」のように「<」の後に空白文字があるとそれをcontentと解釈する。
●IEやNNは、「<p>if (i<10)</p>」や「<p>if (j<-10)</p>」の、「<10」や「<-10」をp要素のcontentと解釈する。
●IEやNNは、「<」の直後が[a-zA-Z/!]ならタグ、それ以外はcontentと解釈する。
●IEやNNは、コメント(こんなの「<!-- -->」)を、SGMLのルール通りには解釈しない。
●「<!-- >」のみだと、これが全てコメントになります。
 しかし、「<!-- > -->」だと、「-->」までコメントになります。
 しかし、「<!-- > -- >」だと、最初の「<!-- >」までがコメントになります。
まだまだ続く…

こんなことを全部調べた人や、専用のサイトを知ってる人はいますか?
0172デフォルトの名無しさんNGNG
Mozilla だったらソースあるけど、どこから読んだらいいかわからんよなあ。
IE は地道にサンプル html を与えて、結果を解析していくことになるのかな。

パーサを書くんだったら yacc と bison ですか。使ったこと無いけど。
0173デフォルトの名無しさんNGNG
>>170
微妙に書き換えてやれ。

sub AAA{print "__CHINPO__$_[0]\n";}
sub BBB{print "__MAMUKO__$_[0]\n";}
sub CCC{print "__UNKO__$_[0]\n";}
my %subs=(AAA=>\&AAA,BBB=>\&BBB,CCC=>\&CCC);
my $m = join('|', keys %subs);
my $str='AAABBBCCCAAACCCBBB';
&{$subs{$&}}($&) while($str=~/$m/g);
0174デフォルトの名無しさんNGNG
perlの正規表現で 行の先頭にある # を置換したいのだけど、どうすれば良いのでしょうか?

$comment =~ s/([#]|^)(# [^<]*)/$1/g;

これではダメでした…

どなたかお願いします。
0175デフォルトの名無しさんNGNG
>>174
先頭にある#を何に置換したいの?
0176175NGNG
たとえば先頭の#を>に置換するなら $comment=~s/^#(.*)/>$1/gm;
0177174NGNG
>>175 >>176

ありがとうございました。

やってみます。
0178デフォルトで774KB...NGNG
すみません。174とは別人ですが・・・

応用で、このようにやっても動きませんでしたよ。

$comment =~ s/^#(.*)/$1<font color=\"$refcol\">$2<\/font>/g;
0179aaaNGNG
http://www5b.biglobe.ne.jp/~ryo-kyo/osu.html

http://my.vector.co.jp/servlet/System.FileDownload/download/ftp/0/279026/pack/win95/game/table/pachinko/sikisai.lzh
0180デフォルトの名無しさんNGNG
>>178
やってる意味がまったくわかりません
$1とか$2が何かわかってるのか?
0181デフォルトの名無しさんNGNG
>>178
$2 はどこから来るのか考えてみたかい?
0182デフォルトの名無しさんNGNG
>>178
俺は動いたが


$_ = "#hoge";
print $_ . "\n";
s/^#(.*)/$1<font color="#000000">$2<\/font>/g;
print $_ . "\n";


#hoge
hoge<font color="#000000"></font>
0183181NGNG
>>180
ウホッ、いい男。
0184デフォルトの名無しさんNGNG
>>178
まずはmオプションつけろ。
0185デフォルトの名無しさんNGNG
ファイルの最後3行を取得したい。
ファイルサイズが大きいので、メモリに全部読み込むことはしたくない。

考えたやり方としてファイルの行数を取得し、
$#@_-3回空回しして、最後の3回だけ値を取得する。

このときの、ファイル行数取得っていい方法ありますかね。
0186デフォルトの名無しさんNGNG
一行ずつ読んで常に三行だけ残すようにしたら?
0187デフォルトの名無しさんNGNG
>>185
@last3 = ();
$i = 0;
while (<>) {
$last3[$i] = $_;
$i = ($i + 1) % 3;
}
push(@last3, splice(@last3, 0, $i)) if $i;
0188185NGNG
>>187
ありがとうございます
これ使わせてもらいます
0189デフォルトの名無しさんNGNG
tail使え
0190デフォルトの名無しさんNGNG
四年ぶりくらいにプログラムやってるんだが、
自分の書いたコードがなんなのか忘れた。

sub Mainloop {
/(.+)/;
$url = $1;

これ、どういう意味ですか?
マジでわからない。C言語はなんとか覚えてるけどperlはほんとすぐに忘れる。
0191デフォルトの名無しさんNGNG
sub Mainloop {
/(.+)/;
$url = $1;
($url eq "") && next;
@urlparts = &GetUrlParts($url);
#make storing directory name
$a_storedir = $storedirT.$storedir;
$ldir = "";
for($i = 1; $i <= $dirlinks; $i++) {
$ldir = $urlparts[$i].$ldir;
}
$a_storedir .= $ldir.$storedirE;
print
"Url=$url\n",
"Folder=$a_storedir\\\n",
"Date=$date $time\n",
"ID=0\n\n";
}
0192デフォルトの名無しさんNGNG
htmlからurlぬきだしてiriaデータ作るスクリプトなんですが。
0193デフォルトの名無しさんNGNG
トレースしろよ
0194デフォルトの名無しさんNGNG
/(.+)/;
$url = $1;

↑改行をカットしようとしてるのかな?
0195デフォルトの名無しさんNGNG
そうだろうね。
つーか、use strict時には正規表現のコメントを義務化してくれ>らりー
0196デフォルトの名無しさんNGNG
>>194
だと思う。

わざわざ読めないコード書いてPerlのせいにするのイクナイ(・A・)
0197デフォルトの名無しさんNGNG
初心者スレから誘導されたっぱいのできました。

マルチポストお許しください。

perlで指定したサーバーが稼動しているか倒れているか調べる関数か何かありますか?
自鯖構築に利用したいのですが、独自ドメインからWebサーバーに飛ばして、
そこで、perlが処理するのですが、

if ($自鯖稼動状態 == 1) {
  print "Location: $ZISABAurl\n\n";
} else {
  print "Loaction: $WEBSABAurl\n\n";
}

みたいにしたいのですが。
0198デフォルトの名無しさんNGNG
向こうのスレも見てたけど読み辛いよ。
1. サーバって何?Webサーバの稼動確認だけでいいの?
2. どっちのサーバの稼動確認をしたいの?
3. LocationってことはCGIだろうけど>>1読んだ?
0199デフォルトの名無しさんNGNG
$_ = "ラーメン";
$a = "ー";
/$a/ && do {print "★";};

こういうの書くと

Unmatched [ before HERE mark in regex m/ー << HERE / at test.pl line 4.

とエラーが出てしまうんですが、日本語に対応してないコンパイラなんでしょうか?
OSはwindowsでactivePerlとかいうのをインストールした記憶があります。
0200デフォルトの名無しさんNGNG
/\Q$a\E/ かな。quotemeta参照。
0201199NGNG
ちょっと調べてもあまりよくわかりませんでしたが、
とにかく、うまくいきました。あり。
0202デフォルトの名無しさんNGNG
何をやりたいかの背景を書いている過程で
Locationがでてきてるのであって、perlの話題だからokでしょう。

NET::pingでping打つのはどうかな?
0203 NGNG
多重投稿防止の仕組み考えていて、クライアントのMACアドレスが
取得できればと思い、いろいろ調べてみたんですが、いい方法が
ないんですよねぇ〜、JAVAでもJAVAScriptでもだめ、CやVBなら
出来るようなんですけどVBScriptでは無理っぽいし・・・。

Perlでアクセスしてきたクライアントを一意に特定するいい方法って
何かありませんか・・・?
0204203NGNG
IPアドレス・・・再ダイアルアップしたら変わるので駄目
クッキー・・・・クッキーを削除されたら無効なので駄目

ということで上記以外の方法で、何かないでしょうか?
0205デフォルトの名無しさんNGNG
>>202
コンピュータは稼働中でも、ウェブサーバが生きているとはかぎらない。
0206デフォルトの名無しさんNGNG
LWPで自鯖にアクセスすればよかろうもん
0207デフォルトの名無しさんNGNG
>>203
CやVBでどうやってできるんだ?無理だろ
0208デフォルトの名無しさんNGNG
多重投稿ってIPアドレスかえてまでやらないと思うが。
0209デフォルトの名無しさんNGNG
>>203
バカ?
0210デフォルトの名無しさんNGNG
>>203
送られたデータのCRCでも取得して比較すりゃいいじゃん
0211デフォルトの名無しさんNGNG
>210
CRCだと違う文章を同一文章と間違える確率はどのくらいなんだろ?
0212デフォルトの名無しさんNGNG
>>211
32bit CRCなら、すべての文書のCRCが、均一に分布するとすれば、
異なる2つのもののCRCが一致する確率は、1/2**32ではないか?

心配なら、MD5とかSHA-1とか強力なやつを使えばいい。
0213デフォルトの名無しさんNGNG
CGIを一行ずつ実行できるデバッグツールみたいなものないのでしょうか
0214デフォルトの名無しさんNGNG
>>213
何を狙って言ったのか知らないけどperl -d
環境変数を再現したいって意味合いで言ったなら、
スクリプト先頭で予め代入しておくとか。
0215デフォルトの名無しさんNGNG
つーか、CGIの話はWebPr(ry
0216デフォルトの名無しさんNGNG
2chの二重カキコ規制は
おなじIPから同じバイト数の時に発生するらしい。
同じことすればいいんじゃないの?

故意に「荒らす」ようなことを防ぐためなら、知らんが。
0217デフォルトの名無しさんNGNG
荒らし対策ならuid/pwd発行して管理すればいいと思うけどなー。
0218デフォルトの名無しさんNGNG
引数で与えられたディレクトリ内の全てのファイルに対して
ある処理を行いたいのですが、どうやるのでしょうか?
0219デフォルトの名無しさんNGNG
opendir
0220218NGNG
>>219
どうもありがとうございます。
0221デフォルトの名無しさんNGNG
特に理由がないなら DirHandle 使う方が良いと思う

0222デフォルトの名無しさんNGNG
Inline::CPPってC++コンパイラが必要?
0223デフォルトの名無しさんNGNG
perlccで実行ファイルを作りたいのですが、
requireで読み出されているファイルをリンクしてコンパイルするには
どうすればよいのでしょうか?
どなたかご教授願います。
0224デフォルトの名無しさんNGNG
>>233
requireでできないならpmになおせばいい
なおし方は難しくないだろ
勉強で試すぐらいにしかperlccは役にはたたんよ、
実行ファイルはでかいし、まともにコンパイルできない
0225デフォルトの名無しさんNGNG
cygwin で Perl/Tk を動かしたい。
Perl5.6.1対応ならCygwin用のバイナリが転がっているのを見たことがあるが
Perl5.8.0 (最近のcygwinはこれを入れてしまう) には対応していなかった。
そこで CPAN からソースを拾ってきて make しようとしたが
途中で windows.h がないといって怒られた。
お前らの中で cygwin にソースからコンパイルしてインスコした香具師はいますか?
0226デフォルトの名無しさんNGNG
Perl5.6.1もcygeinのセットアップで選べば入れられるし
Activeperl5.8ではデふぉでtK入ってるし、、、
windows.h は普通 include/w32api/ 
に入ってるし
0227デフォルトの名無しさんNGNG
Perl5.6.1とPerl5.8.0
のXSには互換性がない対応してないのはあたりまえ
0228デフォルトの名無しさんNGNG
サーバープログラム組むならNet::Daemonがいいですか?
0229デフォルトの名無しさんNGNG
Doraemon
0230デフォルトの名無しさんNGNG
モジュールなんか使うな
0231デフォルトの名無しさんNGNG
Perlで、ハンドルをファイルを介さないで文字列に繋ぎたいんだけど、
無理でつか?
0232デフォルトの名無しさんNGNG
25歳。
去年まで金無し君だったけど、オンラインカジノとパチンコで
二年で350万貯めた。一度やってみなよ。
初回のみだけど、1ドル以上のチップを買えば30ドル(4000円くらい)貰える。
もらうだけもらってプレイせずに換金することもできるし、ルーレットで赤か黒に
思い切って賭けてしまえば50パーセントで二倍になる。
金なきゃオフラインでゲームすればいいだけ。暇つぶしになる。
ビデオポーカーとかスロとか色々あるのでマジでお勧め。
http://www.imperialcasino.com/~1kl5/japanese/
0233デフォルトの名無しさんNGNG
>>231
いまいち意味がわからないけど
STDINとかを使いたいってこと?
0234あぼーんNGNG
 ( ・∀・)< こんなのみつけたっち♪
http://muryou.gasuki.com/moe/hankaku10.html
http://muryou.gasuki.com/moe/hankaku09.html
http://muryou.gasuki.com/moe/hankaku08.html
http://muryou.gasuki.com/moe/hankaku07.html
http://muryou.gasuki.com/moe/hankaku06.html
http://muryou.gasuki.com/moe/hankaku05.html
http://muryou.gasuki.com/moe/hankaku04.html
http://muryou.gasuki.com/moe/hankaku03.html
http://muryou.gasuki.com/moe/hankaku02.html
http://muryou.gasuki.com/moe/hankaku01.html
0235 ◆hMJAPH9PWA NGNG
>>231
C++でいうところのstd::stringstreamということかな?
Perl5.8.0以上ならPerlIO::scalarが、古いバージョンならIO::Scalarが使えるよ。
0236デフォルトの名無しさんNGNG
全部 perlで代用できるんで 最近ワンライナー以外では awkとか使わなくなっちゃったな。
0237デフォルトの名無しさんNGNG
XML::RSS
ってどっか置いてない?
0238デフォルトの名無しさんNGNG
>>233
>>235
ありがとう参考なりますた。

use IO::Scalar;
my $s;
tie *STDOUT , 'IO::Scalar', \$s;
print "OK\n" ;
print STDERR "### $s" ;
untie *STDOUT ;

結果
### OK

こんな感じでSTDOUT奪えました。
ただ、IO::Scalarって標準モジュールじゃないんすね、
クライアント先で動くかが、不安なところ・・・
でも助かりました、感謝!
0239デフォルトの名無しさんNGNG
>>237
CPANいけよ(w
0240デフォルトの名無しさんNGNG
237 デフォルトの名無しさん 03/04/09 00:59
大根
ってどっか置いてない?

239 デフォルトの名無しさん 03/04/09 00:59
>>237
八百屋いけよ(w
0241デフォルトの名無しさんNGNG
時間間違えた(鬱氏
0242デフォルトの名無しさんNGNG
>>239

勝手にModuleインスコすることが、まかりならぬ場合もあるのよね・・・。
国から金出してもらってる団体のサーバとか、こういう構成で使う
って提出しているので、それ以外に使うと国に金返せっていわれる。

そのせいで、sh 以外の入っていないUNIX触ったこともあるです。
馬鹿な話だとは思うけど。
0243デフォルトの名無しさんNGNG
237 の質問とその話がどう結びつくわけ?
0244デフォルトの名無しさんNGNG
べつにぃ。
関係ない話だもん。
0245237NGNG

        , '"  ̄ ヽ
        ル)"ノノルλ  .  .
        ルil ゚∀゚ノリ ミ.:;∧∧
  #####++⊂⊂[|  )   ∵'( ゚д゚)>>244
     ゞ ミ  /_ 〉〈 ゝ 彡 /U /つ
           し'ノ    ( ノ ノ

いやCPANにないのよXML::RSS
0246デフォルトの名無しさんNGNG
>>245
http://search.cpan.org/dist/XML-RSS/
0247デフォルトの名無しさんNGNG
お前は本当に検索したのかと問い詰めたい
0248デフォルトの名無しさんNGNG
>>245
激しく間抜けだな(w
0249238NGNG
お世話になってまつ。
さっきの質問に関連するんですが、
多重にtieした場合、untieで復元出来ずに困ってます。
次のコードなんですが、

use IO::Scalar;

sub main
{
my $buf = "" ;
tie *STDOUT , 'IO::Scalar', \$buf ;
my $buf2 = "" ;
tie *STDOUT , 'IO::Scalar', \$buf2 ;
print "OK\n" ;
untie *STDOUT ;
print "1 $buf2" ;
untie *STDOUT ;
print "2 $buf" ;
}
main() ;

実行結果は次の様になってしまいます、
1 OK
2

untieできちんと復元できれば、
1 OK
2 1 OK
となるはずなんですが・・・
回避方法ご存知ないでつか?
0250あぼーんNGNG
あぼーん
0251デフォルトの名無しさんNGNG
>>239
rootでない人が勝手に/usr/libにモジュールをインスコしちゃいけないです。
テストしたいから/home/kikyoshaにインスコしたい場合もあります。
Perlクックブックのp424-426には
PERL5LIB環境変数を設定する
-I スイッチを使う
use lib プラグマを使う
といったソリューションが書いてありますた。
0252デフォルトの名無しさんNGNG
>>251
> rootでない人が勝手に/usr/libにモジュールをインスコしちゃいけないです。
勝手にもクソもそもそもできないでしょ。
0253 ◆hMJAPH9PWA NGNG
>>249
それはそういう仕様です。
tie()を複数回行っても、効果は上書きされるだけ。
そういう場合はスタックでも使うんだね。

use IO::Scalar;
my @ios = (\*STDOUT);
my $buf;
my $buf2;
push @ios, IO::Scalar->new(\$buf);
push @ios, IO::Scalar->new(\$buf2);
print {$ios[-1]} "OK\n";
pop @ios;
print {$ios[-1]} "1 $buf2";
pop @ios;
print {$ios[-1]} "2 $buf";
0254デフォルトの名無しさんNGNG
Windowsで使う場合, ActivePerlに比べてcygwin perlの駄目な点ってなに?
0255デフォルトの名無しさんNGNG
プロセス関係が弱そう
0256238NGNG
>>253
レスどうもです。
参考になりますた。
サンプルで示して頂いたように、
標準出力をtieするのを辞めました。
ありがと御座いました、感謝してます。
0257デフォルトの名無しさんNGNG
File::Specについて質問です。html上の相対リンクを絶対リンクに変換する必要があり、
File::Spec->rel2abs()を試してみたのですが
perl -e 'use File::Spec; $p="../bin/file"; print File::Spec->rel2abs( $p, "/a/b/c/" ) . "\n";'
-> /a/b/c/../bin/file
・・とそのまま連結して返します。
これは仕様でしょうか?解決方法、もしくは別の方法がありましたらご教授下さい。
0258デフォルトの名無しさんNGNG
lib/File/Spec/Unix.pm 見た限りでは処理してないみたいですね。

1 while s![^/]+/\.\./!!;
こんなんでどうでしょ。
ちゃんと動くかどうかはわからないですが。
0259名無し☆ごんべNGNG
あかんWinでActivePerl使ってんねんけどちゃんと一個下のフォルダにcgi-bin作って
そこにプログラム入れてるけど呼び出せへん。
関連ついてない?
だれかおしえれ 意味不明
0260デフォルトの名無しさんNGNG
>259
IISの設定をしていないだけだろ。
0261デフォルトの名無しさんNGNG
cgiは(ry
0262名無し☆ごんべNGNG
ってかIISの設定してるはずやねんけどな〜
0263デフォルトの名無しさんNGNG
>>258
それだとこうなっちゃう。

"../../b" -> "b"
"/a/./../b" -> "/a/b"
"/a/../../../../b" -> "/../b"

こんなとこかねぇ。
1 while s<(^|/)(?!\.\.?)[^/]+/\.\./><\1>g;
0264デフォルトの名無しさんNGNG
>>254
以前cygwinのPerl 5.8を試した時は use encoding 'shift_jis';
しても2バイトめが 5CH のsjis文字列が通らなかった。ActivePerlはOK。
configure か何かまちがってる?
0265258NGNG
>>263
/../xx や /./ についてはSpecの方で対処してたからいいと思ったケド、
/a/../../b については不備だったかな。
まぁそもそもディレ指定が間違ってるから対処外だと思うんだが。
正規はイマイチ弱いので、参考にさせて頂きます。
0266デフォルトの名無しさんNGNG
ActivePerlのPPMについて前のスレでも聞いたんですけど
未だ解決してないのでもう一度書き込みします。

install XXXでインスコできなくて、
searcch XXXでもみつからないので、

↓ここのzipファイルをダウンロードして
いろいろやってみたのですが、インスコされませんでした。
http://ppm.activestate.com/PPMPackages/zips/8xx-builds-only/Windows/

具体的にどこにppdファイルを置いて
どのようなコマンドを打てばいいのか教えていただけると
ありがたいです。

↓河合さんのページも参考にしたんですけどできませんでした。
http://member.nifty.ne.jp/hippo2000/perltips/ppm.htm

環境は、WindowsXP、ActivePerl5.8.0です。
0267257NGNG
>>258 >>263
ベリーサンクスコ!!
スマートな正規表現に感動しますた。
0268nobodyさん NGNG
>>266
ppm install http://(ppdモジュールのuri)

をためしてみますた??
0269226NGNG
インスコしたいのはInlineモジュールなんですけど、
もういろいろな書式でインストールを試みたけどできません。
つーか色々な書式があるのは何で???
(サイトによって書式が微妙に違うし。)

ppm install Inline
ppm install /location d:\Inline Inline
ppm install --location d:\Inline Inline
ppm install --location=d:\Inline Inline

あー
0270nobodyさん NGNG
>>269
中見たけどモジュール自体が入ってないみたいですねぃ・・・
0271デフォルトの名無しさん NGNG
>>269
ttp://ppm.activestate.com/PPMPackages/zips/8xx-builds-only/Windows/の
Inline.zipは中身、空に等しい。CPANからソース取ってきてインストールするよろし。
って優香、Inline.ppdの中見てないのか?見てもわからんのか?
0272デフォルトの名無しさんNGNG
>>267 見れば分かると思うけど、/.a/../a とかは上手く行かねえから注意しな。
0273デフォルトの名無しさんNGNG
>>272
そっか。

1 while s<(^|/)(?!\.\.?/)[^/]+/\.\./><\1>g;
0274デフォルトの名無しさんNGNG
ActivePerlで入出力のデフォルトを:rawにする方法はありますか?
cygwinのなら環境変数PERLIOに設定すればOKでしたが
ActivePerlだと↑の方法もopenプラグマでも�_でした。
0275デフォルトの名無しさんNGNG
1行ずつ標準入力から読み込んで
文字列がマッチしたらhelloと表示するプログラムを作りたいのですが
以下のコードでうまく動きません。
何を入力してもhelloと表示されても良さそうなきがするんだけど何を入力しても
helloとは表示されないです。何か間違ってますか?

#!/usr/bin/perl
$i=0;
while ($line=<STDIN>){
chop($line);
if ($line=~/.*/) {
print hello;
};
}
0276デフォルトの名無しさんNGNG
あう
print "hello"ですた氏にまつ
0277デフォルトの名無しさんNGNG
>>275
何を入力してもhelloと表示されましたが、何か?
0278275NGNG
うちのlinuxのperl 5.6.1では表示されないっす。
perl -e "print hello"もダメっす
そういえば変数には$を付けないとダメだし
なんで表示されないんだろ
不思議なこともあるもんだ
0279デフォルトの名無しさんNGNG
perl -e 'print "hello"'は?
0280275NGNG
>>279
helloって
表示されますね
今度からちゃんと"つけようと思います。

せめてエラーメッセージ位出してくれたらいいのに。。。
バージョンアップしようかな
0281デフォルトの名無しさんNGNG
>>280
なんかうぜぇやつだな。
use strict; つけて perl -cw しろ。
0282デフォルトの名無しさんNGNG
なんでうぜぇかっつーと、

×せめてエラーメッセージ位出してくれたらいいのに。。。
○もしエラーメッセージが出せるなら、それを出してくれるようにする方法はありませんか?

ちゃんと警告メッセージ出してくれる。
Unquoted string "hello" may clash with future reserved word at hoge.pl line 8.
Name "main::hello" used only once: possible typo at hoge.pl line 8.
0283275NGNG
>>281
こりゃどうも
0284275NGNG
書き方まずかったかもしれません
use strict;
は求めていたものです。助かります
0285デフォルトの名無しさんNGNG
>>278
裸のワードは基本的に受け付けないし、変数名には$がいるのがperlってもんだ。
そんな基本的な事も調べずここで不思議がってるとは不思議な奴だ(笑

ちなみに、裸のワードは昔は受け付けていたとかで、
今でも配列のキーとか=>演算子の左とかなら使える。
0286名無し☆ごんべNGNG
Microsoft(R) Windpws 98
(C)Copyright Microsoft Corp 1981-1998.

C:\My Documents\Perl>perl -v

This is perl, v5.8.0 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -v for more detail)

Copylight 1987-2002, Larry Wall

Binary build 805 provided by ActiveState Corp. http://www.ActiveState.com
Built 18:08:02 Fed 4 2003

Perl may be copied only under the terms of either the Artistic License of the
GNU General Public License, Which may be found in the Perl 5 source kit.

Complete documentation for Perl,including FAQ lists, should be found on
this System using 'man perl'or'perldoc perl'. If you have access to the
Internet,point your browser at http://www.perl.com/ , the Perl Home Page.
0287275NGNG
>>285
今更遅いが
意図したことと違うことを書いてしまいますたスマソ
$を付けるのは知ってます。
不思議と思ったのは
実行自体は通るけど何も表示されない。
空っぽの変数みたいだけど
perl -e '$hello = 5 ; print hello;'は実行はされるけども
5とは表示されずになにも表示されないんで

helloは'hello'でも$helloでも無いのにエラーもでないんで
そんときは不思議ですた
0288デフォルトの名無しさんNGNG
>>287
きっとおまいさんは
$hoge = 5; print @hoge;
で5が出なかったら騒ぐんだろうな
0289275NGNG
何か俺大人気だな(w
$hoge と@hogeはさすがに別物だとわかりますけどね
騒いでもいいけど。
0290デフォルトの名無しさんNGNG
print hello,hello; なら hello と出る。

0291デフォルトの名無しさんNGNG
>>290
print STDOUT hello; だった。
0292デフォルトの名無しさんNGNG
>>275
頼む!、もうスレ汚すの止めてくれ。
君には、こっちがぴったりだよ。

Perl 初心者コーナー Part21
http://pc2.2ch.net/test/read.cgi/php/1047980851/l50
0293デフォルトの名無しさんNGNG
printf x,hello; --> x を表示
print q nippon; --> ippo を表示
0294デフォルトの名無しさんNGNG
にゃはは
print nippon . "";
nippon
0295226NGNG
>>271の言うとおりCPANに置いてあるtar.gzをダウンロードし
自前でインストールすることにしました。
コンパイラは、borlandのbcc32.exe、makeはdmakeをインストールし、
それに合せてConfig.pmを

cc='cl'→ cc='bcc32'
make='nmake'→make='dmake'

のように書き換えました。(いいのかな?)
が、「dmake test」で以下のようなエラーがでました。
「エラー E2075: コマンドライン オプションの間違い : -Gf」
0296266NGNG
>>295のエラーは

Config.pmの

ccflags='-nologo -Gf -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX'

の部分が引っかかってるみたいなんですが。
これはWin版Perlの設定でデフォルトのコンパイラであるcl.exe用の
コマンドラインオプションだからbcc32.exeではエラーが出るという
ことなんでしょうか?
0297デフォルトの名無しさんNGNG
>>293
上手い!!
0298デフォルトの名無しさんNGNG
>>296
>これはWin版Perlの設定でデフォルトのコンパイラであるcl.exe用の
>コマンドラインオプションだからbcc32.exeではエラーが出るという
>ことなんでしょうか?
だと思う。
これを回避するには、
1)MSVCを入手する。
2)bcc32+dmakeでperl自体をコンパイルする。
3)perl sourceのwin32/makefile.mkを見てccflagsをCFLAGSに合わせる。
という方法ががある。3)はうまく逝くかどうかは保障できないが試して味噌。
0299デフォルトの名無しさんNGNG
すんません、ある文字列から頭2バイトだけ取り除いたものが欲しいのですが
my $a = 'abcdef';#欲しいのは$a='cdef'。
substr($a, 0, 2);
print $a;

結果
'abcdef'

となってしまいます…

何か良い方法ありますか?
0300デフォルトの名無しさんNGNG
substrの戻り値を受けろよアホ
0301デフォルトの名無しさんNGNG
>>299
292へどうぞ。
0302デフォルトの名無しさんNGNG
>>299
my $a = 'abcdef';
$a = substr($a,2);
print $a;

これで分からなかったら >>292 行け
0303299NGNG
すいません、ありがとうございました。
>>302を見る前に>>301の通りに初心者スレに行ったのですが両方に迷惑をかけて
しまったようです。ゴメンナサイ。
0304デフォルトの名無しさんNGNG
>>303
そういう時は、先に「○○へ行きます」と断っておいてから、
○○の方へ書かないとマルチで叩かれるよ。答えてもらえる確率が減るから気をつけた方がいい。
0305デフォルトの名無しさんNGNG
つーか、どうしようもない香具師を向こうに誘導しないでくれ!
板が違うんだから、ここにも初心者スレ作りやがれ!
ム板内で完結しやがれってんだ。
0306デフォルトの名無しさんNGNG
WebProg板は初心者用・ム板が中級者以上ということでFA
0307デフォルトの名無しさんNGNG
ここで質問する初心者の大半は
CGI関係だからでFA?
0308デフォルトの名無しさんNGNG
>>287
裸のワードはハッシュのキー以外の場合はサブルーチンとみなされる。つまり、
print hello;
は、サブルーチン hello の返り値を print するという意味。
0309299NGNG
>>301
書くのが遅れましたが適切なスレに誘導して頂き有難うございました。
0310デフォルトの名無しさんNGNG
WindowsとLinuxとで挙動がちがって悩んでます。
Windows: ActivePerl v5.6.0 build 618 と v5.8.0 build 805
Linux: perl v5.6.0 built for i386-linux

ActivePerlでは、open()で改行コードがCRLFなファイルと開くと、
$_に入ってきた時点で、CR部分が抜け落ちているような…。
CRLFなファイルだと、改行部分は "0D 0A"と表示されるはずなんですが、

open(IN, $file);
while(<IN>){
  s/([\x00-\xFF])/sprintf(" %02X", unpack("C",$1))/ge;
  print $_ . "\n";
}
close(IN);

ActivePerlでは、"0A"になり、CRが落ちてしまいますが、
Linuxだとちゃんと "0D 0A"になります。
当然の事ながらファイルをバイナリエディタで開くとCRLFな部分は、
"0D 0A"になってます。

回避方法や何が悪いか、わかる方いません?
0311nobodyさん NGNG
>>310
元データがLFだけなんじゃないですか?
open(IN, $file);
binmode(IN);
while(<IN>){
  s/([\x00-\xFF])/sprintf(" %02X", unpack("C",$1))/ge;
  print $_ . "\n";
}
close(IN);

でもやって、データを確認してみれば?
0312 ◆hMJAPH9PWA NGNG
printの第一引数に裸のワードがくると、ファイルハンドルと見なされる。ただし、サブルーチンが事前宣言されている場合はそのサブルーチンが呼び出される。
…これはuse strictの元でもエラーにはならないので注意。
# use warnings FATAL => 'unopened'; で実行時例外を出すことは可能だけど

>>310
binmode()
0313nobodyさん NGNG
>>312
早い話がきっちり書けと
0314310NGNG
>>311, 312
ボケてました。
ご指摘通り binmode()のし忘れでした(恥
ありがとん。
0315デフォルトの名無しさんNGNG
こんばんわ、Perlを勉強しはじめたのですが、理解できない部分
があったので質問させてください。

for($w=0;$w<10;$w++){
$f=&k($w);
print"$f\n";
}
sub k{
local($d)=@_;
my($w);
$w=$d*$d;
return($w);
}
というものがあるのですが、2行目の$wには1行目のfor()で決定される数字が
入るのでしょうか?それともreturnでの返り値が入るのでしょうか?

もし前者の場合は返り値はどこにはいるのでしょうか?&k($w)自体に入るのでし
ょうか?

もしも後者の場合は関数kには式だけあって数字がなくなってしまう気がしますが
どこから数字をもってきているのでしょうか?

かなり初歩的な質問でしょうが、教えていただけると幸いです。
よろしくおねがいします。
0316315NGNG
すいません初心者スレありましたね・・
そっちにいきます、スレ汚し申し訳ありませんでした。
0317デフォルトの名無しさんNGNG
>2行目の$wには1行目のfor()で決定される数字が入るのでしょうか

そう

>もし前者の場合は返り値はどこにはいるのでしょうか?
>&k($w)自体に入るのでしょうか?

そう。結果として$fにはいる。
0318デフォルトの名無しさんNGNG
>>317
移動するって言ってんのに答えるなよ。
0319デフォルトの名無しさんNGNG
プログラム終了時に呼ばれた、オブジェクトのデストラクタの中では、
オブジェクトのプロパティが先に死んでるコトはありえるんでしょうか?
環状リファレンスなども開放されることを考えると、
参照カウント法が機能せずにガベージされると思うんですが、どうでしょう。

また、これを防ぐ方法(END { undef $obj }のような)を
モジュール側から行うコトは不可能でしょうか?
というか、モジュール側から行えないとしたら、
DESTROYがイマイチ使いにくいと思うので(^^;

どなたか、わかる方いらっしゃいましたら、ヨロシクお願い致します。
0320デフォルトの名無しさんNGNG
>>318
なんでそんなに必死なんですか?(w
0321デフォルトの名無しさんNGNG
>>320 どこまでアホなんだ?
0322274NGNG
自己解決したので、県境変数PERLIOの設定値と
実際の\n変換モードの対応をメモしておきます。
(テスト方法: perl -e 'print "\n"'|dump)

[ActivePerl v5.8.0 build805]
(なし)   :crlf
:crlf    :crlf
:unix    :crlf
:stdio   :crlf
:perlio   無変換
:crlf    :crlf
[cygwin v5.8.0-2]
(なし)   :crlf
:unix    無変換
:stdio   無変換
:perlio   無変換
:crlf    :crlf

…なんかActivePerlってものすごく曲者?
0323デフォルトの名無しさんNGNG
>>274
unix と stdio と perlio は呼びだす(Cの)関数の違いにすぎないはずだから,
それで動作が変わる方がおかしいのでは?

0324デフォルトの名無しさんNGNG
DOS系のプログラムは、\r\nの扱いは使うライブラリや
なんかに激しく依存するよ。いろいろ試してみるしかないと
思われ。tellなんかがからむともう悪夢。
0325デフォルトの名無しさんNGNG
板違いかもしれないけど、一応Perlの話ってことで・・・

昨日、Webデザイナーの友達からCGI/Perlの仕事を受けて、
KENTのCGIを改良したものを更に改良するってことだったんだけど、
ま〜ソースの汚さに愕然とした。解析するのに一苦労。

これが「Perl=ソース」が汚いと言われる原因かなーと
今更ながらに思いました。

ヒアドキュメントは便利だけど、HTMLをそのまま埋め込むのはやめれ。
テンプレートを使えよと言いたい。
0326デフォルトの名無しさんNGNG
>>325
板違いです。
0327デフォルトの名無しさんNGNG
>>325
その質問にどういう答えを期待しているのでしょうか?
質問は回答者のためにも自分のためにも要点が分かるように書きましょう。
0328デフォルトの名無しさんNGNG
まああくまでソースの話に限定するのなら、板違いでもないのでは。
0329デフォルトの名無しさんNGNG
>>328
愚痴と捉えるならマ板。
CGIにおけるデザインとロジックの分離と捉えるならWebProgか制作板。
もしそうだとしてもPerlが汚いと言われる原因はそれじゃない。
0330デフォルトの名無しさんNGNG
>>329
どれ?
0331nobodyさん NGNG
>>330
素人に難しそうと勘違いさせるようなスクリプト組んでる所とかな・・・
0332237NGNG
Ruby >>>>>>>>>>>>>>> Python >>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> forth >>>>>>>>>>>>>>>>>>>>>> awk >>>>>>>>>>>>
>>>>>>>>>>> sed >>>>>>>>>>>>>>>>>>>>>>> ed >>>>>>>>>>>>>>>>>> vi
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> perl
0333デフォルトの名無しさんNGNG
>>325
「代表的なCGIのソースが汚いから、Perl=汚いと言われる」と言う事?
どっちにしても、KENTのCGIに文句言いたいならWebProgだろ。

Perlはシェルスクリプト,awkc,,java辺りから構文をかき集めてるような所ががあるから、
汚いソースも書けてしまうのだが、
実力のある人が書くとcやjavaよりも見通しがいいんだよな、これが。
0334デフォルトの名無しさんNGNG
自分だけでスクリプト書くときは Perl的に美しく書く
人に見せるものは、冗長だとしてもきれいに書く

while(<>) {
 chomp;
 print if (/hoge/)
}

while ($line = <STDIN>) {
 chomp $line;
 if ($line =~ /hoge/ ) {
  print $line;
 }
}

こんな感じ?
CとかJavaに無い構文使わなければ、Perl分からない奴に見せても何とかなる
<>と<STDIN>じゃ意味違うし、chompもあまり役に立ってないが(w
0335デフォルトの名無しさんNGNG
Perlに慣れてる人だったら上の方が見やすいと思う。
ただ、慣れてない人からは確かに読みにくいかも。
そういう慣用句とかエレガントな表現を学んで行くのも
Perlの面白さだと思ってるんだけど、どうかな。
0336325NGNG
まーそのCGIがあまりにも汚いソースだったので、
Perlのソースが汚いって言われてるのは、KENTに限らず
素人が作ったCGIがネットでばら撒かれてるからかなーと思い、
脊髄反射的に書き込んでしまい、結果スレを汚してしまったのは
正直すまんかった。

KENTのCGIがどうこう言うつもりはないよ。
(KENTのCGIを改良したものなので100%KENTのコードではないし)

Perlに関しては知識が浅いし、他の言語も極めるほどやってないので
よく分からないのだが、よかったらPerlのコードが汚いと言われる理由を
教えてもらえまいか?
0337デフォルトの名無しさんNGNG
なるべくC言語系の書き方に近づけるために

chomp $str;
print $str;

よりも

chomp($str);
print($str);

という感じで書くようにしてるんですけど
問題ありますかね?
0338デフォルトの名無しさんNGNG
>>337
バグを防止する意味ではむしろ好ましいのでは?
自分は時と場合によって適当に書き分けてるけどね。
(こういう事ができるのがPerlが汚くなりがちな原因の一つ)
0339デフォルトの名無しさんNGNG
>>336
正規表現

0340デフォルトの名無しさんNGNG
>>339
それは思いっきり勘違いだと思うが。
それは正規表現の汚さであってPerlの汚さではないが。
0341デフォルトの名無しさんNGNG
>>340
それも違うだろ。
正規表現も空白やコメントを駆使すればずっと読みやすくなる。
問題はそれをさぼるプログラマが多いと言う事だ。
0342デフォルトの名無しさんNGNG
>>341
>問題はそれをさぼるプログラマが多いと言う事だ。
それがPerlのせい、と?
他の正規表現を扱う言語では汚くならないと?
0343デフォルトの名無しさんNGNG
まぁまて。俺はPerlが汚く書けることは知ってる。
ただそれは正規表現のせいじゃないだろ、と。
Javaで java.util.regex 使ったら汚くなるのか?
0344341NGNG
>>342
誤解されてるな。
言いたいのはPerlの正規表現は見通しよく書くこともできるし、
そのように書くべきだって事の方だ。

他の言語でも正規表現使えば同じってのは同意だし、
正規表現の代わりにif文の山を作ったらそれこそ見通しが悪い。
0345339NGNG
言葉足らずでスマンカッタ

正規表現を知らない奴が、正規表現を使って書かれているコードを見たときに
「わけわかんねぇ、*Perlは*汚いな」
と思う事が多いってこと
0346デフォルトの名無しさんNGNG
変数の前に$, %, @が付くのもPerlを知らない人が見たら汚く見える原因だろうね
0347デフォルトの名無しさんNGNG
関数に () が要らないとかもね
0348デフォルトの名無しさんNGNG
すいません、ちとさっぱり分からないことがありまして・・・。
データファイルの管理用に、こうchdirコマンドで
ディレクトリを登ったり降りたりしながらファイル情報を集める
スクリプトを作ってたんですよ。
今までWin98+Cygwinで使えてたんですが、最近WinXPに変えてですね、
Cygwinのperlもインストールし直したら、chmod("..")が失敗するように
なっちまったんですよ。
なんででしょう?代替方法はあるんでしょうか?
「..」を排除するとしたら、フルパスを取る方法が必要ですよね・・・。
0349nobodyさん NGNG
それ以前に、変数の使い方がなってないこととかは無いか?(w
0350266NGNG
超遅レスですが、>>298の意見を聞き、色々試行錯誤して
Borland C++ Compiler 5.5とdmakeでActivePerl5.8.0のソースを
コンパイルすることにしました。

http://www.kt.rim.or.jp/~kbk/perl5.doc/perlwin32.html
↑のサイトを参考にwin32/makefile.mkを書き換え
「dmake」すると

エラー E2450 C:\Perl\lib\COREthrdvar.h 85: 未定義の構造体 '_stati64'
エラー E2450 C:\Perl\lib\COREthrdvar.h 86: 未定義の構造体 '_stati64'

というエラーがでます。
対処法分かる方いますか?



0351nobodyさん NGNG
>>348
/\.{1,2}$/
使えば?
0352デフォルトの名無しさんNGNG
>>350
_stati64の定義があるヘッダをインクルードせよ。どこにあるかとか聞くなよ。grep
0353デフォルトの名無しさんNGNG
あるのかな
sys/stat.h
にstati64ってのならあるけど_stati64はわかんねーや
0354デフォルトの名無しさんNGNG
>>353
all grepしてもなければstati64使ってもいいんじゃない?
0355 ◆hMJAPH9PWA NGNG
>>350
dosish.hの82行目あたり:
#if defined(WIN64) || defined(USE_LARGE_FILES)
このテストが偽になるようにする。
私はとりあえずそれで上手く行っているよ。

USE_LARGE_FILESは#undefしてしまっていいのかもしれないね。
0356デフォルトの名無しさんNGNG
>332
フォーマット文かと思っちまった。
0357デフォルトの名無しさんNGNG
>>348
> データファイルの管理用に、こう*chdirコマンド*で
> Cygwinのperlもインストールし直したら、*chmod("..")が失敗*するように

少しもちつけ
0358デフォルトの名無しさんNGNG
>>356
意外と便利よね、フォーマット
0359デフォルトの名無しさんNGNG
フォーマット文なんてもう2年ぐらい使ってないや。なんでだろ
0360デフォルトの名無しさんNGNG
>>359
テキストでフォーマットすることがなくなtt
0361 ◆hMJAPH9PWA NGNG
フォーマット文なんて今だかつて使ったことないや。なんでだろ
0362デフォルトの名無しさんNGNG
フォーマット文の長所、短所を述べよ。
0363デフォルトの名無しさんNGNG
長所:
レコードの繰り返しを吐き出すときは便利
見た目もそこそこフォーマットしてくれる

短所:
CSVとかで吐いて別処理した方が良い場合が多い

システム管理系スクリプトでリポート吐き出す時とかは便利だよ
よく、軽くフォーマットしてメール飛ばしてる
0364デフォルトの名無しさんNGNG
>>362
長所:別途モジュール必要としない
短所:もっと優れたモジュールが沢山ある
0365デフォルトの名無しさんNGNG
>>364
その優れたモジュールを、一言コメント付で紹介せよ。
0366デフォルトの名無しさんNGNG
>>365

回答:
 無理
0367デフォルトの名無しさんNGNG
DBD::CSVを使ったシステムを考えているんですけど、
普通にcsvを加工するのに比べてどのくらいパフォーマン落ちますか?
0368367NGNG
↑パフォーマンスね。(w
0369デフォルトの名無しさんNGNG
小さなパーサを作っていて,不等式を解析したい。左辺と右辺はそれぞれ一単語または""にはさまれた一以上の単語というルールがある。
で,具体的には不等式の左辺と右辺を取り出したい。

たとえば,
$statement = q["abc de" > 123 or abcde = "zz zz"];
だと,"abc de"とabcdeが左辺,123と"zz zz"が右辺。

これを解析するために

$operand = '(?:<=|>=|>|<|=)';
$var = '(?:\w+|"[^"]*")';
$statement =~ s/($var)\s*$operand\s*($var)/(left) $1 (right) $2/g;
print $statement;

とかすると

(left) "abc de" (right) 123 or (left) abcde (right) "zz zz"

という出力が得られる。

さて,
0370デフォルトの名無しさんNGNG
問題は左右辺を''でくくる場合も許した場合。たとえば,

$statement = q["abc de" > 123 or abcde = 'zz zz'];

の場合に

(left) "abc de" (right) 123 or (left) abcde (right) 'zz zz'

としたい。

$operand = '(?:<=|>=|>|<|=)';
$var = q!(?:\w+|("|')[^\1]*\1)!; #ここを変えた
$statement = q["abc de" >123 or abcde = 'zz zz'];
$statement =~ s/($var)\s*$operand\s*($var)/(left) $1 (right) $2/g;
print $statement;

だとまったく解析が成功しない。どうして?

0371デフォルトの名無しさんNGNG
あうー,スレ違いか。
http://pc2.2ch.net/test/read.cgi/php/1038146241/ に逝ってきます。

0372デフォルトの名無しさんNGNG
>>371
そっちに逝くよりも、まず言語理論の本でも読め。
0373367NGNG
うーん・・・
ベンチ取るまでもなく体感で分かる遅さ。
(モジュールを使わずにgrepで処理して見た場合と比べて)
0374デフォルトの名無しさんNGNG
$a='ab';
$b='abcde';
$b=~ s/$ac/999/o;
print $b;

結果
999abcde
となるのはなぜ?
s/($a)c/999なら999deになるのはわかる。
999が先頭に追加されているということは置換成功しているの?
詳しい人教えてください
0375デフォルトの名無しさんNGNG
>>374
$a='ab';
$ac = '';
$b='abcde';
$b=~ s/$ac/999/o;
print $b;
0376374NGNG
>>375
thx
未定義の$acにマッチしていたということですね
0377 ◆hMJAPH9PWA NGNG
>>367=373
そりゃま、DBD::CSVは実務で使う為というよりも、
「他のDBDに簡単に移行できる」というのが売りのプロトタイプ用DBDだからね。
とうぜんパフォーマンスは良くないです。
0378デフォルトの名無しさんNGNG
上手く伝えられるかどうか。。
あるサブルーチン(&HOGE)の中でのみ利用したいサブルーチン(&FUGA)があります。
その$FUGAの中で&HOGEのローカル変数($alpha,$bravo,$charilie,$delta)を使い
たいのですが、以下のように記載しても上手く動かないのです。

どなたか解決策を教えて頂けますでしょうか。
# それともこんなことはできない?^^;;

sub HOGE {
my $alpha = a;
my $bravo = b;
my $charlie = c;
my $delta = d;
sub FUGA {
"$alpha == $bravo == $charlie == $delta\n"
}
print (
"content-type: text/plain\n\n" .
FUGA()
);
exit;
}
0379nobodyさん NGNG
>>378
構造的にはコレ。

sub HOGE {
my $alpha = a;
my $bravo = b;
my $charlie = c;
my $delta = d;

print (
"content-type: text/plain\n\n" .
&FUGA($alpha,$bravo,$charlie,$delta)
);
exit;
}

sub FUGA {
  return("$_[0] == $_[1] == $_[2] == $_[3]\n");
}
0380デフォルトの名無しさんNGNG
>>378
"a"だったとかいうオチは置いといて__

sub HOGE {
local $alpha = "a";
local $bravo = "b";
local $charlie = "c";
local $delta = "d";

print FUGA();
}

sub FUGA {
"$alpha == $bravo == $charlie == $delta\n"
}

こんなんかな。やりたいコトがよくわからんケド。
0381378NGNG
あぅ、、""で囲み忘れました。゜д゜)鬱死・・・

>>379
今のところそのように書いているのですが、&FUGAと言うサブルーチンは、
&HOGEしか使わないので、&HOGEの中に書いてスッキリさせてしまおうと
思い立ったのが元々なのです。

>>380
ぁぁ、言葉足らずで申し訳ない。
use strict;
されている事が前提なのです。
なのでlocalは私の頭から外れておりました。

と言うことはstrictせずにlocalを使えばできるよ、と言うことなのかな..
なにか方法があるような気もするのでもう少しぐぐってみます。
0382デフォルトの名無しさんNGNG
hoge や fuga の呼び出される回数にもよるけど…

use strict;
sub hoge {
my($al, $br, $ch, $de) = qw(1 4 7 10);
my $fuga = sub { $_++ for @_ };
$fuga->($al, $br, $ch, $de);
$fuga->($al, $br, $ch, $de);
return "al = $al br = $br ch = $ch de = $de\n";
}
print hoge();
0383378NGNG
>>382
なるほど、関数のリファレンスを取ってしまえばいいんですね。
なんとなく理解しました。後は色々と書いてみて慣れます。
ありがとうございました。
0384nobodyさん NGNG
>>381
&HOGEの中に&FYGAをかいても外に書こうが中に書こうが、スコープはグローバルだったから無意味だったような気がしますが・・・?

この場合は、無名のサブルーチン定義するのが正攻法なきがする・・・
0385デフォルトの名無しさんNGNG
>>383=378
わざわざそこまでしてローカルにしなくても、という気がしますが(^^;
「&HOGEからしか使わない」のであって「&HOGEからしか使わせたくない」のでないなら、
普通に書いてしまっても良いのでは?
「スッキリさせてしまおう」という目的なら、余計に読みにくくなる気がします。
0386nobodyさん NGNG
>>385
多分そのまま使うんじゃないんじゃないの?
例示したソースをそのまま使うんであれば同意だけど
0387デフォルトの名無しさんNGNG
>>377
DBD::CSVのあの異常な遅さってText::CSVを使ってるくらいだから
CSVを厳密に解析してるからだと思うんですけど、
BBSとかApacheのログ程度のCSVに対して使う場合に特化した
実用に耐えるDBDってないですかねぇ。
誰かDBD::Logとか作ってくれー。
0388 ◆hMJAPH9PWA NGNG
>>387
CSV云々もそうだろうけど、SQLのパースにかかる時間も馬鹿にならないかと。
まぁPurePerlのDBDという時点で速度は期待できないと思うよ。

0389デフォルトの名無しさんNGNG
>>388
SQL::Statementもかなり遅いってことかー。
うーん。↓俺の今したいこと。

・PurePerlで
・DBDで
・CSVをSQLで処理
0390デフォルトの名無しさんNGNG
すいません。質問です。

ニュースサイトから指定範囲内の記事をタグを解析して取得したいのですが、
Perlで書くにはどんな感じになるんでしょうか。
0391デフォルトの名無しさんNGNG
>>390
具体例をだしてもらえないと。
0392nobodyさん NGNG
>>390正規表現が必要
0393デフォルトの名無しさんNGNG
0:$a = "abc";
1:
2:sub subr {
3: my($a) = "bcd";
4: print $a;
5:}

こういう状態で 4行目でグローバル変数の$a、
つまり"abc"を表示させるにはどうしたらいいですか?
0394nobodyさん NGNG
>>393 出来ません。
変数名を素直に変えませう
0395デフォルトの名無しさんNGNG
>>393
パッケージを明示すればできる。

print $main::a;

ただ、分かりにくくバグの元になるので、やはり変数名を見直すべき。
0396デフォルトの名無しさんNGNG
if (qq|<td class="c3" nowrap>(.*)</td>|) {
 $letter = $1;
 print "$letter\n";
}

これで $1が取得できない理由はなぜでしょうか。
if文の条件にはマッチしてトラップされているのですが、$letterの中身は
ヌルなのです。
0397デフォルトの名無しさんNGNG
じゃあ、$1 に何が入るのが正しいと思うの?
0398デフォルトの名無しさんNGNG
>>396
そりゃ正規表現を使ってないんだから当然だ。
0399デフォルトの名無しさんNGNG
>>397-398
qq を使うと正規表現が利かなくなるとか、そういうことですか?
0400デフォルトの名無しさんNGNG
>>399
そうじゃなくて、そもそも if文の中に書いてあるのは「ただの文字列」。
正規表現でもなんでもない。
if文が実行されるのはマッチしてるからではなく、単に文字列が評価された結果、
真になったので実行されてるだけ。
もう一度、基礎から勉強し直してきてください。
0401デフォルトの名無しさんNGNG
>>400
結果として判定部分に $_ =~ を追加することで目的は達せられました。
ありがとうございます。

$_ に対しての正規表現は「$_ =~」の省略が可能という認識だったので
そう表記したんですが・・・
0402はしのえみ好きーNGNG
if (m|<td class="c3" nowrap>(.*)</td>|) {
 $letter = $1;
 print "$letter\n";
}
0403デフォルトの名無しさんNGNG
>>401
> $_ に対しての正規表現は「$_ =~」の省略が可能という認識だったので
m//を使う場合のみ'm'の省略が可能だったはず。
m!!とかm##とかm{}とかの場合は省略できない。
ていうか俺は見にくくなるから常にmは付けているわけだが。
0404デフォルトの名無しさんNGNG
>>402-403
なるほど、どうやら省略できる部分を勘違いしていたようです。
勉強になりました。ありがとうございます。
0405山崎渉NGNG
(^^)
0406デフォルトの名無しさんNGNG
変な質問ですが、ファイルハンドルを囲む「<>」って
名前はありますか?(@@演算子とか)

あと、この「<>」って「\n」毎に一行づつ読み込みますけど
任意の文字列までの文字を読み込むとかできますか?
0407デフォルトの名無しさんNGNG
>>406
行入力演算子 (line input operator)
デリミタは $/ で変更
0408406NGNG
>>407
ありがとうございます。
勉強になります。
0409デフォルトの名無しさんNGNG
質問です。
1 and {
print "1 ";
print "2\n";
};
このようなスクリプトで、「1 2」という出力を期待していたんですが、シンタックスエラーが発生してしまいます。
1 and {
print "ok\n"
};
ではちゃんと出力されました。なぜ上のスクリプトではエラーが出るのでしょうか
0410デフォルトの名無しさんNGNG
>>409
1 and do{
print "1 ";
print "2\n";
};

下の例が大丈夫なのは文が1つしかないから。
上の奴も,でつなげば文法的には大丈夫だが・・・
0411デフォルトの名無しさんNGNG
>>410
ありがとうございます。do{ 〜; 〜;}を使えばよかったのですね。
ところで、「,」で区切る方もやってみたのですが
1 and {
print "a",
print "b"
}
とすると「ba1」が出力されます。この「1」はどっから出てきたものなんでしょうか?
0412410NGNG
>>411
print ("a", print "b");

"a"が評価され、次にprint "b"が評価されます。
この時に"b"がprintされ、それが成功したとき、
print "b" は 1を返します。
そして、print ("a", 1) を実行し、"a1"と表示します。
0413デフォルトの名無しさんNGNG
>>412
なるほど。ありがとうございました。
0414デフォルトの名無しさんNGNG
>>412
これって結局Hash作ってるんだよね?
0415デフォルトの名無しさんNGNG
>>414
ハァ?
0416デフォルトの名無しさんNGNG
>>414
doじゃない場合はhash作ってるかと。
作ったあとすぐ消されるんだろうケド。
0417デフォルトの名無しさんNGNG
$str = "ぬるこ";
$str =~s/こ/ぽ/;

∧_∧
( ´∀`)<$str
0418デフォルトの名無しさんNGNG
     ↑
今時、吉牛コピペを出すくらい
ナンセンス。
0419デフォルトの名無しさんNGNG

 ∧__∧
( ´∀`)< undef
0420デフォルトの名無しさんNGNG
ActiveStateの.NetPerl(.NetSDK1用)なんだけど
.NetSDK2じゃ使えん、なんとかならない?
0421■□■週間アイドル盗撮ランキング【4月】■□■NGNG
安倍な●み 盗撮ランキング1位
http://rental.serikura.jp/~shop/nt/ans.jpg
加護○依 盗撮ランキング2位
http://sagisou.sakura.ne.jp/~deai2/cgi/rank.cgi?arifish
松浦○や 盗撮ランキング3位
http://pakopako.misty.ne.jp/enter.cgi?id=arifish
深田●子 盗撮ランキング4位
http://friends.rank.ne.jp/in.cgi?account=arifish
藤本●貴 盗撮ランキング5位
http://www.all-mode.net/jrank/in.php?id=arifish
浜崎あ○み 盗撮ランキング6位
http://it.sakura.ne.jp/~www/www/ranklink.cgi?id=arifish

先週のランキングベスト1はこの人!!!
http://friends.rank.ne.jp/in.cgi?account=arifish
0422デフォルトの名無しさんNGNG
$fugahoge = "fugahogestring";

この $fugahoge の先頭 1 文字を削除したいのですが、
どのようにすれば安全かつ効率的に行えるでしょうか?
0423デフォルトの名無しさんNGNG
>>422

$fugahoge = "fugahogestring";
$fugahoge =~s/^.//;
print $fugahoge;
0424デフォルトの名無しさんNGNG

まじめに恋愛を考える、真剣なあなたのためにこのサイトを作りました。
http://www.h5.dion.ne.jp/~psysys/index.html
0425デフォルトの名無しさんNGNG
>422

$fugahoge = substr($fugahoge, 1);
0426デフォルトの名無しさんNGNG
ありがとうございます。
変数に大きなデータが入っている場合は、どちらが高速ですか?
0427デフォルトの名無しさんNGNG
>>426
百兆回繰り返して自分で体感しろ。
0428DQNNGNG
perl -wc でも strict でも実行するまで検出できないエラーの、
"undefined sub routine"(だっけ?)をデバッグ段階で調べる
方法はないでせうか? 関数名を typo してしまったときに痛いです。

# モジュールとかありそうですけどねぇ。
0429デフォルトの名無しさんNGNG
教えてください。
Perl for Win32 Build 316(v5.003_07?)から、ActivePerl v5.8.0に乗り換えたのですが、
処理の仕方が変わったようで困っています。

時間のかかる処理をするときに、プログレスバーのようなものを表示していたのですが、
ActivePerl v5.8.0では、最後にまとめて表示されるようになってしまいました。
プログレスバーを表示させる、うまい手はないでしょうか?
よろしくお願いします。

for ($i=0 ; $i<5000 ; $i++) {
if ($i%100 == 0) { print "*"; }
for ($j=0 ; $j<1000 ; $j++) {}
}
0430デフォルトの名無しさんNGNG
>>429
$| はセットしてる?
0431429NGNG
>>430さん
恥ずかしながら、"$|"というものを知らなかったのですが、
$|=1;
とすることで期待通りの動作となりました。
ありがとうございました。
0432 ◆hMJAPH9PWA NGNG
>>428
残念ながら、実行時まで待つしかないよ。
ここがPerlの苦しい所だが…その代わりにeval()やAUTOLOADという恩恵があるので我慢するしかないね。
0433山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0434428NGNG
>>432
しょぼんぬ。
0435山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0436デフォルトの名無しさんNGNG
初歩的な質問失礼します。

use CGI
$q=new CGI
を使ってフォームからのデータを取る場合
何個もあるデータを表示するならどうすればいいのですか?

キーワード 'pass'から取るとすれば分かるのですが。。。
$pass = $q->param('pass');
0437デフォルトの名無しさんNGNG
>>436
WEBプログラミング板 http://pc2.2ch.net/php/ 逝け

0438デフォルトの名無しさんNGNG
packageとグローバル変数についてなんすけど、
次のようなサンプル作ったんですけど、
--- test.pl ---
#!/usr/bin/perl
use test2 ;
my $g_test = "exist!" ;
test2::test2() ;

---- test2.pm ----
package test2 ;
use vars qw( $g_test ) ;
sub test2
{
print STDOUT "run test2.pm\n" ;
print STDOUT "\$g_test=$g_test\n"
}
1;
-----------------

うまく行くと、
「$g_test=exist!」と表示されるはずなんですが、期待したとおりに動いてくれません
で、質問なんですが?

1.グローバル変数の宣言、定義は合ってますか?
2.packageからのグローバル変数の参照は合ってますか?
3.Perlのオブジェクト指向的なコーティングに参考になるURLを教えてください。
以上です、また正しい記述をご存知でしたら、教えてくださいませ。
0439デフォルトの名無しさんNGNG
>>438
OOPの前にmyの勉強しる
0440438NGNG
>>439

--- test.pl ---
#!/usr/bin/perl
use test2 ;
#my $g_test = "exist!" ;
use vars qw( $g_test ) ;
$g_test = "exist!" ;
test2::test2() ;

ん〜、やっぱりこうすべきでしょうか?
グローバル変数を定義するのに、use vars qw( $g_test ) ;の記述が気持ち悪くて、
$main::g_testって意味なら、myで行けるかも?と思ったんですけど。
とりあえず、この記述でこれで合ってますかね?
何方か、具体的な例示してもらえませんでしょうか、オナガイシマス。
0441デフォルトの名無しさんNGNG
>>440
our $g_test;
0442438NGNG
>>441
レスどうもです、参考になりますた。
ググって調べて
http://books-support.softbank.co.jp/pn/special04-1.html
ここ見つけてナットクしますた。
0443デフォルトの名無しさんNGNG
そもそもモジュールからグローバル変数を参照してる時点でどうかと思うんだが。
0444438NGNG
>>443
ん〜、一応分って使ってるつもりだけど、
これでも、C/C++、Javaのプログラマとして飯食ってるんで。
因みに、グローバル変数の使用用途はシステム全体の
動作状態を示すのに使う予定。
0445デフォルトの名無しさんNGNG
>>444
恐怖! 血も凍る恐怖!!
0446デフォルトの名無しさんNGNG
>>444
全体の設定を書きたいなら、せめて全部をオブジェト試行で書いて、
すべての親クラスの_initメソッドで、
$self->config(Confit::Tiny->read('./system.ini'));
とかやってください。
メソッド内部ではクラス変数にアクセスするようにしておいて、
子クラスからは
$self->config->{foo}->{bar};
って感じで自然にアクセスできるようにしましょう。
どうか邪悪なソースを書かないでください。お願いします。
0447kasuNGNG
素人なんですが、LWPで特定のURLにPOSTするプログラムを作ろうと思って、
いろいろ書いています。一瞬上手くいったように見えたんですが、やっぱり
$ans->is_successを見ると失敗しています。

FreeBSD上で動かしているのですが、「tcpdump port http」を走らせて見ていると、
どうも外にパケットが出ていないようです。
perlでネットワーク越しにデータを投げようとするとき、以下のようなスクリプトでは
なにか問題有りますか? もし、他の点でも動かない原因がありましたら教えて頂けると幸いです。
よろしくおねがいします。

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

use LWP::UserAgent;
use HTTP::Request;
my($url, $post_data, $browser, $rq, $ans, $tmp);
############## user define ################
$url = 'http://www.hoehoe.com/hoehoe';
$post_data = 'user_id=nnn&user_pass=mmm';
############## user define ################

$browser = new LWP::UserAgent;
$browser->agent('Mozilla/4.0');
$rq = HTTP::Request->new(POST => "$url");
$rq->content_type('application/x-www-form-urlencoded');
$rq->content("$post_data");
$rq->content_length(length($post_data));
$ans = $browser->request($rq);
if($ans->is_success) print " SUCCESS\n";
0448_NGNG
( ´∀`)/< 先生!!こんなのを見つけました。
http://www.freeweb2.kakiko.com/tama/moe/hankaku06.html
http://freeweb2.kakiko.com/tama/moe/hankaku05.html
http://www.freeweb2.kakiko.com/tama/moe/hankaku04.html
http://freeweb2.kakiko.com/tama/moe/hankaku03.html
http://www.freeweb2.kakiko.com/tama/moe/hankaku08.html
http://freeweb2.kakiko.com/tama/moe/hankaku07.html
http://www.freeweb2.kakiko.com/tama/moe/hankaku01.html
http://freeweb2.kakiko.com/tama/moe/hankaku02.html
http://www.freeweb2.kakiko.com/tama/moe/hankaku10.html
http://freeweb2.kakiko.com/tama/moe/hankaku09.html
0449nobodyさん NGNG
csvのデーターを取り出す処理なんだけど
@data = split(/,/,$data);
これで、\,をエスケープ文字として処理したいんだけど
/,/の部分で一発で書くうまい方法ってない物かなぁ?
0450デフォルトの名無しさんNGNG
>>449
http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values
0451nobodyさん NGNG
>>450
MSの仕様だと、ダブルクオートがエスケープになるから適用出来ない。
0452デフォルトの名無しさんNGNG
Perlの中で外部のプログラムを実行するのに
execとかsystemとかありますけど、
実行した外部のプログラムの戻り値を受け取るようなことを
したいんですけど良い方法はないでしょうか?
0453デフォルトの名無しさんNGNG
>>452
何を「戻り値」と呼んでいるかによって答えは変わる。
0454デフォルトの名無しさんNGNG
ある文字列に
abが存在するかつcdが存在するかつefが存在しないかつghが存在しない
という条件を書きたいとき
論理積などを使わず正規表現一発で現すにはどうしたらいいでしょう。
というかperlっぽい書き方はどんな感じなんでしょう。教えてください
0455デフォルトの名無しさんNGNG
出来ないと思う。
0456デフォルトの名無しさんNGNG
>>429
$|=1;
これ先頭に入れるのは無し?
0457456NGNG
解決してた。鬱氏。
0458デフォルトの名無しさんNGNG
>>452
`` とか qx{} だとか。

>>454
Perlっぽいのは
/ab/ and /cd/ and not /ef/ and not /gh/
だと思うケド。
0459デフォルトの名無しさんNGNG
>>449
/(?<!\\),/

>>454
/^(?=.*?ab)(?=.*?cd)(?!.*?ef)(?!.*?gh)/
0460デフォルトの名無しさんNGNG
>>459
順番固定じゃないの?
0461449NGNG
>>459
(?<ayaya)がいけたのか。気がつかなかったです。
どーもありがと〜
0462452NGNG
>>458
こんなのあったんですね。
で、今試していたらsystemでも標準出力の文字列を取得できますね。
ありがとうございました。
0463デフォルトの名無しさんNGNG
以下を回避する方法として、何か良い方法ありますか?
所々に sleep(1); とか書いても駄目でしょうか?

「レンタルサーバでのCGI利用時の制限」
Perl の1プロセスあたりのサーバリソース占有量として、以下の数値を超過する
処理を行う場合はその処理はサーバ側にて中断され、以降の処理は行われません。
「CPU 使用時間…30秒 メモリ使用量…10Mb」

ちなみに cron で1日1回動かしている perl プログラムです。
0464デフォルトの名無しさんNGNG
>>463
$SIG{'XCPU'}='IGNORE'; してみ。
0465デフォルトの名無しさんNGNG
>>463
そのレンタルサーバに聞くしかないじゃないの
判断するのはあっちなんだから。
0466デフォルトの名無しさんNGNG
>463
1: cronを使わない方法を考える。
2: cronの使える鯖に移転する。
0467 ◆hG4XfSMGTg NGNG
>>463
どっちかというとphp板の話題だろうな
xreaだろうが2研のアクティブスレッドランキングとかどうやってんだろうな
0468デフォルトの名無しさんNGNG
>>466
cronは関係ないだろ
0469デフォルトの名無しさんNGNG
>>463
cronからCGIにアクセスさせてるのか?
0470デフォルトの名無しさんNGNG
HTML タグを Parse してくれるモジュールって、何がある?
0471デフォルトの名無しさんNGNG
Windows2000proにTkをインストールしたいと思い、
プロンプト上で
入力 ppm install Tk
結果 Error installing package 'tk': Could not locate a PPM binary of 'tk' for this platform

searchしてみたら、普通のTkが見あたらず、、
で、http://www.activestate.com/packages/zipsからTk.zipをダウンロード
d:\tempに解凍した中身をおく
D:\temp
  +Tk.ppd
  +README
  +x86
    +
という形

プロンプト上で
入力 ppm search /location d:\temp
結果 Tk [800.022] Tk - a Graphical User Interface Toolkit

入力 ppm install /location d:\temp Tk
結果 Error installing package 'tk': Could not locate a PPM binary of 'tk' for this platform

といった形でインストールできません。
バージョンはv5.6.0 built for MSWin32-x86-multi-threadです。

どなたか、インストールする方法を教えていただけないでしょうか?
宜しくお願いいたします。
0472デフォルトの名無しさんNGNG
>>470
HTML::Parser
0473デフォルトの名無しさんNGNG
HTML::Parser と、HTML::TokeParser は、どっちが(・∀・)イイ!! の?
0474 ◆Mn5mzn8hAQ NGNG
>>471
ActivePerlv5.8.0を入れてください
標準で入ってます
0475デフォルトの名無しさんNGNG
ActivePerlでGD.pmを使いたいのですが、
PerlCRT.dllがない、というエラーで失敗します。

何度アンインスト→インストやりなおしをやっても、PerlCRT.dllが存在しない……
どなたか対処法をご存じないですか?

CPANからPerlCRT.dll単体を引っ張ってきたら、一般保護エラーで終了しました(;´Д`)
0476471NGNG
>>474

助言ありがとうございます。
これを期に5.8.0を入れます。

でも、何でできなかったんだろ・・・
0477449NGNG
>>475
質問する時は、PerlのバージョンとOSを書くようにしたほうがいい

0478475NGNG
失礼しました。
Active Perl v5.6.1 build 635
Windows2000 です。
0479454NGNG
回答していただいた方ありがとうございました。
とても参考になりました。

webprog板のperlスレで同じ質問したら煽られまくって凹んでしまい
返事遅れてすいません。
こっちのスレは雰囲気よくていいですね。
0480449NGNG
>>479見てる人は一緒だと思うけどな・・・

>>478

c:\>ppm install gd

でも駄目?
0481475NGNG
>>480
ありがとうございました。無事動きました!
0482デフォルトの名無しさんNGNG
perlネットワークプログラミングという本に以下のようなコードが載っていて、

use IO::File;
$saveout = IO::File->new_from_fd(STDOUT, ">");
STDOUT->open('>log.txt');
STDOUT->print("Yippey yie yay!\n");
STDOUT->fdopen($saveout, ">");

実行すると、
Can't locate object method "open" via package "IO::Handle" (perhaps you forgot to load "IO::Handle"?) at test21.pl line 3.
というエラーがでてしまいます。
Linux+Perl5.6.1and 5.8.0,Windows98+activeperl5.6.1、別のPC上のLinux+Perl5.6.1など
いろいろ試したのですが全て同じ結果でした。

これはPerlとして正しい動作なのでしょうか?
本のサンプルコードでエラーがでるというのは気持ちが悪いのですが。。。
0483 ◆hG4XfSMGTg NGNG
>>Can't locate object method "open" via package "IO::Handle" (perhaps you forgot to load "IO::Handle"?) at test21.pl lin
open関数を提供するIO::Handleがロードされてません、痴呆ですか?
ってメッセージ。(標準関数のopenでない)
英語読めないということは小学生がPerlの学習か、
偉いな。

use IO::Handle;
を書き込めばいいんだよ
それで失敗したらしらないな
本のサンプルもときどきまちえるので、本(ほん)のかいしゃのWEB(うぇ〜ぶ)で
正誤表(せいごひょう)をみるんだよ。
0484デフォルトの名無しさんNGNG
>>483
こらっ、田吾作、いい加減なこと書くでねぇ。かあちゃんがあれほど口を酸っぱくいってるのに。
/lib/IO/File.pmのuse IO::Seekable;の前にuse IO::Handle;を書き込むだ。
英語が読めりゃいいってもんでもねぇぞ。馬鹿はいくつになっても馬鹿だな、かあちゃん、さみしいぞ。
0485デフォルトの名無しさんNGNG
>>483
>use IO::Handle;
もちろん確認済みです。
そもそも、IO::FIleはIO::Handleを継承しているとあるので、
本来use IO::Handle;はいらないはずではないかと思うのですが。

原書のnetwork programming with perlのerrataも確認しましたが、
それらしい記述はありませんでした。

それでどうしてもすっきりしないので、困って質問させてもらったのです。
0486デフォルトの名無しさんNGNG
>>484
助言ありがとうございます!
本当に助かります。
今から試してみて、結果はのちほど報告しますね。
0487デフォルトの名無しさんNGNG
>/lib/IO/File.pmのuse IO::Seekable;の前にuse IO::Handle;を書き込むだ。
だったら
use IO::Handle;
use IO::File;
でいけないかい?
0488486NGNG
だめでした。。

STDOUT->printや
STDOUT->fdopen
などは初めからuse IO::File;を加えることによって問題なく動作するのですが。。

みなさんの環境ではどうなのでしょうか?
0489 ◆hMJAPH9PWA NGNG
>>488
STDOUT(*STDOUT{IO})は"IO::Handle"オブジェクトであって"IO::File"オブジェクトではない。
そして、openメソッドはIO::Fileクラスで定義されている。
したがって、STDOUT->open()は失敗するのは当然だね。
多分その本は、テストをIO::FileモジュールではなくFileHandleモジュールで行ったのだろう。
IO::FileをFileHandleで置き換えれば動くと思うよ。
0490486NGNG
>>489
>STDOUT(*STDOUT{IO})は"IO::Handle"オブジェクトであって"IO::File"オブジェクトではない。
>そして、openメソッドはIO::Fileクラスで定義されている。

それで、IO::Handleオブジェクトにはそんなメソッドはないよ、
というエラーメッセージになっていたのですね。
File.pm, Handle.pmを覗いたところ、
おっしゃられるようにopenメソッドはIO::Fileで定義されていて、
IO::Handleには定義されていませんでした。
それから、use FileHandle;を使ったら問題なく動作することも確認しました。

とてもわかりやすい解説で、納得がいきました。
昨日の夜から気になって仕方なかったもので^^;
ありがとうございました。
0491takePNGNG
全くの初心者(プログラム経験なし)なんですが、
Perlの超基本的な事を勉強したいので、
初心者が読むのに、お勧めなHPなどがありましたら
教えてください。(一般的な書籍でも構いません)

最終的にやりたい事なんですが、
英語の辞書(コウビルド)を無理やりテキスト化した物(作成済み)を、
PDIC等で読み込める形式にレイアウトを変更する為に、
膨大な量のテキスト置換を行ないたいのです。
(3万5千語の見出しがあって、1語に付き5〜6回の置換作業)

エディタで置換してると、1回の置換作業で
1時間くらい返事が帰って来ない状態になるし、
おまけに、へんてこな結果になったりして、困り果ててます。

ほぼ同様の目的で、以前の辞書のバージョン用のPerlのプログラムを書いて
公開して下さっている方がおられ、いい所まで変換する出来たので、
最終レイアウトを考えて、少し変更するだけで済みそう??
なんじゃないかと、皮算用してます。

(参考)
ttp://neo.pharm.hiroshima-u.ac.jp/faq/cobuild.html
上に書いてる、Perlのプログラムを公開されている場所です。

誘導、宜しくお願いします。
0492 ◆hG4XfSMGTg NGNG
>>491
宿題、研究、仕事は自分でやれボケ
馬鹿がム板にperlスレ立てるからこういう痴呆がまぎれこむんだよ
0493Mr. Moonlight ◆r0zx1vMqaw NGNG
>>491は宿題には見えませんけどね。
こういうスクリプトを書いてくれ、っていう「発注」でもないし、
そんなに目くじら立てなくてもイイのでは?
(まあでも、この板にPerlスレがあるのは確かにちょっと場違いなのかもしれません)

>>491さんが気づいてないのは、それなりに筋のいい人はその程度のことは
自分で何とかしてしまうので、わざわざ経験のない超初心者向けの「HP」とか書籍を
読んだりはしないということですね。(だからなにを薦めていいかもわからないし)

>>492さんが嫌がってるのは、そういう情報を持っている元超初心者とかが
たかってきて超初心者向けの情報交換サロンになったらウザいなあ、
といったところでしょうか。

大昔の月刊ASCIIにはawkとかsedの連載があったりしたけど、
エンドユーザーがこういう類のテキスト処理するニーズっていうのは
結構あると思うんですけどねえ。。なんかいい本とかないんすかね。
0494デフォルトの名無しさんNGNG
>>493
>(まあでも、この板にPerlスレがあるのは確かにちょっと場違いなのかもしれません)
何故?理由がわからない
0495デフォルトの名無しさんNGNG
>>494
Perlの使い方をCGI以外に知らないからでしょ。
0496デフォルトの名無しさんNGNG
>>493
Web板ならいいのか?
Perl = Web作成用言語かよ
0497デフォルトの名無しさんNGNG
WebProg板にあったら「Perlは糞。PHPの時代」とか言ってるくせに
ム板にあったら「WebProg板へ逝け」ってことか。

どっちやねん。
0498Mr. Moonlight ◆r0zx1vMqaw NGNG
>>494

結局のところPerlって片手間にやるものなんじゃないか、って
気がするんです。自分のわかる範囲で安楽に使ってりゃいいわけで。
わざわざ人に質問してまで使うもんかな、って感じですかね。
Perlごときで人に質問しなきゃならないような人って・・・みたいな。

さらに>>492みたいに、素人がム板に出入りするんじゃねえ、みたいな
スタンスで来られたら、なおさらPerlの出る幕じゃないですよね。

別に、CGI用だから板違い、とかいう話ではないです。
0499デフォルトの名無しさんNGNG
>>498
消えろ。
0500デフォルトの名無しさんNGNG
>>498
Perlが素人の道具?ほんとにCGIしか知らない臭え。
マジレスすれば、どっちかっつーと玄人好みだぞ。
0501Mr. Moonlight ◆r0zx1vMqaw NGNG
例えば>>482みたいな質問は、俺は読んでて楽しいわけですが、
>>482が何かの用事があって仕事を片付けるためにスクリプトを書いてる最中
だったとしたら、そんな質問するより、他の楽珍な書き方を考えたほうがいいわけです。

凝ったことも色々出来るわけですが、それは、
「凝ったことが好きで、凝ったことが出来る能力がある人」が
勝手にやってればいいわけで。(人に質問してまでやらなくても、みたいな)

>>500
「玄人」っていうと、俺のイメージだと、そういう人はこういうスレで質問しないです。
(聞くまでもなくなんとかできちゃいそうです)
0502デフォルトの名無しさんNGNG
>>501
失せろよ。あんたはここを見なくてもいいだろうが。
荒らすのが目的か?
0503nobodyさん NGNG
考えて救いを求めるものは助けても、
丸投げするやつを助ける義理はないわな・・・
0504デフォルトの名無しさんNGNG
何かサルが一匹紛れ込んできたな。

>>503
禿げ同。このスレに限らずム板でも、2ちゃん以外の掲示板・ML・現実社会でも同じだわな。
まあ(人間的に)頭の悪い奴にはわからんだろうが。あ、人間じゃないかw
0505Mr. Moonlight ◆r0zx1vMqaw NGNG
俺が色々書いてるのは>>491に対して>>492みたいな反応する必要があるのか?
という話なのです。

でも、>>492の気持ちもちょっとわかる気がする、って感じです。

>>491にはオライリーの初めてのPerlを薦めたいが、
http://www.oreilly.co.jp/BOOK/lperl2/
ちょっと難しいかもしれない。
CGIの本じゃないPerlの本で覚えてるのこれしかないので。
0506デフォルトの名無しさんNGNG
>>505
俺が色々書いてるのは>>492に対してサルみたいな反応する必要があるのか?
という話なのです。

お前自分の文章読み返してみろ。あほみたいだぞ。
お前のレス全部まとめると「>>492さん、言い過ぎじゃないでしょうか?」の一文しか内容が無いよう。
0507Mr. Moonlight ◆r0zx1vMqaw NGNG
>>506

全くおっしゃるとおりでございます。失礼しました。

「>>492さん、言い過ぎじゃないでしょうか?」で逆に
初心者の皆さん、ウェルカムっていうスレの流れにしてしまっても
板住人の皆さんにご迷惑かと思いましたもので。
0508nobodyさん NGNG
>>505
聞いてない事に内容を展開する必要はないわなってこったね・・・

んで、漏れは本など使ってPerlを勉強したことがないのだが、資料っていうのなら駱駝本あればいいんじゃないの?
0509デフォルトの名無しさんNGNG
『はじめてのPerl 第3版』
3600円
5月に出るなり。
0510デフォルトの名無しさんNGNG
>>508
(ひそひそ)駱駝本、2冊あわせて10000円ですよ!!
0511動画直リンNGNG
http://homepage.mac.com/hitomi18/
0512デフォルトの名無しさんNGNG
俺はC経験者には「らくだ」よりも「新Perlの国へようこそ」を薦める。該当者には読みやすい。
http://www.pro.or.jp/~fuji/computerbooks/perl/perl.welcome.html
0513デフォルトの名無しさんNGNG
新P国より、りゃま本の方が27.4倍良いというのに1パール!!
0514デフォルトの名無しさんNGNG
らくだ本最後まで読む気力がない
0515デフォルトの名無しさんNGNG
>>514
半分以上はリファレンスだから、必要なときに読めばいいんじゃない?
0516デフォルトの名無しさんNGNG
>>515
いるんだよ、「読むこと」自体を目的化させてしまっている倒錯者たちが。

そして、ばりばりPerlのプログラムを書いているPerlハッカーに向かって、
「君はPerlのプログラムを書くのがうまいかもしれないが、わたしは駱駝本を
全部読んだので、Perlについては君より偉いんだぜ」と威張ったりするのだ。

そして、100行の下手くそなプログラムを半年もかけて書いて、「これが本物の
Perlの天才が書いたプログラムだ」と見せてまわったりするの。
0517デフォルトの名無しさんNGNG
>>516
抱腹絶倒の実例晒キボンヌ。
0518デフォルトの名無しさんNGNG
>>516
半年かけた100行ってどんなだろ・・・
よっぽどトリッキーな書き方なのか・・・
それとも、ただ遅いだけなのか・・・
しかし、遅いにしても半年で100行は遅すぎる・・・
ビシバシ一行で書いていってるのかなぁ〜・・・

気になるなぁ〜・・・見てみたい。
0519デフォルトの名無しさんNGNG
今日書いたソース


#
0520デフォルトの名無しさんNGNG
バグがまったくないんですよ。
0521デフォルトの名無しさんNGNG
>>519
仕様書が見たいです。
0522デフォルトの名無しさんNGNG
てか、Perl好きなら駱駝本読破くらい苦じゃ無いと思う マヂレス
強いて言うなら腕が疲れるのだけは頂けないな
0523デフォルトの名無しさんNGNG
>>522
苦な人は苦でしょう。
知っていることを延々と説明されて、下らないオヤジギャグブチかまされて。
迷惑極まりない!!!
0524デフォルトの名無しさんNGNG
読むのは苦じゃないけどずっと立ってるのが辛い
0525デフォルトの名無しさんNGNG
>>524
OK。買え。
0526へ?NGNG
 Perlで作られた掲示板のプログラムがあるのですが。
これにリファラーチェックをつけて特定のページからでないと
表示できないようにしたいのですが。
たとえば『http://ike-ike.net/index1.htm』からでないと表示できないように
したのですが・・・
どの辺をいじったらいいのでしょうか?

ソースはこちら
http://www.ike-ike.net/bbsking.txt

アドバイスお願いします。(゜゜)(。。)ペコリ
0527デフォルトの名無しさんNGNG
>>1
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc2.2ch.net/php/ )
0528デフォルトの名無しさんNGNG
>>524
あの本でずっとハァハァしてる香具師はかなり珍しい。
0529デフォルトの名無しさんNGNG
ニュースサイトのある一部のコラムだけを抜き出すプログラム
のサンプルありますか?
もう誰か作っている気がするので。。
0530デフォルトの名無しさんNGNG
立ち読みは万引きに等しい。
0531デフォルトの名無しさんNGNG
つまり、万引きは立ち読み程度の罪ってことだな。
0532デフォルトの名無しさんNGNG
>>531
技術者なら本屋の店員の言葉を真に受けるな
0533デフォルトの名無しさんNGNG
仕様はころころ変わります。
0534デフォルトの名無しさんNGNG
perldocでいいよ。
0535bloomNGNG
http://homepage.mac.com/ayaya16/
0536デフォルトの名無しさんNGNG
>529
著作権法違反。
0537デフォルトの名無しさんNGNG
cisco製品にtelnet接続できるライブラリ(Net-Telnet-Cisco)
っていうのがあるらしいのですが、使われた事ある方いらっしゃいますか?
0538デフォルトの名無しさんNGNG
<>ではリターンをユーザーが入力するまで、キー入力が読み込めません。
ユーザーがリターンを押す前にキー入力を得る方法を教えてください。
0539デフォルトの名無しさんNGNG
(σ・∀・)σゲッツ
0540デフォルトの名無しさんNGNG
そんなことよりミスラとまんk(ry





思い切りスレ違い
0541デフォルトの名無しさんNGNG
好みの問題なのかもしれませんが、、
最近 use strict してプログラムを書くことが多くなってきたのですが、
# 綺麗に掛けるのでstrictが気に入りました^^
グローバル変数として利用したい変数はどのように定義するのが王道と
いうか、正道というか、美しいというか、良いのでしょうか。

例1:
use strict;
my $hoge = 'hage';
main()
sub main {
print($hoge);
exit;
}

例2:
use strict;
$::hoge = 'hage';
main();
sub main {
print($::hoge);
exit;
}

私はモジュールの中でも使いやすいように、例2を使っているのですが、
そんなんは邪道だ!とか、この方が良い、などありましたら教えて頂け
ますでしょうか。

>>540
どこから来たんだ。。。
0542デフォルトの名無しさんNGNG
例3:
our $hoge = 'hoge';
0543nobodyさん NGNG
>>541
私なら例1か・・・
この場合、$::hoge って $main::hoge の省略形だし
中途半端っぽく見えるかもっていう個人的心象の範囲の問題。
(見りゃわかるからいいけどね)
0544541NGNG
>>542
our これ知りませんでした。。(恥
これ頂きます。

>>543
ご意見ありがとうございます。
0545541NGNG
our 動作しない。。(´・ω・`)ショボーン
弄り倒してきます。
0546デフォルトの名無しさんNGNG
myはファイル終わった時点でスコープが閉じるので、グローバルじゃないコトに注意。
requireするようなファイルの中だけで使うならmyのがいいかな。
0547デフォルトの名無しさんNGNG
Perlだけでなく、どの言語でもそうだと思うのですが、
上達のコツは、とにかくPGを組むこと!ってよく言いますよね?

でも、変な癖がつくとなかなか直らないものです。

読むだけで勉強になる
読むだけで綺麗に書くコツがつかめるかも
っていうソースを紹介してくれませんか?
0548デフォルトの名無しさんNGNG
>>547
いやその。
色々なソースを見て、綺麗だのそうじゃないだの判断がつく
目を自力で持たないと。
0549デフォルトの名無しさんNGNG
>>547
のび太君がドラえもんに頼み事してるみたいだな
0550nobodyさん NGNG
いいソースってのは、有るんじゃけど
理解出来る程度に自分で作れなければ何処がいいのか解らんという・・・
0551デフォルトの名無しさんNGNG
>>538
Term::GetKey
0552初心者以前NGNG
perlの勉強を始めたばかりの者です
$nに任意の物を入力してもらってそれが整数かどうか判定するのに
$n=<>;
until($n=~/^[0-9]+$/){整数じゃないぞ、もう一度入れ直せと意味の文とその入力}
としました、なぜuntilの条件文の演算子はeqではいけないんでしょうか?eqと=~の違いがよく(教科書を読んでも)わかりませんでした
eqとした場合parl内部ではどう言う判定になるのでしょうか?
ちなみに実数の入力じゃないと、とか拡張したいのですがこの方法では非常に面倒になりそうです、簡単なものはありませんか?
長くなってすいません、おひまありましたらご教授願います
0553デフォルトの名無しさんNGNG
なぜuntilなのか、とかそもそも教科書って何を読んでるのか、とか、
parlって何?とか、"perlの勉強を始めたばかりの者"って逆撫でしたくて書いてるの?とか、
なんだか疑問点が沢山あるわけですが。
とりあえず eq は 左右が文字列的に等しい場合に真を返します。
正規表現は評価されません。(つかどう評価されるか私は知りません)
0554nobodyさん NGNG
 =~ は正規表現の演算子 eq は文字同士が等しいかどうかを判定する演算子。
質問のケースでは、 数値を比較するため、 eq を使うことはできません。

$n = 1;
until($n eq 1){ ... }
等と特定の一条件を示すことはできても、$nが1以外の場合条件が成立しません。
んで、正規表現を使う必要があるのですが、 =~ もしくは !~といった ~を使った識別子となります。

あと、
until($n =~ /^\d+$/)
は
if($n !~ /^\d+$/)
と一緒。記述方法の問題。もうちょっとperlの演算子と正規表現を調べてみるとよいかと
0555初心者以前NGNG
いろいろな疑問点ですが、本人が馬鹿並に知識がないのと呆けてるために出たミス等で
本人に馬鹿にするだとか、そういった意図は有りません
御二方とも返事ありがとうございます
つまりeqを使った場合/^[0-9]+$/と言う文字列と真偽を比べてて
本来表したかった、0-9までの文字でできた一字以上の文字列と言う意味を
失うってことのようですね。
演算子と精気表現頑張って勉強します、ありがとうございました
0556デフォルトの名無しさんNGNG
>>554
untilとunlessがごっちゃになってない?
0557デフォルトの名無しさんNGNG
無能を誇らず本を嫁。
0558デフォルトの名無しさんNGNG
>>554
ワラタ
制御構造調べてみるとよいかと
0559554NGNG
おぉ。
ミスっておった。
0560デフォルトの名無しさんNGNG
>>545
ourはPerl5.6から。最新版にしる。


ところでPerlに慣れ親しみすぎたせいで、
C言語でやることがめんどくさくてちっとも覚えられません。
C言語を駆使したスーパーハカーになるにはどしたらよいですか。

ああPerlって簡単で素敵。。。
0561デフォルトの名無しさんNGNG
>>560
デバドラでも書いてみれ
0562デフォルトの名無しさんNGNG
perlのファイルハンドルって、プログラムの中でグローバルなの?
0563デフォルトの名無しさんNGNG
>>562
local *FH; とか use Symbol; して my $fh = gensym(); とか。
0564デフォルトの名無しさんNGNG
ちかごろError.pmというのを見つけて、ルンルンとtry..catch構文使ってコード書いてます。
ところで最近とある記事を読んだら「ネストしたtryはメモリリークするよん」とか
書かれているではありませんか!
理由を読んでも渡しにはサパーリなんですが...
tryブロックの中で「tryを使ってる関数」を呼び出してもメモリリークって
起きちゃうんでしょうか!?
どなたかErrorモジュール使われてる方います?
ちなみにとある記事は以下っす。
ttp://bulknews.net/lib/doc-ja/etoys.ja.html
0565デフォルトの名無しさんNGNG
そもそもPerlでメモリリークなんて起こるのか?
0566564NGNG
>>565
ね、そう思うんだけどさ。。。
ただ、環状リストや自己参照作っちゃった場合はあり得るって話は聞いたことあるよ。
プロセス終了すればOSが解放するんだろうけど
長いプロセスの場合は問題になるって。
0567デフォルトの名無しさんNGNG
便宜上メモリリークという言葉を使っているだけの気がする。
0568564NGNG
っつーことはデーモンみたいな
長いプロセス組まなきゃいいってこと?
解決!?
0569nobodyさん NGNG
>>565
Windows版のPerl5.6の時はメモリーリーク発生しておった。
ガベージコレクトの動作が緩慢っぽい・・・

んで、Perl5.8では問題解決したっぽいけど、perl56.dll経由すると起こるっぽい
0570デフォルトの名無しさんNGNG
PHPもWindows版のみメモリリークを起こすとか・・・
0571569NGNG
後スレッドとか使うと開放されないなぁ・・・
コレはモジュールだから別問題か
0572デフォルトの名無しさんNGNG
せっかくのPerlなんだからそんなこと気にしないでプログラミングしようよ(^o^=)
0573デフォルトの名無しさんNGNG
>>572
仕事で使うとなると、そうも言ってられないので。
0574564NGNG
>>567
記事にはtryの実装が下の$subref達に相当するクロージャなので

my $foo;
$subref1 = sub {
  $subref2 = sub {
    $foo++;
  };
};

のような書き方で$fooを使うとリークするってあるんだけど
これってプログラム終われば全部の変数は解放されるよねぇ?
記事自体がmod_perlを前提にした話だったからなのかな?
べつにPerl自身の問題やモジュールのバグとかそういうことじゃないらしいです。
0575デフォルトの名無しさんNGNG
>>564 の解説希望。
あのコードが実行されるたびに変数のコピーを作って、
いつかメモリを食い尽くすって事?
0576 ◆hMJAPH9PWA NGNG
ActivePerl5.8でもリークするね。インタプリタの終了時には破棄されるみたいだけど。(環状リンクでも正常に破棄される)
あとは、そのコードのケースなら、最後に$fooをundefすればリークは起こらないみたい。(って当然か)
tryの中でtryを使う関数を呼び出す分には何の問題もないよ。
0577564NGNG
>>575
そうです。それです。
Error.pmのtry-catch文は

my $foo;
try {
  # some stuff...
  try {
    $foo++;
    # more stuff...
  } catch Error with {
    # handle error
  };
} catch Error with {
  # handle other error
};

のように書くのだけど
tryは$fooへのクロージャになってて、
tryするたび$fooのコピーができるからいずれメモリが尽きるって話です。
(URLは http://bulknews.net/lib/doc-ja/etoys.ja.html)

ただ、mod_perlみたいな常駐プロセスじゃなければ関係ないよね?
っても思うし、どうなんだろうと思ってたわけです。
0578デフォルトの名無しさんNGNG
要はperlのガベージコレクタは完璧ではないと。

…と言ってみると当然の事のような気がしてきた。
0579デフォルトの名無しさんNGNG
>>577
よく理解できてないんだけど、some stuff のところで
ループの記述があると、(つまり、内側の try を何度も
呼び出すと) $foo のコピーがループのたびに作り出されて
メモリリークになるってこと?
0580564NGNG
>>579
たぶんそう。
「$fooの宣言より内側のスコープにループ作ってて
そこでtryした場合は」ってことでしょう。
いや、ちがうか。
tryの実装がグローバルスコープのクロージャならば
$fooへの参照はずっと残るから、
$fooの宣言より外側でループしててもリークすんのか?
ただ、そう考えるとtryをネストするとかしないとかいう話は関係なくなる。
ややこしくて俺もようわからんです。スマソ。
0581564NGNG
>>578
いや、リファレンスカウント式のGCとしては
Perlは完璧なんじゃない?(レスによるとWin版ではバグがあるみたいですが…)
ただ、この場合その限界が露呈してくるというか
576さんの言うように(レスサンクスです)、
DESTORYメソッドに相当することを自分でやる必要があるんでしょうね。
0582デフォルトの名無しさんNGNG
他言語に似せて try ... catch ... の構文を無理矢理作るError.pmよりも、
perlの eval をそのまま利用するモジュール作った方が良いと思うが

eval{
 ...
 if (わざと例外を発生させる場合) EX->throw(...);
 ...
};
if (EX->catch(...)){
 ...
}

EX->throw(...)は内部で die を呼び、EX->catch(...)は$@をチェックして
catchできる場合は真値を返し、できない場合はさらにdieすればよい。
開発時のEXモジュールはcatch, throw内で詳細なスタックトレースを出力させて、
運用時はEXモジュールを簡単なヤツに入れ替えるなんてのはどう?
0583デフォルトの名無しさんNGNG
カレントディレクトリにモジュールを置いて使ってて、
既に同じモジュールのバージョン違いがインストールされている場合、
カレントディレクトリの方を優先して使う場合はどうすればいいですか?
0584デフォルトの名無しさんNGNG
require './module.pm'
0585デフォルトの名無しさんNGNG
Error.pmの中身は知らんけど
ラクダ本に eval -> if($@) のWrapper乗ってたよ
tryとcatchにしただけ
0586デフォルトの名無しさんNGNG
<>ではリターンをユーザーが入力するまで、キー入力が読み込めません。
ユーザーがリターンを押す前にキー入力を得る方法を教えてください。
0587デフォルトの名無しさんNGNG
http://search.cpan.org
0588デフォルトの名無しさんNGNG
>>586=538 氏ね


538デフォルトの名無しさんsage03/04/25 12:24
<>ではリターンをユーザーが入力するまで、キー入力が読み込めません。
ユーザーがリターンを押す前にキー入力を得る方法を教えてください。

551デフォルトの名無しさん03/04/25 21:43
>>538
Term::GetKey
0589デフォルトの名無しさんNGNG
前にも同じ質問を見た気がするな。
getcを使えばSTDINから1文字読み取るが、
基本的にバッファリングされるので復帰文字を入力するまで値が帰ってこない。
バッファリングを無効にする方法はプラットフォームによって異なる。
後は自分で調べろ
0590デフォルトの名無しさんNGNG
:$a << 'eot';
:こんな感じのことしたいんですが、何か方法はないでしょうか
:つまり複数行にわたる文字列をサラッと書いて変数にいれたいわけです。
:eot
:
:print $a;

こんな感じのことしたいんですが、何か方法はないでしょうか
つまり複数行にわたる文字列をサラッと書いて変数にいれたいわけです。

0591590NGNG
すんません、↓で解決しました。

$a = << 'eot';
こんな感じのことしたいんですが、何か方法はないでしょうか
つまり複数行にわたる文字列をサラッと書いて変数にいれたいわけです。
eot

print $a;
0592デフォルトの名無しさんNGNG
>>590
わけわかんねえよ!!
0593デフォルトの名無しさんNGNG
>590
my $a;

$a = <<'EOT';
これで、
いいんで
ないかい?
EOT

print $a;
0594_NGNG
( ´∀`)/< 先生!!こんなのを見つけました。
http://www.yamazaki.90.kg/hankaku/hankaku02.html
http://www.yamazaki.90.kg/zenkaku/index.html
http://www.yamazaki.90.kg/hankaku/hankaku05.html
http://yamazaki.90.kg/hankaku/hankaku10.html
http://www.yamazaki.90.kg/hankaku/hankaku08.html
http://yamazaki.90.kg/hankaku/hankaku03.html
http://www.yamazaki.90.kg/hankaku/hankaku07html
http://yamazaki.90.kg/hankaku/hankaku01.html
http://www.yamazaki.90.kg/hankaku/hankaku06.html
http://yamazaki.90.kg/hankaku/hankaku04.html
http://www.yamazaki.90.kg/hankaku/hankaku09.html
0595デフォルトの名無しさんNGNG

print <DATA>;

__DATA__
こういう
方法も
あるでよ。
0596デフォルトの名無しさんNGNG
my $a;

$a = '
ぶっちゃけ
これでも
いい
';
0597デフォルトの名無しさんNGNG
房の質問ですが。。。
*.cgi?a
とかありますよね?
このように、?aならαという処理をする、?bならβという処理をする
というふうにするにはどうすればいいのでしょうか?
あと、これってGET,POST関係ありますよね?
トクトクです。動作可能かもお願いします
0598デフォルトの名無しさんNGNG
>>597
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc2.2ch.net/php/ )
0599デフォルトの名無しさんNGNG
>>597

>CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
>CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
>(WEBプログラミング板 http://pc2.2ch.net/php/ )
0600デフォルトの名無しさんNGNG
>>598-599
めでたいなお前らw
0601デフォルトの名無しさんNGNG
>>597
プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
Javascript は Web 制作板、CGI は Web プログラミング板へ。
業界談義、愚痴はプログラマ板へどうぞ。
ゲーム関係の話題はゲーム製作板へどうぞ。
ネタ、板とは関係の無い話題はご遠慮ください。
0602デフォルトの名無しさんNGNG
>>598>>599>>601
すいません。間違ってました。巣で間違ってたよ。。
なんでこっち来たのかな・・・
0603602NGNG
×巣
○素
0604デフォルトの名無しさんNGNG
>>597
QUERY_STRING(GET)
0605デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/php/1050369328/389
なんだよ、答えがあるじゃないか。

ただ、入力された文字列の出コードくらいやっとけ。
0606602NGNG
>>605
出コードといいますと?
0607デフォルトの名無しさんNGNG
>>597
GETとPOSTの違いは$ENV{REQUEST_METHOD}を調べれば分かるよ。
ところで動作可能とはどういう意味ですか?
0608デフォルトの名無しさんNGNG
>>606
デコード云々の前に$ENV{QUERY_STRING}の意味分かってるか?
0609602NGNG
>>608
なんか、Webprogと両方で答えているので、おこられそうですが、
?の後の値を格納する変数ですね。
0610デフォルトの名無しさんNGNG
>>609
それが分かってんだったら
if ($ENV{QUERY_STRING} eq 'a') {
α
} elsif ($ENV{QUERY_STRING} eq 'b')
β
}
でいいだろが。
0611602NGNG
>>610
いえ、それを聞きにきて、教えてもらったんです。
えと、それでデコードといいますと?
半角英数しか使わないので必要ないですよね?
0612デフォルトの名無しさんNGNG
>>611
だれかが、.cgi?あいうえお でアクセスしてくる可能性を考えんのか?
別にいいけど。
0613デフォルトの名無しさんNGNG
>>612 そんな request は無視すりゃいいだけだろ。
0614デフォルトの名無しさんNGNG
板違いなんだから答えるなよ
0615デフォルトの名無しさんNGNG
よく
s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
が使われますが、なぜ早そうな
s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1 )/eg;
を使わないんですか?
0616デフォルトの名無しさんNGNG
>>615
KENTがそうしてるからです
0617デフォルトの名無しさんNGNG
>>615
早くないからです
0618デフォルトの名無しさんNGNG
>>617
いや、後者のほうがタイプ数少ないから「早い」んだろう。
0619nobodyさん NGNG
>>615
/*
Benchmark: timing 5000 iterations of a, b...
a: 3 wallclock secs ( 3.24 usr + 0.00 sys = 3.24 CPU) <- pack()
b: 6 wallclock secs ( 5.19 usr + 0.00 sys = 5.19 CPU) <- hex()+pack()
*/

引用
ttp://www.mikeneko.ne.jp/~lab/perl/numerical_transform/
0620デフォルトの名無しさんNGNG
>>616
KENTって誰?

>>619
実際のところそんなにループすることないので、
どっちでもいいじゃんと思った
0621デフォルトの名無しさんNGNG
>>620
KENT=おいどん
0622デフォルトの名無しさんNGNG
>>620
汚いソースばら撒いて、Perlは醜いという間違った認識を人々に与えつづける悪の元凶
0623デフォルトの名無しさんNGNG
Kent BeckってPerl使ってんだっけ?とか思ってしまった。
0624デフォルトの名無しさんNGNG
Perlで、コマンドを実行してその実行結果を変数に取得するということはできるでしょうか?
例えば、
> ./hogehoge
123 ABC 456
というコマンドの時に、Perl内で変数に 123 と ABC と 456 を取得したいのです。

教えてください。
0625デフォルトの名無しさんNGNG
Sed, AWK には環境変数 sedfile, awkpath なんてものがあって、
set sedfile=c:\sedscrip\
set awkpath=c:\awkscrip\
なんて感じでスクリプトが存在するパスを指定できるのですが,
Perl にはこういうものはないのでしょうか?
0626デフォルトの名無しさんNGNG
>>625
use lib '/home/aki/lib';
とか?
0627sageNGNG
bat例

@ECHO OFF
set sedfile=c:\sedscrip\
PERL -x C:\hogehoge.bat
GOTO END
#!/usr/local/bin/perl
$sedfile = $ENV{'sedfile'};
print $sedfile;
__END__
:END
0628デフォルトの名無しさんNGNG
>>624
open (PIPE, "ls |");
 @ls = <PIPE>;
close (PIPE);

print @ls;
0629624NGNG
>628
うまくできました。
ありがとうございました。

0630デフォルトの名無しさんNGNG
変数に $buf に
Temp.= 0.0, 0.0, 0.0; Rot.= 6136, 51923, 25961
Vcore = 1.71, 1.49; Volt. = 3.38, 5.16, 11.31, -3.39, -6.14
という文字列が代入されているのですが、この内容を取得したいのですがうまくいきません。
($temp1, $temp2, $temp3, $vcode1, $vcore2, $volt1, $volt2, $volt3, $volt4, $volt5) = ($buf =~ /(\d+\.\d+)/g)
ではダメなのでしょうか?
0631デフォルトの名無しさんNGNG
>>626
また、ソフトウェアはコードよりも保守とサポートが重要だと実証した人でもある。
0632デフォルトの名無しさんNGNG
>>630
「どううまくいかないか」を書け。

気づいた点
・$vcode1 って変数名ミスタイプ?
・マイナスの値は符号がとれちゃうけど良いの?
0633デフォルトの名無しさんNGNG
>>630
とりあえずuse strictしてからもう一度書き込もう
聞く側の最低限のマナーだ
0634630NGNG
>632
変数名はtypoです。符号は取れてもかまいません。

>633
すいません…

0635デフォルトの名無しさんNGNG
つっか質問でコード部のtypoって何だよ。
余計な詮索しなきゃいけなくなるだろ。
何でエディタからコピペしないんだよ。
0636デフォルトの名無しさんNGNG
perldoc(_EOF_以下の部分)の書き方を解説してる日本語のサイトでお勧めないですか?
Googleで探してもめぼしいのがないもので、、、
0637デフォルトの名無しさんNGNG
コボルからperlの呼び出しって可能でしょうか?
今コボルのCSV形式がいまいちで "(ダブルコート) を一度perlで[@ダブル] とかに置き換え、
さらにこの変換後のファイルをコボルCSV形式で読み込み、
コボルよりperlを呼び出しこの[@ダブル]を " に置き換えるというようなことをしたいのですが。


0638デフォルトの名無しさんNGNG
「POD」で検索しなさい。
hippo2000氏の超訳サイトあたりにいい解説があったきがする。
0639デフォルトの名無しさんNGNG
perldocのnroffモードだとハイフン(-)がどうしても潰れちゃう。
perldoc DB_File とか見てもらうとわかるんだけど、-> が > になっちゃってます。
これって仕様ですか? ちなみにpod2htmlとかだと大丈夫。
0640デフォルトの名無しさんNGNG
>>637
COBOLって置換もできないの?
0641デフォルトの名無しさんNGNG
>>624

$a = `./hogehoge`;

じゃだめなの?
0642デフォルトの名無しさんNGNG
>>637
多分オープン系のCOBOLと推測しますが、perlからCOBOLのプログラムを呼ぶなら
systemを使えばいいのですが、逆はCOBOLの側でどういう作法でやるかを
調べるしかないのでは?(ちなみに私は知りませぬ)
普通のプログラムと同じようにPerlで書いたスクリプトが呼べるかどうかと言う意味では、
OSと呼ぶ側の言語によって差異がありますが、呼べることは呼べますね。

あと、[@ダブル] をダブルクォーテーションに置き換えるだけならそのままCOBOLでやった
ほうが早い&速いのでは?まあ、コボルCSV形式というものがどんなものかわからないのと、
COBOLはよくわからないのでなんともいえませんが。
0643デフォルトの名無しさんNGNG
つうかcobolスレにいきなと
最初に言うべきでしたな
0644デフォルトの名無しさんNGNG
配列の数だけループさせたいとき
こういうふうに書いてるんですが

for(0..(@a-1)) {
$a[$_] ++;
print $a[$_]." ";
}

もっとスマートにかける方法ありませんか?
0645644NGNG
>もっとスマートにかける方法ありませんか?

この条件の部分です→ for(0..(@a-1)) {
0646デフォルトの名無しさんNGNG
for(@a) {
$_++;
print $_." ";
}
0647デフォルトの名無しさんNGNG
print ++$_." " foreach (@a);

個人的にはforとforeachは使い分けたい。(内部的には一緒とはいえ)
0648nobodyさん NGNG
フツー$#a使うわなぁ・・・
for(0..$#a) {;
  $a[$]
  print ++$a[$_]." ";
}

あとこんなんとか・・・
foreach(@a) {
  print ++$_." ";
}
0649nobodyさん NGNG
>>648ミス
for(0..$#a) {;
  print ++$a[$_]." ";
}

>>647 ループカウンターの値が必要でなければforeach使いますわなぁ・・・
0650デフォルトの名無しさんNGNG
print ++$a[$_]." ";
こんなん書いたらぶっ飛ばされるわな。
0651デフォルトの名無しさんNGNG
>>644
grep { local $\ = " "; print ++$_; } @a;

なんか効率が悪そうだが…
スマートと言えばスマートか?
0652デフォルトの名無しさんNGNG
スマートって賢いって意味だろ。
みじかけりゃスマートってもんじゃない。
0653651NGNG
速度的に言うとこうなるっぽい
でも、>>>>644的にはスマートとは言えないのだろ?

while(shift @a){
 $_++;
}
0654デフォルトの名無しさんNGNG
while(shift @a){
 $_++;
}
と
$_++ while(shift @a);
ってどっちが速いかのぉ
0655nobodyさん NGNG
>>651
map{ print ++$_ . " "; } @a;
のほうがよかないか?
メモリー食うからこんな記述せぬけど
0656デフォルトの名無しさんNGNG
for ($i=0; $i<(scalar @a); $i++) {
$_++;
print $a[$_];
}

>>654
一緒じゃないの?
Perlも、コンパイルする時、多少の最適化があると思うけど?
0657656NGNG
ちょっと間違ってる。
$a[$i] だな。
0658デフォルトの名無しさんNGNG
shift って、@a 再利用する場合どうすんだよ。

黙って foreach (@a) にしとけ、>>644 見た感じ速度は問題じゃないっぽいし
0659デフォルトの名無しさんNGNG
まぁ>>647が普通だろうなぁ。.じゃなくて,のがいいと思うケド。
mapで値変える上に戻り値ナシは邪道すぎ。
0660デフォルトの名無しさんNGNG
openとかで外部のコマンドを起動して、
その外部コマンドのリターンステータスを得るにはどうしたらよいのでしょうか?
0661デフォルトの名無しさんNGNG
>>660
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq8.html#How_can_I_capture_STDERR_from_an
0662デフォルトの名無しさんNGNG
>>660
なんかこのスレその手の質問多いね。
過去200くらいに2,3回答があると思われ。
0663デフォルトの名無しさんNGNG
スレ違いかもしれませんが、、
別のpc上のoracleに対してアクセスしたいのですが
モジュール等で簡単に行うことは可能でしょうか。
自分の環境にoracleは入っていない前提です。

DBIモジュール等はローカルにoracleがないと無理なんですよね。

0664デフォルトの名無しさんNGNG
ふーん。Oracleって不便だねぇ。
0665デフォルトの名無しさんNGNG
>663

どっかにOracleクライアントインストールして DBI::Proxy でアクセス

できたっけ?
0666デフォルトの名無しさんNGNG
DBIで普通に外部のMySQL鯖にアクセスしてますが、何か?
0667デフォルトの名無しさんNGNG
print $a, "\n";
のうしろの"\n"で改行できるんだけど、printって引数ひとつじゃないの?

print $a, $b, $c, $d, "\n"; みたいなことはできないし。
どういうこと?
0668デフォルトの名無しさんNGNG
>>667
ひとつとはかぎらない。
print FH "string";
0669デフォルトの名無しさんNGNG
>>667
> print $a, $b, $c, $d, "\n"; みたいなことはできないし。

できるが。
0670デフォルトの名無しさんNGNG
引数というか渡せるのは2つだな。
print ファイルハンドル リスト

perldoc -f print をどうぞ。
0671デフォルトの名無しさんNGNG
会議室予約システムをPerlのNDBMで作ってるんですが、困ってます。

以前作ってSolaris+Apacheで動かしてたときは、hoge.dirとhoge.pagができ
たんですが、今度、RedHat Linux 7.3+Apache1.3で同じのを動かしたら、
hoge.ndbm.dbという1ファイルしかできず、検索が効かなくなってしまいまし
た。

hoge.ndbm.dbの場合、検索は、以下のじゃだめなんでしょうか。(長すぎる
行があるって出るので改行してます。)

tie (%yoyaku, NDBM_File, "/var/www/html/yoyaku/yoyaku.ndbm", O_RDONLY, 0644)
or die "$!\n";
foreach (sort keys %yoyaku) {
 if ($_ >= $today) {
  @data = split(/\t/,$yoyaku{$_});
  print "<tr><td>$data[0]年$data[1]月$data[2]日($data[10])</td><td>$data[3]時$data[4]分</td><td>$data[5]時$data[6]分</td>
<td>$data[7]</td><td>$data[8]</td><td>$data[9]</td></tr>";
 }
}
untie %yoyaku;
0672671NGNG
>>671ですが、自己解決しました。

データベースファイル名をyoyaku.ndbmにしていたのがいけなかった
ようです。.dir、.pagの場合は、ドットが2つあってもいい
(yoyaku.ndbm.dir、yoyaku.ndbm.pagを読んでくれる)が、
.dbの場合は、だめなんですね。データベースファイル名をyoyakuに
して解決しますた。

0673デフォルトの名無しさんNGNG
基本的なことかもしれませんが、わからないので質問させてください。
flockに関してなのですが、ファイルをロックする時その対象は「ファイルハンドル」になると聞きました。
別々のCGIスクリプトから同一のファイルをopenし、その時それぞれのスクリプトで違うハンドルをつけていたらどうなるのでしょうか。
具体的には以下のような感じです。

#===CGI 1===
open(FILE, "+< ./file.dat");
flock(FILE, 2);
truncate(FILE, 0);
seek(FILE, 0, 0);
print FILE "あいうえお";
close(FILE);

#===CGI 2===
open(DATA, "+< ./file.dat");
flock(DATA, 2);
truncate(DATA, 0);
seek(DATA, 0, 0);
print DATA "かきくけこ";
close(DATA);

まあ例えば上記のような2つのスクリプトがあって、これがほぼ同時に実行された場合ですね。
これだとファイルハンドルが違うから、きちんとロックされないことになるんでしょうか。
それともファイルハンドルは関係なく、対象になるファイルはロックされるんでしょうか。

よろしくお願いします。
0674デフォルトの名無しさんNGNG
>>673
試せ
0675デフォルトの名無しさんNGNG
GWは「初心者」が増えるねぇ。

>>673
ファイルハンドルは関係ない。
sub a($){ $fuga = @_; print $fuga }
$hoge=0;
a($hoge);
と同じ。
0676673NGNG
ありがとうございました。前々から気になっていたことだったので、そう聞いて安心しました。
0677デフォルトの名無しさんNGNG
for と foreach の違いをだれか教えていただければと。

0678デフォルトの名無しさんNGNG
記憶が確かならまったく同じだったはず
0679デフォルトの名無しさんNGNG
>>677
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsyn.html
0680デフォルトの名無しさんNGNG
timeからtimelocalで日付や曜日を取ることができました。
休日を取るにはどうすればいいのでしょうか?
0681デフォルトの名無しさんNGNG
PerlでAAを整形したいのですが、MSゴシックのフォント幅などを取得するモジュールは
存在しますか?
0682デフォルトの名無しさんNGNG
>>680
>休日を取るにはどうすればいいのでしょうか?
仮病を使う、とか。
0683デフォルトの名無しさんNGNG
>>682
なかなかやるな・・・。
0684デフォルトの名無しさんNGNG
>>680
Date::Japanese::Holiday
0685nobodyさん NGNG
>>684
春分秋分もとれんのそれ・・・
0686デフォルトの名無しさんNGNG
>>685
試せ
0687デフォルトの名無しさんNGNG
>>680
休日って?
土日と日本の祝日?
0688デフォルトの名無しさんNGNG
使い捨てスクリプトじゃないプログラムをperlで組んでる方にお聞きしたいのですが、
どの程度コーディングスタイルを決めてますか?
ウチはいい加減だけど大体こんな感じです。

・サブルーチンの引数を取るときの作法
× my $引数1 = shift; my 引数2 = shift;
○ my($引数1, $引数2) = @_;
・引数は必ず ( と ) でくくる。ただし、 print だけは例外。
・@_や$_を省略できるケースでも省略しない。
・@_や$_は、よほど単純な処理でない限り、きちんと命名した変数に代入してから使用する。
・条件判定は必ず先に書く。
× &サブルーチン(...) if (条件);
○ (条件) && &サブルーチン(...);
・名前空間の汚染は可能な限り拒否。
× $x = encode_base64(...);
○ $x = MIME::Base64::encode_base64(...);
0689デフォルトの名無しさんNGNG
俺的には && の時点でダウト
0690デフォルトの名無しさんNGNG
&サブルーチン(...) if (条件); でいい
&& や || の代わりに and や or を使う
if (条件){ &サブルーチン(...); } にする
どれが好み? >>689
0691デフォルトの名無しさんNGNG
>>690
場合によりけりだけど、&& || は使わないで and orにするよ
簡潔に書ける場合は 〜 and 〜;
条件よりも処理が大事なら 〜 if(〜)
実行文多いなら普通に if(条件){ブロック}
幾つかの方法を使うからといって統一が無いわけじゃなくて
何が大事か とか、コード書いたヤツがなに考えてたか が見て分かるから
(無駄なコメントなんかよりもずっと)

Perl使える人だけなら、下手にC風に書くよりもずっと見通しがいいよ
不幸にもPerl分かんない人が含まれてるなら、涙を飲んでC風にするけど
0692デフォルトの名無しさんNGNG
> ・@_や$_を省略できるケースでも省略しない。
省略できるケースは省略した方がいいと思うが。
例えばwhile中のchompなど。

まぁとりあえずperlstyleを読め、と。
0693デフォルトの名無しさんNGNG
$_より、$splited_letterとかやるほうが分かりやすい。
次第にモジュールが大きくなってくると、省略のメリットよりデメリットのほうが大きくなる。
そして、なにより
use strict -w
に怒られる。
0694689NGNG
>>691
ウチの場合は、「 〜 if(〜) 」の表記でデバッグ中に後ろの条件を見落として
悩むケースが多発するので、先に条件を書くように統一してしまいました。
ちなみに && || は少数派のようで、記号文字だとぱっと見たときに目立つから
いうのが個人的な理由だけど、多数派は and or を愛する模様。
最近では、if(条件){ブロック} の代わりに
{
 (条件A) || last;
 ...
 (条件B) || last;
 ...
}
なんて書き方にしてしまうことがよくあります。
後で条件や処理が追加されてもネストが深くならないので。

>>692
どこで変数の中身をいじったかを調べたるときに見落としなくgrepできるのが、
@_や$_を省略しないとか命名した変数に代入するとかの理由です。
(命名した変数に代入は絶対ではなく、スピードが重要な場合は例外あり)
0695688NGNG
すんません。>>694 を書いたのは >>688 です。
0696デフォルトの名無しさんNGNG
目立つとか言うのが重要なのかどうかは知らんが、
優先順位で誤作動が起きる可能性が少ないと理由で and or を選んでる
0697692NGNG
>>694
grepを考えると確かに$_は不便かも。
私もブロックが長くなるときには for my $hoge みたいにしてるかな。
ブロック内が短い時(5行まで?)は省略しちゃいます。

&& || については and or で統一してます。
&& || はそれこそ値についての評価の場合に限定して使用。
$foo ||= "xxx"; だとか デフォルト値を設定する場合とか。
まぁそれ以前にand orをあんまり使わないでifを使うコトが多いかな。
(条件) and 動作; にするか 動作 if 条件; にするかは今も迷ってる気。
条件が後ろに来ると読みにくい、には一理ありかと。
0698デフォルトの名無しさんNGNG
last if … ;
はよくつかう。
0699デフォルトの名無しさんNGNG
>>688

>× &サブルーチン(...) if (条件);
>○ (条件) && &サブルーチン(...);

この場合は
if(条件){&サブルーチン;}
とやるけど、それ以外はすべて同じ感じ。
0700デフォルトの名無しさんNGNG
状況によっては、ブロックの初期化のコストが気になります、、、
0701デフォルトの名無しさんNGNG
関数に対しては and or を使ってほしいなぁ。&&,||は値に対するものと誤解する。
0702デフォルトの名無しさんNGNG
>>701
言いたい事は分かるが微妙に突っ込まれそうな表現が嫌チック
0703デフォルトの名無しさんNGNG
「汚いソース」ってのは見たらわかるが、「綺麗なソース」の定義ってのは人によって違う気がする。
当然このスレの住人たちはおのおのの「綺麗さ」をめざしてコーディングしてるんだろうけど、
どんなことに気を使ってるのか熱烈に語ってたも。
0704デフォルトの名無しさんNGNG
できればコーディングスタイルについてはやらない方がいいと思う。水掛け論になって荒れるから。
0705デフォルトの名無しさんNGNG
アンチパターンぐらいありそうだけどPerl自体が(ry
0706デフォルトの名無しさんNGNG
メンテする人が見やくかけばいいんじゃないの?
そのためのOOだしパッケージであるわけで・・・
0707デフォルトの名無しさんNGNG
先ず定義しなきゃならんのは
Perl的か否かというこったな。
0708デフォルトの名無しさんNGNG
ファイルハンドルからファイル名を逆引き出来ますか?
0709デフォルトの名無しさんNGNG
Tieについて質問です。
配列やハッシュのタイ関数でSTOREとかFETCHとかいろいろありますが、
スカラーコンテキストで評価する際の挙動に該当するタイ関数ってあります?
0710デフォルトの名無しさんNGNG
>>681
教えて(perl
0711 ◆hMJAPH9PWA NGNG
>>709
perldoc perltie
perldoc Tie::Array

STORESIZEがそれにあたるかな。
0712デフォルトの名無しさんNGNG
>>710
http://search.cpan.org/search?query=Font&mode=all
探して無かったら諦めるか作れ。
0713デフォルトの名無しさんNGNG
Cもろくに扱えないのにPerlを始めるのはまずい?
0714デフォルトの名無しさんNGNG
>>713
Cを知らずにPerlをやるのは全然まずくない
が、一番初めにPerlに触るのはまずいかもしれない
0715デフォルトの名無しさんNGNG
>>709
TNX
0716デフォルトの名無しさんNGNG
>>714
そうなんだ…。そういえば記述の仕方が特殊ってどこかで聞いたことがあるような。
Perlを始める前に覚えておくと良い言語って何かあります?
暇な時にでも教えてくださると助かりますです。
0717デフォルトの名無しさんNGNG
Perlに、Cのプリプロセッサのような機能ってありますか?
0718デフォルトの名無しさんNGNG
>>716
Perlは変態的ですから、慣れると離れられなくなります。
0719デフォルトの名無しさんNGNG
>>716
記述の仕方が特殊というか、柔軟、冗長。
個人的に最初からPerlでもいいと思う。
冗長性が高いだけに、よいコードを書くために覚える事は多いけどね。

>>717
あると聞いたことがある。けど、多分、使うべきじゃない。
0720714NGNG
んー Perlを触る前に他のを覚える必要があるんじゃなくて
Perlのスタイルに染まる前に普通(?)のスタイルを身に着けた方が良いと思うんだ
その意味では >>718に同意

プログラミングの入門としては、Perlは受け入れやすい言語だとは思う
ただ、そのお気楽さ加減に染まりきってしまうと、他の言語を使うときに少々苦労するかもしれない

上記は、間違った方法でPerlを覚えた場合に当てはまる事で
真っ当にPerlを覚えるなら何も問題は無いよ
その辺に転がってる書き散らしのスクリプトとか、
目を覆いたくなるようなCGIのソースでPerlを覚えると、多分将来苦労する。
まずは、ラマ本、ラクダ本あたりで正当な(?)Perlを覚えるべし

# とかいいつつ、俺は汚いコードを書き散らしてるわけだが
0721デフォルトの名無しさんNGNG
>>720
けど、Cから入るくらいならPerlのがましと思わんか?
まあ、多数派に従えと言われたらそれまでだが。
らくだ本等のきれいなコードで覚えるべきってのは全く同意。
0722デフォルトの名無しさんNGNG
ラクダ本は高いから、初心者には手が出せないってのが本音。
で、巷に流れている汚いソースに汚染されるんだ罠。
0723デフォルトの名無しさんNGNG
まぁプログラムにお金かけたくないような趣味プログラマだったら
汚いコード書いても別にいいと思うけどな。
0724デフォルトの名無しさんNGNG
>>711
ハッシュの場合、STORESIZEにあたるタイ関数って無いみたいなんですけど、やっぱ無いの?
perldoc perltie
perldoc Tie::Hash
は見たけどないっぽい。
デフォルトでは「レコード数/バケット数」を返すみたいなんだけど、それを変更したいのです。
0725デフォルトの名無しさんNGNG
>>722
とりあえずラマ本で

0726 ◆hMJAPH9PWA NGNG
>>724
ああ、ハッシュは無いね。
多分、ハッシュをスカラーコンテキストで評価した値はデバッグ(ないし最適化)にしか使えないからでしょ。
TieHashの実装によってはレコードやバケットという概念は無意味だし、
本当に必要だとしても、tied(%h)->method()と呼び出すただのメソッドでいいんじゃない?
0727デフォルトの名無しさんNGNG
Perl6/Parrotの話はとんと聞かなくなっちゃったなぁ・・・
すげー楽しみにしてるのに。
0728デフォルトの名無しさんNGNG
質問させてください。
Perlccを使って、バイナリファイルを出力しようとしたのですが、
いろんなファイルが足りないらしく、エラーが出てコンパイルできませんでした・・・。
Perlだけをインストールしただけでは、perlccは使えないのでしょうか?

Perlのバージョンは、5.8.0を使ってます。
OSはWin2kです。

よろしくお願いします。
0729デフォルトの名無しさんNGNG
perlccってPerlのソースをまずはC言語のソースにするものなんじゃない?
Cのソースを吐くオプションがあるし。
だからCコンパイラが必要だと思う。
0730728NGNG
>>729
はい。Cソースを吐くオプションをつけて出力してみました。
・・・で、bcc32でコンパイルしようとしたら・・・
びっくりするほどエラーが出て、自分がわかる範囲で修正したのですが、
それでもエラーが出ます・・・

bcc32ではコンパイルできないのでしょうか・・・?
clコマンドを使ってる所を見ると、デフォルトではVC++のようですが・・・
0731デフォルトの名無しさんNGNG
>730
VS.Netでコンパイルしてみたら

C:\test>perlcc test.pl
cl : コマンド ライン warning D4002 : 不明なオプション '-nodefaultlib' を無視しま
した。
cl : コマンド ライン warning D4002 : 不明なオプション '-debug' を無視しました。
cl : コマンド ライン warning D4002 : 不明なオプション '-libpath:C:\Perl\lib\CORE
' を無視しました。
cl : コマンド ライン warning D4002 : 不明なオプション '-machine:x86' を無視しま
した。
pcc73hwa.c
LINK : fatal error LNK1104: コンパイラは、ファイル 'pt:ref,icf.exe' を開くことが
できません。

ってでて出来ませんでした。まあ一応報告…
0732デフォルトの名無しさんNGNG
VC++6.0ならリンクエラーだけだった。
バッチファイルを少し書き換えただけで通った。
環境は>>728と同じ
0733728NGNG
いろいろ、ググ〜ルさんにお伺いを立てた所・・・
やっぱ、Perlccで吐くCソースをコンパイルするのは難しいらしいです・・・
VC++がデフォルトらしく、コンパイルは通るが実行すると落ちるらしいです。
bcc32で、コンパイルを無理に通してできた実行ファイルも、ワトソン博士に怒られるらしいです。

素直にCで組み直します・・・
ありがとうございました。
0734728NGNG
わざわざ試してくれた人がいてるのですね。
ありがとうございます。

>>731
Vs.Netでは、コンパイル通らないんですね・・・。
結構あっちこっち書き換えないとコンパイル通らないらしいですよ。

>>732
その実行ファイル・・・
実行すると、落ちませんか?
0735デフォルトの名無しさんNGNG
>>734
落ちない。
一行表示するだけだしな。
0736728NGNG
>>735
そうですか。
俺の調べでは、VC++で出来た実行ファイルでも落ちるってありましたが・・・
古い記事だったので、Perlのバージョンアップで修正されたのかもしれませんね。
なんだか、ちょっと望みが出てきました。
俺も、bcc32でコンパイルできるよう、もうちょっとがんばってみます。
0737デフォルトの名無しさんNGNG
Windowsってのがビックリなわけだが
0738デフォルトの名無しさんNGNG
>>737
VCってwindowsじゃん。
0739デフォルトの名無しさんNGNG
初めてのPerl 第3版っていうのが5月15日にでるようですが
これがらくだ本ってヤツですか?
0740デフォルトの名無しさんNGNG
>>739
それはキリン本
0741デフォルトの名無しさんNGNG
>>739
http://www.oreilly.co.jp/BOOK/lperl3/
http://www.oreilly.co.jp/BOOK/pperl3v1/
http://www.oreilly.co.jp/BOOK/pperl3v2/

>>740
キリン本が何だったか思い出せなくて気になるじゃないか。(w
0742デフォルトの名無しさんNGNG
print "$kazu";

で数値を出力するとき、マイナスだと自動で -30.5 とか出力されるけど
プラスのとき自動で +30.5 と出力することは出来ますか?
自分で0以上か調べて+を先に出力するしかないですか?
0743デフォルトの名無しさんNGNG
>>742
printf('%+d', 30);
printf('%+d', -30);

0744デフォルトの名無しさんNGNG
Perlのセキュリティホールを勉強できるホームページってありませんか?
一応探したのだがなかなかいいのがなくて。

あとたとえば掲示板作るとき、セキュリティホールって考慮するの?するか・・・
アクセスカウンターはしなくていいよね?そりゃそうか・・・
0745デフォルトの名無しさんNGNG
WebProg逝け
0746デフォルトの名無しさんNGNG
>>745
よくよく考えたら誤爆でした。須磨祖
0747デフォルトの名無しさんNGNG
>>744
掲示板作る時、自らのプログラムの欠陥は当然のごとく考慮するよ。
perlのセキュリティーホールは、そんなもん考えてなんになるの?
ってか、プログラム自体にセキュリティは必要ないのでホールとやらもありません。
0748デフォルトの名無しさんNGNG
貼りまくって先月ようやく40万円稼いぎましたwww。

参加は無料なので参加してみるだけ参加してください。

また私のように紹介すると紹介者の利益の10%も貰えます。

http://www.adultshoping.com/addclickport.cgi?pid=1052120506
0749デフォルトの名無しさんNGNG
>>748
いやどっかのサイトにセキュリティホールがこれこれしかしかと書いてあったので。
心配で、CGI作れねぇって思っていたところです。
なんかCGIからメール送信するときに危ないとかなんとか・・・・。

ってかないの?ホームページと違って訳分からん。吊って来ます
0750デフォルトの名無しさんNGNG
>>749
それ通信のセキュリティーじゃねえの?
取り敢えずCGIとperlをごっちゃにするな。



あ、もしかしたら文字化け事件かな?
大丈夫。多分キミはそんな事気にするようなレベルじゃないと思う。
0751デフォルトの名無しさんNGNG
>744

$buf = $ENV{QUERY_STRING}
open("$buf.dat")

とかしてたとするとき

count.cgi?hoge%0|cat%20hogehoge

とか書かれたら
0752デフォルトの名無しさんNGNG
hahaha、そりゃそうだその通り。これでPERLが勉強できます。
サンクスコンタンボンバー焼肉
0753デフォルトの名無しさんNGNG
>>751
誰か解説よろしこ
0754デフォルトの名無しさんNGNG
>>751そんなスクリプト書くこと自体がアレなんだけどな・・・
cgiの穴であれば、Javascriptやeval、systemが問題だのぉ・・・
XSSでぐぐって見ればいいんじゃない?
0755デフォルトの名無しさんNGNG
まぁ本人が誤爆って言ってるのにレスつけるな、と。
0756デフォルトの名無しさんNGNG
マイナスの値もとる四捨五入はどうすればいいの?
0757デフォルトの名無しさんNGNG
>>756
0.5足してint
0758デフォルトの名無しさんNGNG
岩下志麻 森山良子 小宮山洋子(53) 小渕優子(28) 
華道家元の安達瞳子(高1まで)大島智子(42) 原かおり(39) 
岩本さつき(37)山形テレビ 三上智恵(37)MBS
加藤ゆずか(36)岩手放送 山崎温子静岡第1TV椎名桜子(35)
上野ゆい(35) 水原恵理(35)テレ東 児島未散(34)宝田明の子
樫本(黒田)知永子 ×岩崎宏美・良美栗原はるみ(短大)
花田美恵子(若乃花夫人) 雨宮塔子(31) ドラ永井美奈子(36)
鈴木保奈美(35)鶴田真由(31) 宇都理恵(30) 
藤村さおり28歳フジテレビ 中村奈央子(28) 
伊藤裕子(27) 木村佳乃(25)山口もえ(24) 矢口倫子(24) 
松藤あつこ(20) 峠恵子松田麻未 細田阿也(19)寺田はるひ(AV)
加藤一郎(初等学校から旧制高校成城学園→東京帝国大学法学部・
元東大総長・東大名誉教授・成城学園名誉園長)
柳谷謙介(旧制高校→東大法学部・元外務官僚・成城学園理事長)
鯵坂二夫(旧制高校→京大・京大名誉教授)
小尾信弥(中学校から旧制高校まで成城学園→東京帝国大学理学部・
東大名誉教授)
吉田秀和(旧制高校→東大フランス文学・音楽評論)
小澤征爾(中学校から高校1年まで成城学園、音楽を志し桐朋学園へ・
指揮者・成城学園理事)
堤 清二(旧制高校→東大経済学部・実業家・ペンネ−ム‘辻井 喬’
作家・成城学園理事)
羽田 孜(成城学園高校→成城大学経済学部・元首相・成城学園理事)
大岡昇平(青山学院中学から成城学園中学へ移り旧制高校→京大
フランス文学・作家)
大林宣彦 辻仁成 徳大寺有恒 黒沢久雄・優  赤木圭一郎
田村亮(55)・田村正和(58)丹羽義隆(46)松澤一之(46) 金田賢一
高嶋政宏 高嶋政伸 石黒賢(35) 田邊晋太郎
篠原俊晴  小倉淳 安藤弘樹 なべやかん 小坂一也(66) 及川光博 
小宮山雄飛(ホフ・デュラン)  松尾雄治(高校まで)
0759デフォルトの名無しさんNGNG
>>256-257
いや、違うだろ。

if($aaa < 0){$aaa = int($aaa - 0.5)}
else{$aaa = int($aaa + 0.5)}

こうじゃないのか?
0760デフォルトの名無しさんNGNG
↑ん?
負の数の四捨五入の意味を間違えてたらごめんなさい。
いいんだよな?これで。
0761デフォルトの名無しさんNGNG
http://www4.airnet.ne.jp/tmt/mathfaq/rounding.pdf
まぁPerlは全く関係ないんだが。
0762デフォルトの名無しさんNGNG


p d f な ん か 開 き た く な い
0763デフォルトの名無しさんNGNG
まずはマイナスの値もとる四捨五入の結果を定義しろ
0764デフォルトの名無しさんNGNG
>>763
普通四捨五入って言ったらどうなりますか?
0を起点に絶対値で四捨五入して、符号を戻すことでしょうか?
0765デフォルトの名無しさんNGNG
>>681 これわかる人居ませんか?
こまったなぁ
0766デフォルトの名無しさんNGNG
>>764
負の数の場合、絶対値を5社6乳して符号を戻すといいのではないかと思います
0767デフォルトの名無しさんNGNG
>>765
>>712+Metricsで探しても何も見つからんか?
0768デフォルトの名無しさんNGNG
質問させてもらいます。
use関数で呼び出したモジュールは、一度呼び出すと、それ以上呼び出さないとありますが、
違うパッケージ内で、同じモジュールを呼び出しルーチンを輸入した時、
それは、2度呼び出されてる事になってるのでしょうか?
そうなると、やっぱり処理速度に影響してくるのでしょうか?
0769716NGNG
遅くなってしまいましたがレスして頂いた方々、ありがとうございました。
無駄の無いきれいなコードを目指して頑張ります。

#理由はよく分からないけど正規表現にはまってしまった。
0770デフォルトの名無しさんNGNG
use strict って、チェックする時にだけ付けて
チェックが終わったらコメントアウトしておくべき?
0771動画直リンNGNG
http://homepage.mac.com/hitomi18/
0772デフォルトの名無しさんNGNG
>>769
頑張れ、Perlは楽しいぞ
慣れて来たらぐちゃぐちゃなコード書くのも楽しい
# と悪の道へ誘ってみるテスト


>>770
なんで?
0773デフォルトの名無しさんNGNG
>>772
余計な処理が(ry
0774デフォルトの名無しさんNGNG
>>770
おれはそうしてる。
0775デフォルトの名無しさんNGNG
こんなふうに記述できたら見やすいソースになるんですが、何か方法はないでしょうか?
あるいは、こういうふうに記述できる言語とか、プリプロセッサとか

@a = (
目玉
手足
はらわた
);
print $a[0];

>目玉
0776デフォルトの名無しさんNGNG
qw
0777できました tnxNGNG
@a = qw(
目玉
手足
はらわた
);
print $a[0];
0778デフォルトの名無しさんNGNG
う〜ん・・・?

@a = (
"目玉",
"手足",
"はらわた",
);

↑これじゃダメなの???
俺は、qwは嫌いな人なので、あまり使わない。
0779デフォルトの名無しさんNGNG
>>778
qwの方が追加削除が楽じゃん。
0780デフォルトの名無しさんNGNG
>>779
いや、別にダブルクォーテーションとコンマくらい、そんなに手間じゃないし。
削除も、一行削除で簡単だし。

Perlだけなら、なんて違和感ないんだろうけど・・・
他の言語とかもしてると、qwでの配列は違和感ある・・・
0781デフォルトの名無しさんNGNG
他の言語してるけど、違和感ぜんぜんなし。
0782デフォルトの名無しさんNGNG
@a = qw(
don't
"Hey!"
);

単にダブルクオーテーションとコンマが無いってわけじゃない。
0783デフォルトの名無しさんNGNG
>>781
最大の違和感は、スペースで区切るって所。
何か間違ってる気がする。

>>782
そんな時は、シングルクォーテーション使います。

とにかく、俺は違和感あるから嫌いってだけの話で・・・
こんな話でスレが伸びていくのも違和感ある。
と、言うことで、次回からいままで通り質問どぞ。
0784デフォルトの名無しさんNGNG
>>783
スペース? あぁ、空白文字の事かい

シングルクォートじゃ don't ダメだろ
混在させる? そりゃすっきりして気持ちがいいねぇ

気分でケチつける前に構文上の理由考えような
0785デフォルトの名無しさんNGNG
>>784
もういいって・・・しぶといな。
俺が違和感あって、それで嫌ってるだけだって。
無理に、qwを使うなって推奨してる訳じゃないし、
ただ、そう思うって言ってるだけで、qw使ってるヤツにケチつけるつもりもない。

俺は、qwが嫌い。それだけ。
0786デフォルトの名無しさんNGNG
useとrequireの違いって、importルーチンを呼び出すか呼び出さないかの違いだけですよね?
0787デフォルトの名無しさんNGNG
とぉむとぅだいをひていするものはPerlerにあらず。
0788デフォルトの名無しさんNGNG
てめぇで話し壊しといてもうお終いとは都合のいい話だな

>>786
if($hoge){ use "hogehoge"; }
if($hoge{ require "hogehoge"; }
なんてしたときに、useはどんな時でも読み込まれる

requireが、実行中にrequire文にたどり着いたら評価されるのに対して
useはとりあえず一番最初に処理されるはず
useにしとけば、実行途中にエラー吐くことは無い(最初にチェックされるから)

use でimport呼び出さない方法もあったよね、なんだっけ
0789デフォルトの名無しさんNGNG
use module (); だったかな。
0790デフォルトの名無しさんNGNG
>>788
あ、そんな違いもあったんですか。
所でちょっと長くなるんですが・・・

# ------------------------------------------------------------
[ test.pl ]
use strict;
use Test2;

print test->msg. "\n";
print test->number. "\n";
print test->change("こんにちわ世界2","")->msg. "\n";
print test->change("", "その2")->number. "\n";
exit (0);

↓つづく
0791デフォルトの名無しさんNGNG
>788
んじゃ、
if($hoge{ require "hogehoge"; }
elsif($hage{ require "hagehage"; }
elsif($hige{ require "higehige"; }
こんな場合はrequireの方が負荷少ないかもしれないって事ですか?
0792デフォルトの名無しさんNGNG
# ------------------------------------------------------------
[ Test2.pm ]
package Test;
use strict;

sub new {
  my $class = shift;
  my $data = {
    msg => "こんにちわ世界",
    number => "その1",
  };

  bless $data, $class;
}
sub ::test { return Test->new() };
sub change {
  my $pkg = shift;
  my $new_msg = shift;
  my $new_number = shift;

  if ($new_msg) { $pkg->{msg} = $new_msg; }
  if ($new_number) { $pkg->{number} = $new_number; }
  return $pkg;
}
sub msg { return $_[0]->{msg}; }
sub number { return $_[0]->{number}; }
1;
# ------------------------------------------------------------
上記のスクリプトで[test.pl]のTest2.pmをuseで呼び出すとうまく動くのですが、
requireで呼び出すと、エラーがでます・・・
これは、なぜなのでしょうか?
ちなみに、上記のソースは見やすいようにタブ部分に全角スペースを入れてます。
0793デフォルトの名無しさんNGNG
>790,>792
割り込んでスマン =■●_
0794790&792NGNG
>>793
ぜんぜんOK。
requireとuseって、ラクダ本にもimportルーチンを呼び出すか呼び出さないかの違いって書いてあったような・・・
0795デフォルトの名無しさんNGNG
>>790
print test()->msg. "\n";にすれば桶。
requireは実行時に評価されるから、
testがサブルーチンじゃなくてパッケージ名だと思われてるっぽ。
0796790&792NGNG
>>795
なるほど!
エラー出ずにちゃんと動きました!
勉強になりました。 ありがとうございます。
0797デフォルトの名無しさんNGNG
>>789
それこそ慣用的には
use module qw();
だね
0798デフォルトの名無しさんNGNG
Exporterですべでのシンボルをエクスポートするには、
どうやって記述すればいいでしょ?
0799768NGNG
すみません・・・
どなたか、>>768の質問をお答えできる人いませんか・・・?
よろしくお願いします。
0800デフォルトの名無しさんNGNG
なんか、Proxy規制で書き込めない人多発してるのかな?
カキコ少ないね。
0801 ◆hMJAPH9PWA NGNG
>>799
気にしなくていいよ。どうしても気になるなら自分でベンチマークとって見ればいい。
あと、ラクダ本は少々値は張るが買う価値はあると思うよ。
0802デフォルトの名無しさんNGNG
unix板の正規表現スレから誘導されました。

-----test.dat-----
木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)
----------------

上のデータから最後の括弧から括弧までを取り除きたいです。
括弧はずべて全角です。

while(<>) {
 chomp;
 s/(.+?)$//;
 print "$_\n";
}

ですとうまくいきません。s/\Q(\E.+?\Q)\E$//;もだめですた。
perl5.6で、文字コードはeucです。
よろしくお願いします。
0803デフォルトの名無しさんNGNG
>>802
あっちに書いたのでダメか?
0804デフォルトの名無しさんNGNG
s/([^)]+)$//;
0805デフォルトの名無しさんNGNG
>802
上手くいかない、の意味を明確にしろ。
どういう結果を望んで、どういう結果になってしまったかをきちんと説明しる。
WebProg板のやりとりでそれくらい学ばなかったのか。
0806デフォルトの名無しさんNGNG
>>802
ソースと変換しようとしてるテキストの文字コードが違ってました。
・・・で、問題解決なら、核発動。
0807デフォルトの名無しさんNGNG
>>805
●どういう結果を望んで:

-----test.dat-----
木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)
----------------

上のデータから最後の括弧から括弧までを取り除きたいです。

●どういう結果になってしまったか:
まったくマッチせず、出力がない。

ところで、unix板の正規表現スレで解決しつつあります。
お騒がせしてすみませんでした。


0808デフォルトの名無しさんNGNG
>>802
初心者ぽいから、perl5.6じゃなく、jperlを使う。
0809デフォルトの名無しさんNGNG
>まったくマッチせず、出力がない。
おかしいな
おれんとこでは

木立
山の上の芋粥

という結果が返ってきたが
0810デフォルトの名無しさんNGNG
>>807
誘導された後に質問繰り返してんじゃねーよ(´д`;)
そんな訳で、俺は>>807に振り回された訳だが・・・
0811デフォルトの名無しさんNGNG
s/.(*((.*))*.*)(.+)$/$1/;
これでどうだ?
0812811NGNG
ちょっと失敗。
s/(.*((.*))*.*)(.+)$/$1/;
0813デフォルトの名無しさんNGNG
s/(((?:(?!)).)*))\s*$/$1/;

こーだろうが・・・
0814デフォルトの名無しさんNGNG
>>812
これでも行けました。
unix板の正規表現スレで教えてもらった
s/(.+)(.+)$//;
でも行けました。最初、最長一致だからだめかと思ったけど。
3つの板・スレでお世話になりました。m(__)m
あ、あれまたお助けが・・・
>>813
あれ、これだと、削除したい著者名だけが残っちゃう。寝た?

0815813NGNG
著作者を残したいんじゃないの??
カッコからカッコつーから・・・
0816813NGNG
じゃ、コレでいけるでそ

s/((?:(?!)).)*)\s*$//;
0817デフォルトの名無しさんNGNG
>807
>まったくマッチせず、出力がない。
だとしたら、正規表現の問題じゃないな。
>802のソースでなら、例えマッチがなくても「変換されないままの原文」が出力されるはずだ。
test.datの読み込みが失敗してるんじゃないか?
0818デフォルトの名無しさんNGNG
>>814
すまソ。s/(.+)(.+)$/$1/;ですた。

0819デフォルトの名無しさんNGNG
なんだか知らんがマルチポストらしいので無視でOK?
0820デフォルトの名無しさんNGNG
>>817
ああ、間違えました。「変換されないままの原文」が出力
されるのでした。すみません。
でも、「最短一致はマッチングの位置を後ろにずらしてくれない」
ということが分からないのは同じですが。
0821デフォルトの名無しさんNGNG
>>819
Perl初心者スレでは解決しないので断った上でunix板の正規表現スレに
行ったんですよ。そしたら、Perlの問題なので、このスレがいいと言わ
れたんですよ。その内、いろんなところでレスが付き始めて、とっくに
解決しているんですが、礼儀だと思って、お礼を言ったり、レスしてる
んです。では、もう書きません。

0822813NGNG
>>819もうちょい状況嫁

で、動いたか報告が欲しいわけだが・・・
0823デフォルトの名無しさんNGNG
>>821
・・・結果、マルチポストになってるだろ。
そんな、スネられたような反応されてもねー・・・

       _, ._
     ( ゚ Д゚)

 と二\/    |Vつ
    \/)  .|V
0824デフォルトの名無しさんNGNG
>>822
>>814で書いたんですが。
おれいを書かなかったからいけないのかな。ありがとうございました〜。
0825デフォルトの名無しさんNGNG
unix板は過疎だからな
突然の初心者の来訪に扱い方がわからなかったんだろう
まあ、許してやれや

そして何事もなかったかのように次の質問をどうぞ↓
0826デフォルトの名無しさんNGNG
とりあえずのスクリプトだと
@a = `ls` とか @b = `cat hgoe` を多用しちゃうんですが、邪道ですか?
後々使うようなら Dirhandle とか openでちゃんと書くんだけど。

と、毒にも薬にもならない話題を振ってみる
0827デフォルトの名無しさんNGNG
使い捨てスクリプトなら楽でいいじゃない?
0828デフォルトの名無しさんNGNG
>>826
もともとそういう言語。
がちがちに書くやつはcgiから入った口だと思う。
0829 ◆hMJAPH9PWA NGNG
やっつけだと(やっつけでも?) @a = IO::File->new($hoge)->getlines() だなぁ。
0830デフォルトの名無しさんNGNG
シェルスクリプト書いたことある香具師なら
使い捨てPerlはバッククォートを多用するんじゃないだろうか。
0831デフォルトの名無しさんNGNG
複数のOSを渡り歩いていると外部のプログラムはあんあまり呼び出したくない。
0832デフォルトの名無しさんNGNG
Win版でファイル隠し属性はどうやって調べるの?
UNIXにない機能だからWinでも実装されてないとか・・・
0833デフォルトの名無しさんNGNG
use Win32::File;
0834832NGNG
こうやるんだね。ありがと!
Win32::File::GetAttributes(ファイル名, 戻り値);
こうもモジュールが増えてくると本無しでは苦しいなぁ。
0835デフォルトの名無しさんNGNG
>>834
どういう意味かわからんけど、CPAN網羅してる本はないと思うよw
0836デフォルトの名無しさんNGNG
紙代だけでン十万行きそうだな(笑
0837デフォルトの名無しさんNGNG
CGI&Perlブラックブック売り切れ。
鬱
0838832NGNG
>>835
Perl使いではないんで、どういうモジュールがあるかよく知らなくて
ほとんど自作してたもんで。(特にCGIとネットワーク周り)
せめて、一覧と概要くらい把握しとかないと無駄な労力になるなぁと思って。
0839デフォルトの名無しさんNGNG
なんでみんな弱者に厳しいのに
最弱者である自分には甘いの?
0840デフォルトの名無しさんNGNG
Perl についての質問をしてください。
0841デフォルトの名無しさんNGNG
>>838
http://search.cpan.org/
もし本当に一覧が欲しいと思ってるなら
http://cpan.org/modules/01modules.index.html
なんてのもあるが、結局Ctrl+Fを押すんじゃないかと。
0842832=838NGNG
>>841
さんくす。でも、探してるのとはちと違うかなぁ・・・
「FTPはこれ、ODBCはこれ、使い方は自分で調べてね」くらいでいいんだ。
あと、CPANでなくても jcode.pl cgi-lib.pl gif-cat.pl みたいなのとか。
まぁ、普段perl使わない人間なんで もちっと勉強してきます。
0843デフォルトの名無しさんNGNG
そう言われてみりゃ数が多すぎるってのも考えもんだな

0844デフォルトの名無しさんNGNG
誰かが調査してまとめればいいんだ。
お、おれはやらねーぞ
0845デフォルトの名無しさんNGNG
じゃあ俺等で作るか。
0846デフォルトの名無しさんNGNG
まずは >845 からどーぞ。
0847デフォルトの名無しさんNGNG
CPANの日本語サイトってないの?
httpでHTMLで普通にダウンロード。みたいな。
0848デフォルトの名無しさんNGNG
>>847
いちおうこんなのはある。
http://www.perldoc.jp/
他にも個人サイトでドキュメントの日本語化をしてくれて
いる人は少なからずいる。
googleで検索する技術を身につけるのが一番かもな。

>httpでHTMLで普通にダウンロード。みたいな。
ん?httpでダウンロードできるだろ?
http://www.cpan.org のことではなくて?
0849デフォルトの名無しさんNGNG
>>842
>FTPはこれ、ODBCはこれ、使い方は自分で調べてね
言っていることがわからない。
cpan searchで、ftp, odbcで検索するのと何が違う?
おれはむしろ使い方つーか、各モジュールの相互関係がよくわからないことがある。
でも、それを解説しようとするとxml本みたいに結局本の分量になっちゃうんでないの?
0850843NGNG
>>849
でもさ、CPANでFTP探すと大量に出て来るぜ?
ODBCもそう(ついでにDBI知らなきゃ、リスト大量に出ても全く理解できんな)
そこからどれを使うかは、慣れとか経験が無いと辛いんじゃないかな

普通にFTPするなら Net::FTP
ODBC使いたいならDBD::ODBC WindowsならWin32::ODBC

みたいな、定番だけのリストがあった方が良いのかもしれないと俺は思う
0851デフォルトの名無しさんNGNG
そりゃ、いろんな人が作ってるからなぁ・・・

何をもって定番つーのかも不明だったりするのも真理
0852デフォルトの名無しさんNGNG
yahooオークションみたいに評価くだすとか、、、、。

(大変良い) 迅速なバグとり、ありがとうございます。これからも、
このモジュール利用させていただきます(はぁと
(最低) インターフェイス考えろ!!使いずらくて、しょうがねぇ!!糞が!!
0853$_NGNG
初心者的質問で申し訳御座いませんが、ご教授下さい。
<IMG>タグで表示されているIMGファイルを削除する方法を教えて下さい。
../2003/images/img.gif
宜しくお願いします。
0854デフォルトの名無しさんNGNG
>>853
unlink
0855デフォルトの名無しさんNGNG
>>852

モジュール紹介とサンプルコード寄稿システムみたいなもんかな?
コメント数/評価でソートすりゃ自然に定番が分かると

で、誰が作るの?
0856デフォルトの名無しさんNGNG
だけどさ、オブジェクト指向やるつったって、
安定Perl5.5系
開発Perl5.8系
将来Perl6系
で、ぜんぜん作法が違うんだもんな。
0857デフォルトの名無しさんNGNG
今だったら、Perl5.8も安定してるだろ(w
0858デフォルトの名無しさんNGNG
>>856
安定Perl5.6系じゃねえ?

0859デフォルトの名無しさんNGNG
>>858
それ。俺も気になってたけどやっぱそうだったか。w

誰か5.6と5.8の違いを日本語で書いてあるページ知ってる?
今から検索かけてみるけど、すでに知ってる人いたら書いといて。
0860デフォルトの名無しさんNGNG
なんか探してる途中で具合悪くなってきたのでやめ。
あんま(全然)読んでないけど。↓
http://digit.que.ne.jp/work/index.cgi?PerlCE5%2e8%2e0README

しっかり寝て頭がスッキリしたから探しに行こう。。。
0861デフォルトの名無しさんNGNG
拘束演算子(=~)の働きがよく分からないので教えてください。
三項演算子を使ってパターンを切替えようとして、以下のようなコード
を書きました。(1〜4は切替えて使用)

--
$str = "aaa";
$zero = 0;
$one = 1;

$str =~ ($zero ? s/aaa/${zero}0/ : s/aaa/0/); #(1)
$str =~ ($one ? s/aaa/${one}0/ : s/aaa/0/); #(2)
$str =~ (0 ? s/aaa/${zero}0/ : s/aaa/0/); #(3)
$str =~ (1 ? s/aaa/${one}0/ : s/aaa/0/); #(4)

print $str;
--

結果、(3), (4)は期待通り置換が行われたのですが、
(1), (2)はダメでした。まずカッコの中を評価してその結果に
拘束演算子を適用するというようには解釈されないのでしょうか?
あと、定数と変数で動作が違うのも納得いきません。
0862デフォルトの名無しさんNGNG
変数に文字が入ってるか、数字が入ってるか調べる
演算子とか関数とかありませんか?
0863デフォルトの名無しさんNGNG
↓訂正

変数に文字が入ってるか、数値が入ってるか調べる
演算子とか関数とかありませんか?
0864デフォルトの名無しさんNGNG
>>863
正規表現じゃダメ?
0865デフォルトの名無しさんNGNG
>>861-863
同一人物?

とりあえず、(1)と(2)は変数が文字列として解釈されているから
第一項(っていうのか?)が偽になることは無いと思うぜ

あと、定数と変数を云々する前に
Perlでの変数内の文字列と数値の扱い方に気をやってみると良いぞ
0866デフォルトの名無しさんNGNG
新しいレコード$csvをshohinq_master.csvの一番上の行に加える、というものなのですが、

open(shohin,"+>shohinq_master.csv");
flock(shohin,2);
@shohin=<shohin>;
unshift(@shohin,$csv);
print shohin @shohin;
close(shohin);
flock(shohin,8);

・・だとうまくいきません。一番上の行が上書きされてしまうだけです。
flockをコメントアウトしても同じなので、flockは問題ないですよね?
下だとうまくいきます。

open(shohin,"<shohinq_master.csv");
@shohin=<shohin>;
close(rank);

unshift(@shohin,$csv);

open(shohin,">shohinq_master.csv");
print shohin @shohin;
close(shohin);

なにがいけないのでしょうか?おねがいします。
0867デフォルトの名無しさんNGNG
(゜д゜)
0868866NGNG
しまった・・。
下の、close(rank); となってるのはclose(shohin);の間違えでした。とりあえず動いてましたが。

どなたかわかる方、解答お願いします。
0869デフォルトの名無しさんNGNG
便乗質問です

open (FILEHANDLE, +<EXPR);
open (FILEHANDLE, +>EXPR);

はどう違うのでしょうか?
調べてみても両方とも「読み書き両用でopenする」としか書いてありませんでした
0870681NGNG
682とは別人です。

>とりあえず、(1)と(2)は変数が文字列として解釈されているから
>第一項(っていうのか?)が偽になることは無いと思うぜ

(1), (2)の結果は両方とも "aaa" がプリントされるので置換自体が行われ
ません。もし、真になることが確定していても置換が行われていれば、
(1)は "00" , (2)は "10" がプリントされるはずですよね?
(あと関係ないけど、文字列 "0" は偽と評価されるはずなので(1)は "0" が
プリントされる事を期待してます)
0871デフォルトの名無しさんNGNG
>>866
>>869

"+>"は、最初にファイルを空にする。よって、>>866 は "+>" でなく、
"+<"を使うべき。

>>You can put a '+' in front of the '>' or '<' to indicate that you
>> want both read and write access to the file; thus '+<' is almost always preferred for read/write
>> updates--the '+>' mode would clobber the file first.
0872デフォルトの名無しさんNGNG
>>870
普通はこうじゃない?これなら $one でもうまくいくと思う

$zero ? $str =~ s/aaa/${zero}0/ : $str =~ s/aaa/0/; #(1)
0873デフォルトの名無しさんNGNG
>871
>866にseekやtruncateを教えてはやらんのん?
0874681NGNG
>>872
今はそうしてます。ただ、演算子(=~)の評価の仕方がよく分からなかったので。

$str =~ ($zero ? s/aaa/${zero}0/ : s/aaa/0/); #(1)

1, $zeroを評価
2, カッコの値が s/aaa/0/ となる
3, $str =~ s/aaa/0/ を評価

って、順番で評価すると思ってたんだけど…
で、定数リテラルだとおそらく期待した通りになってるとおもう。
0875デフォルトの名無しさんNGNG
>874
$_ = "aaabbb";
$one = 'aaaccc';
$str = "aaa";
$str =~ ($one ? s/aaa/xx0/ : s/aaa/0/);
print "$str $one $_<br>\n";

$_ = "aaabbb";
$one = 'aaaccc';
$str = "aaa";
$str =~ (1 ? s/aaa/xx0/ : s/aaa/0/);
print "$str $one $_<br>\n";

この二つを実行してみれば、なんとなくわかると思われ。
あと、お前さんは681じゃなくて861だろ?
0876デフォルトの名無しさんNGNG
print でデフォルトの出力先をコンソールではなくファイル
に変更することはできるのでしょうか?
たとえば
open (OUT, "x.txt")
のようになっているときに
print OUT "abc"
ではなく
print "abc"
で、x.txt に出力されるようにしたいわけですが。
0877デフォルトの名無しさんNGNG
>876
select(OUT)とかだったような気がする
0878876NGNG
うまくいきました。ありがとうございます。
0879デフォルトの名無しさんNGNG
>871
>873
レスありがとうございました。
seekは、なんとなくピンと来るものがあって調べてみたら、わかりました。
0880デフォルトの名無しさんNGNG
名前 : デフォルト名無しさん
板 : プログラマー
↑のような書式で書かれたトファイルがあります。

これを:(全角)を区切り文字として
デフォルト名無しさん,プログラマー,
のような結果を得たいと思っております。

しかし、
でふぉると名無しさん
,
プログラマー
,
というような結果になってしまいます。

while (IN) {
  @array=split(/:/, $_);
  print "$array[1],";
}

アドバイスお願いします。
0881デフォルトの名無しさんNGNG
何が問題なんじゃコラー!
0882デフォルトの名無しさんNGNG
あ、改行が入るってことか。取り敢えずchompしとけよ。
0883880NGNG
chomp($array[1]);
とやればいいんですか、それとも
$hoge=chomp($array[1]);
とやるのでしょうか?Perlは2バイト文字でも大丈夫ですか?
0884デフォルトの名無しさんNGNG
末尾の文字の2バイト目が\nと同じだった場合のことを心配しているの?
心配ならEUC-JPを使えば。
0885880NGNG
テキストファイルの文字コードをEUCに
変換してからやればいいのか。
どうも
0886デフォルトの名無しさんNGNG
>末尾の文字の2バイト目が\nと同じだった場合のことを心配しているの?
ハァ?
0887デフォルトの名無しさんNGNG
>>886
最後の文字が日本語で2バイト目が\nだったらchompした時切られるでしょ?
0888デフォルトの名無しさんNGNG
>>883
while(IN){
  chomp;
0889デフォルトの名無しさんNGNG
>>887
制御コードは文字集合のところに入らないんじゃないかな
JISでもSJISでもEUCでも。
\(0x5c)はSJISの2バイトに来るんで、SJISは氏ね、とおもう
0890デフォルトの名無しさんNGNG
>>887
コードの範囲調べてみれ
0891887NGNG
>>889
そうなのか。サンクス
\nと同じ文字があったら一行読み込む時にいろいろと不都合なことがあるか。
0892880NGNG
一行読み込んだ時点で改行文字を削除すればいいのか。すんげぇー。
目から鱗。
0893デフォルトの名無しさんNGNG
jperl は perlcrt.dll が無いと動かないようですが
最新の active perl をインストールした状態で検索かけてみましたが
存在しません。
仮に(実際確認はしてないので)古い active perl には同梱されているとして、
古い active perl を使わないと jperl は使えないのか、それとも perlcrt.dll
だけどこかからゲットできるのでしょうか?
0894デフォルトの名無しさんNGNG
なんで連想配列はハッシュという名に変更されたんでしょう?
ハッシュはただの実装手段だと思うんですが・・・
0895デフォルトの名無しさんNGNG
>>894
associated array よりも hash の方が名前短いから
0896デフォルトの名無しさんNGNG
Perlのインタプリタって独自に開発してもいいの?
0897デフォルトの名無しさんNGNG
>>894
arrayと混同するから、って聞いたことあるけど。
0898デフォルトの名無しさんNGNG
>>893
ttp://homepage2.nifty.com/kipp/perl/jperl/index.htmlにあるjperlなら
ActivePerl build522をインストールしなきゃいけない。build522のperlを
使いたくないならPATHからそのperlのあるディレクトリを外せばいい。
PerlCRT.dllだけが欲しいならttp://theoryx5.uwinnipeg.ca/CPAN/cpan-search.htmlで
CPAN file nameでPerlCRT.dllを検索汁
0899デフォルトの名無しさんNGNG
>>891
何を言ってるんだ?
0900デフォルトの名無しさんNGNG
900ゲット(´∀`)
0901デフォルトの名無しさんNGNG
>>899
マルチバイト対応のfgets()と普通のfgets()が別個に必要になってしまうってことだろう。
0902デフォルトの名無しさんNGNG
perlプログラムをCGIで動かしているんですが、
途中重い処理があり、httpdのタイムアウトにひっかかり、
再試行もしくはサーバエラーが発生してしまいます。

forkして重い処理を別ファイル、別pidで動かしたいのですが、
親プロセスが子プロセスの終了まで待ってしまい、
結局タイムアウトが発生して困っています。

if ( $pid = fork() ) {
print "Location: $url\n\n";
exit;
} else {
system("./hoge.pl");
}

先生方何卒お力を・・・(’д’)
0903デフォルトの名無しさんNGNG
httpdがCGIのSTDOUTとかがクローズされるのを待ってんじゃないかな。
elseでSTDIN/STDOUT/STDOUTをまず閉じちゃえば?
0904デフォルトの名無しさんNGNG
>>902
fork()ではなくて、標準出力をクローズするってのはだめ?
0905デフォルトの名無しさんNGNG
>>903
>>902
有難うございました。

if ( $pid = fork() ) {
print "Location: $url\n\n";
exit;
} else {
close(STDOUT);        #←修正点
system("./hoge.pl");
}

あっさり解決しました。
0906デフォルトの名無しさんNGNG
perlでディアブロにログインするスクリプト作ってください
0907デフォルトの名無しさんNGNG
ディアブロにログインするまでの手順(望むらくプロトコルの規格書)を出してください。
0908デフォルトの名無しさんNGNG
>>225
参考になるか分からないけどPerl5.8 under cygwin で Perl/TK を
動かすためのパッチをハケーン
http://www.xray.mpe.mpg.de/mailing-lists/ptk/2002-03/msg00045.html
0909デフォルトの名無しさんNGNG
Perl/Tkはいいね
流行るといいなぁ
0910デフォルトの名無しさんNGNG
>>901
ああ、分かった。
>\nと同じ文字があったら一行読み込む時にいろいろと不都合なことがあるか。
の後に「だから、\nと同じ文字は無いんだな」ってのが省略されてるのか。了解
0911デフォルトの名無しさんNGNG
>>896
構わないんじゃ?作ったら神。

>>903
この手、頂きます。
0912デフォルトの名無しさんNGNG
>>896
つーかrubyがそれにあたらんか?
0913デフォルトの名無しさんNGNG
いや、仕様はPerlそのまんまで、実装だけ独自にってことだろ?
問題はないはずだが。
0914デフォルトの名無しさんNGNG
>>911
> >>903
> この手、頂きます。
STDINは/dev/null、STDOUT,STDERRは同じくnullかファイルにリダイレクトし
た方がいいかもしれん。
使わないことが確実ならいいけど。
0915デフォルトの名無しさんNGNG
$ss = "S";
@aa = split(/\n/, << "eot");
000
111
222
eot
@aa2 = split(/\n/, << "eot");
aaa
bbb
ccc
eot
&getArray($ss,@aa,@aa2);

sub getArray($@@) {
my($s, @a, @a2) = @_;
print $s."\n";
print $a[0]."\n";
print $a[1]."\n";
print $a2[0]."\n";
print $a2[1]."\n";
}

型宣言もしてるので、このままでも動いてくれていいようにも思うのですが、
これ、@a に @aa2 の中身も全部もっていかれてしまい、aaa, bbb とは表示されません。
サブルーチンで配列を正しく渡すにはどうしたらいいでしょうか?
ポインタを使うのかな?
0916デフォルトの名無しさんNGNG
>>915
@は、後ろ全部を飲み込んじゃうよ
ポインタつか、リファレンスを使えばOK

&getArray($ss,\@aa,\@aa2);

sub getArray($@@) {
my($s, $a_ref,$a2_ref) = @_;
@a = @{$a_ref};
@a2 = @{$a2_ref};
0917デフォルトの名無しさんNGNG
ごめん、プロトタイプ宣言直すの忘れた
0918デフォルトの名無しさんNGNG
リファレンスで渡された配列の要素数って
scalar関数使うのが一番手っ取りばやいですかね
つまり、サブルーチン内で

@array = (1, 2, 3, 4);
$ref = \@array;
print scalar(@$ref);

普通の配列みたいな $# で要素数を取れるような
やり方はないでしょうか
0919デフォルトの名無しさんNGNG
>>918
print $#{$ref};
わかってると思うが、scalar(@array) と $#array の値は
1異なるので注意してな。
0920918NGNG
>>919
なるほど、そういうことか
1異なるのはわかっておりまつ、ありがとう
0921デフォルトの名無しさんNGNG
requireについて質問させて下さい。
requireって同一ファイルは一度しか読み込まないみたいなんだけど、
これを回避する方法無いですか?
複数のパッケージで、同じファイルをrequireする必要あるもんで、
オナガイシマス。
0922デフォルトの名無しさんNGNG
>921
requireするファイルの中身を丸ごとサブルーチンに入れて、
サブルーチンで呼び出せば?
0923デフォルトの名無しさんNGNG
do 'hogehoge.pl';
にすればいいのでは。
0924デフォルトの名無しさんNGNG
>>921
%INC
0925enterNGNG
すみません。日本語文字の扱いで、
問題が出てきたのでおしえてください。

($str) = @ARGV;
&jcode'convert(\$str,'euc');
$str = substr($str,0,50);

このように、日本語(どのコードかは不定なので、
ECUに変換する)を50文字でカットして、
DBに追加しようとしているのですが、
追加の際に、たまに、EUCではないコードが発見
されたとして、エラーがでます。
エラーは↓のようなものです。
DBD::Pg::st execute failed: ERROR: Invalid EUC_JP character sequence found (0xbf00)

おそらく、最後の文字が2バイトだったときに
半分にちぎれてしまっているのだと思います。

いろいろ試したのですが解決できません。
なにかよい方法はありませんでしょうか?

上記のエラーがでたときは、DBに文字が追加されないのですが、
強引に追加する方法でもかまいません。

環境
perl5.6.0
DB:postgresql
OS:RedHatLinux7.2
0926デフォルトの名無しさんNGNG
>>925
DB 側で文字数の制限をかけるか、
マルチバイト文字の境界を正しく判定して文字を切りつめるかのどちらか。
後者については大崎さんの Perl メモとかが参考になるんじゃないかな。
0927enterNGNG
>>926さん
ありがとうございます。db側では、例えばこのような場合、
varchar(51) のようにしています。
それより大きな長さの文字を入れようとしてもエラーがでるので
substrでカットしようとしたところでした。

大崎さんの Perl メモを参考にさせていただこうと思います。
s///で最後の文字を削除のようにしたらなってくれればいいのですが・・・
0928デフォルトの名無しさんNGNG
evalでエラートラップして、漢字の泣き別れでエラーが起きてるなら
最後の1byteを削ればいいんでは。
0929enterNGNG
>>928さん
ありがとうございます。Perlメモのところに
最後がとぎれているかを調べる正規表現がありましたので、
そちらでしらべ、途切れていたら1byte削除というほうほうで、
回避することができました(^^

今回は1ファイルから1行ずつよみこみ、変換し、変数に追加し、
DBにいれるという状況なのですが、
1行ずつ処理しているときに、たまに変換がうまくいかないという
こともあるようでした。それも、できるだけ対応しました。

今は、なぜが、chomp や s/\s//g をやっても
削除されない改行コードをどうやって削除するかに
苦戦しています。
0930デフォルトの名無しさんNGNG
s/\r\n//g じゃだめかい?
s/\r\n$// でもいいけど

一度、文字コードと改行コードをまともに調べた方が後の苦労が無いと思うよ
0931enterNGNG
>930さん
どうもありがとうございます。
どうやら、読み込んだファイルの中に\nという記述があり、
それが悪さをしていたようでした。
なので、s/\\n/gとして取り除くことで、それは
削除できました。

次は、perl実行中にsegmentation faultが起こる理由がわからず
苦戦中です。
必ず同じところで発生するので、何らかの理由があると
思うのですが・・
0932デフォルトの名無しさんNGNG
一つよろしいでしょうか?

先頭が「-」ハイフンから始まるメールアドレスに、どうしてもメールが送信できません。
メールアドレスを直接、UNIXのmailコマンドに送ってメール送信をしていますが、
コマンドを起動する前に、

$mailaddr = qq|”\\\\\\\\|.$mailaddr.”\”” if ($mailaddr =~ /^\-/);

と処理しています。(もちろん上記の全角部分も半角で記述しています。)
上の方法じゃだめなんでしょうか?
(というか、「-」から始まるメアド、DoCoMoとか野放しなのがいけないんだぁ!!^^;)
0933デフォルトの名無しさんNGNG
932です。

ちなみに、¥の数は合っているはず。^^;;
0934デフォルトの名無しさんNGNG
というか、「-」で始まるアドレスは RFC 的に許されているはず。なんでも DoCoMo のせいにすんな。
0935デフォルトの名無しさんNGNG
>>934
(´-`).。oO(なぜ、docomoの肩持つんだろ・・・社員?)
0936enterNGNG
segmentation fault の原因なのですが、
@FIND = `/usr/bin/find ./$directory -type -f`;
のところで出ていました。
しかし、いろいろなディレクトリにおいて実行するのですが、
特定のディレクトリのときのみです。
その中身は10くらいのファイルがあるだけで、
変な文字があるというわけでもありません。
テストスクリプトにその部分だけかけば記述されるし、
苦戦しています
0937デフォルトの名無しさんNGNG
gdbでcoreを調べr
0938enterNGNG
すみません、gdbは perlにも対応しているのでしょうか?
gpc ./Main.pl
としてもエラーがでます。
普通に実行したときにコアファイルもはきだしません。
0939デフォルトの名無しさんNGNG
分からないなら無理しない。
0940enterNGNG
ある、特定のファイルのオープンに失敗しているようです。
しかし、普通にオープンしているだけだし、
s-jisで読み込んでeucに変換しますし、
ファイルサイズが大きいわけでもないし・・
0941デフォルトの名無しさんNGNG
EUCってさぁ

[EUC始まり]■○□△[EUC終わり]

みたいにはじめと終わりに制御コードが付いてるんじゃなかったっけ?
だとしたら途中で切っちゃっていいの?
0942デフォルトの名無しさんNGNG
>>941
それ、jisだと思ふ。
0943デフォルトの名無しさんNGNG
932です。

解決しました。有難うございます。

「”」で囲わなかったらうまくいきました。
って、簡単すぎるよ・・・。_| ̄|○

0944デフォルトの名無しさんNGNG
>>938
> gpc ./Main.pl
> としてもエラーがでます。
gpc: command not found か?

segmentation faultが起きるってのはperl自体のバグ。

gdbの使い方は

$ gdb /usr/bin/perl core

だが、デバッグオプションつけてコンパイルいてないと無理だろうし、ソース
もないとダメだから、自分でコンパイルし直すのが確実。
0945デフォルトの名無しさんNGNG
>942
うわ〜ん
0946 ◆hMJAPH9PWA NGNG
>>936
segmentation faultの原因はわからないが、find程度のことなら自前でやれば問題はないと思う。
標準ライブラリのFile::Findと付属のユーティリティfind2perlを参照のこと。
0947デフォルトの名無しさんNGNG
今>>925と同じことをしててPerlメモを参考にしてるのですが、
うまくいきません。

#$strの最後の文字が途切れているか判定する
if($str=~/\x8F$/ || $str=~tr/\x8E\xA1-\xFE// % 2)
{
chop($str);
}

これってもしかしたら半角カナが入ってた場合は思うような結果は得られませんか?
0948デフォルトの名無しさんNGNG
plの1行目を以前は
#!/usr/bin/perl
で動いていたのですが、なぜか、今は
bash: ./Main.pl: bad interpreter: No such file or directory
というエラーが出て動きません。
#!/usr/bin/perl -w
など、何らかのオプションをつけると動くのですが、
これではすこしまずです。
なぜ、こうなるのでしょうか?


0949デフォルトの名無しさんNGNG
>>948
俺は以前、ソースをWinで編集してUnixのサーバーに転送って形で
作業をしてたら、改行コードのせいで同じような問題がでたことあるよ。
0950デフォルトの名無しさんNGNG
>>949
どうもです。
ですよね・・バイナリモードとか気にして送らないとだめな
ばあいですね。

でも、今回は、サーバー上で編集してるんです。
EUCできっちりしてるし、
消して書き直したりもしたけど、やっぱり無理。

なんでだろう・・
0951デフォルトの名無しさんNGNG
head ./Main.pl | cat -v
すると ^Mがでてこない?
0952デフォルトの名無しさんNGNG
あれ!
#!/usr/bin/perl^M
^M
が出てきます。どうしてでしょう?
これだからならないんですね・・・
0953棄教者 ◆egKIKYO7cg NGNG
>>950
EUC は文字コードの話。改行とは関係ナッシング。
ソースはリモートホスト上でスクラッチしたのならわからないが、
ローカルホスト上で書いた改行コードがアレなファイルをリモート上で編集しても
改行コードはアレのままだYO!

安直な方法

nkf --unix < kusatta_kaigyo_code_no_text > matomona_kaigyo_code_no_text
0954952NGNG
>>951さん
>>953さん、
まさに適切なアドバイスをありがとうございました。
文字コードと改行コードは別だったのですね・・
知りませんでした。
ありがとうございました。
0955bloomNGNG
http://homepage.mac.com/ayaya16/
0956デフォルトの名無しさんNGNG
perl5.8の場合、
元の文字コードがわからないものを
eucに変換することはできないのでしょうか?
0957デフォルトの名無しさんNGNG
.qmailやaliasesからperlでメールを受信しています。

ただ添付ファイルがあるメールやHTMLメールを受信した場合に
処理が変になってしまいます。

このあたりの処理をやってくれるモジュール類でおすすめのものがありましたら教えてください。
0958デフォルトの名無しさんNGNG
女の子でも安心して買えるよ!
新品アダルトDVDが税込み900円〜!
http://www.dvd-yuis.com/
0959957NGNG
参考になるページだけでも良いので、
もしご存じでしたら教えてください。
Googleで色々探してみたのですが、良いページがなかなか無くて。
0960rayNGNG
perlからpostgresqlに、データを入れるのですが、
たまに↓のようなエラーが出ます。
DBD::Pg::st execute failed: ERROR: Invalid EUC_JP character sequence found (0xaa04) at .//db.pl line 89.
0xaa04という文字コードをふくんでいるからだと思われますが、
できるだけEUCのみを追加するようにしています。

動きとしては
ファイルを開く
↓
1行ずつ読み込む
↓
Perlメモのソースを組み込み、
できるだけEUCにし、それでも
EUCじゃなさそうなものは無視する
EUCのものは変数に追加していく
↓
ファイルを読み終わったら、
変数をDBに追加する。

ということをしています。
これで100件に1回くらい上記のエラーがでてしまいます。
どうにかして、避けたいのですが・・・
0961デフォルトの名無しさんNGNG
>>960
> EUCじゃなさそうなものは無視する
これが不完全なんだろうな。
0962デフォルトの名無しさんNGNG
こちらは、Active PerlのWin32環境です。

Perlで、特定のディレクトリ以下のファイルをミラーリングして、ファイル
を更新(古いファイルは退避)した時、ファイルを上書きする時などに、
ログに残すスクリプトを書いているのですが、日本語のディレクトリ名
が入るとどうにもうまくいきません。


「〜〜表」みたいな名前のディレクトリがあると、'コードの\'(0x5C)が
ディレクトリの区切りと混同されるらしく、ファイルテスト判断子(-d)で
判定しても、ディレクトリと思って貰えないようです。

この問題を解決する手段をご存知の方、お教えください。
0963デフォルトの名無しさんNGNG
ちと質問でつ

#!/usr/bin/perl -T
って意味あるの?
0964デフォルトの名無しさんNGNG
よくわかんないやつはjperl使いなよ
0965963NGNG
http://www.ipa.go.jp/security/awareness/vendor/programming/a04_03.html

を読んでたのでつが…
結局
[\<\>\"\'\%\;\)\(\&\+\|\$\#]
を置き換えするのだったら -Tイラネって気がするので
聴いてみましたのでつ
0966デフォルトの名無しさんNGNG
aaggee
0967デフォルトの名無しさんNGNG
>>962
読んだファイル一覧を、jcodeとかでEUCに変えれば?
半角カタカナは全角に戻して。
0968デフォルトの名無しさんNGNG
>>967
EUC-JPに直すんなら半カナ→全カナはいらないと思うが。
0969デフォルトの名無しさんNGNG
>>964>>967
お返事ありがとう。

それやったんですが、やっぱり、ファイルテスト判断子が通らないん
ですよねぇ。ファイルテストって内部的にどういう処理になってるのか?
知らないのですが。どうもそれじゃダメみたいです。

Jperlって手もあるんだけど、今、いろいろモジュールが入っているの
で、あの環境を残しておきたいんですよねぇ…
0970デフォルトの名無しさんNGNG
jperlは駄目。
次のスクリプトを試してみな。
これで駄目なものが出るようなら、Visual C++のisDirectory関数を使った
ライブラリを必要な人が自分で書くしかないな。
opendir DIR,'.';
@files = readdir DIR;
closedir DIR;
for (@files) {
print $_;
s/\\$/\\\\/g;
print " -> Directory" if (-d) ;
print "\n";
}
0971デフォルトの名無しさんNGNG
おっと、gは余計だった、スマソ
0972237NGNG
Windows2003のIIS6でActivePerl5.8でのCGI
動いた人いる?
なんか動かないんだが、、
0973棄教者 ◆egKIKYO7cg NGNG
誰か五箱目作ってくれ。
0974デフォルトの名無しさんNGNG
perlって、ソート標準にソート関数がありますよね。
で、ちょっと使いかたを把握してないのですが、以下の処理は可能でしょうか?
また、可能ならばどう記述すれば良いでしょうか?

@aaa;  #整数が複数個入っている。
@bbb;  #整数が複数個入っている。

これをまぜて数字順でソートしたい。@sortの中にいれる。
ただ、数字を入れたいのではなく、「aaa」の文字列か「bbb」の文字列をいれたい。

もうちょっと分かりやすく言うと、
@aaa = (12 , 1);
@bbb = (5, 3);

となっていたとする。

この場合、最大値と最低値の数字をaaaが持っていて、中の二つの数値はbbbが持っているので、結果的に

@sort = ('aaa' , 'bbb' , 'bbb', 'aaa');

となるようにしたい。実際の所は、@aaa、@bbb共に何個数字を持っているか分からず、ダブっている数字もある。(ダブっていても抹消されないようにしたい)
数字は、大きいほうからの順で先頭から代入させたい。
0975974NGNG
訂正
>perlって、ソート標準にソート関数がありますよね。
perlって標準関数にソートがありますよね。
テンパってました。
0976bloomNGNG
http://homepage.mac.com/ayaya16/
0977_NGNG
〜oノハヽo〜                
  ( ^▽^) < こんなのございまーす♪ 
ttp://www.yamazaki.90.kg/hankaku/hankaku04.html
ttp://yamazaki.90.kg/hankaku/hankaku10.html
ttp://www.yamazaki.90.kg/hankaku/hankaku09.html
ttp://yamazaki.90.kg/hankaku/hankaku08.html
ttp://www.yamazaki.90.kg/hankaku/hankaku06.html
ttp://yamazaki.90.kg/hankaku/hankaku05.html
ttp://www.yamazaki.90.kg/hankaku/hankaku01.html
ttp://yamazaki.90.kg/hankaku/hankaku02.html
ttp://www.yamazaki.90.kg/hankaku/hankaku07.html
ttp://yamazaki.90.kg/hankaku/hankaku04.html
0978974NGNG
すみません。
標準関数を使わないで自分で作り始めたのですが、なんとか自己解決できそうです。
すみませんでした。
0979デフォルトの名無しさんNGNG
push(@bbb, @aaa);
@sort = sort{ $a <=> $b } @bbb;
でいいのか?
0980デフォルトの名無しさんNGNG
>>979
それでファイナルアンサー?
0981974NGNG
>>979
質問者の俺が言うのもなんですが、明らかに違うっす。

記述のほうは自作でループ作って解決しました。
順番に照合していって、@sortにaaaかbbbの文字列を代入させる方法です。
0982デフォルトの名無しさんNGNG
マージソートじゃ駄目なの?
0983 ◆hMJAPH9PWA NGNG
>>981
@sort = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
(map { ['aaa', $_] } @aaa),
(map { ['bbb', $_] } @bbb);
0984デフォルトの名無しさんNGNG
>>982
ソートアルゴリズムを選んでどうなるものではない。
正解は983だろう。
0985デフォルトの名無しさんNGNG
combsortって速いソートなんですか?
0986デフォルトの名無しさんNGNG
次スレ用意しました。

Perlについての質問箱 5箱目
http://pc2.2ch.net/test/read.cgi/tech/1053053082/l50
0987rayNGNG
>>961さん
そうなんです。
これが晩年の問題なんですよね・・・
0988デフォルトの名無しさんNGNG
>>987
墓石に刻め。
0989974NGNG
>>983
よ、よく分からんけど。美しい!
え〜と、リファレンスがmapで…?
……ボ〜ン!!

ひ、久しぶりに本開いてみよう…汗
ありがとうございます。
ちゃんと理解してから使わせてもらいます。
0990デフォルトの名無しさんNGNG
>>969
quotemetaしてみたら?
0991デフォルトの名無しさんNGNG
>>989
クックブックに解説載ってるよ、シュワルツ変換だったかな
俺も感動した
0992デフォルトの名無しさんNGNG
むしろEffectivePerlやな。
レス数が950を超えています。1000を超えると書き込みができなくなります。