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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
"The duct tape of the Internet"こと、
Perlについての質問箱です
"There's more than one way to do it"ということで
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

過去ログは>>2-5あたり
0002デフォルトの名無しさんNGNG
過去ログ

1 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
0003デフォルトの名無しさんNGNG
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

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

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

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

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
0004デフォルトの名無しさんNGNG
おいおい、次スレはあるって。
http://pc5.2ch.net/test/read.cgi/tech/1097547110/

削除依頼しておくぞ。
0005デフォルトの名無しさんNGNG
>>4
こっちでいいよ
0006デフォルトの名無しさんNGNG
削除依頼完了
0007デフォルトの名無しさんNGNG
>>6
なんで次スレを立てて削除依頼だされなきゃならんのよ?
0008デフォルトの名無しさんNGNG
既にあるから二重スレ立ては消されて当然だろ?
0009デフォルトの名無しさんNGNG
Perlスレなんか消されて当然だろ?
0010デフォルトの名無しさんNGNG
入力した単語($tango) が含まれる行を書き出す処理するためのマッチング処理で、

if ($_ =~ /$tango/)

と

if ($_ =~ /.*$tango.*/)

ってどっちの記述もまったく同じ効果ですか?
違いがわからないのですが…。
0011デフォルトの名無しさんNGNG
$1 $2 $3 の値が違う
0012デフォルトの名無しさんNGNG
っっぷううううううううううううううううううううううううううううう
001310NGNG
>>11さん
すみません。
具体的にどういうことか教えていただけませんか?
0014デフォルトの名無しさんNGNG
>>11
$'、$`、$&じゃねーの?
0015デフォルトの名無しさんNGNG
正規表現の外ではマッチの結果を次のように参照できます。

$1, $2, $3, ... ( )の部分にマッチした文字列
$+ 最後にマッチした( )部分
$& マッチした部分の文字列
$` マッチした部分から前側の文字列
$' マッチした部分から後側の文字列

たとえば、次のように使用することができます。

if ($time =~ /^([0-9][0-9]):([0-9][0-9]):([0-9][0-9])$/) {
$hour = $1;
$min = $2;
$sec = $3;
}
0016デフォルトの名無しさんNGNG
>>10
その記述における目的にとっての「効果」は同じ。
でも勿論、マッチした文字列の内容は大きく異なっている可能性が高い。
正規表現にgオプションを付けたりすると、途端に動作に差が出る。
0017デフォルトの名無しさんNGNG
ばかばっかwwwwwwwwwwwwwwwwwwwwwwwww
0018デフォルトの名無しさんNGNG
$tango の中身が ? とかで始まってたりすると
ちょっと効果が変わるよね。
0019デフォルトの名無しさんNGNG
>>18
あー、そっか。
002010NGNG
皆様、どうもありがとうございました!
0021デフォルトの名無しさんNGNG
必要になったときモジュールを組み込みたいと思って
if ($hoge) { use MODULE }
と書いてみたのですが、どうもはじめからロードされてるように動きます。
マニュアルをみたら
「 use MODULE; は BEGIN { require MODULE } と一緒 」
とあったのですが、この場合
if ($hoge) { require MODULE }
と書けばよいと考えてしまってよいのですか?
0022デフォルトの名無しさんNGNG
yes
0023デフォルトの名無しさんNGNG
>>22
サンクスです。
これで良いんですね。安心しました。
0024デフォルトの名無しさんNGNG
Inline::Ruby
0025デフォルトの名無しさんNGNG
昔ソースコード中にCなどの別の言語のソースを記述できるというような
話を聞いた気がするのですがすっかり忘れてしまいました。
それ関係の情報へのリンクなり何なり教えていただけると喜びます。
0026デフォルトの名無しさんNGNG
>>25
http://search.cpan.org/search?query=Inline&mode=all
http://perldoc.com/perl5.8.4/pod/perlfilter.html
0027デフォルトの名無しさんNGNG
>>26
ありがとん。
0028デフォルトの名無しさんNGNG
>>24は>>25にたいする未来予知か!?
0029デフォルトの名無しさんNGNG
>>28
ここの誤爆だろう
http://pc5.2ch.net/test/read.cgi/tech/1097547110/14-35
0030デフォルトの名無しさんNGNG
逆に、C言語とかからPerlの関数を呼びたい場合は?
0031デフォルトの名無しさんNGNG
system()
とか
exec()
とか
0032デフォルトの名無しさんNGNG
   │ `'‐-.、,         \   \
    |     ``''''ー‐-- 、,,,,,,,,,\,,、-‐''|
   /:`'‐:.、,i~l            |   |
.  /:::::::::::::::| |:`''ーァ- 、,,,_     │  _,、|
  l:::::::::::::::::| |:::::::/      ̄`゙゙゙`''''''"´  ',
  |:::::::::::::::::| |:::::/              l
.  |::::::::::::::::::| |::/  ,、-----、     ._,、rz|
  !::;::、;::::::::| |/  ´  ̄``'''''`''   ‐゙'"´ |
  ll r‐、ヽ::| |'    、ィ'f''''ァ、   { ,rt'''ァ、i
   l l ノ { l::| |      ̄ ̄     ', ̄ ̄ ',
   ヽヽ,,ヽ';| |.             ',    !
    ヽ.  | |        ,.ィ    .'、  !
.    ヽ、,. | |       ´ `' = ,.ィ  /
     │ !.l       ,、rzi=,,,=iュ、 /
    ,rV  ','、     /∠-===`ォ V
.   / l l   ヽ'、    ′  ̄二二´ ./゙
   /  l ヽ   ヽ'、::::,,..     .,ハ,. ,l
.,、ri゙   \\   `'ヽ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
  ',    \\   'ー:、;;;;;;;;;;;;;;;;;;;;;;;lヽ、
   ',     \\    `''‐:、;;;;;;;;;/ ヽ`'-、
   ゙、      \\      ヽ;;/   ヽ  `'‐.、
0033デフォルトの名無しさんNGNG
>>30
perldoc perlembed 見れ。
0034デフォルトの名無しさんNGNG
Perlの真髄はInlineに有り
0035デフォルトの名無しさんNGNG
ぺrはくそ
るbyさいきょう
0036デフォルトの名無しさんNGNG
>>33
ありがとうございます。
でも以前にこれみたとこは、わけわかめだった…。
0037デフォルトの名無しさんNGNG
ある言語の中に他の別の言語を埋め込むことが流行ってるみたいですが
Perlの中でCなどを書いた方が、
Cで始めからストレートに書くより速いんですかね。
Rubyの中でPerlを記述した方が普通にその言語で書くより生産的?
よく分からないのですが。。。
0038デフォルトの名無しさんNGNG
>>37
速いってのは、実行速度が? それとも開発期間が?
0039デフォルトの名無しさんNGNG
>>37
それは馬鹿とハサミの関係だね。
うまく使えれば良いけどそうでなければむしろ泥沼にはまるんじゃない。
004037NGNG
>>38 >>39
レスどうもです。
いや、実行速度でも開発期間でもどちらでもよいのですが。
たとえばCだとインラインアセンブラとかでアセンブラ埋め込めたりできますけど
「ループの中のみ」とか、コアを絞りこんで置き換えて使うような
それ相当の機能と機能と考えたほうがよいのか。
そうじゃなくて全面的に記述はCで書いて、実行系はPerlでやる、みたいな
そういう存在なのか?よく分からなかったのです。すんません。
004137NGNG
なんというか部分最適向けなのか?全体最適向けなのか?
みたいな。。という素朴な疑問です
0042デフォルトの名無しさんNGNG
>>37=40=41
CにPerlを埋め込んでというのは仕事では扱ったことがないので
あくまで想像に過ぎないのだが、Perlの強力な文字列操作機能を
Cから使いたいという要望はあるかもしれない。
実際、Perlでなら普通にやるような文字列検索や書換えなどを
C/C++でやるには、そういうライブラリもたくさんあるにはあるが、
全部をC/C++で済ますより、その部分だけPerlにまかせるれば
簡単に済む場合は多そうな気がする。これは部分最適の例かも。
そして、それが開発工数の削減につながるなら、開発プロセスの
全体最適ということにこじつけれるかもしれない。

いずれにせよ、それぞれの言語の長所がうまく活かして、
短所を補えるなら組み込みの意味もでてくるのでは。
言うは易しで行なうは難しという感じだが。
0043デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perl
004437NGNG
>>42
レスありがとうございます。
相互補完的に使うものなのですね。
確かにCでヌル文字を常に意識しながらの作業は煩わしいといえば
そんな気がします(慣れれば、という面もありますが)
実は職場ではCを生業にやってるんですけど、
なんだかWEBやってる連中えらく盛り上がってるし
PerlでCをとなると漏れってリストラ?なんて内心ガクガクブルブルしてたんです。。
0045デフォルトの名無しさんNGNG
しんと申します
*dataの*がなんだか教えて下さい。

if ($ENV{'HTTP_COOKIE'}) {
*data = GetCookie($ENV{'HTTP_COOKIE'});
@w = split(/\,/, $data{$cknm});
$cdata1 = @w[0];
$cdata2 = @w[1];
}
0046デフォルトの名無しさんNGNG
>>しん さん
型グロブってものを示す記号です。型グロブで検索するといろいろでてきます。
例えば
!/usr/bin/perl -w
use strict;
use vars qw(*var);
*var = \"abc\n";
*var = [ qq(d e f \n) ];
*var = { g => 1, h => 2, i => "\n", };
*var = sub { "j\n" };
print $var;
print @var;
print %var;
print &var;
とすると
> abc
> d e f
> g1h2i
> j
と表示されます。>>45の場合、とりあえず型は定めずに
*dataにGetCookieの結果を保存しておき、取り出すとき$data{$cknm}として
ハッシュの要素として取り出しています。
0047デフォルトの名無しさんNGNG
ちなみに my *var = 'abc' とはできないのであしからず。
0048デフォルトの名無しさんNGNG
perlからWindowsのダイアログ使う方法ってないですか
0049デフォルトの名無しさんNGNG
Win32API呼べば
0050デフォルトの名無しさんNGNG
お前ら自分が糞Perlerであるという自覚は持ってるの?あ?
糞虫は死ねよ。
0051デフォルトの名無しさんNGNG
Perl嫌いな人はお前らが思っているより大勢いるんだが(大爆笑)

インターネット上で叩かれるのみならず、市販の書籍でも
「私(監修者)はPerlがダイキライなので、この章はとばして読んでください。」
なんて言われる始末ぷぷぷ。

別の本では「Perlなど触りたくもないのですが、仕方がなく」と嫌々ながらwwwwwwwwwwwwwww

「もっとも、世界中のPerlプログラムなど、どれも皆単なる偶然で動いているだけなのでしょうから、
その意味で典型的なPerlプログラムと言えますが(わらい)」とか書かれたり。

ちなみに、残念ながら捏造でも何でもないwwwwww

ぷぷぷ。
ぷぷぷぷぷ。
Rubyやってて良かったよ。お前らと一緒にされるのはごめんだ。
汚らしいゴミperlerめ。プログラマ板から出ていくまでお前らを叩き続けてやるからな。
汚らしい。
糞虫。
嫌な気分になってくれれば幸いだ。俺はそれを望んでいる。
ゴキブリに感情があるのか知らんが。
0052デフォルトの名無しさんNGNG
ActivePerlを使用しているのですが
変数の実数を知る方法は無いでしょうか。。

($test,$sasa) = split(/,/, $nihi);

$sasaに何が格納されているか知りたいのです。

cgiの中の<html></html>にprintf "$sasa"としてみましたがエラーだらけとなってcgi自体機能しなくなりました。
0053デフォルトの名無しさんNGNG
>>52
二度と来なくていいよ。さよなら
0054デフォルトの名無しさんNGNG
なんかそうとう根にもってるんだな
なんかあったのか? ルビ厨
必死さがかなり笑える。。ww
0055デフォルトの名無しさんNGNG
>>52
試しにコマンドラインから実行してみて
そして観察してみてください。
0056デフォルトの名無しさんNGNG
Perlの本を見てみたのですが
その本にはメモリの確保などの記述がなかったです
どのようにメモリは確保できるのでしょうか?
または そのような考え方はないのでしょうか?
素人質問ですいませんがお願いします
0057デフォルトの名無しさんNGNG
>>56
Perlはソースが公開されているよ。
0058デフォルトの名無しさんNGNG
>>57
だから何?
0059デフォルトの名無しさんNGNG
>>58
何って・・・分からないの?
0060デフォルトの名無しさんNGNG
フリーソフトの改造なのですが。
「http://www.google.co.jp/」を「http%3a%2f%2fwww%5c%2egoogle%5c%2eco%5c%2ejp%2f」
に変換する関数(?)って、どんなのがありますか?
どちらかと言うと、戻したいんですけど、どうも手がかりがつかめません。

ttp://www.cj-c.com/cgi_s/access.htm
「url.log」で「http://www.google.co.jp/;google(日本);http://www.google.co.jp/;」
と最初のデコードを修正して出力したいんです。
0061デフォルトの名無しさんNGNG
頭のおかしいひとがいるようですね
0062デフォルトの名無しさんNGNG
>>60
http://ash.or.jp/perl/tips_perl01.htm

# URLエンコード
$arg =~ s/(\W)/'%'.unpack("H2", $1)/ego;
# URLデコード
$arg =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/ego;
0063デフォルトの名無しさんNGNG
>>56
基本的にPerlが自動で確保,拡張します
0064デフォルトの名無しさんNGNG
>>61
おまえか?
0065デフォルトの名無しさんNGNG
ドザじゃ分からないか。
0066デフォルトの名無しさんNGNG
>>58
UTSL
006756NGNG
>>57
まさか ソースを読んで関数を見つけ出せということ?
個人でそんな気力はありませんorz

>>63
ありがとうございます
ということは リーク等はPerlにバグがないかぎりありえないということでしょうか?
また 基本的にと言うことは 意図的に確保する方法もあるのでしょうか?
0068デフォルトの名無しさんNGNG
>>62
前から思ってたけどこれってウニコードのエスケープはデコードできないよね・・・
0069デフォルトの名無しさんNGNG
一度確保したものは他で使い回すために終了までシステムに返すことはないとか。
伝聞だから本当かどうかは分からないけど。
0070デフォルトの名無しさんNGNG
>>68
ウニコードのエスケープと URL エンコードは別物だからね。
0071デフォルトの名無しさんNGNG
>>67
もしmallocみたいのを期待しているんだとすれば
期待はずれかもしれないけれど
例えば、配列 @a について $#a = 1000000; とかすると
それなりのメモリはされるはずです。そんな風な確保(?)の仕方はあります。
0072デフォルトの名無しさんNGNG
ただ、現実問題、コード書いてて
メモリ確保を意識しなくっちゃらならない場面って
ほとんどありません。
0073デフォルトの名無しさんNGNG
そんなこと考えなくてもいいのがPerlのいいところだしね。
ラクダ本のPOSIXモジュールのmallocの欄にもC固有のものであるとしか書かれていないし。
0074デフォルトの名無しさんNGNG
>>69
fj の malloc/free 論争を思い浮かべてしまってイヤン。

まさかここで発動したりしないよね?
0075デフォルトの名無しさんNGNG
メモリ確保を考える必要があるとすれば、
馬鹿みたいにデカいファイルを開くとかぐらいか…。


そんな機会は今までになかったけど。
0076デフォルトの名無しさんNGNG
-DDEBUGGINGをつけてコンパイルされたPerlならどこで確保と解放を行っているか分かるね。
0077デフォルトの名無しさんNGNG
>>67
リークに関しては、ガベコレが参照カウント式なので
リファレンス使って環状リンク等を作ると
自分でチェインを切らない限り、リークします。
サーバ書くとか、長く動くプログラムを作るときは注意したほうがよいです。
0078デフォルトの名無しさんNGNG
itunohanashida
0079デフォルトの名無しさんNGNG
ここだけ 10年時間がずれているレス
008077NGNG
ただし、すぐ終わる普通のプログラムの場合
これは大して気にする問題ではないです。
事実上。
008177NGNG
あれ?弱いリファレンスって
デフォルトになったんけ?
0082デフォルトの名無しさんNGNG
>>81
>>78-79は>>74のことだと思う。
008356NGNG
皆様ありがとうございました
どう確保するかではなく
要するに 意図的に確保する必要はない
なんですね
どうもありがとうございました
008477NGNG
>>82
そうか。びっくりした。
ありがとう。
0085デフォルトの名無しさんNGNG
窓でPerlを使ってるが

5.6系統だとメモリー量がんがん増えてくね。
5.8でやっと改善したって感じ。
それでも、GCも頻繁にやってくれずにかなーりたたないと動作してないなぁ。

でも、ソースの組方しだいではメモリー使用量半分ぐらい減らせたりしたな。
0086デフォルトの名無しさんNGNG
質問です
自分で書いたプログラムを実行したら
print() on closed filehandle HTML at ./aa.pl line 14.
という エラーが出ました
読んでみても意味が良く分かりません
HTMLは
open HTML , '>', "~/test.html";
で 開いたものです

すいませんが教えてください
0087デフォルトの名無しさんNGNG
ファイルを開くことが出来たかどうかチェックしてないだろ。
0088デフォルトの名無しさんNGNG
>>86
~
0089デフォルトの名無しさんNGNG
ハァ?
009086NGNG
レスありがとうございます

>>87
どういうことでしょうか?
まだ 始めたばかりで分かりません
ファイルはopenで開いて次にもうprint で書き始めています
チェックと言うもののやり方を教えて頂けると幸いです

>>88
~を外してフルパスでやっても変わりはありませんでした
0091デフォルトの名無しさんNGNG
or die $!;

とか。まともな本読んだ方がいいと思うが。
009286NGNG
>>91
ありがとうございます
どういうことでしょうか?
そういうチェックなら知っているのですが
open HTML , '>', "~/test.html"
なので 出力用に開いているので確実に生成されるのではないのでしょうか?
すいませんが教えてください
0093デフォルトの名無しさんNGNG
>>92
とりあえず今のコードを可能な限り削って
エラーが再現する完全なコードを掲示してみそ。
009486NGNG
>>93
ありがとうございます
書き直さずに 再現性を高めるために削っただけですが以下のようなものです
#!/usr/pkg/bin/perl -w
use strict;
die "Usage: $0 ImageDirectry" unless ($ARGV[0]);
my $dir=$ARGV[0];
open HTML , '>', "~/test.html";
print HTML '<html>';
close HTML;

すいませんが よろしくお願いします
009586NGNG
上のも無駄なのが多かったですね
1番少なくすると
#!/usr/pkg/bin/perl -w
open HTML , '>', "~/test.html";
print HTML '<html>';
close HTML;

こんな感じだと思います
すいませんがよろしくお願いします
0096デフォルトの名無しさんNGNG
>>95
とりあえず >>91 さんの言ってるとおり

open HTML, '>', "test.html" or die $!;

としてみることですな。
0097デフォルトの名無しさんNGNG
>>96
あ、まちがい。

open HTML, '>', "~/test.html" or die $!;
009886NGNG
すいません 新規で編集し直したので抜けてましたね
いれても
No such file or directory at
で エラーで終るだけです
009986NGNG
色々とやってみたのですがどうしても通らないです
どなたか 通るファイルのオープンを見せてくださらないでしょうか?
それで通らないのなら私の環境が悪いと言うことなので
すいませんがよろしくお願いします
0100デフォルトの名無しさんNGNG
まず open で ~ が使えないのは仕様。
http://tohoho.wakusei.ne.jp/lng/199905/99050073.htm

フルパスでもだめってのは謎だけど、
↓こうでもすればいいのかな?

my @uidentry = getpwuid($>);
open HTML, '>', "$uidentry[7]/test.html" or die $!;

セキュリティ的にはどうか分からんが。
010186NGNG
あれ?
チルダをフルパスにしたらできました
さっきはできなかったのに‥
さっきは なにか他のエラーでとまってたのかな‥
本当にすいませんでした
考えてくださった皆様ありがとうございます

>>100
ホームディレクトリにわたる 方法まで教えてくださりありがとうございます
それで行きたいと思います
私が今作ってるのはイメージビュアーなので  セキュリティーとかは関係ないのでw
今回は 途中で私のミスがあり長引かせてしまってすいませんでした
ありがとうございました
010286NGNG
わかりました
はじめから ファイルができない云々より
/の入ったパス名のファイルを作ろうとしていたのが原因でしたorz
本当に皆様には御迷惑をお掛けしました
本当にすいませんでした
0103そんなのあるの?NGNG
(´-`)。oO(まさか\でないとだめな環境だったんだろうか・・・)
0104デフォルトの名無しさんNGNG
文字列 aaa\nbbb\nccc\nddd\neee から正規表現で
aaa と eee に囲まれた部分(\nbbb\nccc\nddd\n)
を抜き出すことってできますか?
0105デフォルトの名無しさんNGNG
>>104
/sスイッチで改行も含めてマッチします。
ターゲットが$_に入っている場合は大体こんな感じ
print $1 if (/aaa(.*)eee/s);
010660NGNG
>>62
ありがとうございました、ペコリ
0107デフォルトの名無しさんNGNG
>105
ありがとうございました!
0108デフォルトの名無しさんNGNG
つかPerlやるんなら「プログラミングPerl」くらい買おうよ。。。
0109デフォルトの名無しさんNGNG
最初は「初めてのPerl」でもいい
0110デフォルトの名無しさんNGNG
プロセス一覧を返してくれる関数は何でしょう?
0111デフォルトの名無しさんNGNG
>108
やだ
0112デフォルトの名無しさんNGNG
/proc以下を読め
0113デフォルトの名無しさんNGNG
`ps`
0114デフォルトの名無しさんNGNG
>>110
http://search.cpan.org/search?m=module&q=Proces&n=100
0115デフォルトの名無しさんNGNG
@test = (1, 2, 3);
print "@test[2]\n";
print "$test[2]\n";

2行目と3行目の実行結果はまったく同じなのですが、
printするときは@と$、どっちを使ってもまったく同じなのでしょうか?
0116デフォルトの名無しさんNGNG
>>115
スライス について調べるといい。
後は $, かな
0117Ruby >>>>>>>>>>>>>> PerlNGNG
そうそうw
俺は正直なところを言えばPerlにはがんばって欲しい。やられ役がいないと寂しいしw
だがPerlの糞コードや欠点を見ると笑えるし、またそれをちょっと煽り書きすると
信者が狂ったように絡んでくるそのことの方が楽しくて、このスレをチェックするようになった。
0118115NGNG
>>116
ありがとうございます。
早速調べてみます。
0119デフォルトの名無しさんNGNG
ruby厨とperl厨って
qmail信者とpostfix信者
チョンとジャップ
トンガリとスネ夫
と同じ雰囲気があるね
0120デフォルトの名無しさんNGNG
>>119
おいおいRuby信者と同じにするなよ
0121Ruby >>>>>>>>>>>>>> PerlNGNG
そうそうw
俺は正直なところを言えばPerlにはがんばって欲しい。やられ役がいないと寂しいしw
だがPerlの糞コードや欠点を見ると笑えるし、またそれをちょっと煽り書きすると
信者が狂ったように絡んでくるそのことの方が楽しくて、このスレをチェックするようになった。
0122デフォルトの名無しさんNGNG
DBIについて質問させて下さい
perl 5.8.x で扱うデータがutf-8です

なにが問題かと言うと、
$dbh->quote() で戻ってくるデータが全部NULLになってしまうのです。。

my $dbh = DBI->connect($data_source, $username, $password, { RaiseError => 1 });
$dbh->do(
sprintf(
qq#INSERT INTO TABLE (%s) values (%s)#,
join(',', @column_names),
join(',', map { $dbh->quote($_) } @{$data}{@column_names})
)
);
$dbh->disconnect;

これを回避する為にはどうすれば良いのでしょうか?
0123デフォルトの名無しさんNGNG
>>122
> @{$data}{@column_names}
これ、なんか怪しくない?

quote する以前に、そのまま出力出来てるの?
0124デフォルトの名無しさんNGNG
my $sth = $dbh->prepare('insert into table (?, ?, ?, ?, ?, ...) values(?, ?, ?, ?, ....)');
$sth->execute( @column_names, @{$data}{@column_names} );
こっちのほうがわかりやすくね?
0125デフォルトの名無しさんNGNG
1.http://aaa.a.a/a.cgi

2.http://bbb.b.b/b/cgi

1のプログラム上から引数を渡して2のプログラムを動作させて
結果を1のプログラムに返すようなことって可能でしょうか?

2のサーバーのローカルにあるデータベースからデータを取得して
1のサーバーのローカルにあるデータベースにデータを保存したいと
おもっております。


0126デフォルトの名無しさんNGNG
> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> (WEBプログラミング板 http://pc5.2ch.net/php/ )
0127デフォルトの名無しさんNGNG
infoseekの無料HPサービスって、CGIで外部サーバに
アクセスできる?
0128デフォルトの名無しさんNGNG
>>127
おまいは一つ前のレスも見れないのかと
0129デフォルトの名無しさんNGNG
>128
つまらん奴
0130デフォルトの名無しさんNGNG
正露丸ドゾー
つ●
0131デフォルトの名無しさんNGNG
>128
黙れ
0132デフォルトの名無しさんNGNG
>>122
$dbh->quoteがおかしいと思うならなぜそんな複雑なプログラム
で確かめようとするかな?
print $dbh->quote('あなたが渡してるつもりのもの');
だけ実行して結果みてみろよ。




0133デフォルトの名無しさんNGNG
>132
日本語めちゃくちゃですよ。
0134デフォルトの名無しさんNGNG
>>122
(1) ごくシンプルに考える限り、思うにあなたは @{$data}{@column_names}というよりも
@data{@column_names}とやりたかったのではないかと推測するが、いかがか?
(2) DBIつかってるってことと$dataという名称から想像すると
もし$dataの中身がハッシュリファレンスの配列へのリファレンス => [{a=>1, b=>2, }, {a=>9, b=>8}...]みたいの
ならば、@{@{$data}[0]}{@column_names} とする必要がある。
(3) $dataが単純なハッシュリファレンス {a=>1, b=>2...}なら確かにおかしい。
ひょっとして古いPerlから5.8にアップデートしたならばDBIのリコンパイルはちゃんとしたかい?
(4) $dataがシンボリックリファレンスならもう知らないにょ

いづれにせよ、$dataを Data::Dumper->Dumpなりして貼り付けてみそ。
0135134NGNG
失礼。(2)は @{${$data}[0]}{@column_names}だ。
0136デフォルトの名無しさんNGNG
>>125
可能です。LWP覚えてからWEB板で聞いてみなはれ
0137デフォルトの名無しさんNGNG
C言語のfflushみたいなやつはperlにはないんでしょうか?調べたけどわからない・・・

エロイ方教えてください
0138にょんNGNG
$| = 1 とか、よくやるけど。
$|で調べてみてにょん
0139デフォルトの名無しさんNGNG
>>137
0140にょんNGNG
open my ${138} => '>> 137';

(..たしかに => '>> はクドイな)
0141137NGNG
にょんさん亀レスですが解答ありがとうございました。助かりました。
0142デフォルトの名無しさんNGNG
>136
適当な回答するな。思いっきり条件付きだろうが。
0143デフォルトの名無しさんNGNG
print <<"END_OF_DATA";
Content-type: text/html; charset=EUC-JP

<html>
<body>
${body()}
</body>
</html>
END_OF_DATA

sub body {
print "hello";
}

のように、ヒアドキュメント内に関数を埋め込むことができる
と聞いたのですが、これを実行すると、body()の実行結果が
最初に出力され、その後 Content-type 以下が出力されて
しまいます。

${body()} の位置に出力させることは可能でしょうか。
0144デフォルトの名無しさんNGNG
先に変数に入れるようにしたら?
0145デフォルトの名無しさんNGNG
>>143
文字列を埋め込むんだから、bodyは文字列を返さないとだめだろ。
printしたらその場で出力されてしまう。

あと${body()}は、${\(body())}の間違いだと思われ。
0146デフォルトの名無しさんNGNG
>145
${\body()}で十分だろ
0147デフォルトの名無しさんNGNG
sub body {
return "hello";
}
0148デフォルトの名無しさんNGNG
sub body{ return \"hello"; }
0149122NGNG
まず、$data は
 my $cgi = new CGI;
 my $data = $cgi->Vars;
です。書き忘れておりました。申し訳ないです。

そして原因もわかりました。
とあるデータの一部に \0 が含まれていた事で動作がおかしくなったようです。
\0 を取り除いてやる事で解決致しました。
# <select multiple>なんかだと\0で区切られるのを忘れてました、、

>>123
> quote する以前に、そのまま出力出来てるの?
ビンゴでした、、Data::Dumper->Dump してみたら
\0 を発見致しました。取り除いて見ると全く問題なしです。

>>124 確かにわかり易いのですが、
@column_names の値が固定ではないのと、一度だけの処理なので do を利用しております。
プレースホルダを利用した方が格段に処理が速いと言う事なら考えますが、
書き直しが面倒なので benchmark は敢えて取りません:-P

>>134
ありがとうございます。_|\○_
Data::Dumper->Dump で全てが解決致しました。
0150デフォルトの名無しさんNGNG
$hogeみたいなスカラー変数内の文字列に行番号を打っていくうまい方法はありますか?
調べてみたけど、ファイルから読み出して行番号を打っていく方法しか見つかりませんでした。
0151デフォルトの名無しさんNGNG
>>150
$hoge =~ s/^/++$i/emg;

少し凝るなら
$hoge =~ s/^/sprintf("%3d: ",++$i)/emg;
0152デフォルトの名無しさんNGNG
うまくいきました。
ありがとうございました。
0153デフォルトの名無しさんNGNG
binmodeを解除するコマンド、
つまりFHを明にテキストモード扱うようにさせるコマンド(方法)って
何かありますでしょうか?

FHならopen/closeすればいいのですが、
binmode STDOUT;
を途中で解除したいわけですが。
0154デフォルトの名無しさんNGNG
>>153
binmode STDOUT, ":raw";

ただしラクダ3版には「binmode関数は、ファイルをopenしてから、その
ファイルハンドルに対して実際のI/O操作を行うまでの間に、実行しな
ければならない」とあるのでいいのかどうかはよくわからん。手元の
perl 5.8.4ではこれでいけたけど。

5.8.4のperlfunc(1)では以下のように

In general, binmode() should be called after open() but before
any I/O is done on the filehandle. Calling binmode() will nor-
mally flush any pending buffered output data (and perhaps pend-
ing input data) on the handle.

出力データがバッファされてればフラッシュされる(=I/O操作している
のが前提と思われる)という記述があるのでどこかで変更されたのかな?
0155デフォルトの名無しさんNGNG
HSP 「21世紀にこんな言語はないだろう」

Perl 「Perlユーザは臭い」

Java 「Javaなんてうんこ」

C++ 「C++なぞ問題外.^^;;;」

Ruby 「Rubyこそ最高言語」

by Rubyユーザ一同
0156デフォルトの名無しさんNGNG
と、思ってるのは作者と一部の信者と、
2chで馬鹿みたいな書き込みしてる偽信者ぐらいだろう…
0157デフォルトの名無しさんNGNG
偽信者=perlerの自作自演
最低だなお前らwwwwwwwwwwwwwww
0158デフォルトの名無しさんNGNG
質問です。

90分毎にhtmlファイルのソースを編集するってことを
したいと思っているのですが、

その場合

現時刻を計測
↓
90分をカウントする
↓
ファイルの読み込み
↓
ファイルの修正

の繰り返し…って具合に作成すればいいのでしょうか?
0159デフォルトの名無しさんNGNG

はい
0160デフォルトの名無しさんNGNG
>>158
まあとりあえずそれでやってみれ
0161デフォルトの名無しさんNGNG
Active5.8をファイルの編集作業に使用しているのですが、
ファイルのコードがshif-jisの為、うまく読み込んでくれません。
入力したファイルをutf-8に変換して編集後に再度元のコードに戻したいの
ですが、どのような方法があるでしょうか?
0162デフォルトの名無しさんNGNG
>>161
いろいろな方法があります。

♪Active5.8とはなんぞや?
0163デフォルトの名無しさんNGNG
>>161
Encodeモジュールを使う

♪Active5.8とはなんぞや?
0164デフォルトの名無しさんNGNG
-Mencodingの方が手軽か
0165デフォルトの名無しさんNGNG
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< くっちゃらはぴはぴ!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< くっちゃらはぴはぴ!
Py厨〜〜〜〜!    >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」               ̄     / /

0166デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>> Python>>>>>>>>>>>>Perl
0167デフォルトの名無しさんNGNG
日本語≒英語>>>>>>>>>>>Ruby
0168デフォルトの名無しさんNGNG
Cygwinのperlを使ってるんですが、

open HOGE1 ,">hoge.txt"
print HOGE1 "hello\n";
print HOGE1 "world\n";

と書くと、hoge.txtに
hello
world
と出力されるのはなぜでしょうか。
この場合、hoge.txt には world だけ出力されるのが正しいと思うのですが。
0169デフォルトの名無しさんNGNG
open HOGE1 ,">hoge.txt"
print HOGE1 "hello\x0D";
print HOGE1 "world\x0D";
0170デフォルトの名無しさんNGNG
>>168
なんで、そう出力されるのが正しいと思うのか、興味あるな。
0171デフォルトの名無しさんNGNG
>>170
168です。
>と>>の違いがUNIXのものに由来していて、
">"が上書き用
">>"が追加の書き込み用
と説明されているからです。

Cygwin上のbashで
echo hello > hoge.txt
echo world >> hoge.txt
とすれば、hoge.txt の中は
hello
world
になりますが、
echo hello > hoge.txt
echo world > hoge.txt
ならば、hoge.txtの中は
world
だけになりますので、perlの場合でも同様だろうと考えたからです。
0172デフォルトの名無しさんNGNG
open HOGE1 ,">hoge.txt";
print HOGE1 "hello\n";
close HOGE1;

open HOGE1 ,">hoge.txt";
print HOGE1 "world\n";
close HOGE1;

ってやってみれ
0173デフォルトの名無しさんNGNG
> truncate(O_TRUNC)
>> append(O_APPEND)
open(2)をよく見てみれ
0174デフォルトの名無しさんNGNG
初心者な質問失礼致します

hoge.txtに

>hogehogehoge$foohogehoge

と書かれているとき、$fooの値を
perl側で代入して読み込む方法はないでしょうか
0175デフォルトの名無しさんNGNG
>>174
(´-`).。oO( 台風のせいかな? )
0176デフォルトの名無しさんNGNG
>>174
eval使え…と言いたい所だけど、
$fooとhogeの間に区切りが無いみたいだから
$bにhoge.txtの中身を読み込んでおいて、
$b =~ s/\$foo/$foo/g;
かな。evalもこれも自分としては気持ち悪いけど

自分ならhoge.txtの中身を
>hogehogehoge%foo%hogehoge
とかしておいて、
$b =~ s/%(.*?)%/$h{$1}/g;
と、専用の連想配列から取り出して置換するな。
(hoge.txtが汚染されていた場合やばいから)
0177デフォルトの名無しさんNGNG
>>176
有難うございます
$b =~ s/\$foo/$foo/g;
でやってみたいとおもいます

厨な質問で申し訳ありませんでした
0178デフォルトの名無しさんNGNG
Perlの最新バージョンって5.9.1?
0179デフォルトの名無しさんNGNG
6
0180デフォルトの名無しさんNGNG
ruby
0181デフォルトの名無しさんNGNG
6になったら、5のメンテするひとっていなくなるのか?
0182デフォルトの名無しさんNGNG
>>178
Perl5 限定の話だとして、

安定版 (通常はこれを):
Perl 5.8.5
ActivePerl Build 810 (5.8.4 相当)

旧系列 (旧ヴァージョン依存のスクリプトを使う場合はこれを):
Perl 5.6.2
ActivePerl Build 638 (5.6.1 相当)
Perl 5.005_04 (gcc3 へ対応 etc.)
Perl 5.005_03 (こちらでも問題無し)

開発版:
Perl 5.9.1

MacPerl やらはよく分からず。
詳細は http://www.perl.org/ なり http://www.activestate.com/ で。
0183デフォルトの名無しさんNGNG
>>181
そんなことはないと思う。
0184デフォルトの名無しさんNGNG
>>182
MacPerlは5.6.2 r2 のもより。
OSXでは5.8.2のもより。
0185デフォルトの名無しさんNGNG
>>184
$ perl -v

This is perl, v5.8.1-RC3 built for darwin-thread-multi-2level
(with 1 registered patch, see perl -V for more detail)

だたスマソ@MacOSX 10.3.5
0186デフォルトの名無しさんNGNG
おっ?マカも居たのか!
んじゃ、質問です。
OSの「開くダイアログ」を呼び出すモジュールと関数を教えて下さい。
MacJPerlに馴れちゃったんで、OSXになって不自由してます。
どうか、よろしくお願いします。m(_ _)m

MacOSX10.3.5 / perl v5.8.1-RC3です。
0187デフォルトの名無しさんNGNG
>>186
そんな器用なものは入っていないかと思われ(苦笑)@だって標準のperlだし。
0188デフォルトの名無しさんNGNG
>>187 追記
http://www.cpan.org/modules/by-module/Mac/
を見るといろいろとあるようなので、perl -MCPAN -e shell で突っ込んでみるのも良いかも?
0189デフォルトの名無しさんNGNG
>>187
レスありがとう。
CAPNに出回ってないかと…。英語苦手なものでスミマセン。
いまは、AppleScriptを呼び出したり、逆にAppleScriptの
ドロップレットから、perlを呼んだりして、一応出来るんで
すが、なんか不毛な気がするので。
0190デフォルトの名無しさんNGNG
>>189
踏む踏む、なぁるほど。。
漏れの場合、うに機と同じ感覚でterminalで動かしていたりするからあんまり苦になっていなかったりします(w

♪試しにperl -MCPAN -e shellしてみたらなんだかいろんなもの拾い始めた鬱@Securty up-dateしたら消し飛ぶ悪寒(泪)

・・・ ftp://ftp.perl.org/pub/CPAN/MIRRORED.BY が取ってこれないみたい(滂沱)@ブラウザだと、ささっと取ってきやがる(怒)
0191186NGNG
>>190
漏れも perl -MCPAN -e shell は、やったんです。
んがっ!けたたましくインストしたけど、正直ワケワカメorz。

darwin::MacOSX::File::Catalog.pm

が、臭いんだけど…。
MacJPerlでラクしすぎたせいで基本すら解ってない事に
気づきました。Mac用のモジュールって、MacPerl用だったり
しません?上のはdaewinってなってるから平気かと思ったん
ですけど。てか、勉強し直すか、Classic上でMacJPerl使います。
ごめんなさいでした。ショボーン━━(´・ω・`)━━
0192デフォルトの名無しさんNGNG
その「@」の使い方はどこの文化だ?
0193デフォルトの名無しさんNGNG
デカルチャー
0194デフォルトの名無しさんNGNG
>>191
Mac::AppleEvents を入れてみたけれど、変なダイアログとか、喋ったりとかしたのでおそらく使えるかと思います(w@make test
使い方とかはマニュアル嫁ってことで。

ところで search.cpan.org は、もう寝たみたいですなぁ(哀)

>>192
俺様文化です(w
0195デフォルトの名無しさんNGNG
 ActivePerl 5.8.xでのsystem()関数の挙動について質問。この関
数にリストで渡したときの挙動がNT系と9x系とで異なるのは仕様な
のでしょうか。たとえば「My Documents」の場所を示すスクリプト

use Win32::OLE;
my $wsh = Win32::OLE -> new('Wscript.Shell');
my $mydoc = $wsh -> SpecialFolders('MyDocuments');
system ("echo",$mydoc);

(例のため無理矢理echoを使っていますが)をNT系のOSで実行
させた場合には要不要に応じて二重引用符がつきます。

D:\home
"C:\Documents and Settings\USER NAME\My Documents"

ところがこれをWindows 98/Meで実行すると

C:\My Documents

となり、二重引用符でくくられません。

http://aspn.activestate.com/ASPN/Mail/Message/933468

以下のスレッドではbuild 630から二重引用符は不要になったとの
ことですが、話題がNT系だけで9x系の話がありません。
0196デフォルトの名無しさんNGNG
実行したユーザ毎に ~/.hogeを作りたいのですが
ユーザはどのように特定したらいいのでしょうか?
0197デフォルトの名無しさんNGNG
>>195
(´-`).。oO( cmd.exe と command.com の違いじゃないの…?)

>>196
(´-`).。oO( $< $> $( $) %ENV 辺りを眺めてみたら…?)
0198デフォルトの名無しさんNGNG
perlで文字列の中から漢字を置換する方法を教えてください。例えば、
$value = "表示します。";
があった場合、
$value = "表\示します。";
に置換したいです。
$value =~ s/表/表\\/g;
ってやってみたらうまく動作しませんでした。
よろしくお願いします。
0199デフォルトの名無しさんNGNG
>>198
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0200デフォルトの名無しさんNGNG
すみません質問です。
Net::POP3を使ってメールを受信するプログラムをダウンロードして使用しているのですが、
メールの内容が文字化けしてしまいます。
どなたかアドバイスをいただけないでしょうか?
プロンプトからtelnetで手打ちでPOP3のコマンドで取得するときは、
set codeset JIS Kanji をしているので文字化けしません。
【ダウンロードしたプログラムの一部】
connect処理
login処理
$ref_mailsize = $pop->list();
foreach ( sort {$a<=>$b} keys %{$ref_mailsize} ){
print "Mail NO.$_ $$ref_mailsize{$_}bytes\n";
}

*mailindex = $ref_mailsize;

foreach ( sort {$a<=>$b } keys %mailindex ){
print "\nMail No.$_ $mailindex{$_}bytes\n";

$ref_lines = $pop->get($_);

$line = 1;
foreach ( @$ref_lines ){
s/^\.\././;
print "$line: $_";
$line++;
}
}
0201デフォルトの名無しさんNGNG
perl6って今どうなってるのですか?
リリース遅すぎると思うんですが
0202デフォルトの名無しさんNGNG
rubyから必死にパクってます。
0203デフォルトの名無しさんNGNG
例えば "掲示板" という文字、UTF-8でエンコードすると

"E6%8E%B2%E7%A4%BA%E6%9D%BF"
となると思います。

そして本来UTF-8のコードである "E6%8E%B2%E7%A4%BA%E6%9D%BF" を誤って
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C",hex($1))/ge;
でデコードすると

"牙ず? "

となってしまいます。
この "牙ず? " を元のUTF-8のコード "E6%8E%B2%E7%A4%BA%E6%9D%BF" に戻すには
どのように処理したらいいのでしょうか?
Jcode.pmを使用せずに元に戻す方法を知りたいのですがどなたか教えて下さい。
0204デフォルトの名無しさんNGNG
perl5.8移行で
use encoding "utf8";
0205デフォルトの名無しさんNGNG
>203
"牙ず?" になっちゃった事は、どうやって確認した?
UTF-8 文字列を無理やり EUC-JP と見なして表示させると、そう見えるね。
でも中身は 0xE6 0x8E 0xB2 0xE7 0xA4 0xBA 0xE6 0x9D 0xBF のまま
破壊されていないはず・・だから
 $str =~ /\W/'%'. unpack('H2',$1)/eg;
で良くね?

もしかしたら、破壊しちゃった?なら無理だけど。
0206デフォルトの名無しさんNGNG
>>205
!を付けなければ破壊されないよ。
0207デフォルトの名無しさんNGNG
>>203
誤ってデコードしなけりゃいいだけだと思うのだが、それは
別の香具師で手がだせないという問題?
0208デフォルトの名無しさんNGNG
>>205-207 皆さんありがとうございます。
Jcode.pmを使ってエンコードすると"掲示板"に戻せるように変換されるので
壊れてはいないと思います。
 $str =~ s/\W/'%'. unpack('H2',$1)/eg;
でやると"牙ず?"をeucでエンコードしたことになってしまうみたいで
"牙ず?"にしか戻らなくなってしまいます。

0209デフォルトの名無しさんNGNG
Perlの勉強をPerlについて書かれているWebページを見ながら1週間くらい前から始めました。
基本的な文法を覚え、参考にしているWebページにあるサンプルコード程度のレベルなら
何も見ずに書けるようになりました。
しかし、普段このスレで出る質問はまだまだ自分には難しく感じます。
中には理解できるものもありますが、見ただけでは全然わからないソースもあります。

参考書・参考ページのサンプルコードを真似してる超初心者のレベルを脱出し、
実用的なコードを作れる入り口のレベルに達してさらに上達していくためには
どのような勉強方法がいいのでしょうか?
本屋でPerlに関する参考書を見たのですが、どれもWebページで代用できるようなものばかりです。
このスレで質問に答えて下さるようなプロの皆様は参考書を見たりするような
基本的な勉強方法を終えた後にどのように今のようになりましたか?

よろしければお聞かせください。
0210デフォルトの名無しさんNGNG
>>209
CPANにおいてあるモジュールのソースをperlインタープリターになったつもりで読みまくる。
0211デフォルトの名無しさんNGNG
>>209
他人の書いたコードを読むのがいいのでは?
0212デフォルトの名無しさんNGNG
>>210
これは...ちょっときついです。
まだまだ修行が足りないようです...。

>>211
周りにPerlを使って何かを作っている人がいないのです。
Webを検索すればたくさん出てくるでしょうか?
『これが俺の作ったソースだ! 見てくれ!』って感じで公開しているところは多いのでしょうか?
0213デフォルトの名無しさんNGNG
>>212
酷いコードが多いからCGI関係はやめておいた方がいい
とりあえずuse strictしてあるコードを探して読みまくるべし
0214デフォルトの名無しさんNGNG
>>209
他人のコードを読みまくると「どうしてこういう設計になってるんだ」という疑問が湧いてくる。
湧いてこないうちは読込みが足りない。湧いてきたらデザパタ勉強汁。
0215デフォルトの名無しさんNGNG
>158 です。
プログラムは作成したのですが…
----------------------------------------------------------
#ファイルをオープンする。
open(file, "hogehoge.htm")|| die "hogehoge.htm をオープンできません:$!\n";

#文字列置換
print file "<br>\n";

$sec = $ARGV[0];
print "$ARGV[0] 秒タイマー\n";

until ($sec == 0) {
print $sec--, "\n";
sleep(1);
}

print "\a";
print "$ARGV[0] 秒経ちました。\n";

close(file);
------------------------------------------------------
実行させると、タイマーが作動するだけで、htm自体は何にも編集されていません。
どなたかご教授を
0216デフォルトの名無しさんNGNG

馬鹿か。入門書でも読んでろ
0217デフォルトの名無しさんNGNG

>>215

・・・・。あ、今日は休日か。
0218デフォルトの名無しさんNGNG
CPANってセクハラっぽいね
0219デフォルトの名無しさんNGNG
>>215
とりあえず、openで>か、>>が要るんじゃないか?
ま、このままじゃ、<br>しか、書き込まんが。
0220209=212NGNG
>>213
>>214

ありがとうございます。
use strict、って確か文法を厳しくチェックしますよ、って言う宣言ですよね。
早速探して読みまくってみようと思います。
0221デフォルトの名無しさんNGNG
>>215
http://age.tubo.80.kg/age01/img-box/img20041023162407.txt
脳内処理でスマソ。
0222デフォルトの名無しさんNGNG
>>221
なんかむちゃくちゃですねスマソ
ちゃんと書き直します。。。
0223デフォルトの名無しさんNGNG
>>222
http://age.tubo.80.kg/age01/img-box/img20041023183313.txt
修正と動作確認をしましたm(_ _)m
0224デフォルトの名無しさんNGNG
まぁ普通はcron使うんじゃないかなーとか
Winならタスクスケジューラーもあるしなー
Macは・・・Macも最近はBSDか
0225デフォルトの名無しさんNGNG
Perlでオブジェクト指向の手法を理解でき、使うことができるって言うのはどのくらいすごいのですか?
できる人とできない人をドラゴンボールの世界に例えて、戦闘力で教えてください。
0226デフォルトの名無しさんNGNG
perlのシンボルテーブルの管理を行っているのはソースの
どの辺りでしょうか?
もう半日くらいperlのソース追っかけてるけど見つからない
0227デフォルトの名無しさんNGNG
>>225
操気弾(エネルギー弾の遠隔コントロール)が使えるかどうか。
使えるけど使わない人も多い
ヤムチャは雑魚だけど、普通の地球人としては異常なレベルの強さ
0228デフォルトの名無しさんNGNG
>>227
Perlでオブジェクト指向プログラミングができないと『会社で使えねぇヤツ』って事にはならないんですか?
他の言語(Java等) でも同じことが言えるのでしょうか?
0229デフォルトの名無しさんNGNG
>228
Perl で OOP しない人→とにかく食べられればいい人
Perl で OO なモジュールを使う人→食べ方にも気を遣う人
Perl で OO なモジュールを書く人→厨房のごたごたまで覗く人

そもそも Perl の OOP は後付で個人的には変態的だと思う。
Java だと OOP は使って当たり前ではないかと。
0230デフォルトの名無しさんNGNG
try-catchはいつ実装されますか
0231デフォルトの名無しさんNGNG
C:\Documents and Settings\mypc\デスクトップ\KAJIKoreRC>perl kore.pl
Can't locate Win32/API.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .
) at kore.pl line 13.
となってしまいます。とりあえず()内が見つからないというのは理解できましたが、ではココからどうすれば良いのか皆目見当がつきません。
スレ違いというかそれ以前の問題だとは思いますが、どうかお教えくださいお願いします。
0232デフォルトの名無しさんNGNG
>>231
その程度も自力解決できないようじゃそのうち罠botに
やられるのがオチなのでやめとけ(w
0233デフォルトの名無しさんNGNG
>>230
perldoc.jpのError.pmを参照
0234デフォルトの名無しさんNGNG
>>231
> ()内が見つからないというのは理解できましたが
いや、()内でWin32/API.pmが見つからない
0235 ◆7CWqH7Oesg NGNG
>>231

「Documents and Settings」というフォルダに半角スペースがあるのわかる?
0236デフォルトの名無しさんNGNG
( ゚д゚)?        罠bot

(つд⊂)ゴシゴシ

(;゚д゚)          罠bot

(つд⊂)ゴシゴシ
  _, ._
(;゚ Д゚)!        kore.pl


0237231NGNG
>235 
分かります、ということはDocuments and Settings となっているところを
半角を削ればいいのでしょうか?
>236
罠かな…
0238デフォルトの名無しさんNGNG
Perlのバージョン5.8.0と5.8.4はあるのですが
5.8.2等他のバージョンは現在入手可能でしょうか?
activestateのHPでは5.8.4しかDLできないようなのですが…;;
0239デフォルトの名無しさんNGNG
Perlマニアですか?
0240238NGNG
バージョン5.8.0と5.8.4ではどうも不具合が出るので
他のバージョンで試した方が良いとアドバイスをもらったもので…。
0241デフォルトの名無しさんNGNG
>>230
use Error; セヨ。
もうとっくにある。
0242デフォルトの名無しさんNGNG
>>209
即効性もなく、ひどく遠巻きな方法だけれど
sh, grep, sed, awk と進んで C のK&R本を読み、
オライリーの本を「初めての..」「ラクダ本」「クックブック」と進めていくと
文化的な背景も含めて理解しやすいような気がするよ。
少なくとも俺はそうだった。まぁ時代的に進めると単純にそうなるのだが...
0243デフォルトの名無しさんNGNG
>>231
Win32::APIをuseしてる割には
Win32::APIがインストールされてない
(少なくとも C:/Perl/lib C:/Perl/site/lib . で見つからない)
ってことです。これってWin版にはバンドルされてるんだっけ?
0244デフォルトの名無しさんNGNG
>>238
http://downloads.activestate.com/ActivePerl/src/5.8/
http://downloads.activestate.com/ActivePerl/src/5.6/
http://downloads.activestate.com/ActivePerl/

>>243
Win版というか ActivePerl にも同梱されていない。
http://search.cpan.org/~acalpini/Win32-API-0.41/
0245デフォルトの名無しさんNGNG
>>226
PL_defstash PL_curstash あたりじゃないかなぁ? (in perl.c or gv.c)
Grepしてみてちょ。間違ってたらスマソ。→ see perlguts。

ttp://gisle.aas.no/perl/illguts/
が詳しい。

なお、HV* gv_stashpv(const char* name, I32 create)
を使うと Returns a pointer to the stash for a specified package するとのこと。
0246デフォルトの名無しさんNGNG
つーか皆さんError.pmって使ってます?
俺はバリバリ使ってますけど。
0247デフォルトの名無しさんNGNG
バリバリ使ってますけど・・・
0248デフォルトの名無しさんNGNG
バリバリ使ってますよ。
0249238NGNG
>>244
どうもありがとうございます。
あとでDLしてみますね。
0250デフォルトの名無しさんNGNG
>>246-248
便乗質問!!
use Error すると record という関数がインポートされますが
これってどう使うのでしょうか?
マニュアルにはさらっと、シンタックスシュガーと書かれてるだけでよくわからんです。
知ってる方教えてくだされ。
0251231NGNG
>244さん
ありがとうございます。Win32-API-0.41落としたのはよいのですが
インストはCのperlにおいてみたんですがだめでした。
どなたかごしどうおねがいできませんか?
0252デフォルトの名無しさんNGNG
>>251
UNIX系だとその後
perl Makefile.PL; make && make install
ですぐ事は済むのだがね。。。
Winのひとおしえてあげてください。コンパイラ必要なのかな?
0253デフォルトの名無しさんNGNG
>>251
Win32::APIはCのコンパイラがいるみたい。コンパイラを持ってるなら
perl Makefile.PL
nmake
nmake test
nmake install
ってやればいいんだけど、持ってないなら、ActivePerlを使ってればppmからインストールできる。
0254231NGNG
253さん
ActivePerlを使ってppmからインストールしようとしましたが
ppm> install-API.pm
Unknown command 'install-API.pm'; type 'help' for a list of commands.
となってしまいます。
ココからどうすればよいのでしょうか? どうか御教授お願いできませんでしょうか?
0255253NGNG
>>254
今インストールしようとしているモジュールはWin32::APIでしょ。
だから
ppm> install-API.pm
じゃ意味が通じない。
ppm> install Win32-API
でやってみ?
0256231NGNG
255さん
ありがとうございます
Win32-API無事にインストできました。perlなんか楽しいかもしれないです(単純だ)
こんどは
Can't locate HTTP/Lite.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .
) at kore.pl line 14.
BEGIN failed--compilation aborted at kore.pl line 14.
となってしまいました。
もうどうしたらいいのか分かりません。もしよろしければ手を貸していただけないでしょうか?
0257デフォルトの名無しさんNGNG
おめーうぜーよ
ちょっとは自分で考えろよ、ぼけ
0258デフォルトの名無しさんNGNG
>>256
kore.plでぐぐったらここに思いっきり懇切丁寧に書いてあるわけだが...

ttp://tomato.cable.nu/buta/biginner.html

ということでうざいからもう来ないでね
0259デフォルトの名無しさんNGNG
MFCのソースからすべてのクラス名を標準出力に
昇順にかつユニークに出力するプログラムを作成せよ。

但し、perlソースは5行以内かつ実行時間3000ms以下
0260デフォルトの名無しさんNGNG
宿題はスレ違い
0261デフォルトの名無しさんNGNG
>>260
出来ない人はレスしなくてOK
0262デフォルトの名無しさんNGNG
>>259
それって質問なのか?

↓こっちでやれば?
Perlでリクに答えるスクリプトを作るスレ
http://pc5.2ch.net/test/read.cgi/tech/1086143976/l50
0263デフォルトの名無しさんNGNG
オタの聖地、ROのBOTを動かしたい
でもプログラムのプ( ´,_ゝ`)の字もしらないこの俺
調べるのもまんどくせ2chへ質問しちゃえ


調べる気もない、教えてもらっても理解しようとする意志がない、Perlをやる気もはなっから無い
これじゃ嫌われるわな
0264デフォルトの名無しさんNGNG
perl -e 'print &{&{sub{(my $v=1,sub{$v},$v=2)[1]}}},$v'
これの出力がなぜか"22"になります。これはどうしてでしょうか?
perl -e 'print &{&{sub{my $v($v=1,sub{$v},$v=2)[1]}}},$v'
これならちゃんと"2"になるんですが。分かる人いますか?
0265デフォルトの名無しさんNGNG
すまそ。3行目はこれが正しいです。
perl -e 'print &{&{sub{my $v;($v=1,sub{$v},$v=2)[1]}}},$v'
0266デフォルトの名無しさんNGNG
あ、my変数のスコープはリストないの一要素に限定ということか。そかそか。
(my $v=1,sub{$v},$v=2)の二番目三番目の$vはグローバルスコープの変数だったのね。失礼。
0267デフォルトの名無しさんNGNG
>>266
試してみたら次の文にならないとスコープは有効にならないということ
のようですな。勉強になった。

while (((my $x = <>) == 1) || ($x == 2)) {
print "x=$x\n";
}

なんてやっても1しか受け付けないってことで、知らないとうっかり書いて
しまいそうだなぁ。use strictすれば怒られるからわかるけどね。

0268264NGNG
>>267
ちょっと違ってたみたいです。。。
perl -e 'use strict;{(my $v=3,print "$main::v\n");print"$v\n"}print"$main::v\n"'

リストを作成するカッコにはスコープを限定する機能はないってことなのかな?
関数以外でスコープを限定するには{}(ブランケットっていうんだっけ 汗)
しかないのかな?

つまり
while(my($k,$v)=each %Hash){...}
というのは
my($k,$v);
while(($k,$v)=each %Hash){...}
と同じということなのかも。

ただし、>>264の例からも分かるようにリストの要素内ではスコープを確保される。
'use strict;(my $v=3,print $v,...
とは書けないんですよね。
0269デフォルトの名無しさんNGNG
{
my($k,$v);
while(($k,$v)=each %Hash){...}
}
こうか。
あーなんかよくわかんなくなってきた。
ラクダ本読んで出直してきます。
0270デフォルトの名無しさんNGNG
>>259
perl -e "while(<*.cpp>){open(IN,$_);while(<IN>){@a=/C[A-Z][A-Za-z]+/g;map{$h{$_}=1} @a;}close(IN);}END{foreach(sort keys %h){print qq<$_\n>;}}"
じゃだめ?
0271デフォルトの名無しさんNGNG
>>269
ラクダ本読んでもスコープまわりの説明はいまいちハッキリしない
んだよな。perlsub(1)の「Private Variables via my()」という
見出しの中の以下の記述がオススメ。

The declared variable is not introduced (is not visible) until after
the current statement. Thus,

my $x = $x;

can be used to initialize a new $x with the value of the old $x, and
the expression

my $x = 123 and $x == 123

is false unless the old $x happened to have the value 123.
0272デフォルトの名無しさんNGNG
>>271
あ、なるほど。セミコロンで区切られる式の評価順序の問題だったのですね。
リストと無名関数を使ってちょっと変わった構造のプログラムでも書いてみようかと
思ったのですが、myの評価順序はかなり制約になりそうですね。
0273デフォルトの名無しさんNGNG
s/式/式内/
0274デフォルトの名無しさんNGNG
ここはミスコピー用紙の裏?
0275デフォルトの名無しさんNGNG
>>274
ですが、何か?
0276デフォルトの名無しさんNGNG
RH9 と perl 5.8.5 で use encoding と ithread を同時に使うと
segmentation fault になっちゃうよ
どういうこと〜?
0277デフォルトの名無しさんNGNG
Linuxはクソってこと
0278デフォルトの名無しさんNGNG
すんません厨です。
ディレクトリ内の全てのファイルを置換したいのですが、
@a = <*.html> ;
foreach $i (@a){
open(YOMU,"$i") or die $!;
open(KAKU,"> $i") or die $!;
while ($a = <YOMU>) {
$a =~ s/<p>/<P>/g;
print(KAKU "$a");
}
close(KAKU);
close(YOMU);
}

上手くいかない。
0279デフォルトの名無しさんNGNG
>>278
読み込み用と書き込み用に同一のファイルを同時に開くな。
tmpファイルを使うか、配列かなんかに突っ込んどけ
0280デフォルトの名無しさんNGNG
>>278
-iオプションという手もあるな。大きなプログラムの一部にするには
ちょっと面倒だが。(Perlクックブックに例がある)
0281デフォルトの名無しさんNGNG
>>279
あーそかそか。そうだね。ありがとう
>>280
調べてみます。
0282NIDANGNG
こんにちは、NIDA といいます。
// FC2 と Perl v5.8.3 です。

ちょっと質問なんですが、下のようなものを Perl で書く場合
どのようになるのでしょうか。

# ===================================================
int main(int argc, char* argv[]){

int i;
char str[ 32 ]="A";

for(i=0; i<26; i++){

printf("%s", str);
str[ 1 ]++;
}

return 0;
}

// 出力結果 : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

# ===================================================
0283デフォルトの名無しさんNGNG
&perl;
sub main::perl{
$str= 'A';
for($i=0; $i<26; $i++){

printf("%s", $str);
substr($str, 1, 1)= chr(ord(substr($str, 1, 1))+1);
}
return 0;
}
0284デフォルトの名無しさんNGNG
>>282
$str = "A";
for($i=0;$i<26;$i++){
@tmp = unpack("CC",$str);
print pack("CC",$tmp[0],$tmp[1]+$i);
}

0285278NGNG
出来た。お礼まで。
0286デフォルトの名無しさんNGNG
perl でアクセスできるデータベースを
作ろうと思うのですが、データ形式がテキスト形式でperlと相性のいい
DBを教えてください

0287デフォルトの名無しさんNGNG
DBI:CSV
0288デフォルトの名無しさんNGNG
>>287

サンクスコ
0289NIDANGNG

>>283, 284

chr, ord, pack, unpack なんて関数があるんですね。

ありがとうございました。 m(_ _)m
0290デフォルトの名無しさんNGNG
Aがアラジンチャンスと思ってしまう、漏れは逝ってよしでつか?
0291デフォルトの名無しさんNGNG
>>282
マジカルインクリメント

my $char = 'A';
foreach (1 .. 26) {
print $char++;
}

#結果 : ABCDEFGHIJKLMNOPQRSTUVWXYZ
0292デフォルトの名無しさんNGNG
>>291
それじゃ半角じゃない。
str[ 1 ]++;とやっているから全角でやりたいのは確かだ。
0293デフォルトの名無しさんNGNG
>>291
my $char = 'A';で半角になっているのに、
#結果 : ABC...と全角になっているのは何故ですか?
0294デフォルトの名無しさんNGNG
print for ('A'..'Z');
ではだめ?(w
0295デフォルトの名無しさんNGNG
↑
カコイイ
0296デフォルトの名無しさんNGNG
今ActivePerlとApache入れて試した。
cgiファイルで
#!/usr/local/perl
print "<html>\n";
print "<body>\n";
print "<h1>hoge</h1>\n";
print "</body>\n";
print "</html>\n";
って書いて動かしたら
ブラウザに書いたのが全部出た。hogeだけ表示させたかったんだがorz
タグとかprintとか表示されちゃったよ。何故?仕様?
0297デフォルトの名無しさんNGNG
>>296
初心者用の導入サイトでも見ろよ
0298デフォルトの名無しさんNGNG
スレ違いだけど、
print "Content-type: text/htnl\n\n";
を書かなきゃ表示されんぜ。
0299デフォルトの名無しさんNGNG
htnl→htmlだた
0300デフォルトの名無しさんNGNG
ここもおかしくないか?
#!/usr/local/perl
0301デフォルトの名無しさんNGNG
>>300
君は本気で言ってるのかね?
0302デフォルトの名無しさんNGNG
>>292
そもそも >>282 の例もおかしいことに気付いてやれよ。
0303デフォルトの名無しさんNGNG
>>302
どこがおかしいんだ?
0304デフォルトの名無しさんNGNG
perl -e'use encoding "euc-jp";print "A".."Z"'
こういうのやってみたいんですが、できますか?
0305デフォルトの名無しさんNGNG
できない。

e'use

ほげなオプションありまへん。
0306デフォルトの名無しさんNGNG
あ、でけた。>>305撤回。
0307デフォルトの名無しさんNGNG
標準入力を標準出力したプログラムを作ったんだけど、
perl script.pl < file の場合はうまくいくけど、
script.pl < file はうまくいきません。
なぜなんでしょうか?
(リダイレクトせず単体では動作します。)
(ActivePerl/WinXP)
0308デフォルトの名無しさんNGNG
age忘れ
0309デフォルトの名無しさんNGNG
( ゚Д゚)ポカーン
0310デフォルトの名無しさんNGNG
type file | script.pl
0311307NGNG
#!f:/free/perl/bin/perl   #僕の環境です

print $_ while(<>);
0312307NGNG
script.pl file ○
script.pl < file ×
script.pl ○
type file | script.pl × --*1 error message

perl script.pl file ○
perl script.pl file ○
perl script.pl ○
type file | perl script.pl ○

*1 プロセスが存在しないパイプに書き込もうとしました。
0313デフォルトの名無しさんNGNG
>>307
cmd.exe の使い方は Windows 板へ。
http://pc5.2ch.net/win/
0314307NGNG
>>313
AcrivePerlの問題だと思うんだけど,なぜcmd.exeの使い方が原因だと思うのか教えてほしいです
それが分からなければ向こうにも質問できない
0315307NGNG
ActivePerlの仕様でした。

>>313
レス自体はありがたいが質問の答えやその問題点が分かってない
ならレスは不要。逆に混乱や迷惑になるのでやめてください
逆切れスマソ
0316デフォルトの名無しさんNGNG
仕様ってどんな仕様だよ
そこまで書いてりゃ逆切れもスルーできるんだがなぁw
0317デフォルトの名無しさんNGNG
ワラタ、問題点が分かってないのはおまえだっつーの(w
0318デフォルトの名無しさんNGNG
>>315
逆切れするのは勝手だけど、話を振っといて、
自己解決したらハイサヨナラってのはどうかと思うぞ。

どういう仕様が原因でそうなったかとか解決方法とかを
書いて情報共有してもバチは当たらないと思うがどうよ。
0319デフォルトの名無しさんNGNG
すみませんが、どなたか「if(-x _)」という条件文の「-x _」の部分の意味を教えて貰えないでしょうか?
0320デフォルトの名無しさんNGNG
直前に-X(ファイルテスト演算子)またはstat/lstatで調べたファイルが現在の
実行UID/GIDで実行可能なパーミッションのとき真、それ以外は偽。

くわしくはラクダ本の「ファイルテスト演算子」について書いてあるところ
またはperlfunc(1)を参照せよ。

0321デフォルトの名無しさんNGNG
html画面を出力する際に、
1:DBの更新を行う。(insert,update)
2:DB更新完了後、その旨をhtml画面で表示する
というものを作ったのですが、1のDB更新件数が膨大になるとi更新処理に時間が掛かりすぎnternal server errorで落ちてしまいます。
なにか対策方法はあるのでしょうか?
0322デフォルトの名無しさんNGNG
なるほど。perlfunc(1)でググってみたところ解かったような気がします。
ありがとうございました。
0323デフォルトの名無しさんNGNG
ググる?
# perldoc -f -X
がいいんだけど。
0324デフォルトの名無しさんNGNG
ところでこの「-x」は環境(OS?)に依存して挙動が変わりますね。
Linux環境では単に実行権限があるかどうかを調べてるようなのですが、
Windowsだとexeファイル以外は偽を返すようです。
あるいはWindowsではexeファイル以外は実行権限を持たないように管理されてるのかもしれませんが・・・
0325デフォルトの名無しさんNGNG
しかしperlやってるやつってバカが多いなww
英文ドキュメントすら読めない>307
知ったかレスで逆切れされてる>313
カスばっか(ププ
0326デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Perl
0327デフォルトの名無しさんNGNG
>>323
情けないことにLinux環境とかのドキュメント読むのに慣れてないもので、
そういう便利な機能があることに気がつけなかったです;
ググったところ、最初にperldocの日本語訳されたものが出てきたので助かりましたが。
0328デフォルトの名無しさんNGNG
     P e r l ス レ は レ ベ ル 低 ぅ ( 失 笑 )
0329デフォルトの名無しさんNGNG
右翼の俺としてはひまわり最強!!!!!
0330デフォルトの名無しさんNGNG
かわいそうに、rubyが伸びなくて、八つ当たりしてる奴(w
ruby基地、また、帰ってきたか(プッ

0331デフォルトの名無しさんNGNG
C++&boost::regex >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Perl
0332デフォルトの名無しさんNGNG
>>331に続く
>>>>>>>>>>>>>>>>>>>ruby
0333デフォルトの名無しさんNGNG
煽りは放っておいて淡々マッタリと進行するのが大人の態度
0334デフォルトの名無しさんNGNG
反論しようにも無理だしなwwwwww
0335デフォルトの名無しさんNGNG
反論に値する事象でもないからねぇ(哀)

さて。なにやら面白そうなことが始まる悪寒。
Perlコーディング初心者質問スレ Part 38
http://pc5.2ch.net/test/read.cgi/php/1097158988/361-
多分ネタだと思うけれども(w
0336デフォルトの名無しさんNGNG
その程度もようやらんのか。アホすぎ
0337デフォルトの名無しさんNGNG
>>335
Ruby 厨ウゼーとか言われそうであれなんだけど、 Ruby だとこんなのができるよ。

% ruby -ropen-uri -e "print open('http://2ch.net/').read"

Perl でもできるとかなり嬉しい悪寒。
0338デフォルトの名無しさんNGNG
webprogはゴミ溜め。
perlはそのまんまゴミ。
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Perl
0339デフォルトの名無しさんNGNG
>
が足らなさすぎ
もうちょっとRuby勉強しろ、ぼけ
0340デフォルトの名無しさんNGNG
python! python! (AAr
0341デフォルトの名無しさんNGNG
>>337
perl -MLWP::Simple -e "getprint 'http://www.2ch.net' "
0342デフォルトの名無しさんNGNG
>>341
いや、短く書くコンテストをしたいわけじゃなくて、多態で幸せになれるという話なのですが・・・
0343デフォルトの名無しさんNGNG
初心者です。perlのTkで円を作るプログラムを作りたいのですが。
キャンバスを一回クリックし、そこを中心としてマウスを動かしして二回目のクリックの
とこまでを半径とする真円を作りたいのですがうまくいきません。楕円はできるのですが。
教えていただければ幸いです。
0344デフォルトの名無しさんNGNG
>>342
君、プレゼン能力ないね
0345デフォルトの名無しさんNGNG
>>343
それはPerl/Tk関係ないな、算数を思い出せ。
クリックされた2点間の距離を計算して半径にしろ
0346デフォルトの名無しさんNGNG
>>344
はい、ないですが、それがどうしたのでしょうか?
0347デフォルトの名無しさんNGNG
>>342
use LWP::Simple;
my $content = get('http://www.2ch.net');
open my $fh, '<', \$content;

じゃ駄目なのかい?
0348デフォルトの名無しさんNGNG
GD はいらんな
0349デフォルトの名無しさんNGNG
https?://で始まるスキームだけをoverrideして欲しいモナー
0350デフォルトの名無しさんNGNG
それはオーバーライドや多態じゃなくて単にopen関数の仕様だろ。

0351デフォルトの名無しさんNGNG
>>125
>>136
>>142
この142さんの「思いっきり条件付きだろうが。」とは
どういった状況を指しているんでしょうか?
自分ではOSかfairewallで内側からのportの使用を制限している時ぐらい
しか思い浮かびません。
サーバーをまたいで動作するプログラムの動作条件がどのくらい厳しい物になるのか
知りたいためご教授下さい。
0352デフォルトの名無しさんNGNG
クロスサイトスクリプティング
でぐぐれ
0353デフォルトの名無しさんNGNG
ユーザIDとパスワードで認証を行うcgiを作成したのですが
フォームからのパスワードが変数にうまく入っていないようでして
ユーザファイルのパスワードとフォームに入れたパスワードの評価式がうまくいきません。
ユーザファイルのIDとIDフォームのIDの評価はうまくいってます。
原因わかりますでしょうか。
if ($in{'wrt'} ne on)
{
print "<br><br><br><form action=\"$script\" method=\"POST\">\n";
print "<input type=hidden name=wrt value=\"on\">\n";
print "<tr><td align=center><b>ID</b></td><td> <input class=text type=text size=12 name=id></td></tr>\n";
print "<tr><td align=center><b>パスワード</b></td><td><input type=password size=12 maxlength=8 name=pwd></td></tr></table>\n";
print "<br><br><input type=submit value=\" 認証 \"></form>\n";
print "</center></body>\n";
}
else
{
$flag = 0;
open(IN, "$userfile");#パスワードファイルを開く
while ($data=<IN>)
{
($id,$pwd) = split(/,/, $data);#カンマでIDとパスワードを分割
if ($id eq $in{'id'})
{$flag = 1; last;
}
}
close(IN);
#パスワードチェック処理 ##############################ここが正しく評価されません
if($pwd ne $in{'pwd'})
{
&error("パスワードが違います");
}
0354デフォルトの名無しさんNGNG
>>353
$idをキーとするハッシュに汁。
そのままやるんなら、idとpassが1行に1個しかかけないね。
$data=<IN>が糞。
0355デフォルトの名無しさんNGNG
>>フォームからのパスワードが変数にうまく入っていないようでして

「ようでして」じゃなくてちゃんと調べろよ。入力パラメタの値を
そのまま表示するぐらい簡単だろ?

それにフォームからのパスワードが変数に入ってないといいながら
肝心の変数にいれるとこを出さないでいれちまった後の処理を
貼ってもしょうがない。

0356デフォルトの名無しさんNGNG
perlのsystem関数でCのモジュールを呼んでいるのですが
その戻り値として、Cのバッファ(char *)(100文字)を返しているのですが
うまく格納できません。

Cソース抜粋
char *test_buff;
test_buff = malloc(100);
return test_buff;


perlソース抜粋
$buff = system("test.exe");
0357デフォルトの名無しさんNGNG
そらそうよ
0358デフォルトの名無しさんNGNG
>>356
Cの方で文字列を標準出力に書き出して、Perlの方からはパイプを使って読め。
0359デフォルトの名無しさんNGNG
>>356
マルチポストかよ。死ね。
0360デフォルトの名無しさんNGNG
>>356
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#Why_can_t_I_get_the_output_of_a_
0361348NGNG
なーんでGDだけはいらんのだろ?
0362デフォルトの名無しさんNGNG
>>361
独り言?
0363348NGNG
>>362
うん。でも心の何処かで助けを求めてる自分が居るような気がする。
0364デフォルトの名無しさんNGNG
誰か教えてください。
while( $hogehoge =~/正規表現/gm)
{
$get = $&;
}
と言う風に、マッチングした複数行にわたる文字列を取得して
いますが、$hogehogeが巨大なテキストファイル(だいたい500k以上)
になるとループが動きません。この方法ではダメだとか、
ほかにいい方法があればご伝授ください。
0365デフォルトの名無しさんNGNG
>>363
んなこと言わずにもっと具体的に問題点を書きなよ。
0366348NGNG
>>365
藻前イイヤツだな
0367デフォルトの名無しさんNGNG
>>364
?
マッチすると無限ループするのか
斬新だなぁ
0368デフォルトの名無しさんNGNG
>>364
正規表現の内容によってはバックトラックがはげしく行われる等の
理由で無限ではないがものすごく時間かかることはあり得るな。

正規表現を具体的にさらせばなにか答えてくれる人がいるかも?


0369364NGNG
>>367
>>368
同じファイルで、マッチングしない部分を切り取って、
ファイルサイズを小さくした場合、正常にループが動き、
マッチングも思い通り行きますので、無限ループに陥っているわけではないみたいです。
デバッグでも確認しましたが、ループそのものが吹っ飛んでプログラム
自体が強制終了しているようです。ファイルサイズもそんなに大きくないので、
訳が分かりません。ただ、モジュール(*.pm)のサブルーチンに、$dataのような
形で渡しているのが気にはなるのですが、配列にして参照渡ししても事態は
変わりません。
0370デフォルトの名無しさんNGNG
強制終了となるとメモリ不足とかそっちの関係かもしれないな。
あるいはcpu時間の制限されてるとか...
0371デフォルトの名無しさんNGNG
改行が入ってるとか
0372デフォルトの名無しさんNGNG
自動的にデータを収集するプログラムを作りたいと思います。
たとえば、yahoo-movieの興業成績ランキングにリンクされている映画の
題名、出演者などを自動収集したりしたいのですが、Perlでできるのでしょうか?
また、Perlでするのは正しいのでしょうか?また、簡単にできるのでしょうか?
ご教授お願いします。
0373デフォルトの名無しさんNGNG
問1. 出来る
問2. まぁ正しい
問3. 人による、ある程度Perlが使える人間にとっては簡単

0374デフォルトの名無しさんNGNG
>>372
Perlの専売特許
0375デフォルトの名無しさんNGNG
Rubyこそ最適解
0376デフォルトの名無しさんNGNG
>>366
虫の居所の悪いときなら「チラシの裏に・・・」って言うんだけどね。

>>364
while ($hogehoge =~ /(正規表現)/gm) {
$get = $1;
}
としてみてはいかが?
0377デフォルトの名無しさんNGNG
>>364
$hogehogeに含まれるマッチする最後の文字列が欲しいんだよね?
/(regex).*?(?!regex)/gm
なんてどうだろ
んで$get = $1

あとregexに関わる特殊変数は使わない方がパフォーマンスはよいです
0378364NGNG
皆様いろいろありがとうございました。
いろいろやってみましたら、正規表現の記述に問題があり、
動作が不安定になるようです。具体的には、複数行にわたって
start とendではさんでいる間の(.*|\n)+が問題だったようです。
繰り返し数はほとんど無限と思っていましたが、調べてみたら
32766あたりが最大のようです。

0379デフォルトの名無しさんNGNG
>>378
正直、どんなデータに何をしたいのかとか実際に実装してみたパターンを
晒してもらわないと想像でしか言えないんだけど、
m オプションを付けてるんだから (.*|\n)+ みたいなパターンは要らない気がする。
/(start\n(?:.+?)end\n)/gm
とかでええのでは?

あと、 >>377 の指摘の通り、 $& みたいなのは使っちゃダメだ。
/([^\n]*\n[^\n]*\n)/gm みたいなのででかいテキストのマッチを試してみたけど、
$1 なら一瞬で終わるのが $& を使うと激遅になる。
しかも、コード中の別の箇所で一度でも $& を使うと同様に激遅になる。
$`, $&, $' は死んでも使っちゃダメだ。いや、使ったら死ぬ。
0380デフォルトの名無しさんNGNG
>>378
なんかregexec.cをみるとREG_INFTYという定数があって、32767っぽいですな。
んで、+,*はそれぞれ{1,REG_INFTY},{0,REG_INFTY}と同じになっているようです。
無限じゃないのか〜。
0381デフォルトの名無しさんNGNG
>>378
ひょっとしてこれが出たのかな?

Complex regular subexpression recursion limit (%d) exceeded

(W regexp) The regular expression engine uses recursion in complex
situations where backtracking is required. Recursion depth is
limited to 32,766, or perhaps less in architectures where the
stack cannot grow arbitrarily. ("Simple" and "medium" situations
are handled without recursion and are not subject to a limit.)
Try shortening the string under examination; looping in Perl code
(e.g., with while) rather than in the regular expression engine;
or rewriting the regular expression so that it is simpler or
backtracks less.

0382デフォルトの名無しさんNGNG
おしえてくんでスマヌ。studyって、どんなとき有効?
0383364NGNG
いろいろお世話になっています。いろいろ試してみましたが、
どうしてもうまく行きません。具体的にデータをだしてみますので
ご教授いただければ助かります。

対象文字列は、
$data = "
>comment1\nhogehoge\n・・・多数行\nhogehoge\n
>comment2\nhogehoge\n・・・多数行\nhogehoge\n
>comment3\nhogehoge\n・・・多数行\nhogehoge\n
>・・・繰り返し
"
の形をしています。ここで、>comment を含む(またいで複数取得する場合あり)
多数のhogehoge\nを取得するために、
while ($data =~ /(^>comment_start((?!>comment_end).*|\n)+)>comment_end/gm ){
$get = $1;
}
と言うようにとっています(377さん,379さんの指摘どおり$1にしました)。
comment_startとcomment_end間が短い場合
(おそらく32776行以下)は、この方法でいきますがそれ以上の場合は
ループが吹っ飛んでいます。ご指摘のとおり、+などが無限ではないためだと
思います。今までは、多数行にわたる場合\nで切った各行を処理して
その結果をつないだりしていたのですが、勉強のために正規表現を使った
方法に切り替えて苦労しています。考え方としては、comment間にある
hogehogeのブロックを1つとして表現できれば良いのかと思っていますが、
そのような正規表現は可能でしょうか。
0384デフォルトの名無しさんNGNG
>>383
まだよくわかんないけど、その $data を取るならこうかなあ。
/(^>comment\d*\n[\s\S]*?)(?=>comment\d*\n|\z)/gm
0385 ◆7CWqH7Oesg NGNG
for (/start(.*?)end/gs){
処理;
}
0386デフォルトの名無しさんNGNG
>>383
32,776については量指定子を大きくしただけでも弾かれてきますね。
$ perl -e '/.{100000}/'
/.{100000}/: Quantifier in {,} bigger than 32766

たぶん、これの絡みで、$hogehogeが13,792行より大きいと
(正規表現は383さんとはちがうんですが)
while ($hogehoge =~ /((?:.*\n)*)/gm) {
  my $get = $1;
  ....
}
で、うちのマシンではSegfaultします。(v5.6.0 built for i386-linux)
行が少なければOKです。
/mオプションでループさせるよりも、/sでいったん欲しい部分を切り出してからの
処理の方がいいかもよ。ちょっとダサイかもしれないけど。
0387デフォルトの名無しさんNGNG
for (split />comment/, $data)
push @result, $& unless s/正規表現//gs;
}

よくわかっていません、、、
0388デフォルトの名無しさんNGNG
>>387
やるなら
if ($hogehoge =~ m/>comment1\n(.*)>comment2/s) {
  my @result = split "\n", $1;
  ....
}

forなら
my @result;
@result = split "\n", $1 for ($hogehoge =~ m/>comment1\n(.*)>comment2/s);
0389デフォルトの名無しさんNGNG
ついでにいうと、間にはさまれるかもしれない >comment* を
取りさった状態で取得したいなら @result と split の間に grepを挟む。
ifの場合でもforの場合でも同じ。

@result = grep { !m/^>comment/ } split("\n", $1 ....
0390デフォルトの名無しさんNGNG
>>389
隠しファイル以外をゲットしたいときも似たようなことやるよね。
@files = grep !/^\./, readdir DIR;
0391デフォルトの名無しさんNGNG
>>390
漏れはやらないなあ。
my @files = <*>;
0392364NGNG
>comment_startで切って、>comment_endで切って、>で切って
つなげ直すしかないのかなあ。
$cs=">comment_start";
$ce=">comment_end";
1行で直接的に書くとこんな風
$get=$cs.(split(/$ce/,(split(/$cs/,$data))[1]))[0].$ce.(split(/>/,(split(/$ce/,(split(/$cs/,$data))[1]))[1]))[0];
一応まともに動くけど、誰かもっと分かりやすいコードに直せませんでしょうか。

0393デフォルトの名無しさんNGNG
>>391
シェル使うのならそうだね
0394デフォルトの名無しさんNGNG
>>393
シェル使う?これだとシェルを起動しちゃうんだっけ?
0395デフォルトの名無しさんNGNG
>>392
いまいちデータの構造がどうなっててどうしたいのか伝わらんのだが
...
>comment_start
>comment1
foo
bar
baz
>comment2
hoge
huga
hage
>comment_end
...
てな構造で $get には >commen_start の次の行から >comment_end の直前行まで欲しいってこと?
0396デフォルトの名無しさんNGNG
でかいファイルをまとめて読んであれするよりは
もともと行になってんだから行単位に処理した方が
楽かもな。
0397デフォルトの名無しさんNGNG
>>392
同じ動作であれば下ので充分いけますよ。

print $1 if ($data =~ m/(>comment_begin.*>comment_end[^>]*)>/s);
0398デフォルトの名無しさんNGNG
>>394
グロブはシェル呼ぶはずだよ。たしか。
0399364NGNG
>>395 
わかりにくくて、すみません。
>comment_start
foo
bar
baz
>comment2
hoge
huga
hage
>comment_end
hoge
nuke
kuke
と言う風に、>comment +データ領域 単位で取得したいのですが。。
全データが大きいので、正規表現の* とか+が動かない場合があって
苦労しています。


0400デフォルトの名無しさんNGNG
>>394
手元のラクダ本(2nd edition)には
“グロブを行うときにはサブシェルが起動される。だから、自分でreaddir関数を呼び出して得られたファイル名に対しgrepをする方が速いことが多い。”
と書いてある
まぁ“現在の実装では”と後付けされてはいるが
0401397NGNG
$get = $1 if ($data =~ m/(>comment_begin.*>comment_end[^>]*)>/s);
か。
0402デフォルトの名無しさんNGNG
>>399
ますますワカラン・・・w
>comment_start
foo    ← >comment1は無いの?
bar
baz
>comment2
hoge
huga
hage
>comment_end
hoge   ← >comment_start は無いの?
nuke
kuke

何にせよこれがファイルに書いてるデータならwhileで回してフラグ使ってチマチマやるのが正解だと思う
0403デフォルトの名無しさんNGNG
>>398 >>400
知らんカッター。じゃああんまり使わんようにしよう。
0404398NGNG
使ってるシェルやプラットフォームに応じて
グロビング表現を対応させるために、
Larryはシェルを呼ぶようにしたんだと思う。多分。
シェル依存にしないでPerlで実装させる手もあったんだろうけどね。
0405397NGNG
>>364
要は取り出したい部分が comment_start と comment_end に囲まれている
「というだけではなくて」comment_end の後に 1セクションぶら下がってる
って、ことに四苦八苦していると理解していいのか?
0406364NGNG
>397
$cb=">comment_begin";
$ce=">comment_end";
$get = $1 if($data =~ m/($cb.*$ce[^>]*)>/s);
でうまくいきました。皆様大変ありがとうございました。
while loopを使って内部処理も同時にしようと思ったのが、つまづきの
始まりでした。得られた結果を順番に処理していくことにします。



0407デフォルトの名無しさんNGNG
なんでそんなに正規表現にこだわるの?
0408デフォルトの名無しさんNGNG
なんかもうデータ構造見直せとしか言えん・・・
0409デフォルトの名無しさんNGNG
>>408
マークアップ言語風に start〜end タグで囲まれてるデータじゃなくて
たぶん辞書風に title->content(s) と列挙されているデータなんだよ。
で、contents部分のフィールド数が可変だから行方向にならべるしかない、みたいな。
伝票とか、ヘッダとアイテムで構成される一般的なデータ構造もこの構造とるよ。
まあ、ファイル格納というよりはDB向きという気もするけどね。
0410364NGNG
>>407
正規表現を使って複数行の取得をして、それができたら
グループ分けで値を取得して、同時に処理も可能だと
楽だなと思った次第です。ごく簡単な正規表現しかしらないので、
今までは、行ごとに区切って、つなげてとやっていたのですが、
今回いろいろ教わりましたので、少しperlのスキルが上達した
感じです。ただ、巨大なファイルでなければ動いていたのですが、
こんなところに落とし穴があったとはという驚きもあります。



0411デフォルトの名無しさんNGNG
>>409
メールのmbox形式が、このケースの場合近いんじゃないかな?
日付やタイトルで範囲指定して中身を取り出す操作に近い気がする
0412デフォルトの名無しさんNGNG
>>406 >>410
まあ結局、">comment_begin"〜">comment_end"の組が32767以上あったら破綻する訳だ。
巨大もなにも、何かのログファイルだったりすると当たり前に越えるだろうから、
whileとフラグでチマチマやる方が正解。
0413デフォルトの名無しさんNGNG
>>412
m//mでやる場合はそうだけどm//sの場合のマッチは1回だけだから
32767の制限にはひっかからないし >>406 のやり方で
ぜんぜんOK何じゃないの?
0414デフォルトの名無しさんNGNG
cgi-bin.plのダウンロード先、教えてちょんまげ
0415デフォルトの名無しさんNGNG
そんなの知らんちょんまげ。CPANで検索するよろし。
0416デフォルトの名無しさんNGNG
日々CSV形式でログが蓄積されるシステムがあったとして、
何らかの検索条件を指定して(例えば●●フィールドの
値が××のレコード)を検索するようなことをやりたいんだけど、
どうやったら速いかな。

ちなみにCSVファイルは1日1ファイル、1ファイル数万行、
1レコード15カラムくらい。
0417デフォルトの名無しさんNGNG
daemon書いて常駐させてメモリに全部持つ
0418デフォルトの名無しさんNGNG
>417
無理じゃね?
1レコード15カラムでざっくり200バイトとして、
1ファイル2万行。ってことは4MB。
日々蓄積ってのが期間がわからんけど、1年としたら
1GB余裕で超えるべ。
0419デフォルトの名無しさんNGNG
たった1GBだろ。
そのへんの検索エンジンが何TBメモリ積んでると思ってるんだ
0420デフォルトの名無しさんNGNG
書いてませんでしたが、ログの蓄積期間は1年です。
あと動作させるのは普通のPC(Windows2000)で
メモリはよくて256MB、おそらく128MBです。
0421デフォルトの名無しさんNGNG
>419
いや、書いてないから分からない。
0422デフォルトの名無しさんNGNG
128MBか、少ないな。
0423デフォルトの名無しさんNGNG
sql で use dbi
0424デフォルトの名無しさんNGNG
遅そう
0425デフォルトの名無しさんNGNG
そもそも速度が重要ならperlとかcsvなんて使うなよ
0426デフォルトの名無しさんNGNG
>423
レコード数どのくらいいけるの?
0427デフォルトの名無しさんNGNG
>>425
いやー、多分君は聞かれてないと思うぞ。
0428デフォルトの名無しさんNGNG
>>426
儂が扱ったのはMysqlで3万件ぐらいだけど、知ってる人のは100万件超えてる。
0429デフォルトの名無しさんNGNG
儂 ←これなんて読むの?
0430デフォルトの名無しさんNGNG
オゥレ
0431デフォルトの名無しさんNGNG
>429
のう
0432デフォルトの名無しさんNGNG
>>416
速さを求めるならRDBMSに突っ込んだほうが良いかと思われるけど。
お手軽にやるならDBI+DBD::CSVかなぁ。
0433デフォルトの名無しさんNGNG
わし 0 【▽私/▼儂】

(代)
〔「わたし」の転〕一人称。男性が、目下の者に対して尊大な感じを伴って用いる語。おれ。
「―も年をとった」
〔近世では、主として女性が用いた。
「薄雲はしほと涙ぐみ、―はかやうに落ぶれて路頭にさ迷ひありく事/浄瑠璃・当麻中将姫」〕
0434デフォルトの名無しさんNGNG
ore
0435デフォルトの名無しさんNGNG
>>426
約4億
0436デフォルトの名無しさんNGNG
>435
2000万件くらいから3000件ぐらい選択するのに
どのくらいかかるかな。
0437デフォルトの名無しさんNGNG
perlでファイルを100コ作る方法を教えてください。
0438デフォルトの名無しさんNGNG
>>437
100回ファイルを作る動作をすればいいだけじゃないか
0439デフォルトの名無しさんNGNG
>>438
アフォ?
0440デフォルトの名無しさんNGNG
>>416
オラクルで2000万件超の業務データ扱ってるけど
インデックス張っておけば単純な検索なら一瞬だよ。
(まあ、索引付けた列のカーディナリにもよるけどね)
CSVをDBMSに転送して、そっちで検索かけたほうが賢いんじゃない?
0441デフォルトの名無しさんNGNG
まあ、検索アプリにするのなら
データをDBに落としてI/FをDBIあたりで出力をWEBに出すというのがラクです。
ただDB用にメモリ128MBしか充てられないとすれば
追加で何かちょっとしようとしたら途端に辛くなるかもね。
0442デフォルトの名無しさんNGNG
漢ならヒタスラGrep汁!
安上がり汁!!
0443デフォルトの名無しさんNGNG
ソケットのコネクションを毎回保ったままにするプログラムを作成したのですが
どのような方法があるでしょうか?
セッションやPersistentを使っても接続は毎回切れてしまいますし
mod_perlで試してみたのですがプロセスがMaxSpareServers分起動され
必ず前回のコネクションが保ったままのプロセスにアクセスされるとは
限らないため期待する動作になりません。

プログラムAとBを作り、Aは常駐してbindしコネクションを保ったままにし
BからAにセッション情報を渡して前回のコネクションを保持するという
方法が一番現実的なのかな
0444デフォルトの名無しさんNGNG
>>443
そのプログラムAをApacheのモジュールとしてええのでは?
コネクションに番号付けて管理しておき、セッション番号と照らし合わせて
渡してあげる。みたいな。
0445デフォルトの名無しさんNGNG
>440
サンクス
>441
サンクス
>442
ノーサンクス
0446デフォルトの名無しさんNGNG
>>437
open F, ">$_" for 1 ..100;
なんてな

ところで
ttp://qa.perl.org/phalanx/distros.html
みんな使ってるかい?
0447デフォルトの名無しさんNGNG
>>443
DBのコネクションプーリングが目的なら Apache::DBIだな。
他に ttp://sqlrelay.sourceforge.net/ という手もある。
ネトゲーの中継とかなら自分でつくるとかかもな。
0448デフォルトの名無しさんNGNG
perlのコードから設計書ってつくれないですか?(javadocみたいな)
とにかく設計書のページ数をかせぎたい・・・。
0449デフォルトの名無しさんNGNG
perldoc
0450デフォルトの名無しさんNGNG
>>449
ありがとう。・゚・(ノ∀`)・゚・。
さっそくググってみます。
0451デフォルトの名無しさんNGNG
あらかじめpod埋め込んでないとどうにもならんような。
pod埋め込んでいてperldoc知らないとも思えないし...
0452448NGNG
うめこんでないやorz
0453デフォルトの名無しさんNGNG
cgiページからpostでまた別のcgiを呼んでいるのですが
前のcgiで使用したスカラ変数の中身を
呼び出し先でも使いたいのですが方法はありますでしょうか。
0454デフォルトの名無しさんNGNG
postで送る。
0455デフォルトの名無しさんNGNG
いろいろありそうだな。
0456デフォルトの名無しさんNGNG
変数の中身を Storable でシリアライズしたのを form のパラメータとして (ry
0457デフォルトの名無しさんNGNG
syslogで、現在時刻から五分前までのデータを出力しようとしてます。
perlで普通に先頭行から読んでいるのですが、最終行から逆に読んだり出来ますか?
0458デフォルトの名無しさんNGNG
tail の結果を読め。
0459デフォルトの名無しさんNGNG
>>458
???
0460デフォルトの名無しさんNGNG
A B C 0
D E F 9
....(略)
G H I 2
# 区切り
A B C 3
D E F 4
...(略)
G H I 7
perlで上のようなフォーマットのテキストファイルを開いて(区切りの上と下の文字列で共通の物は同じ物を表し、数字は例)
先頭の文字列が同じ物について引き算を行い(例えばA B Cなら0-3、D E Fなら9-4、G H Iなら2-7)A B Cについてから順に出力したいのですが、
何かいい方法はありませんか?
0461デフォルトの名無しさんNGNG
>>457
言葉のそのままの意味で逆に読むことはできない。
ファイルが余り大きくないなら全部配列に読み込んで、時刻をみながらpopしていくのが楽。
458氏のようにtailの結果をリバースしてくのもいいかも。
あるいはopenしたあと、seekでラストまで飛んで適当なオフセットで戻ってくとか。
そんなかんじかな。
0462デフォルトの名無しさんNGNG
cpanを検索してどうも無さそうなんだが、C/C++のヘッダファイルをparseするモジュールって
既存の物があるかな?
0463デフォルトの名無しさんNGNG
cpp
0464デフォルトの名無しさんNGNG
>>463
コマンド名なんて聞いてねーよ
0465デフォルトの名無しさんNGNG
>ヘッダファイルをparseする
どういう意味?/^#include.+?\.h>/でいいじゃん。
0466デフォルトの名無しさんNGNG
>>462
どういう探し方をしたのか知らんがコレでは無いのか?
http://search.cpan.org/~amichauer/C-Include-1.40/Include.pm
0467デフォルトの名無しさんNGNG
>>460
my %group;
open TXT, 'text.txt' or die $!;
while(<TXT>){
chomp;
my($str, $num) = /([\sA-Z]+)(\d+)/;
push @{$group{$str}}, $num;
}
close TXT;
foreach(sort keys %group){
print "$_ = ", $group{$_}->[0] - $group{$_}->[1], "\n";
}
0468460NGNG
>>467
参考になりました。ありがとうございます。
0469デフォルトの名無しさんNGNG
ある実行体が不定期に吐き出す文字列を
Perl/Tkでリアルタイムに表示させたいと思っています。

Labelウィジェットの-textvariableを利用すればよいかと思って
以下のコードを書いてみましたが、入力した文字列は窓には表示されませんでした。
use Tk;

$result_message = "";
$top = MainWindow->new();
$top->Button( -text => 'start', -command => \&input )->pack();
$top->Label ( -textvariable => \$result_message )->pack();
MainLoop();

sub input {
while (1){
$result_message = <>;
# print $result_message;
}
}

任意の標準入力をbind出来ないかとも思いましたが
僕には見つけられませんでした。
何か良い解決法はないでしょうか?
0470デフォルトの名無しさんNGNG
>>463 >>465-466
サンクス。「parseする」とだけでは曖昧だった。
やりたかったことは、h2xsのようにマクロと関数宣言が大量にずらずら並んだ
ヘッダファイルをスキャンし、別言語から利用するためのスケルトンを一括作成したかったのだ。
466のC::Includeで簡単にできそうなので助かった。
0471デフォルトの名無しさんNGNG
cgi実行後、表示されるinput textのフォームにあらかじめ値を代入することは可能でしょうか?
0472デフォルトの名無しさんNGNG
>>469 Tk::fileevent or Tk::IO
0473デフォルトの名無しさんNGNG
>>471
可能
0474デフォルトの名無しさんNGNG
>>471
とりあえず引用符の扱いに気を付けてくれ
0475初心者NGNG
データのを整えたい

私はperlを学んでいる途中です。
練習で以下の作業をしようとして、できなくて困っています。

perlで[1]を[2]のようにデータを整える作業をしたいと考えています。
「全角同士で挟まれたスペースの削除(例)中 央→中央」と「全角数字と並んでいる

ところに,(カンマ)を挿入する(例) 篠崎11→篠崎,11」の2点の作業をしたいです。
何方か、アドバイスを下さいお願いします。

[1]
中 央1丁目591 281 310 218 2丁目602 315 287 227
2丁目522 256 266 179 大字南篠崎1130 559 571 352
本 町831 396 435 301 花 崎1丁目1459 749 710 604

[2]
中央1丁目,591,281,310,218,2丁目,602,315,287,227
2丁目,522,256,266,179,大字南篠崎,1130,559,571,352
本町,831,396,435,301,花崎1丁目,1459,749,710,604
0476デフォルトの名無しさんNGNG
>>475
あっちにもコッチにも…。

Perl言語に詳しい人に質問!
http://pc5.2ch.net/test/read.cgi/tech/1037383722/l50

Perlでリクに答えるスクリプトを作るスレ
http://pc5.2ch.net/test/read.cgi/tech/1086143976/l50

マルチはイカンで。
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88
0477初心者NGNG
すいません…知らなくて。
以後、気をつけます。
0478デフォルトの名無しさんNGNG
下のようになる希ガス

中央,1丁目,591,281,310,218,2丁目,602,315,287,227
,2丁目,522,256,266,179,大字南篠崎,1130,559,571,352
本町,831,396,435,301,花崎,1丁目,1459,749,710,604
0479デフォルトの名無しさんNGNG
>>477
眠いので適当、しかもjperl限定。
s/(?:(\D+[\D\s]*\D+)\s?(?=\d)|(\d)\s)/$1$2,/g;

日本語の扱い
http://www.din.or.jp/~ohzaki/perl.htm#JP
0480479NGNG
あー、改行はそのまんまかぁ。
「\s」 → 「\ 」で。
0481初心者NGNG
>>479
ありがとうございました。
おかげで助かりました。
0482デフォルトの名無しさんNGNG
ほー、正規表現って面白そうだなぁ
0483マイク ◆yrBrqfF1Ew NGNG
Perlはハッカーに向いた言語だ。
こんなところにハッカーはいない。
0484デフォルトの名無しさんNGNG
>>483
正しい意味でのハッカーか、それとも誤用が広まって
正しい意味になりつつあるハッカー(≒クラッカー)か。
0485デフォルトの名無しさんNGNG
大の大人は華麗にスルー
0486457NGNG
>>461
ありがとう。
popは使わなかったけど、配列をreserveで裏返した後、foreachに入れて、適当なところで、lastで抜けた。
処理時間が、五分の一になった。ありがとう。
0487デフォルトの名無しさんNGNG
if(!$in{'bakadesu'})
↑は
if($in{'bakadesu'} ne "")
と同じ意味なのでしょうか?
0488デフォルトの名無しさんNGNG
微妙に違う
値が 0 も偽
perlでは有名な話
0489デフォルトの名無しさんNGNG
>>487
$in{'bakadesu'} eq ""
$in{'bakadesu'} == 0
not defined $in{'bakadesu'}
not exists $in{'bakadesu'}
は全て偽
0490デフォルトの名無しさんNGNG
>>489 が真となる場合に$in{'bakadesu'}は偽
0491デフォルトの名無しさんNGNG
みんな良く見ろ。!$in{'bakadesu'}と$in{'bakadesu'} ne ''だぞ。
微妙どころかほとんど反対じゃないかと(笑)

0492デフォルトの名無しさんNGNG
>>487
unless($in{'bakadesu'})なら等価

>>491
? ne だから、逆ではないんでね?
0493デフォルトの名無しさんNGNG
!''は真
'' ne ''は偽

!'hoge'は偽
'hoge' ne ''は真

!'0'は真
'0' ne ''は真
0494デフォルトの名無しさんNGNG
おもろいな、もまえら(・∀・)ニヤニヤ
0495デフォルトの名無しさんNGNG
質問者より回答者の方がレベルが低いスレはここでつか?
0496デフォルトの名無しさんNGNG
csvファイルを読みこんで配列へ格納するときに、
1個ずつダブルコーテーションで囲んでやりたいのですが、
方法はありますか?

例えば、
csv → 001,002,003 だった場合
@aaa = ("001","002","003") という配列にしたいのです。


@w_aaaを読み込んだcsvとしたとき
foreach $tmp(@w_aaa){
@aaa = split(/,/,$tmp);
}
とやると
(1,2,3)
という配列になってしまって困ってるのです。
0497デフォルトの名無しさんNGNG
>>496
ん?ちゃんと @aaa = ("001","002","003") になると思うが?
そのあとの @aaa の内容を処理する箇所のやりかたがまずいのでは?
0498496NGNG
>>497
実際にファイルから読ませたら大丈夫でした。すみません。
ありがとうございました。
0499デフォルトの名無しさんNGNG
質問です。下記のように外部パッケージ内変数を使用する場合はどうすればい
いのでしょうか? myを省けば動きそうですが、strict付けたままだと怒られるし…。

main.pl
|use strict;
|use mylib;
|print $mylib::foo.'\n";

mylib.pm
|package mylib;
|use strict;
|my $foo="bar";
|1;
0500デフォルトの名無しさんNGNG
>>499
パッケージグローバルはmyじゃ無くてourじゃ無かったか?
直接いじらせないで取得関数を作るのが正解な気もするが・・・
0501デフォルトの名無しさんNGNG
>>500
our で正解。
0502すみませんNGNG
質問です。
文字データの中に半角文字が含まれていたらエラーを
返したいのですが、半角文字を検出するにはどのような方法が
あるのでしょうか?
ちなみに、ActivePerl 5.8.4.810を使ってます。
0503デフォルトの名無しさんNGNG
>>502
情報が足り無すぎる。
エンコードは?Shift_JISかEUC-JPか、はたまたUTF-8か、
メール関係ならISO-2022-JP(JIS)もよく使われる。

半角文字とはASCIIコードにあるアルファベットや数字記号のことなのか?
半角カタカナの事なのか?いや、両方か。

話はこれらの情報がそろってからだ。

0504すみませんNGNG
>>503
情報が少なくてすみません。
エンコードはShift_JISです。
半角文字とはアルファベットも数字記号も
半角カタカナもあらゆる半角全てです。
目的としては『全角文字以外』のものが含まれていたら
エラーとしたいのです。
0505デフォルトの名無しさんNGNG
>>504
なら
/^(?:[\x81-\x9F\xE0-\xFC][\x40-\xFC])*$/
にマッチするか調べれば良いかな。
あとは、改行を含む場合は
/^(?:[\x81-\x9F\xE0-\xFC][\x40-\xFC]|\n)*$/
とか

文字エンコーディングはこの辺を参考に
ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html
0506すみませんNGNG
>>505
ありがとうございます!解決しました!
感謝です!!!
0507デフォルトの名無しさんNGNG
$n = 3 ; # 繰り返す回数
$pat = 'ab' ; # 繰り返すパターン

から、'ababab' を得るスマートな方法はどんなものでしょうか。
0508デフォルトの名無しさんNGNG
$pat x $n;
0509デフォルトの名無しさんNGNG
あー、x演算子なんてのがあったのかあ。
見たことあるはずだけど記憶になかった。
ありがとう。
0510デフォルトの名無しさんNGNG
localtimeの動作がおかしいのです。

1099202399を与えると、2004/10/31 01:59:59を返してくれるのですが、
1加えた1099202400を与えると、2004/10/31 01:00:00と、1時間戻ってしまうのです。

これって何がおかしいんでしょう? 何か有名なバグでしょうか?

ちなみに、レンタルサーバーに入っているperlを使っています。
This is perl, v5.8.3 built for i386-freebsd

---
●テスト用のスクリプト
#!/usr/local/bin/perl

($s,$m,$h,$dd,$mm,$yyyy) = (localtime($ARGV[0]));
$yyyy+=1900; $mm++;

printf( "%s -> %04d/%02d/%02d %02d:%02d:%02d\n", $ARGV[0] , $yyyy , $mm , $dd , $h , $m, $s );
---
●テスト結果
% ./test.pl 1099202399
1099202399 -> 2004/10/31 01:59:59
% ./test.pl 1099202400
1099202400 -> 2004/10/31 01:00:00
---
0511デフォルトの名無しさんNGNG
>>510
うちでは戻らないけど 10/31 14:59:59 と 15:00:00 になる。タイムゾーン?夏時間?
0512デフォルトの名無しさんNGNG
>>511
1時間差ってあたりが夏時間ぽいので、localtimeの戻り値の
$isdstをまず確認するのがいいんじゃないかと。

# 0 1 2 3 4 5 6 7 8
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);

真なら夏時間になってます。
0513デフォルトの名無しさんNGNG
文字列"_a\n__b\n__b\n___c\n__b\n_a"を
"(a,(b,b,(c),b),a)"のように置換する関数fooを作りたいのですが、正規表現でつまづきました。
どうやったらいいですか?
sub foo{
 my $a = shift;
 $a =~ s{
  ここの正規表現がわからない!
 }{
  my $b = $&;
  $b=~s/^_//g;
  "(". foo($b) .")";
 }gmex; #ここのオプションも自信ない
}
0514510NGNG
>>511,512
ありがとうございました。
$isdatをみてみたところ、ご推察のとおり1で夏時間になっていました。

localtimeを使わないで、gmtimeを使うことにします。
0515デフォルトの名無しさんNGNG
>>513
その形のプログラムでは正規表現をどういじっても","が出てこないと思うのだが(笑)
とりあえず","がないのと改行が残るのに目をつぶれば、

(?:_\w+(?:\n|$))+

でいけると思われ。



0516513NGNG
>515 thx!
何とかなりそうです。ありがとうございました。
0517デフォルトの名無しさんNGNG
>>496
で"は付けなくていいの?(w
@aaa = map qq|"$_"|, @aaa;
0518デフォルトの名無しさんNGNG
>>510-512
このやりとりで初めて「夏時間」の
具体的な部分を理解した漏れは重度のアレだ。
0519デフォルトの名無しさんNGNG
localtimeを使いたいところがgmtimeで済むようなレンタルサーバってなんだろう?
糞サーバー?



スーパー1シャーシ+井桁よりもスーパーTZシャーシを使う方向で。
0520デフォルトの名無しさんNGNG
>>518
気にすんな。漏れ (>>511) も当てずっぽうだった(恥)

>>519
>>510 のサーバは海外のか海外に設置してるサーバじゃないのかな?
環境変数 TZ をセットし直せば localtime もうまくいきそうな気もする。
0521496NGNG
>>517
あ、すみません、(001,002,003)といった配列になってくれればいいんですよ。
(1,2,3)となってしまうのが問題だったわけで。
でも、そうやってダブルコーテを付けることもできるのですね!
今後使えそうなテクです!ありがとうございます!
0522デフォルトの名無しさんNGNG
>>521
んぢゃ、強引にこうしておく(w
@aaa = map sprintf(qq|"%03d"|,$_), @aaa;
0523デフォルトの名無しさんNGNG
リストの例えば3番目の要素を取り出すのに
('A', 'B', 'C', 'D')[2] # 'C'を返す
という簡単な記法がありますが、ハッシュみたいなリストで
Key3を取り出す下のような簡単な書き方はないのでしょうか?
('Key1', 1, 'Key2', 2, 'Key3', 3, 'Key4', 4){Key3} # 3を返す
ちゃんとハッシュに入れてからじゃないと駄目なんですか?
0524_gunzipNGNG
{key1 => 1, key2 => 2, key3 => 3}->{key3}
0525523NGNG
>>524
そか、リファレンスにすればよいのですね!
即レスサンクス!!
0526デフォルトの名無しさんNGNG
Net::FTP で、proxy(squid)の通し方ご存じの方、教えて頂けませんか?
0527デフォルトの名無しさんNGNG
当然マニュアルは隅から隅まで全部読んだんだよな?
0528デフォルトの名無しさんNGNG
>>521
"001"とせず、001とすると8進数の01として扱われるので注意。
0529デフォルトの名無しさんNGNG
質問です。
ppmを起動して、install *****(パッケージ名)
と打っても改行されるだけでインストールしてくれないのですが。
どなたか解決策を教えてください。
0530デフォルトの名無しさんNGNG
エラーメッセージを読んで、それを元に質問し直すなり
googleで検索にかけるなりしたらどうですか。
0531529NGNG
エラーメッセージも何も出ないんです。
googleで検索してみてもこの症状についての説明を見つけられず・・・・。
探し方が甘いでしょうか?
0532デフォルトの名無しさんNGNG
ppmはちゃんと起動できてるの?
ppm> というプロンプトが出てる?
ppm> install *** で何も言わずにppm>とプロンプトに帰ってくるのか、それとも帰ってこないのか?
帰ってこないのなら単に時間がかかっているか、それともリポジトリに接続できていないか。
プロキシの設定などを調べる。
のか
か
かかかか
か

ぁぁぁぁかかかかか
か
かかかかか
0533529NGNG
ppm>というプロンプトに帰ってきません。
20分ほど放置してみましたが何も起こらなかったので、
プロキシの設定などをやり直してみます。
0534デフォルトの名無しさんNGNG
ファイアウォールの中なのでFTPがpassiveモードじゃないとだめ、とか
そういうのではないのでしょうか?ちがってたらごめんね。
0535526NGNG
ftp_proxyの通し方ならマニュアルにあるのですが、2回 login をする方法は、suqidには使えないみたいなのです。
0536デフォルトの名無しさんNGNG
じゃあPerl入れなおしだね
0537デフォルトの名無しさんNGNG
tie でハッシュに関連付けた DB_File のデータを
untie せずにハッシュの内容をデータファイルに反映させる方法はありましょうか?
0538_gunzipNGNG
$x->sync()
0539デフォルトの名無しさんNGNG
$aと$bのどちらの方が大きいかそれとも等しいかprint()するサブルーチンを書け

if ($a < $b) {
print "\$a < \$b\n";
} elsif ($a > $b) {
print "\$a > \$b\n";
} else {
print "\$a = \$b\n";
}
これでいいですか
0540デフォルトの名無しさんNGNG
良くないと思う理由を書け
0541デフォルトの名無しさんNGNG
539ではないけど、perl 的にもっと楽に書ける方法あります?
ということが聞きたいのではないかと思ってみる。
0542_gunzipNGNG
539のままでいいでひょ。

print "\$a ", ('=', '>', '<')[$a <=> $b], " \$b\n";
とか書くことも出来るけど、あまりやらない方が良いだろうね。
0543デフォルトの名無しさんNGNG
>>539
print "\$a ",('<','=','>')[($a<=>$b)+1]," \$b\n";
0544543NGNG
かぶったorz
しかも-1の処理がスマート。(|||_|||)ガビーン
0545デフォルトの名無しさんNGNG
windowsXPでActivePerl5.8.4をいれて
perl/Tkでwindowを出してみたんですがfontをsystemにしても
日本語が化けてしまいます何故でしょう?(Shift Jisで保存してます)
0546デフォルトの名無しさんNGNG
過去ログを読む暇がないので似た質問があったら本当にごめんなさい。
例えば
客1 口座番号 住所 電話
客2 口座番号 住所 電話
客3 口座番号 住所 電話
・
・

というような内容のファイルがあったとして、
それをリストのように読み込みたいのですが、
arrayを使った場合、それぞれの客の住所や電話番号
はどうやって保存すればいいのでしょうか?

学校の課題なのですが、perlは数時間しか授業でしてない
のに、わからないことだらけで困ってます。ファイルを
読むなんてこの課題の中で一番最初のところなのにそこで
つまずくなんてほんともう泣きそうです。

すみません。
0547デフォルトの名無しさんNGNG
>どうやって保存すれば
保存ってなんだ?
0548デフォルトの名無しさんNGNG
>>546
学校の友達に聞いた方が早い。
0549デフォルトの名無しさんNGNG
レスありがとうございます。

保存っていうのは言葉が間違ってたらすみません。
variableの中に入れるというのでしょうか?

クラスには残念ながら連絡をとれる友達はいません。
0550デフォルトの名無しさんNGNG
あ、549は546です。IDでないのですね。すみません。
0551デフォルトの名無しさんNGNG
一人で泣いてろ
0552_gunzipNGNG
読み込んでからどうするのかは知らんけど。

#!/usr/bin/env perl

my @customers = ();

open F, "test.dat" or die $!;
while (<F>) {
    chomp;
    my %profile = ();
    @profile{ qw[name id address phone] } = split / /;
    push(@customers, \%profile);
}
close F;

#なんやかや
foreach my $p (@customers) {
    print "$_\t= $p->{$_}\n" for keys %$p;
    print "-" x 20, "\n";
}
0553デフォルトの名無しさんNGNG
gunzipさん、ありがとうございます。
さっそく試してみます。とてもうれしいです!!

とりあえず明日になったら教授に話をしにいきます。
ご迷惑をおかけしました。
0554デフォルトの名無しさんNGNG
>>539
print grep{ eval } ('$a < $b', '$a == $b', '$a > $b');
これで充分。
0555デフォルトの名無しさんNGNG
$str = 'white cat' ;
$str =~ s/black (dog)|white (cat)|pink (pig)/$1$2$3/ ;

これ、 -w 付けて実行するとマッチしなかったところが、初期化されてない値だゴルァ、と言われますが、
言われない書き方はありますか。
e で一つずつ判定、と言うのはできるだけ無しの方向で。
0556デフォルトの名無しさんNGNG
my $str = 'white cat';
0557デフォルトの名無しさんNGNG
>>555
実際初期化されてないんだからどうにもならんと思うが。
no warnings使うか、$1$2$3使わないように書き直すか、と
いったあたりだろう。

後者の例は、

$str =~ s/black (?=dog)|white (?=cat)|pink (?=pig)//;

とか。
0558555NGNG
>>557
やっぱそうか……
実用上は問題ないようだけど、たまに潔癖症になるのでテッテ的に warning つぶしに躍起になるのです。
0559デフォルトの名無しさんNGNG
Oct 19 10:13:55 server1 httpd: INTUNIV:ByDate:Start:0.83674100 1098148435:32618
Oct 19 10:13:55 server1 httpd: INTUNIV:ByDate:End :0.95674400 1098148435:32618
Oct 19 10:37:53 server1 httpd: INTUNIV:ByDate:Start:0.35116700 1098149873:32618
Oct 19 10:38:47 server1 httpd: INTUNIV:ByDate:End :0.45024600 1098149927:32618
・
・
・

という書式で書かれているログファイルを、文字列マッチングを利用して

10/19 10:13:55 S:0.83674100 1098148435:32618
10/19 10:13:55 E:0.95674400 1098148435:32618

という表示形式にするにはどのように書けばいいでしょうか?
ものすごい汚い書き方ですが、

if ($line =~ /^([A-z]*)\s([0-9]*)\s([0-9]*:[0-9]*:[0-9]*)\s.*(0\.[0-9]+)\s([0-9:]+)$/ )
 {
  print WRITE "$mon{$1}/$2 $3 $4 $5 $6\n";

という書き方をしたのですが、Start・End の表記がうまくできません。

どなたかご教授お願いいたします。
0560デフォルトの名無しさんNGNG
>>559
StartとEndのところを(Start|End)で拾って、月と同様に
ハッシュ用意してひけばいいんじゃねーの?
0561デフォルトの名無しさんNGNG
(Start|End)で拾ったらsubstrで1文字目を切り出す方が楽そうね
0562デフォルトの名無しさんNGNG
Start/End以外はないことが保証されていて、例えばStopみたいのを間違って
引っ掛ける心配がないのであれば、(S|E)で拾って他のとこ捨てればそのまま
使えますな。

0563デフォルトの名無しさんNGNG
>>559
$line =~ /^(\w+) (\d+) (\d+:\d+:\d+).+?(S(?:tart:)|E(?:nd:))([\d\.]+) (\d+:\d+)$/
0564デフォルトの名無しさんNGNG
>>563
(S(?:tart:)|E(?:nd:))とやっても(?:...)の部分が消えるわけではないので、
$4はStartかEndになっちゃうから、(Start:|End:)とやるのとかわらない。
(?=...)のzero-width positive lookーaheadのつもりだったのかな?
これのときはさらにその後にtart:やend:を食うパターンを別途用意
しないとマッチしないよ。
0565デフォルトの名無しさんNGNG
Etart とか Snd がありえなさそうなら ([SE])(?:tart|nd\s*): とか
0566デフォルトの名無しさんNGNG
SEXに見える。
0567デフォルトの名無しさんNGNG
なるべく記述をサボるなら
print "$mon{$1}/$2$3$4\n" if ($line =~ /^(.+?) (.+ )s.+(S|E).+?(:.+)/);

危険だけど。
0568デフォルトの名無しさんNGNG
>545
ttp://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FTk
0569デフォルトの名無しさんNGNG
>>555-558
この仕様 (warning 出る) ってどうなんだろ?
選択の中でグループ化を使う (そして $1, $2, ... で参照する) のは推奨できない、
っていうこと?
そりゃ使いづらくね?
0570559NGNG
皆さんのアドバイスを参考にして作った結果、

$mon{'Jan'} = '01' ;
・
・
$mon{'Dec'} = '12' ;
$se{'Start'} = 'S';
$se{'End'} = 'E';
if ($line =~ /^(\w+) (\d+) (\d+:\d+:\d+) (server1 httpd: INTUNIV:ByDate:)(Start|End):(\d+\.\d+) (\d+:\d+)$/ )
 {
  print WRITE "$mon{$1}/$2 $3 $se{$5} $6 $7\n";

のようにしたらとりあえず目的の形式でできるようになりました。

しかし、
(server1 httpd: INTUNIV:ByDate:)
の部分が自分的にスマートじゃないなぁと思いつつも、正規表現で何とかならないと思って
試行錯誤したりしたのですが、結局こんな形になってしまいました。

ログは3種類あって、server1 httpd: INTUNIV: までの部分はどのログも一緒なのですが、
ByDate の部分はログの種類によって変わるのです。
現在のままだとログの種類ごとにスクリプトを書き換えなくちゃいけませんよね…。

ともあれ、皆さんのアドバイスには感謝しております。
ありがとうございました。
0571デフォルトの名無しさんNGNG
外部コマンドの結果を待たずに実行する簡単な方法はありますか?
以前system関数で
system("cat /etc/passwd"); # waitする
system "cat /etc/passwd"; # waitしない
というような記事を見たことがあるんですが(実際、上は2つともwaitしました)
forkを使えばモウマンタイなんですけど(system関数もしてますし)
1行で簡単に出来るような他の方法がありましたらご教授ください。
0572559NGNG
さっきのを改良して、

$mon{'Jan'} = '01' ;
・
・
$mon{'Dec'} = '12' ;
$se{'Start'} = 'S';
$se{'End'} = 'E';

if ($line =~ /^(\w+) (\d+) (\d+:\d+:\d+) (server1 httpd: INTUNIV:)(\w+) (Start|End) (\d+\.\d+) (\d+:\d+)$/ )
 {
  print WRITE "$mon{$1}/$2 $3 $se{$6} $7 $8\n";


とりあえずこれで落ち着きました。
0573デフォルトの名無しさんNGNG
>>571
system("hoge &"); じゃダメだっけ?
0574デフォルトの名無しさんNGNG
>>573様
出来ました(/∇\*)
その発想が出てこなかったのがクヤシイ
ありがとうございました。
0575デフォルトの名無しさんNGNG
テキストベースのデータを1万レコード
持って、プログラムを組んだのですが、テキストなので
キーサーチができず、CPUの使用率が50%ほどになってしまいます。
1万レコードぐらいのデータはやはり、DBでもつべきでしょうか?

0576デフォルトの名無しさんNGNG
>>575
Windows は知らないけど、 UNIX なら Berkeley DB (DB_File) あたりがお手軽かな。
0577545NGNG
>>568
そのサイト見ながらやったんだけど化けたんだ
漏れだけなのかな
0578デフォルトの名無しさんNGNG
>>577
下のコメント部分も読みましたか?
0579545NGNG
>>568,578
をお!出来ました!
スミマセン読んでませんでした、感謝!
0580デフォルトの名無しさんNGNG
どなたか教えて下さい。
1 1
1 23
2 32
2 35
2 67
3 4
5 7
5 10
という、下に行くほど左の数字が大きくなるファイルがあるのですが、これを、
1 2
2 3
3 1
4 0
5 2
のような感じで、左の数字が1のものの行数は2行、2のものは3行、3のものは1行と
いうように数えるにはどうしたらよいのでしょうか?
(右の数字は関係ないです。)
0581デフォルトの名無しさん NGNG
どなたか教えて下さい。
1 1
1 23
2 32
2 35
2 67
3 4
5 7
5 10
という、下に行くほど左の数字が大きくなるファイルがあるのですが、これを、
1 2
2 3
3 1
4 0
5 2
のような感じで、左の数字が1のものの行数は2行、2のものは3行、3のものは1行と
いうように数えるにはどうしたらよいのでしょうか?
(右の数字は関係ないです。)
0582デフォルトの名無しさんNGNG
while (<>) {
m/^(\d+)/;
$cnt{$1}++;
}
foreach (sort keys %cnt) {
print $_.' '.$cnt{$_}."\n";
}
0件が表示されない?知らん(・_・)
0583デフォルトの名無しさんNGNG
ハッシュのハッシュをオブジェクトにするためのコンストラクタの書き方がわかりません。
%hash=(
 '001' => { 'name' => 'John', 'age' => '20'},
 '002' => { 'name' => 'Jane', 'age' => '20'},
);
このデータから、001という番号を指定して名前や年齢を持つオブジェクトを作りたく、
my $usr=User->new($hash{'001'});
package User;
sub new{
 my($hash)=@_;
 my $self=$hash;
 bless $self;
 return($self);
}
とやってみたところ、オブジェクトはできたのですが、元のデータが
$hash{'001'} = bless( { (略) } , 'User' );
と書き換わってしまい、困っています。

どなたか妙案をお貸しください。
0584デフォルトの名無しさんNGNG
0件だしたければ、数えるところはそのままで
表示するところを

use List::Util;
foreach (1..max(keys %cnt)) {
print $_.' '.$cnt{$_}+0."\n";
}

あたりでいいんでね?
0585デフォルトの名無しさんNGNG
>>583
元のデータをblessしたくなければコピーするしかないと
思われ。

my $self = {%$hash};
0586デフォルトの名無しさんNGNG
sub new{
 my($hash)=@_;
 my $self=$hash;
 bless $self;
 return($self);
}
そもそも、これおかしくね?
0587デフォルトの名無しさんNGNG
>>586
別に
0588586NGNG
第一引数にはパッケージ名が入らないか?
これだとリファレンスじゃないものはbessできんと怒られるんだが
0589583NGNG
>>585
うまくいきました。デリファレンスしたものがそのまま無名ハッシュに入るんですね。
ありがとうございました。

>>586
直接書いてたら間違えてました。。。
手元のを見たら、
my($class,$hash)=@_;
となってました。
0590デフォルトの名無しさんNGNG
>>584
ありがとうございます。
でもこれですと、Undefined subroutine &main::max called at blastcount.pl line 14, <> line 32000.
とエラーが出ました。どうすればよいのでしょうか。
0591デフォルトの名無しさんNGNG
エラーメッセージの意味が分からないの?
0592デフォルトの名無しさんNGNG
>>591
すみません。わかりません。どう変えたらいいのでしょうか?
0593デフォルトの名無しさんNGNG
>>590
use List::Util qw(max);
0594デフォルトの名無しさんNGNG
>>576
サンクスコ
DB化も考えて見ます
0595587NGNG
>>586
はげしくごめん
0596デフォルトの名無しさんNGNG
よくコードで、
$A=pop @array;
$B=pop @array;
$C=pop @array;
みたいな処理をやってたりしますが、これを一文でやる方法はありますか?
($A,$B,$C)= ...
みたいな形で。
0597_gunzipNGNG
($a, $b, $c) = splice @array, 0, 3;
0598_gunzipNGNG
ごめん。よく読んでなかった。
($a, $b, $c) = reverse splice @array, -3, 3;
かな。
0599デフォルトの名無しさんNGNG
($a, $b, $c) = map { pop @array } 1..3;
とか。
連投して済まない。
0600デフォルトの名無しさんNGNG
可読性を考えるとpopが2〜3個ならむしろ小細工しない方がいい気がするが。
あえてするなら>>599かな。
0601デフォルトの名無しさんNGNG
Perler死ね
0602デフォルトの名無しさんNGNG
糞言語消えろ
0603デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Perl
0604デフォルトの名無しさんNGNG
>>601-603
一つの言語しか使えない素人発見
0605デフォルトの名無しさんNGNG
Rubyは最高の言語
0606デフォルトの名無しさんNGNG
はいはい( ´,_ゝ`)プッ
0607デフォルトの名無しさんNGNG
Larryはもう過去の人。
0608デフォルトの名無しさんNGNG
長い文字列の途中から=~のマッチング開始させるのってどうすればいいですか
0609デフォルトの名無しさんNGNG
@INCのパスにJcode.pmがインストールされていない状態でプログラム(/home/hoge/test.pl)直下のabcディレクトリに
Jcode.pmを置きます。
-test.plの内容-
@INC = ('./abc');
use Jcode;
print "$_\n" foreach @INC;
print -e "./abc/Jcode.pm" ? "OK\n" : "NG\n";
print "CURDIR = " . `pwd`;
-------------
この状態でコンソールから実行するとエラーが発生します。エラー内容は
Can't locate Jcode.pm in @INC (@INC contains: /usr/lib/perl5/5.6.1/i386-linux /usr/lib/perl5/5.6.1 ....(略)
といった具合です。
use Jcode;をコメントアウトした結果は
./abc
OK
/home/hoge
です。
@INCを./abcと再定義しているのもかかわらずエラーログでは./abcを読もうとせず
標準のパスを読み込んでる事からして@INCの内容が無視されているっぽいのですが
コンソールからの起動でちゃんと@INCの内容を見てくれるようにするにはどうすればいいでしょうか。
http経由からだとちゃんと@INCのパスを検索してくれます。
0610デフォルトの名無しさんNGNG
>>608
substr($s, どっか) =~ /ほげほげ/
0611609NGNG
すいません自己解決しました。

#!/usr/bin/perl
use Jcode;
BEGIN{ unshift(@INC, './abc'); }
だと駄目で

#!/usr/bin/perl
BEGIN{ unshift(@INC, './abc'); }
use Jcode;
だとOKでした。
BEGINはBEGINの方に書くのですね
0612デフォルトの名無しさんNGNG
>>597-600
ありがとうございます。自分としてはスライスを使って上手くこの辺を
操作する方法がないかなと探してしたのですが、どうも上手くいきません。
@A=(0,1,2);
($a,$b,$c) = ($m=$#A-2, @A[($#A..$m)], $#A-=$m)[1];
0613612NGNG
すいません分りました。
範囲演算子は左の値が大きくないとダメみたいですねえ。
なんでこんな言語仕様なのかは不明です。
0614デフォルトの名無しさんNGNG
s/左/右/
0615612NGNG
612のコードの間違いがもう一つありました。
($m=$#A-2, @A[($#A..$m)], $#A-=$m)[1];

これでは、カッコ内の各式が返す値をまったいらのリストに並べてしまうので、
[1]では、@Aのスライスだけを取得することはできません。

@A=(0,1,2);
(($a,$b,$c)=reverse(@A[($#A-2)..$#A]), $#A-=2);
これが一番現実的だろうと思います。
0616デフォルトの名無しさんNGNG
>>611
BEGINを先に書かないと間に合わないのは、useは

BEGIN { require Module; import Module LIST; }

と等価なので、BEGIN同士なら先に書いたほうが先に
実行されるからだな。

でもいまどきは@INC直接いじらないでuse lib使うんじゃ
ないかと。やってることはほとんど同じだけど(とマニュアル
にも書いてある)こっちの方が見やすいし。
0617デフォルトの名無しさんNGNG
a = 2830.53
b = 9823.32
a = 5584.66
b = 8595.54
a = 8568.63
b = 9879.92
a = 4543.45
b = 5258.26

という、aとbの数字がひたすら書かれたファイルを読み込んで、
aの値とその1行下のbの値の差を書き込んでいくにはどんな記述をすればいいでしょう?

上の値をプログラムに通した場合、実行結果を

6992.79 (2830.53 - 9823.32)
3010.88 (8595.54 - 5584.66)
1311.29 (9879.92 - 8568.63)
714.81 (5258.26 - 4543.45)

という感じに出したいのですが・・。
0618デフォルトの名無しさんNGNG
>>617
use IO::File;
my $fh = new IO::File "data.txt";
my %h;
while(<$fh>) {
 my ($k, $v) = split /\s*=\s*/;
 $h{$k} = $v;
 printf("%f |%f - %f|\n", abs($h{'a'}-$h{'b'}), $h{'a'}, $h{'b'})
  if $k eq 'b';
}
undef $fh;

予想外のフォーマットはまったく考えてません。
0619デフォルトの名無しさんNGNG
while($dataA = <$fh>){
 $dataB = <$fh>;
}
でいいんじゃねーの
0620デフォルトの名無しさんNGNG
package check;

sub check_integer($$){
...
}

とやって、

別なとこで、check::check_integer(    );

とやったとき、プロトタイプは有効にならないですか?
やってみたらならなかったので、途方にくれています。
0621620NGNG
あー、わかったー。
require じゃなくて use 使ってインポートしないと、
プロトタイプ有効になんないのね。
できたできた。
0622デフォルトの名無しさんNGNG
>>617
多少メモリはつかうが、

undef $/;
open FH, 'data.txt';
$_ = <FH>;
close FH;
print abs($1 - $2) . " ($1 - $2)\n" while (m|a \= (\d+.\d+)\nb \= (\d+.\d+)|sg);
0623デフォルトの名無しさんNGNG
3行バージョン。

use File::Slurp;
$_ = read_file('data.txt');
print abs($1-$2) . " ($1 - $2)\n" while (/a = (.+?)\nb = (.+?)\n/sg);
0624609NGNG
>>616さん
>BEGIN { require Module; import Module LIST; }
これ見て全て納得しました。
use はBEGINと同じようにコンパイル時に処理されるとは認識していたのですが
BEGINが一番優先度が高いと勝手に思い込んでいました。
私みたいなおっちょこちょいさんが多いからuse libが作られたのかな。

BEGINNERはBEGINをBEGINの方へ書くのではなくuse lib使えってことですね。
0625デフォルトの名無しさんNGNG
>>619 が一番賢そうだな
0626デフォルトの名無しさんNGNG
すいません、Perl56.dllが見つかりません。
とエラーがでます。みてみたらPerl58.dllはありましたが56はなかったです。
どなたかPerl56.dllいただけませんか。
よろしくお願いします。
0627626NGNG
もしくはダウンロードできるとこはありませんでしょうか。
0628デフォルトの名無しさんNGNG
それってバージョンアップに失敗したわけじゃないの?
5.8がいいならクリーンインスコしてみそ
0629デフォルトの名無しさんNGNG
すまねっす!
ファイル名.htmもしくは.htmlの拡張子部分を消そうとして
$path =~ s/(\.htm|\.html)//;
とやらかしたんですがl(小文字のL)が残ってしまうです。
左側にマッチした時点で置換してしまってるだけだというのは分かるんだけど、
「じゃ、どうするべ」
という方針が立たない、、
とりあえず二行に分けて済ませたんですが、
エライ人はこれ、どうやってますか?

つうかスレ違い?正規表現スレは難しすぎて、、、。
0630デフォルトの名無しさんNGNG
わー!分かったんでいいです。
順序変えればいいだけなのね。
スレ違いスマソ。
0631デフォルトの名無しさんNGNG
$path=~s/(\.html?)//;
0632デフォルトの名無しさんNGNG
オブジェクトのリストを保持するオブジェクトを作ろうとしています
リストに新しい要素を加える関数として

sub add{
my $I = shift(@_);

my $add = 1;

foreach my $item ( @{($I->{"list"}} ){
if( $item eq $_[0] ){ $add = 0; }
}

if($add){ @{($I->{"list"}} = (@{($I->{"list"}},$_[0]); }

return $this;
}

の様な物を作りたいのですが、リファレンスの比較はeqと==のどちらですべきなのでしょうか?
それともリファレンス用の比較関数がありますか?
併せて、もっとエレガントな記述方法があれば教えてくださいお願いしますm(__)m

追記
my $x = hoge->new();
$x->add(hoge->new());
みたいな使い方をしたいです
0633デフォルトの名無しさんNGNG
>>617
while(<>){
  if(m/^a\s*=\s*(\S+)/){
    $a = $1;
  } elsif
  (m/^b\s*=\s*(\S+)/){
    $b = $1;
    print $b - $a,"($b - $a)\n";
  } else {
    die
  }
}
0634デフォルトの名無しさんNGNG
>>632
コレクションクラスが欲しいってことなのかな?
同じオブジェクトの重複を許すのなら普通に配列にpushすればいいと思う。
重複を許さないなら、そのオブジェクトのアドレスをキーにしてハッシュに入れる。

CPANにも似たようなものはある(Set::Bagとか)。
http://search.cpan.org/modlist/Data_and_Data_Types/Set

同一のオブジェクトかどうかの判定はアドレス同士を文字列として比較 eq。(数値比較 == でもいけるらしい)
比較用のメソッド持ってもいいし、演算子オーバロードするのもよし。
同じクラスのオブジェクトかどうかの判定には ref という関数を使う。
0635デフォルトの名無しさんNGNG
オブジェクトを new する時に、内部的にシリアルナンバー振っておいて
それを比較してもよい。これだとついでにオブジェクトの生成順もわかる。
あとはハッシュなり配列をblessして
コレクションクラスをつくるだけ(作らなくても良い)。
0636デフォルトの名無しさんNGNG
>>632
ごく簡単に書けばこんなかんじ。

package Bag; # 重複OK
sub new { bless [] => shift }
sub add
{
my ($self, $obj) = @_;
push @{$self}, $obj;
}

package Set; # 重複NG
sub new { bless {} => shift }
sub add
{
my ($self, $obj) = @_;
$self->{$obj} = $obj unless (exists $self->{$obj});
}
0637632NGNG
>>634-636
丁寧な有難うございますm(__)m
そういえばハッシュのキーって勝手に重複判定してくれてますね、目から鱗でした。
取り敢えずSetクラスのオブジェクトをメンバ変数に持つ奴を使います。
0638デフォルトの名無しさんNGNG
perlの本スレってここでよいの?
0639デフォルトの名無しさんNGNG
>>637
あとで気付いたけど、どうせ$objは参照渡しになるから
unless exists〜のチェックも実質いらないかもね。
ともあれハッシュは便利だよ。
0640デフォルトの名無しさんNGNG
あー、ハッシュのキーとしてリファレンスは使えないようです
リファレンスを文字列にキャストした値が使われる模様で
my %xx = ();

$x=1;
$y=2;

print ref \$x, "\n";
print ref \$y, "\n";

$xx{\$x}=$x;
$xx{\$y}=$y;

foreach my $key (keys %xx){
print $key,"\n";
print ref $key, "\n";
# print $$key , "\n";
}
のコメントアウトをはずすとなんか怒られます
最近のperlにはスカラー/配列/ハッシュ以外にも型の概念があるのですね
明示的にリファレンスを文字列にキャストするにはどうしたら良いんでしょう
(refではアドレスの情報が落ちます)
0641デフォルトの名無しさんNGNG
>>640
分かっているとは思うけど、リファレンスのアドレスを「文字列」にしたものをキーとして使います。
つまり Hoge=HASH(0x80f6520)とかという「文字列」をキーとしてつかうわけで
それをデリファレンス(=元のオブジェクトに戻そうとする)しようしても無意味です。
そう言うわけで640のコメントを外すとPerlは怒るのです。

$x = {}; の場合、自動的に $xx{$x}とすれば $xx{"HASH(0x80f6460)"} と等価に(怒られずに)なります。
$x = Hoge->new のようなオブジェクトの場合は $xx{"Hoge=HASH(0x80f6460)"} と等価です。
明示的にキャスト(?)したければ $xx{"$x"} とダブルクォートすれば気分的にはいいかもね。
なお、refは上記の Hoge=..のHogeを返すだけなので、「それは同じクラスのインスタンスか?」
みたいな同族判定に使います。指定したクラスのインスタンスしかこのコレクションにはいれない、
というような処理にも使えます。
0642デフォルトの名無しさんNGNG
>>640
$xx{\$x}=$x;
$xx{\$y}=$y;
は、エラーも警告も出ずに動くでしょ?
0643デフォルトの名無しさんNGNG
package hoo;
#use overload
# "+" => \&add;

sub new{
my $class = shift(@_);
my $this = {};
foreach my $element (@_){
$this->{$element} = $element;
}
bless $this, $class;
return $this;
}

sub add{
my $this = shift(@_);
if( ref $_[0] eq ref $this ){
foreach my $element ($_[0]->getlist){
$this->{$element} = $element;
}
}
return $this;
}

package main;
my $z = hoo->new("a","b");
print "$z";
のコメント外すと物凄い勢いで怒られます
0644デフォルトの名無しさんNGNG
use overload
"+" => \&add,
"\"\"" => \&string;

sub string{
my $this = shift(@_);
return "$this";
}
とかすると再起呼び出しを始める模様です
くそー、ワケワカンナイぜー
0645デフォルトの名無しさんNGNG
あぁ、確かに。ごめん。
sub string {
my $this = shift;
return overload::StrVal($this);
}
でどうでしょうか?
0646643NGNG
ををを!、感謝です!!!
0647デフォルトの名無しさんNGNG
いえいえ。
関係ないけど、$this->{$element} = $element;
の部分は、その使い方であれば
$this->{$element}++ とでもしておくと、出現回数も数えられて
更にPerl的でプラスアルファです(?)。
0648デフォルトの名無しさんNGNG
ちょっと長くなるかもしれませんがお願いします。

今、
a, b, c
a, c, d
a, e, f
b, a, a
b, c, d
b, d, e
c, a, b
c, b, d
...

こういう3つの文字が並んだデータがありまして、
それぞれ a = b + c, a = c + d .... といった関係が成り立っています。

このとき、aを入力し、b, dと入力すると、

a = b + c
b = a + a
c = b + d

a = c + d
c = b + d

という出力が得られる、という感じにしたいのです。
要は、求める文字を、用意できる文字から、ツリー状に探していきたいということです。

分かりやすく言うと、ドラクエモンスターズの配合を検索する感じです。

いまはローカルで実行して試しているんですが、中々うまくいきません。よろしくお願いします
0649648NGNG
>>648
すいません、スレを間違えた感じがします
0650デフォルトの名無しさんNGNG
しぱーん厨襲来の予感
0651デフォルトの名無しさんNGNG
化学式の合成のツールかなんか作るのかな?
0652デフォルトの名無しさんNGNG
ドラクエモンスターズの配合を検索する感じのツールを作るんじゃないの?
0653648NGNG
>>651
インテリ風に言うとそういう感じです。すいません本当はCGIの方に書こうと思ったんですが・・・
どちらにしてもうっとおしそうなので絶縁中の先輩に聞く事にします。
でももし、ミラクルなやり方があったらぜひ教えてください。
0654648NGNG
>>652
端的に言うとそういうことなんですが、いわばこういったゲームを発端としてでも
実りのある発見が出来たらなと、いうわけなんです。化学にも応用できます。
0655デフォルトの名無しさんNGNG
つーか、問題定義はこれで十分なのか?
0656デフォルトの名無しさんNGNG
>>648
b = a + a が結果として出てくるあたり、
いまいち結合法則というか、ルールがよくわからんのだが…
0657デフォルトの名無しさんNGNG
>>656

同感。
a = b + c
b = a + a
a = b + c
…で無限再帰検索ループに陥る悪寒
0658デフォルトの名無しさんNGNG
つーか一段階しか辿らないんだろ。
配合ゲームっぽい事書いてるんだからそれくらい分かれよ。
0659デフォルトの名無しさんNGNG
知るか
0660デフォルトの名無しさんNGNG
一段階かどうかは知らないが、
同じ結果の配合が何度も出てきても仕方ないから、
検出して止めるんじゃないだろうか?
0661デフォルトの名無しさんNGNG
こんな感じで突っ込んでって使うだけじゃないの?
$ev{b}{c} = 'a';
$ev{c}{d} = 'a';
0662648NGNG
b = a + a は思いっきり間違いでした。
a = c + d
   c = b + d  だけでしたね。

ルールは

「a〜zのアルファベットがあって、それぞれがa〜zのうち2つの要素から成り立っている
 また、その2つの要素の組み合わせは一つではない。2つの要素が同じ場合もある。
 その全組み合わせのリストがあらかじめ用意されている。

 今、n個の異なるアルファベットがあり、このn個を用いて、ある一つのアルファベットを作りたい。
 用意されたn個のアルファベットで構成可能な組み合わせを全て求める。
 また、要素を組み合わせる回数は任意だが、多すぎると辛いので10回程度までにする。」


こういう感じだと思います。
用意できるモンスターN種類(N個のアルファベット)から、何回か配合を繰り返して
目標とするモンスターX を作るツリーを作る、という感じです。

@result = (1, a, c, d, 2, c, b, d)
という平たい配列に入れようとしたんですが、どんどん検索を進めていくと、
(1, a, c, d, 2, c, b, d, 3, b, j, k, 3, d, l, m, 2, d, a, f, 3, a, c, d, 3, f, k, j )
などと、何がなんやらわからなくなってしまうのです。

ツリーの深さとしては、5階層くらいまでとめておこうかと思います。
途中、利用可能なデータが表れた場合は、そこは葉になるので、そこまで膨大には
ならない予定です。
0663デフォルトの名無しさんNGNG
このとき、aを入力し、b, dと入力すると、

a = b + c
b = a + a
c = b + d

a = c + d
c = b + d

という出力が得られる、という感じにしたいのです。
-----------------------------------------
↑そもそもこれが意味フメー、入力が2回に分かれてるから
a = b + d を探したいのかと予想しつつ(さすがにんな単純な話じゃあないと思うが
出力を見たらどうやら違うみたいだし、マジワカンネ
0664デフォルトの名無しさんNGNG
sendmail.cf のルールに良く似てる
0665663NGNG
む、遅れた
0666デフォルトの名無しさんNGNG
なんかどうでもよさげ。
0667デフォルトの名無しさんNGNG
prologでも使えば?
0668デフォルトの名無しさんNGNG
prolog重い
0669デフォルトの名無しさんNGNG
>>668
上の用途程度ならいまどきのCPUで実行すれば気にならない速度だと思われ
0670648NGNG
ttp://sylphys.ddo.jp/upld2nd/pc/img-box/img20041114204116.gif

図にするとこんな感じです。
a = b + c などのような組み合わせの種類は1500程で、
ツリーの深さによっては多少大きくなってしまうと思います。
0671デフォルトの名無しさんNGNG
package Node;
sub new($)
{
 my $pkg = shift;
 bless
 {
  l => undef,
  r => undef,
 }, $pkg;
}

1;


$a = new Node();
$a->{l} = …
0672デフォルトの名無しさんNGNG
sub getLeaves($)
{
 $self = shift;
 my @ret;
 $isleaf = 1;
 if(defined($self->{l})
 {
  push(@ret, $self->{l}->getLeaves());
  $isleaf = 0;
 }

 if(defined($self->{r})
 {
  push(@ret, $self->{r}->getLeaves());
  $isleaf = 0;
 }
 if($isleaf)
 {
  push(@ret, $self);
 }
 return @ret;
}
0673デフォルトの名無しさんNGNG
それと今回のケースだとNodeにNameがあった方がいいな。
0674デフォルトの名無しさんNGNG
二分木のデータ構造が知りたかっただけの話なのか?
0675デフォルトの名無しさんNGNG
そういうのが欲しいならcpanにもっと賢いのが落ちてるんじゃないのか?
0676デフォルトの名無しさんNGNG
http://search.cpan.org/modlist/Data_and_Data_Types/Tree
このへんかな
0677648NGNG
レス有難うございます。頭がこんがらがってきました。
ゆっくり読ませていただきます。
0678黒死犬 ◆EgxBlf8nvc NGNG
*パターンのフォーマット
[
[アルファベット,要素,要素]...]

# パターンのハッシュ化
my %pattern = ();
for(@pattern) {
 push(@{$pattern{$_->[0]}}, $_->[1], $_->[2]);
}

# ツリー作成
my $root = makeTree('a', 10); # a についての深さ10のツリーを生成

sub makeTree {
 my ($alpha, $depth) = @_;
 my $node = new Node($alpha);
 for(@{$pattern{$alpha}}) {
  $node->{_left} = makeTree($_->[0], $depth - 1);
  $node->{_right} = makeTree($_->[1], $depth - 1);
 }
 return $node;
}

package Node; # 簡単に作れると思うので、割合します

こんか感じでしょうか?試してないので分からないですが。。。
実装するなら、検索にハッシュは使わないほうがいいですね
0679黒死犬 ◆EgxBlf8nvc NGNG
あ、上のコード、$depth をチェックするの忘れてました
注意して下さい
0680デフォルトの名無しさんNGNG
さらしあげ
0681679NGNG
sub makeTree {
 my ($alpha, $depth) = @_;
 my $node = new Node($alpha);
 if(0 < $depth) {
  for(@{$pattern{$alpha}}) {
   push(@{$node->{left}, makeTree($_->[0], $depth - 1));
   push(@{$node->{right}, makeTree($_->[1], $depth - 1));
  }
 }
 return $node;
}

早くお風呂入りたかったのでちゃんと考えないで投稿してました、すみません
0682648NGNG
すいません、まだ出来ていないのですが、今実際のデータでツリーの数がどのくらいか
計算してみた所、4階層目ですでに1000を超えるような状況になってしまい、
1つの検索を終える為には数百万行ほど、組み合わせリストと照らしあわさなければ
ならないようです。これでは実用が難しそうなので、ちょっと考えてみます。
あとお腹が痛いのでそろそろ寝ます。教えてくださった方、本当に有難うございます。
0683デフォルトの名無しさんNGNG
二つのファイルを扱うときの質問です。
A
B
C
D
E
F
G
と一つ目のファイルがあって、
A
B
D
E
ともう一つのファイルがあったときに、
上のファイルの文字の中で、下のファイルにも
存在するものを出力する。
(この場合は)
A
B
D
E
のように出力できるようにするにはどんなプログラムを書けばいいのでしょうか?


0684683NGNG
すみません。質問が変でした。さっきの質問の訂正です。
二つのファイルを扱うときの質問です。
A 1
B 3
C 1
D 3
E 4
F 6
G 1
と一つ目のファイルがあって、
A
B
D
E
ともう一つのファイルがあったときに、
上のファイルのアルファベットの中で、下のファイルにも同じアルファベ
ットが存在するものの行の内容をすべて出力する。
(この場合は)
A 1
B 3
D 3
E 4
のように出力できるようにするにはどんなプログラムを書けばいいのでしょうか?
0685683NGNG
また、毎回わからなくて困ることがあるので、これも教えていただ
けるとうれしいです。
さっきの(699)は言ってみれば二つ目のファイルを参照して、一つ目のファイル
にもあるものを出力するものですが、

もう一つ聞きたいのが、二つのファイルに共通のものを出力するというものです。
例えば一つ目のファイルが
1 
2
4
で、二つ目のファイルが、
2
3
6
4
だったら
2
4
と出力できるようなプログラムはどうやって書いたらよいのでしょうか。

0686デフォルトの名無しさんNGNG
open(FILE, "$baka.txt") or die "$!\n";
@baka=<FILE>;
close FILE;
while(<>){
if (grep(/^$_ /, @baka) { # >>684
# if (grep(/^$_$/, @baka) { # >>685
print $_;
}
}
0687デフォルトの名無しさんNGNG
もう、この手の宿題には答えるのやめようぜ
0688デフォルトの名無しさんNGNG
systemでcomm呼ぶのが楽そうだと思った
0689683NGNG
>686
ありがとうございました。でも、これですと、
if (grep(/^$_ /, @baka)){
のところのif文が働いてくれず、
A 1
B 3
C 1
D 3
E 4
F 6
G 1
と出力されます。どうしたらよいのでしょうか?
0690デフォルトの名無しさんNGNG
じゃ、それに応じて正規表現変えたらーぁ。
/^$_/
0691683NGNG
if(grep(/^$_ /, @baka))
というのは、
A 1
B 3
C 1
D 3
E 4
F 6
G 1
の先頭が、@bakaの中身と同じだったらということですよね。このままで
いい気がするのですが、どう変えたらよろしいのでしょうか。
0692683NGNG
たびたびすみません。
プログラムの意味を間違えて理解していました。
if(grep(/^$_ /, @baka))
というのは、
A 1
B 3
C 1
D 3
E 4
F 6
G 1
という配列@bakaに対して、$_の先頭と同じだったらということですよね。
こう考えて実行しても、まだ、
A
B
D
E
と出力されてしまい、数字がでません。どこを直したらいいのでしょうか?
0693デフォルトの名無しさんNGNG
>>692

$ptn =join(/\n/,<>);# 対象英字のファイルを入力

while ( <> ){ # 数字付きのデータを入力
print if( /^[$ptn]/ );
}
0694686NGNG
>>693さんのでいいと思いますが、>>686のが
>>692のようになってしまうわけは、
grep EXPR, LIST
として実行した場合、grep は LIST の値を一つづつ $_ に代入して
EXPR を評価しているからのようです。したがって、変数に代入して
からやればいいわけです。
open(FILE, "$baka.txt") or die "$!\n";
@baka=<FILE>;
close FILE;
while(<>){
$exp = $_;
if (@match = grep(/^$exp /, @baka) { # >>684
# if (@match = grep(/^$exp$/, @baka) { # >>685
print $match;
}
}


0695686NGNG
申し訳ない。やってみたら、タイプミスが2つありますた。
open(FILE, "baka.txt") or die "$!\n";
@baka=<FILE>;
close FILE;
while(<>){
($exp = $_) =~ s/\r?\n//; # それとこれも必要。windowsの場合。
if (@match = grep(/^$exp /, @baka)) { # >>684
# if (@match = grep(/^$exp$/, @baka)) { # >>685
print @match;
}
}
0696683NGNG
>>693
ありがとうございました!
しかもとても簡潔でわかりやすいプログラムで感動しました!
0697683NGNG
>>695
わざわざ詳しく調べていただいてすみませんでした。
ありがとうございます。
私もgrepについて調べて、自分なりに直してみたのですが、
($exp = $_) =~ s/\r?\n//;の部分が足りなかったみたいです。
これはchompとはちがうのでしょうか?
また、\r?はどういう意味ですか?
調べたら、\rはリターンで、?は前にある文字の0,1回の表現とでてきたのですが...

0698686NGNG
windows(MS-DOS)の改行は、\r\nでしょ。
unixは、\n、Macは\r。だから、winodwsとunixのに対応してるわけ。
chompは、windowsの場合はだめなんすね。2個文字があるから。
0699デフォルトの名無しさんNGNG
>>698
ただし、テキストモードで開いてる時点で
文字コードの違いは吸収されているわけだから、
\r?は保険同様ですな・・・時々改行コードの変換に失敗したのか
\r\r\nになってるやつがあるから反対はしないけど。
この場合 s/[\r\n]//g; のほうがいいんじゃないかとも思う。
0700デフォルトの名無しさんNGNG
>>698
えーっと、ファイルからの入力ならテキストモードで読めば
勝手に\nになってるよ。
0701686NGNG
>>698, >>699
環境にもよるじゃない。漏れは、
cygwin+perl, v5.8.5 built for cygwin-thread-multi-64int
だけん、shift-jisのファイル読み込むと、s/\r\n//;しないと
うまくいかんです。
0702デフォルトの名無しさんNGNG
>>701
そういう特殊な環境を基準に初心者に話を進めるのは如何なものかと子一時間(ry
ちなみにクロスプラットフォームで開発することが多い自分はbinmodeしておいて、
s/\r+\n/\n/g; s/\r/\n/g;やs/[\r\n]+$//;にするのが基本になってる。
中途半端に処理するよりはこういう風にやったほうがいいのでは?
0703デフォルトの名無しさんNGNG
Perl6ってもう出ました?
0704デフォルトの名無しさんNGNG
まずググることくらいおぼえろや.ちなみに出てねえよ.
0705デフォルトの名無しさんNGNG
いえ、ググってはみたんですが、いまいちわからなくて・・・。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=10&topic=10035
とかHitしたし・・・。
Parrotって何?状態です。あ、これは調べます。
0706デフォルトの名無しさんNGNG
>>697-702
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
0707デフォルトの名無しさんNGNG
ある処理の反応が悪いので、forkして処理させたところ、
perl in free(): warning: modified (chunk-) pointer
というメッセージが出るようになりました。
これはプログラムがヒープを破壊した、という意味なんでしょうか?
0708デフォルトの名無しさんNGNG
5.2
5.3
6.2
10.4
0.2
5.6

というデータが書かれたファイルを読み込んで、偶数行の数値とその上の行(奇数行)の数値の
差を求める処理はどうすればいいでしょうか?


[実行結果]
0.1
4.2
5.4

という出力を得たいのです。
0709708NGNG
>>708の続き

print "読み込むファイル名を入力してください\n";
chomp (my $file_read = <STDIN>);
open READ, "<$file_read" or die $!;

print "\n書き込み先のファイルを指定してください\n";
chomp (my $file_write = <STDIN>);
open WRITE, ">>$file_write";

while($line = <READ>)
 {
 ???? (ここで処理を行いたいのです)
 }


過去ログ見たところ、>>617の質問と似てますね…。
0710デフォルトの名無しさんNGNG
abs($line - <DATA>)
0711デフォルトの名無しさんNGNG
<READ>か
0712デフォルトの名無しさんNGNG
仕事でPerlを使うことになったんだが、Perlっていまだに日本語まともに使えないのね。
Unixで動くんだが、デフォルトのコードセットがSJISで、改行コードがLF。しかもスクリプトは
SJISで書けだと。
0713デフォルトの名無しさんNGNG
>>712
お前さんは、perlで日本語もまともに使えないのか?

SJISで書けつーのがようわからんが。
0714デフォルトの名無しさんNGNG
そんな厨には、jperlかperl5.8をお勧めする。
perl5.8は、Encode.pm組み込めば、jperl相当のことができる。
0715デフォルトの名無しさんNGNG
>>706
それも怪しいなあ、どの道中間コードにするときに展開されるから速さも変らんぞ
0716デフォルトの名無しさんNGNG
>>714
「まともに」は語弊があったかな。SJISだと「機」とか「表」の問題ね。
これがいやでRubyに逃避してたんだが、いちいちEUCに変換するのめんどいのよ。
0717デフォルトの名無しさんNGNG
>>716
UNIXやめてWindowsに
0718デフォルトの名無しさんNGNG
イヤ、別に普通に使えるけど?>「機」とか「表」
0719デフォルトの名無しさんNGNG
>>718
できね。
use encoding "shift-jis";
while(<DATA>) {
print if /機/;
print if /表/;
}
_END_
機会
表現

0720デフォルトの名無しさんNGNG
まあSJISで書けと限定されるような仕事は辞退するべきだろうな
0721デフォルトの名無しさんNGNG
ゴメソ。>>719はでけた。__END__だた。
ただ、別ファイルから読み込むとだめなんですが、どうしたらよいでつか?
0722デフォルトの名無しさんNGNG
>>721
use encoding 'shift-jis'だけだと、プログラム自体と
STDIN/STDOUTはshift-jisになるが、自分で開いたファイル
まで自動的にshift-jisだと思ってくれるわけではない。

明示的にopenするときに指定してやるか、use openで
デフォルトを変えておけばok。
0723デフォルトの名無しさんNGNG
>>722
ありがとん。
use encoding "shiftjis";
use open ':encoding(shift-jis)';
で行けますた。shiftjisでもshift-jisでもいいんですねぇ。
""でも''でもいい。イイー
0724デフォルトの名無しさんNGNG
shiftjisでもshift-jisでもいいが、習慣としてはshift_jisにしとけ。
他の方法・他の言語を使うときにはまらないようにな。
0725デフォルトの名無しさんNGNG
つい数ヶ月前からperlを学んでいる初心者です。
先ほど、perlベースのプログラムを実行したところエラーが表示されたので
関連した項目を検索していたら下記の文献を見つけたのですが、環境変数の
設定とかを理解できていないので動かない状態です。マイコンピュータ→プロパティ→詳細→環境変数→××のユーザ環境変数→
TMP(編集)。。このあたりをいじればと思っているのですが。。
どなたか教えて頂ければ幸いです。因みにOSはWin2000です。


dfa.pl 内部で起動している dfa が
テンポラリフォルダへアクセスできないようです。
環境変数 TMP で適当な書き込み可能なディレクトリを指定してください。
0726デフォルトの名無しさんNGNG
ActivePerl 5.8 と Windows で Perl 環境を作っています。
SSL 接続に対応したいので検索したところ、Net::SSLeay という
モジュールを入れればよいとのことだったのですが、ActivePerl 5.8 は
非対応でした。
そこで、Crypt::SSLeay というのがあることを知り、ソースからビルドを
試みたのですが、うまくいきません。

.ppm パッケージからもインストールできるようですが、ネット接続の
関係上、ローカルにバイナリのパッケージ一式があり、そこから
ネット接続ナシでインストールできるのがベストです。

何かご存知の方、いらっしゃいませんでしょうか。
0727デフォルトの名無しさんNGNG
>>725
TMP="c:\TMP" # 空いてる既にあるディレクトリ
>>726
perllibに置くだけでいいんちゃう。
0728デフォルトの名無しさんNGNG
>>726
> ActivePerl 5.8 と Windows で Perl 環境を作っています。
> SSL 接続に対応したいので検索したところ、Net::SSLeay という
> モジュールを入れればよいとのことだったのですが、ActivePerl 5.8 は
> 非対応でした。
> そこで、Crypt::SSLeay というのがあることを知り、ソースからビルドを
> 試みたのですが、うまくいきません。

そいつは残念だったね、おれはうまくいったよ。

> .ppm パッケージからもインストールできるようですが、ネット接続の
> 関係上、ローカルにバイナリのパッケージ一式があり、そこから
> ネット接続ナシでインストールできるのがベストです。
> 何かご存知の方、いらっしゃいませんでしょうか。

ppm パッケージからもインストールできるようですが
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
そこまで分かってるなら、そこからパッケージを盗って来ればいいじゃん。


自分のとこでネットに関係なく閉じたいなら、てめぇのとこでコンパイルするこった
10回や100回失敗したくらいで見ず知らずの他人様に泣きつくなってこった
0729デフォルトの名無しさんNGNG
>>728
必要なファイルを適当なディレクトリに置けばネットワークなくても
ppmのインスコできるよ。この辺参考にドゾー。

ttp://www.ss.iij4u.or.jp/~somali/web/_ppm.html
0730デフォルトの名無しさんNGNG
>>729
コメントする相手を間違えてるんじゃないの?
0731デフォルトの名無しさんNGNG
Perl 5.8.4でSJISにない文字(ハートマークとか)を名前に含むファイルを
開くにはどうしたらいいのでしょうか?
${^WIDE_SYSTEM_CALLS}は廃止されてしまったようです。
0732726NGNG
>>729

ありがとう。たいへん参考になった。
0733デフォルトの名無しさんNGNG
アクロバットなコードを書いて!
ただ奇抜なだけのもいいけど、これは凄いと唸らせるようなものも歓迎!
0734デフォルトの名無しさんNGNG
Perl はつまらん
0735デフォルトの名無しさんNGNG
>>733

print "ぬるぽ";
0736デフォルトの名無しさんNGNG
>>726
別途OpenSSLとかが必要になるはずですけど
そっちのほうはOKなのでしょうか?
0737デフォルトの名無しさんNGNG
ファイル処理で、ファイルハンドルから読み込んだ行数を表す変数で『$.』がありますよね。
これを利用してファイルの〜行目の数値から〜行目の数値を足す、というようなことはできますか?
例えば、

4
5
91
84

というファイルに対して、2行目の数値(5)と4行目の数値(84)を足したい、と思ったとき、
あくまでも例えとしての表記で、

$a は $.=2の行の数値;
$b は $.=4の行の数値;
$answer = $a + $b;

というようなニュアンスのことをしたいのですが。
0738デフォルトの名無しさんNGNG
>>707
>perl in free(): warning: modified (chunk-) pointer

"in free(): warning: modified (chunk-) pointer" でググると分かると思うけど
rubyやらphythonやらdhcpやらbindやらcvs他他でもでるメッセージのようなので
glibcかなんかのバグじゃないのかな? あるいはメモリがイカレてるとか。
0739デフォルトの名無しさんNGNG
モジュールが使いこなせたらと思っているのですが、
どのモジュールがどんな使い方ができるのか、を全体的に知る方法はないでしょうか。
何かをするときにわざわざ調べるんじゃなくて、知っておきたいのですが。
0740デフォルトの名無しさんNGNG
>>733
PDFですか?
0741デフォルトの名無しさんNGNG
>>737
・予めすべての行のデータを格納しておく
・予めすべての行のファイルポインタを格納しておく
・特定行の数値を取り出すサブルーチンを書く
どれでもいいよ
0742デフォルトの名無しさんNGNG
>>739
ttp://www.cpan.org/modules/00modlist.long.html
をざっとorじっくり眺めれ。
0743デフォルトの名無しさんNGNG
日本語がいいんですがどこかありませんか。
0744デフォルトの名無しさんNGNG
>>743
英語くらい多少は読めた方がいいよ。

日本語ならここ。
ttp://perldoc.jp/docs/modules/
ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

0745デフォルトの名無しさんNGNG
>>737
おれ初心者だけどこんなんダメかな?

#! /usr/bin/perl -w
use strict;
my ($aa, $bb, $sum);

while(<>){
if($. == 2){
$aa = $_;
}
if($. == 4){
$bb = $_;
}
}
$sum = $aa + $bb;
print "$sum\n";
0746デフォルトの名無しさんNGNG
だれか助けて〜orz
沢山あるJPGデータをWebで一気に表示するというスクリプトをDLしてきたのだけど
表示されないの〜っ
.plをダブルクリックするとHTMLファイルが作成されて、同デレクトリ内のを表示する、はず
HTMLができるとこまではいけてます。
人さまからコピッてきたスクリプトをここでさらしてよいものかわかんない
0747737NGNG
>>741
ありがとうございます。
�@の用に配列に全行の数値を入れて配列番号を指定することで実現できました。

>>745
そんなやり方もあるんですね。
そちらでもやってみようと思います。
ありがとうございます。
0748デフォルトの名無しさんNGNG
>>746
晒せないならここに来た意味が無いと思うが?
というか、自分で(作る|改造する)ので無ければ、
スレ違いどころか板違いな気もするが
0749デフォルトの名無しさんNGNG
>>746
Webで表示なら板違い。
WebProg板へ
0750746NGNG
解決しました!
コピッた時に欠行してただけみたいですorz

webで表示する部分ではなくて、数あるjegファイルを表示するのに
「デレクトリからリストを抜き出す」(かかれてた#)の指示が違ってるのかなと
思ったですよ

おじゃましました
0751デフォルトの名無しさんNGNG
Expect.pmについての質問はここでしていいですか?
0752デフォルトの名無しさんNGNG
>>751
とりあえず、ここに質問書け。

誘導は、それからだ。
0753デフォルトの名無しさんNGNG
あ、じゃあちょっと待ってください!
いま急いで仕上げますんで!
やった!
0754デフォルトの名無しさんNGNG
#!/usr/bin/perl
use Expect;
@host = ("www.mona.com", "www.giko.com");
$user = "onigiri";
$pass = "neko";
$mail = "2ch\@test.com";
for (@host) {
chomp;
$host = $_;
$exp = new Expect;
$exp->spawn("ssh $user\@$host\n");
$exp->expect(300,
[qr/\(yes\/no\)/ => sub { $self= shift;
$self->send("yes\n");
exp_continue }],
[qr/password:/i => sub { $self = shift;
$self->send("$pass\n");
exp_continue }],
'$'
);
0755デフォルトの名無しさんNGNG
<続き>

#メール送信
$exp->send("mail $mail\n");
$exp->expect(1,
[ qr/subject:/i => sub { $self = shift;
$self->send("test\n$host\n.\n");
exp_continue; } ],
[ qr// => sub { $self = shift;
$self->send("$host\n.\n");
exp_continue; } ],
[ qr/cc:/i => sub { $self = shift;
$self->send("\n");
exp_continue; } ],
'$ '
);
#ここまで
$exp->send("exit\n");
$exp->expect(300,'$');
}
0756デフォルトの名無しさんNGNG
一投稿では投稿しきれないので二つに分けました。
複数のマシンにSSHでログインし、メールを送信するスクリプトです。

以上のようなスクリプトだとメールを送信してくれるのは最初のwww.mona.comだけで、
しかも画面上は、一つめのサーバでメールを送信してexitせず、留まってしまってしまっているようです。
「メール送信」から「ここまで」を削ると両方のサーバにログインしてくれるのですが・・・
何が悪いのでしょう。
0757デフォルトの名無しさんNGNG
multipart/form-dataなデータをファイルの部分とそうで無い部分を
分けて処理したいのですがいい方法は無いでしょうか?

&file_igai_encode(\%form);
exit if $frm{flag};
while (read STDIN, $buffer, 4096) {*ファイル処理}
みたいにフォームの要素の値によってファイル処理を行うか否かをしたいと思っております。
STDINをseek出来れば解決なのですがそれは出来ないようです。
ですのでSTDINをreadlineで「filename="」が出現するまで回して出現したら
それまで読み込んだデータから判別し、OKだったらファイル処理を行う
というようなコードを作ったのですが、例えばSTDINにflagというレコードより
前に「filename="」が出現してしまったらどうしようって事に気づいてしまいました。
何度も検証した結果、STDINに入る順序は一定であるがnameのアルファベット、
サイズ順でもないし法則性が見出せませんでした。

そこで大変不躾な質問だとは存じておりますが
・multipart/form-dataのレコード順序の法則性 (ブラウザ依存っぽい?)
・こういった処理のベターな方法
の二点をご教授頂ければ焼き肉食べに行きます。
0758757NGNG
ふと頭を冷やしてみると
<form action="hoge.cgi?flag=1" method="POST" enctype="multipart/form-data">
というように$ENV{QUERY_STRING}を使うとか$ENV{PATH_INFO}を使うという手もありますね。
0759デフォルトの名無しさんNGNG
と思ったけどflagの値が固定かjavascript使わないと意味無いやorz
0760デフォルトの名無しさんNGNG
ものすごく読む気がしない。
0761デフォルトの名無しさんNGNG
>>757
なんかわからんけど、CGIモジュール使って
あとはオマカセでいいんでねーの? 勉強か
宿題でどうしても自分でスクラッチから書く
のが条件ならしょうがないが。
0762デフォルトの名無しさんNGNG
>>754
>$exp->spawn("ssh $user\@$host\n");

expect使ったことないからわかんないけど
同じ$expで複数回spawnしても、そのインスタンスを何かの変数で受けとかないと
最後にspawnしたコマンドへのメッセージ送信になるんじゃないの?
$exp[n] = new Expect; を接続の数だけやった方がいいんじゃないかな。効率悪いのかもしれんが。
間違ってたらスマン。
0763デフォルトの名無しさんNGNG
なんか new Expect は $obj->spawn(...)と同じ意味らしいね。
だから接続を保存するのは spawnした時点でいいかも。
0764デフォルトの名無しさんNGNG
>>762
>>763
ありがとうございます!
えーっと?
ということは、new Expectは最初に$exp = new Expecとして一回だけ宣言するだけでよく、
あとは$exp[n] = spawn(...)を必要な数だけ作っておいて
それを後で個別に$exp[n]->expect(...)以下の文だけをつなげていくということですか?

今はちょっと試すことが出来ないので、とりあえず確認だけ。
0765デフォルトの名無しさんNGNG
>>756
mona.com, giko.com, test.com の管理者にはひとこと入れたんだろうな?

# 予約ドメインの example.com, example.co.jp, example.jp, ... を使えと何度(ry
0766デフォルトの名無しさんNGNG
>757
$ENV{'CONTENT_TYPE'}
0767デフォルトの名無しさんNGNG
multipart/form-data なんて思いっきりアプロダじゃん
テキトーに拾ってきて読んでみれば
0768757NGNG
一度全部STDINを読み込んでから処理すればいいのですがメモリの消費を抑えたいのです。
また、ストリームなのでseekで移動は出来ません。
非filename属性のデータは$FORM{***}につっこみfilename属性のデータは取りあえずどこかのディレクトリ
に書き込んでおくという方法もありますが非filename属性のデータ部分で書き込むファイルのディレクトリ
を判断&setuidするプログラムなのでファイル作成時には既にsetuidされている状態が望ましいのです。
後でchownすればいいのですが処理的に気持ち悪いしスマートな方法は無いかなと思いまして。
該当しそうなテキトーなスクリプトを参考に見てみた感じでは
imgboard.cgi→STDIN全部取得型
CGI.pm→テンポラリディレクトリに書き込み
のような感じで自分の求めている処理ではありませんでした。
処理的に困難であるかとは思ったのですがこの広い世の中誰か実現している人もいるかなと思って投稿した次第です。
0769デフォルトの名無しさんNGNG
>>768
そういうストリーミングファイル受信に対応しているPerl製CGIを読んだことがあったな・・・
ウェブ管理ツールか何かだった気がするけど・・・
ちょっとハードディスクの中引っ掻き回してくる
0770デフォルトの名無しさんNGNG
>>768
テンポラリに置いといてあとでchown/chmod/renameで別に
構わんと思うのだが、何が気持ち悪いのだろうか。その
感覚を何とかした方が、無駄な努力をしなくて済みそうな
気がする(笑)
0771デフォルトの名無しさんNGNG
>>764
>それを後で個別に$exp[n]->expect(...)以下の文だけをつなげていくということですか?
たぶん。試してないけど。。
同一のexpectする内容を何回も書くの嫌だったら、書く場所一つにして同じリファレンス渡してもいいし。
両サイトの反応比較して動作を変えたいとかだと、一工夫必要かもしれないけれどね。
あと$expと@exp(= $exp[n])は違う変数としてレスに書いたから注意してください。
0772デフォルトの名無しさんNGNG
>>768
MIME::* 系のモジュールをuseするんじゃだめなのかなぁ? (MIME::Decodeとか)
少なくともMultiPartには対応しているよ。なんかよくわからないけどね。
0773デフォルトの名無しさんNGNG
>>768
クッキー使え
0774デフォルトの名無しさんNGNG
>>751=>>753=>>754=>>755=>>756です。
帰宅して早速スクリプトを作ってみました。
結論からいうとうまくいきませんでした。

今まで教えて貰ったことをスクリプトにすると下のようになると思うのですが・・・。

このスクリプトでもやはり二つめのサーバには行かず
>>754->>755に投稿したものと同様、一つめのサーバでメールを出してそこで
止まってしまい、「メール送信」から「ここまで」を切り取ると、二つめのサーバ
までログインしてくれて、正常に終了してくれます。

実は$exp=Expectの直下の8行目のfor文で、教えられたことを忠実に処理させようと、
++$iで加算したものを$exp[$i]->spawn(...)としようとすると、
can't call method "spawn" on undefined value...というようなエラー文が
出て終了してしまうので、
苦肉の策として上のようなスクリプトにしました。

何か良い手だてはありませんでしょうか?
0775デフォルトの名無しさんNGNG
#!/usr/bin/perl
use Expect;
@host = ("www.example.com", "www.example.co.jp");
$user = "mona";
$pass = "giko";
$mail = "test\@example.ne.jp";
$exp = Expect;
for (@host) { push (@exp, $exp->spawn("ssh $user\@$_\n")); }
for (@exp) {
$_->expect(300,
[qr/\(yes\/no\)/ => sub { $self= shift;
$self->send("yes\n"); exp_continue }],
[qr/password:/i => sub { $self = shift;
$self->send("$pass\n"); exp_continue }], '$');
######メール送信######
$_->send("mail $mail\n");
$_->expect(300,
[ qr/subject:/i => sub { $self = shift;
$self->send("TEST\ntest\n.\n");
exp_continue; } ],
[ qr// => sub { $self = shift;
$self->send("test\n.\n"); exp_continue; } ],
[ qr/cc:/i => sub { $self = shift;
$self->send("\n"); exp_continue; } ], '$ ');
######ここまで######
$_->send("exit\n");
$_->expect(300,'$');
$_->close(); }
0776デフォルトの名無しさんNGNG
Ruby以外の言語は糞
0777デフォルトの名無しさんNGNG
>>776
そういうこともRubyで書けやパゾ
0778デフォルトの名無しさんNGNG
>>775
つか、汚すぎて読む気しない
0779デフォルトの名無しさんNGNG
質問です。
$C/($A+$B)*1000
という計算式の文字列があるとして、これを実際に
計算させて値を得るにはどうしたらいいでしょか?
関数などがあるのでしょうか?
それとも自力で作るしかないですか?
0780デフォルトの名無しさんNGNG
eval
0781デフォルトの名無しさんNGNG
>780
ありがとうございます。できました。
0782757NGNG
>>769
もし見つかりましたら是非名前だけでもお教え下さいませ

>>770
確かにそうなんです。時々、どうせ使わないレシートをその場で捨てられない自分が嫌になります。
ですがファイルの作成を一時でも別のユーザーに作成してchown、renameでは
unixの各種制約を目的のユーザーに課すことが出来ないんですよね。例えばquotaとか。

>>772
今回はMIME系では解決出来なさそうです。情報ありがとうございます。

代替手段もいっぱいあるしおしっこをすると何故ブルブル震えるんだろう程度の
探求心からの質問でしたので今回はタンスの引き出しにしまっておくことにします。ありがとうございました。
0783707NGNG
>>738
サンクス。色々やってたらOS毎落ちたりするようなので、
メモリかもしれない。
0784769NGNG
>>782
一日遅れだけど発見。
ttp://hp.vector.co.jp/authors/VA032507/dsp/ja/webftpclient2.htm
lib/ftpcontrol_sub/putfileex.pl
あたりでやってます
0785757NGNG
>>784
誠にサンクス!!
日曜にでも試してみます
0786デフォルトの名無しさんNGNG
質問いいですか。
Linux man pagesの英語版日本語版のファイルがあって、
groff方式だから行頭に.SHとなっているのが見出しなので、
NAME
...
名前
...
SYNOPSIS
...
書式
...
みたいなかんじで原文、日本語訳交互に表示させるスクリプトを
でっちあげていたんですが、はまってしまいました。もう朝だし、、、。
よかったらダメなところを指摘してください。
0787デフォルトの名無しさんNGNG
#!/usr/bin/perl
$count = 0;
$flag = 0;
$jflag = 0;
open(IN,"jman2/acct.2") ||die;
@jline = <IN>;
close(IN);
open(IN,"man2/acct.2") ||die;
while($line = <IN>) {
if(($line =~ /^\.SH/) && ($flag == 0)) {$flag = 1;}
elsif(($line =~ /^\.SH/) && ($flag == 1)) {Jline();}
if($flag == 1) {print $line;}
}
close(IN);
exit(0);
sub Jline {
for(;;) {
if(($jline[$count] =~ /^\.SH/) && ($jflag == 0)) {$jflag = 1;}
elsif(($jline[$count] =~ /^\.SH/) && ($jflag == 1)) {last;}
if($jflag == 1) {print $jline[$count];}
$count++;
}
}
0788デフォルトの名無しさんNGNG
超初心者な質問です。

telnetモジュールを使用して、リモートコンピュータに接続してから、
・screen起動
・外部プログラム起動
・CTRL-A d で[detached]
という操作をperlで実行したいのです。

色々サイトを回って調べて、telnet接続まではできたのですが、
上記手順の「CTRL-A d で[detached]」で行き詰っております。
CTRL-Aという操作をperlのtelnetモジュールで行うには、
どういう記述をすればよいのでしょうか?

(将来的に、CGIとしてWeb公開したいので板違いかもしれません。)
0789788NGNG
板違いだったようです。。
申し訳ありませんでした。
0790デフォルトの名無しさんNGNG
このたび初めてperlを使うのですが、コマンドプロンプトを起動し、ppmと打つと

C:\Documents and Settings\自分の名前>ppm
Fatal error: couldn't find or create config file targets.cfg: Cannot chdir back
to C:/Documents and Settings/自分の名前: No such file or directory at C:/Perl/lib/
FindBin.pm line 182
BEGIN failed--compilation aborted at C:/Perl/lib/FindBin.pm line 188.
Compilation failed in require at C:/Perl/site/lib/PPM/Config.pm line 444.
BEGIN failed--compilation aborted at C:/Perl/site/lib/PPM/UI.pm line 1049.
Compilation failed in require at C:\Perl\bin\ppm3-bin line 16.

このような文章がでてきてしまい、インストールすることができませんでした。自分がインストールしようとしているのは
install time-hires
install io-zlib
install win32-api
install http-lite
install getopt-long
なのですが・・・
自分なりにサイトを見てまわりましたが、確信にたどり着けず困り果てています。
どなたかご教授をお願いします。

PCの環境
OS: Windows XP Home Edition
Perl: Active Perl 5.8.3.809
0791デフォルトの名無しさんNGNG
>>790
「自分の名前」が「加能圭介」だったりして(w
0792デフォルトの名無しさんNGNG
名前が曾我十郎だったりして(w
0793デフォルトの名無しさんNGNG
XMLモジュールをCPANでインストールしようとしたのですが、
最後に
Failed Test Status Wstat Total Fail Failed List of Failed
--------------------------------------------------------------------------------
t/01basic.t 2 512 2 2 100.00% 1-2
t/02load_xml.t 2 512 1 1 100.00% 1
t/03simple_compare.t 2 512 2 2 100.00% 1-2
t/04namespaces.t 2 512 4 4 100.00% 1-4
t/05simple_handler.t 2 512 1 1 100.00% 1
t/06pass_to_handler.t 2 512 1 1 100.00% 1
t/07pitest.t 2 512 3 3 100.00% 1-3
Failed 7/7 test scripts, 0.00% okay. 14/14 subtests failed, 0.00% okay.
make: *** [test_dynamic] エラー 2
/usr/bin/make test -- NOT OK
Running make install
make test had returned bad status, won't install without force
と出てエラーが出てしまいます。

 XML::XPathを使いたいのですが、どうしたらよいのかさっぱりです。
 アドバイスをお願いします。

OS:Vine 2.6-rc4
Perl: Version 5.6.1

 よろしくです。
0794デフォルトの名無しさんNGNG
>>793
1)perlを5.8にversion upしてもう一回コンパイルしてみる。
2)http://www.activestate.com/からLinux用のActivePerlをDLして
インストールしてからppmでインストール。

どちらか好きな方をどうぞ。
0795デフォルトの名無しさんNGNG
>>790
ユーザアカウントに自分の漢字名を使ってその中に、次の漢字の内の一つが入ってるんじゃないの?
―ソЫ�\噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭�x�x

そうだったら、ユーザアカウントに漢字名を使うの止めれ。骸骨人の作った他のソフトのインストールも
時も困ることになるぞ。
0796デフォルトの名無しさんNGNG
質問します
ファイル操作を行う、バッチシェルを作ろうとおもうのですが、いまさらシェルを勉強するのもあれなんで、
perlでもバッチ処理はできるのでしょうか?
0797デフォルトの名無しさんNGNG
すみません、質問です。
日本語(EUC)の絡んだ文字列の完全一致の比較(eq)でWindowsとLinuxで結果
が異なって困っています。
Windowsの方だとちゃんと判定してくれるのですが、Linuxでは合っていても
NGとしか返してこないんです。
確認すべきこと、解決策はありますか?

ちなみにそれぞれの環境は
・WindowsXP ActivePerl5.8.4
・Linux(Redhat9) ActivePerl5.8.0
です。

比較させようとしている文字列はそれぞれ異なる変数A,Bで、
A、Bともにファイルからオープンして配列に格納された要素です。
それぞれchompした後、比較してもLinuxでは無理でした。
Linuxマシンへの転送もテキストモードで送ってます。
(一応、全ての組み合わせ※で試しました)
※アスキー、バイナリ、EUC、JIS、無変換
0798デフォルトの名無しさんNGNG
Linuxのほうで双方の文字列をバイナリダンプしてみれ
0799デフォルトの名無しさんNGNG
>>791>>792>>795

ユーザー名変更したら解決しました。有り難う御座いました。
ユーザー名には某PCメーカーの『ソ』が含まれておりました……。
0800デフォルトの名無しさんNGNG
>>799
専有マシンならdisk直下においといたほうがいい。
またいつか、似たような問題でトラブるよ。
0801デフォルトの名無しさんNGNG
>>800
ハァ?問題の本質が分かってないんじゃない?
0802デフォルトの名無しさんNGNG
>>801
あんたもそのうちトラブるかもね(w
ばかげた「解決法」をweb上でわんさか見かけるんでレスしたまでのこと。
MSから入った初心者はたいがいひっかかる。
0803デフォルトの名無しさんNGNG
>>796
それが分からない君は、シェルを今からでも勉強した方がいいと思うぞ
0804デフォルトの名無しさんNGNG
>>803

どうも、シェルは現役時代数百本作ったことがあります。。
でも、今はすっかり忘れてしまって。。むしろperlの方ができるかな
0805デフォルトの名無しさんNGNG
>>802
何をノタマッテいるんだか?
単純に漢字の第2バイトの問題だろ。20年以上前からMSが放置してる問題だよ。
0806デフォルトの名無しさんNGNG
s/シェル/シェルスクリプト/g
当然できます。
0807デフォルトの名無しさんNGNG
>>804
シェルを数百本も作ったんですか。
0808デフォルトの名無しさんNGNG
>>793

$LANG=C cpan

とかしてみたら?
makeのエラーが日本語で出てるのがあやしい気がする。
0809デフォルトの名無しさんNGNG
>>794
1)の方法はPerl 5.8が入っているマシンで試しましたが同じ結果でした。
2)はサーバーのPerlを変える事になるので、他のスクリプトで予期せぬエラーが
出るかもしれないので躊躇っています。
自作のコードばかりなので修正が必要なときは全部自前なのがつらいです。(´∀`;)
アドバイスありがとうございました。

>>808
試してみます。
アドバイスをありがとうございました。
0810でこりんNGNG
だれか教えていただけないでしょうか?
2進数のバイナリを10進数にしたいのですが
$recode = unpack("C*",$bin) ←これの"C*"とか”N*”ってどうゆう意味
なんですか?
0811デフォルトの名無しさんNGNG
perldoc -f pack
0812デフォルトの名無しさんNGNG
スマートな方法あったら教えてください
変数がオブジェクトか否かを調べたいのですがref($var)の結果がHASHでもARRAYでもSCALARでもREFでもGLOBでもないということから判断する以外に方法はありますか?
0813デフォルトの名無しさんNGNG
>>810
ttp://www.rfs.jp/sitebuilder/perl/05/func/pack.html
0814デフォルトの名無しさんNGNG
>>812
 >参照が bless されたオブジェクトかどうかを判断するには、
 >次のように書くことができる。
 >print "It's an object\n" if UNIVERSAL::isa($val, 'UNIVERSAL');

http://www.google.co.jp/search?q=cache:jrE4b0pFGsYJ:www.janit.com/TechnoInf/Perl/Perl_OOP/perlobj.html+perl+%E5%A4%89%E6%95%B0+%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%8B&hl=ja&lr=lang_ja&ie=UTF-8&inlang=ja

0815デフォルトの名無しさんNGNG
>>812
Scalar::Util(5.8より標準)のblessedが正にその用途。

ない・インストールできない場合はこれで

sub UNIVERSAL::__object_class__{ ref($_[0]) }

sub blessed{
local($@);
length(ref($_[0])) ? eval{ $_[0]->__object_class__ } : undef;
}
0816デフォルトの名無しさんNGNG
>>775
遅レス。Expect調べてみたところ
$_->expect(300,
  [ qr/subject:/i => sub{...} ],
  [ qr// => sub {...} ],
  ...
この手の書き方は、[]の中のパターンを順番にマッチさせていく、という制御というよりは、
パターンにマッチする文字列がどこかで発生したらsub{}を実行するというような、
イベントハンドラ的な書き方みたいだよ。
それから qr//で多分スクリプトがストールしているような気がするのだが、いかがか?
0817デフォルトの名無しさんNGNG
>>816
ありがとうございます。
読みました。読みましたよ!

>>816さんが仰ってるのはメールを送信する部分ですよね。

それではメールの本文の、何も目印がないものにはどのようにマッチさせればよいのでしょう?
[sample@localhost sample] $ mail test@localhost
Cc: sample@localhost
とした後の本文の何も書いていない部分にマッチさせるのです。
qr/^/とすればよいのかな?

この部分に限らず、全体的な構成を見直すべく、-iオプションを付けてみたり
色々な方法を試しています。

遅レスでも構いません。何かご助言頂けるなら喜んで受けます!
0818デフォルトの名無しさんNGNG
間違えました
[sample@localhost sample] $ mail test@localhost
Subject: test mail

でした。
0819デフォルトの名無しさんNGNG
>>814-815
ありがとうございました
0820797NGNG
797です

>>798
回答ありがとうございます。
しかし、Perlでバイナリダンプの仕方がわかりませんでした。

調べたところ、CSVファイルから読み込んでカンマでsplitして配列と
してその要素の比較を行ったのですが、chompをしても行末の改行が
うまく削除されず(?)、一致しないようでした。
事象は以下のとおりです。

あるファイルaaa.csv(中身は"A,A"で改行あり)とし、
openしてカンマでsplitし、配列@aaaに格納したとします。
すると$aaa[0]=A、$aaa[1]=A となりますよね。
で、lengthをとってみると、$aaa[0]は1で、$aaa[1]は3なんです。
Windows環境で実行するとaaa[1]は2なんですが。

Linuxで$aaa[1]をchompしても、lengthは2となります。
さらに、$aaa[1]をchopすると、ようやくlengthは1となり、
条件式($aaa[0] eq $aaa[1])にもマッチしてくれます。
ちなみにaaa[1]を最初にchopするとlengthは2となり、次にchompをしても
lengthは2のままでした。
aaa[1]には改行のほかにもなにか文字が含まれているということなのでしょうか?
こういう事象ってLinuxでは正常ですか?
つまり、Windowsから転送されてきたファイルの改行を削除するにはchopしてchompする
必要があるのか?ということです。
ちなみにファイルはFFFTPでアスキー・EUCで転送したものです。

長い上に文章力がなく申し訳ないのですが、誰か答えていただけますでしょうか。
0821デフォルトの名無しさんNGNG
>>820
http://www.rsch.tuis.ac.jp/~mizutani/online/with-pc/textline.html
ここら辺でも、参考にして下さい。
0822797NGNG
>>821
ありがとうございます。
勉強してきます。
0823797NGNG
>>821
早速解決しました。ほんとにありがとうございます。
0824デフォルトの名無しさんNGNG
perlでもバッチ処理はできるのでしょうか?
0825でこりんNGNG
>>813
ありがとうございますm(__)m
0826デフォルトの名無しさんNGNG
>>824
perlはバッチ処理のための言語です
0827デフォルトの名無しさんNGNG
>>826

うそこけ
0828デフォルトの名無しさんNGNG
Perl>>>>>>>>>>>>Java
0829デフォルトの名無しさんNGNG
.pl>>>>>>>>>>>>>>.bat
0830デフォルトの名無しさんNGNG
Perl>>>>>>>>>>>>>>>>>英語
0831デフォルトの名無しさんNGNG
ドイツ語, フランス語
0832デフォルトの名無しさんNGNG
Perlのようなもの
0833デフォルトの名無しさんNGNG
のようなもの
0834デフォルトの名無しさんNGNG
>>754
会社でデスマ中で返事遅れました。すんまへん。
今までの流れを愚直に書けばこんなかんじになります。
空行待ちは "\n"はOKみたい。

#!/path/to/perl

use Expect;
use strict;
use warnings;

my @hosts = qw(example.com example.jp);
my $user = 'osushi';
my $pass = 'naisho';
my $mail = '[email protected]';

my @exp;
for (my $i = 0; $i <= $#hosts; $i++) {
  $exp[$i] = Expect->spawn("telnet $hosts[$i]");
}

for (my $i = 0; $i <= $#hosts; $i++) {
  $exp[$i]->expect(10, -re, qr/login:/i) ;$exp[$i]->send("$user\n");
  $exp[$i]->expect(10, -re, qr/password:/i) ;$exp[$i]->send("$pass\n");
  $exp[$i]->expect(10, '$') ;$exp[$i]->send("mail $mail\n");
  $exp[$i]->expect(10, -re, qr/subject:/i) ;$exp[$i]->send("TEST\n");
  $exp[$i]->expect(10, "\n") ;$exp[$i]->send("test mail from $hosts[$i]\n");
  $exp[$i]->expect(10, "\n") ;$exp[$i]->send(".\n");
  $exp[$i]->expect(10, -re, qr/Cc:/i) ;$exp[$i]->send("\n");
  $exp[$i]->expect(10, '$') ;$exp[$i]->send("exit\n");
  $exp[$i]->close();
}
0835デフォルトの名無しさんNGNG
別に同時ログインする必要はないので
コマンド部を分離して整理すると下の感じ。
my @sequences = (
  { expect => qr/login:/i , send => "$user\n" },
  { expect => qr/password:/i, send => "$pass\n" },
  { expect => qr/\$/ , send => "mail $mail\n"},
  { expect => qr/subject:/i , send => "TEST\n" },
  { expect => qr/\n/ , send => "test\n" },
  { expect => qr/\n/ , send => ".\n" },
  { expect => qr/Cc:/i , send => "\n" },
  { expect => qr/\$/ , send => "exit\n" },
);

for my $host (@hosts) {
  my $exp = Expect->spawn("telnet $host");
  $exp->expect($timeout, [ $_->{expect},
          sub{shift->send($_->{send})} ]) for (@sequences);
  $exp->close();
}
0836835NGNG
ありゃ、空白詰められちまった。
それからtelnetじゃなくてssshだったっけ?
まぁ一緒だよね。
0837デフォルトの名無しさんNGNG
perlはパッチを作った人の言語です
0838デフォルトの名無しさんNGNG
expectスレでやれよ
0839デフォルトの名無しさんNGNG
>>838
あんの?そんなの
0840デフォルトの名無しさんNGNG
http://piza.2ch.net/tech/kako/993/993573920.html
0841デフォルトの名無しさんNGNG
あるんだ!すげー
(...化石ぢゃん)
0842デフォルトの名無しさんNGNG
http://piza.2ch.net/tech/kako/993/993573920.html
では、ぬるぽしてもいいんですか?
0843デフォルトの名無しさんNGNG
4しかない・・・
0844デフォルトの名無しさんNGNG
0845デフォルトの名無しさんNGNG
ヒアドキュメント中でリストの区切りを変えようとして

@{[$" = qq{\n} and '']}

のように書いているのですが、
「このクソ虫め。条件分の中で “=” だと? “==” だろ? 田舎へ帰ってママのおっぱいでも吸ってろ」
と警告を受けるのですが、他によい書き方はありますか?

と聞こうとしたところでもう一度考えて

@{[($" = qq{\n}) x 0]}

で警告を受けなくなった。俺はクソ虫からちょっとましなクソ虫に成長した。

と日記に書いておこう。
0846デフォルトの名無しさんNGNG
ソートについて質問させて下さい。

abcdef の場合は sort @array
123456 の場合は sort { $a <=> $b } @array

と理解しているのですが、

no1 no1_1 no1_1_1 no1_1_2 no1_1_10 no1_2 no1_10 no2 no3 no10

↑のソートが上手く出来ません..
上記のように並べるソートはどのようにすれば良いのでしょうか。
0847デフォルトの名無しさんNGNG
先頭の文字列が同一だと仮定して。
最初の数字(a)を、取り出す。
もし次にアンダーラインがあれば、’.'ピリオドに変換して(b)とする。
その後に続く数字を(c)を取り出す。
さらに、アンダーラインがあれば、それをスキップして数字を取出して
(c)に連結する。
(a)+(b)+(c)
"1.123"の様なフォーマットに変換すれば良いんじゃないか?

それを、連想配列なり何なりしてソート。
具体的なコードは、自分で考えてくれ。
0848デフォルトの名無しさんNGNG
>>846
どう並べたいのかによる。単純には sort {$a cmp $b}@array
0849デフォルトの名無しさんNGNG
>>847
それだと、
no1_11_1 と no1_1_11 の区別がつかない。
0850デフォルトの名無しさんNGNG
>>846
こんな感じかな?
@array = map $_->[0],
        sort {
          for (my($n,$cmp)=1;; ++$n) {
            $#$a<$n || $#$b<$n and return $#$a<=>$#$b;
            $cmp = $a->[$n]<=>$b->[$n] and return $cmp;
          }
        } map [$_, /(\d+)/g], @array;
0851デフォルトの名無しさんNGNG
>>846
こんな感じじゃない?
printf "no%*vd ", '_', $_ for sort map{ s/no/v/; s/_/./g; eval } @array;

(この場合、v-stringを使うとラク)
0852デフォルトの名無しさんNGNG
v-stringとかシラネー
0853デフォルトの名無しさんNGNG
不恰好だけど俺もでけた
と思ったら>>850とあんま変わらんのか('A`)

@a = qw/no1 no2_2 no1_22 no2 no1_1 no1_2_4/;

@s = map{ $_->[0] }
sort{
for(1 .. (@{$a} > @{$b} ? $#{$a} : $#{$b}) ){ my $s = $a->[$_] <=> $b->[$_]; $s == 0 ? next : last}
$s }
map{ [$_, /(\d+)/g] } @a;

print qq/@a\n@s/;

なんか暗号にしか見えんなw
あとsortって地のブロックで値を返すかreturnしなきゃダメなんだね、勉強になった
0854デフォルトの名無しさんNGNG
>>853
だめだろ、それ
0855デフォルトの名無しさんNGNG
どこが?ちゃんと動きましたが・・・
0856デフォルトの名無しさんNGNG
う、載せるときにテキトーにmyしちゃいました
ゴメンチャイ
sortブロックの初めにmyですね
0857デフォルトの名無しさんNGNG
>>852
疑似ハッシュと同じく失敗機能の一つ。廃止予定。
http://perldoc.com/perl5.8.4/pod/perl581delta.html#Future-Directions

>>846
my @array = qw(no1_1_1 no3 no1_2 no1_1_2 no10 no1_10 no1_1_10 no1 no2 no1_1);
my $digit = 4; # 数字部分の最大桁数

my @sorted =
  map $_->[1],
  sort { $a->[0] cmp $b->[0] }
  map {
    (my $str = $_) =~ s/(\d+)/ sprintf "%0${digit}d", $1 /eg;
    [ $str, $_ ]
  }
  @array;
0858デフォルトの名無しさんNGNG
>>857
{ v1.2.3 => 4 } みたいな書き方がNGになっただけじゃないの? なんなら

print 'no', (join '_', unpack 'U*', $_), ' '
   for sort map{ s/no//; pack 'U*', split '_' } @array;

でもよし。packすれば無理にシュワルツする必要なし。短いし。
0859デフォルトの名無しさんNGNG
Emacs で読める info 形式の manual の最新版はどこから取れますか?
0860デフォルトの名無しさんNGNG
私のハードディスクから取れます
0861デフォルトの名無しさんNGNG
>>860
anonymous でも取れますか?
0862デフォルトの名無しさんNGNG
print "読み込むファイル名を入力してください ( By****3.txt )\n";
print "ファイル名 = ";
chomp (my $file_read = <STDIN>);
-f $file_read or die "\nそんなファイルないです\n\n";
open READ, "<$file_read" or die $!;

# 書き込みを行うファイルについての操作
print "\n書き込み先のファイルを指定してください ( By****4.txt )\n";
print "(ファイルがない場合は新たに作成されます)\n";
print "ファイル名 = ";
chomp (my $file_write = <STDIN>);

# 書き込み先ファイルを追加書き込み型で開く
open WRITE, ">>$file_write";

while (my $line = <READ>)
 {
 print "$line\n"; #配列の中身確認用print
 $value[$value_count] = $line;
 $value_count++;
 }
0863862続きNGNG
という>>862のソースで、あるファイルを読み込んで、各行を配列の各要素に代入して別ファイルに書き込む、
という作業をしたいのですが、読み込んだ後に各行の行頭に半角スペースが入ってしまいます。

読み込むファイルが

100
200
300

という内容の場合、確認用printで確かめたところ、出力ファイルの内容が

_100
_200
_300

となってしまいます。
(『_』は半角スペースだと思ってください)

なぜでしょうか?
0864862続きNGNG
という>>862のソースで、あるファイルを読み込んで、各行を配列の各要素に代入して別ファイルに書き込む、
という作業をしたいのですが、読み込んだ後に各行の行頭に半角スペースが入ってしまいます。

読み込むファイルが

100
200
300

という内容の場合、確認用printで確かめたところ、出力ファイルの内容が

_100
_200
_300

となってしまいます。
(『_』は半角スペースだと思ってください)

なぜでしょうか?
0865862NGNG
二重書き込みすみません…
0866デフォルトの名無しさんNGNG
>>864
どっかで
print WRITE "@value";
とかやってんだろ。
0867862NGNG
>>866
回答ありがとうございます。

while (my $line = <READ>)
 {
 print "$line\n"; #配列の中身確認用print
 $value[$value_count] = $line;
 $value_count++;
 }

のすぐ下に確認用として、

print "@value\n";

という行がありました。
この行を削除したら意図した通りに動くようになりました。

配列変数をprint(もしくはファイルへprint) すると
なぜこのような現象が起きるのでしょうか…?
0868デフォルトの名無しさんNGNG
>>867
原因はクォーテーションの中にあるから。
print @value,"\n";
とか。
ttp://allabout.co.jp/career/cgiperl/closeup/CU20040818A/index3.htm#5
0869デフォルトの名無しさんNGNG
emacs lisp の cond みたいなのって perl では何になりますか?
0870デフォルトの名無しさんNGNG
if
0871デフォルトの名無しさんNGNG
elsifの羅列
0872デフォルトの名無しさんNGNG
nslookupのlsコマンドでDNSに登録されたホスト一覧を取る場合って、

open(IN, '| nslookup > out.txt');
print IN "ls ドメイン名";
close(IN);

のようにして、一旦out.txtに結果を吐き出す方法しか
思いつきませんでした。
Perlの変数にlsコマンドの実行結果を直接格納する方法ってあるのでしょうか?
0873デフォルトの名無しさんNGNG
``
0874846NGNG
皆様、ありがとうございます。
と言うか、全く理解出来てないので、
皆様のコードを参考にして出直して参ります..orz
0875デフォルトの名無しさんNGNG
>>872
同じプログラムに対して入力も出力もしたいとなると
IPC::Open2。

出力をとりこんでいろいろ加工するんならはじめから
Net::DNSを使ったほうがいいかも。
0876デフォルトの名無しさんNGNG
>>834->>835
返事が遅れました・・・ごめんなさい!
>>754です。

投稿して頂いたスクリプトを元に改造を施し
満足のいくものを仕上げることができましたよ。

メールの本文入力域を/\n/にマッチさせるためか、>>834さんのスクリプトだ
とメールを送信し終わってプロンプトに戻ってもしばらくはメールの本文を書
いて、「Not such command」などと怒られてしまうので、そこのところを改良
しました。

でも全体としてみるとかなり参考になりました。
ありがとうございます!

以下にできあがったものを載せておきます。

その他にもアドバイスをくださった方々、ありがとうございました!
0877デフォルトの名無しさんNGNG
#!/usr/bin/perl -w
use Expect;
@host = ("www.sample.com", "www.sample.jp");
$user = "mona";
$pass = "giko";
$mail = "[email protected]";
for (my $i = "0"; $i <= $#host; $i++) {
$exp[$i] = Expect->spawn("ssh -l $user $host[$i]\n");
}
for ($i = "0"; $i <= $#host; $i++) {
$exp[$i]->expect(300,
[ qr/\(yes\/no\)/ => sub { my $self = shift; $self->send("yes\n"); exp_continue; }],
[ qr/password:/i => sub { my $self = shift; $self->send("$pass\n"); exp_continue; }],
'$'
);
$exp[$i]->send("mail $mail\n");
$exp[$i]->expect(50,
[ qr/subject:/i, sub { my $self = shift; $self->send("TEST\n"); exp_continue; }],
"\n"
);
$exp[$i]->send("$host[$i]\n.\n");
$exp[$i]->expect(50,
[ qr/cc:/i, sub { my $self = shift; $self->send("\n"); exp_continue; }],
'$'
);
$exp[$i]->send("exit\n");
$exp[$i]->close();
}
0878デフォルトの名無しさんNGNG
画像ファイルのヘッダを除去するにはどうすればいいですか?
0879デフォルトの名無しさんNGNG
すみません、ヘッダというのは、content-type以外の余分な情報の部分です
0880デフォルトの名無しさんNGNG
>>876
>しばらくはメールの本文を書いて
? うちの機械ではちゃんと動いたんだがね。
たぶんどっかの expectのなかに []を複数書いちゃって
複数文字列待ち状態になってたんじゃないのかな?
0881デフォルトの名無しさんNGNG
デジカメの画像が000.jpg 001.jpg ... とあって、サムネイルがそれに対応して
s-000.jpg s-001.jpg ... というようにあるので、それの一覧ページを作ろうと
スクリプトを書いたのですが、数字が3桁で扱われません。

for ($i = 000; $i < 256; $i++){
print qq|<a href="$i.jpg"><img src="s-$i.jpg" width="120" height="90" alt="$i.jpg" /></a>|;
}
0882878NGNG
sprintfでぐぐるといいかも
0883878NGNG
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&q=sprintf%81%40%8C%85%81%40perl&lr=
0884881NGNG
できました!
878さんありがとうございました!
0885872NGNG
>>875

やっぱそうなるんですね。
Net::DNSは知らなかったので、ちょっと調べてみます。
ありがとうです。
0886デフォルトの名無しさんNGNG
perlにて
system"/bin/rm -rf $BackupDIR/*"
みたいな感じでコマンドを実行しているのですが、
標準出力にでるメッセージをプログラムで受け取るにはどうしたらいいのでしょうか?
``でやった方がよい?
0887デフォルトの名無しさんNGNG
>>886
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#Why_can_t_I_get_the_output_of_a_
0888デフォルトの名無しさんNGNG
>>887
サンクス
0889デフォルトの名無しさんNGNG
文字化けを起こす文字(表や能)を正規表現を使って表\や能\に置換しようとしているのですが上手くいきません。
$str = "表示するべさ";
$str =~ s/\Q表示\E/表\\示/;
これだと上手く動作するようですが、置換対象が"表示"に限られるので、表→表\にしようとして
$str =~ s/\Q表\E/表\\/;
だとエラーになってしまいます。
なんとかなりませんでしょうか?
ちなみにSJISじゃないと駄目だという状況なのでEUCはNGです。
0890デフォルトの名無しさんNGNG
\x92\x5C
0891BlackLightOfStar ◆ifsBJ/KedU NGNG
質問です。
〜を任意の文字列(但し、abc,def,ghi,jklというパターンは含まないとし、0文字でもいい。)
として、
abc〜def〜ghi〜def〜ghi〜jkl
とパターンマッチするかどうかを調べるにはどうすればいいのでしょう?
0892デフォルトの名無しさんNGNG
天気がいいのでちょっとドラクエ買ってきます
0893デフォルトの名無しさんNGNG
>>889
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0894デフォルトの名無しさんNGNG
>>891
my $d = '〜';
my @s = qw(abc def ghi jkl);
my $s = 'abc〜def〜ghi〜def〜ghi〜jkl';

$d =~ /\Q$_\E/ && die "\$d includes '$_'.\n" for @s;

my $p = '(?:' . join('|', map quotemeta, @s) . ')';
print $s =~ /^$p(?:\Q$d\E$p)*\z/ ? '' : 'un', "match.\n";
0895BlackLightOfStar ◆ifsBJ/KedU NGNG
Re:>894 どうもありがとうございました。これで出来そうです。
0896デフォルトの名無しさんNGNG
UTF-8で文字が途切れているか判定するにはどうすればいいんでしょうか。
0897BlackLightOfStar ◆ifsBJ/KedU NGNG
Re:>896 文字が途切れているとは何?perlには文字コードを出力する関数があるからそれでなんとかなる?
0898デフォルトの名無しさんNGNG
さっきまで質問していた人なんかには聞いていませんよ・・・
0899BlackLightOfStar ◆ifsBJ/KedU NGNG
抜粋:
次の例を実行すると [ABC] [65 66 67] [ABC] と表示されます。

$xx = "ABC"; # 文字列としての代入
@yy = unpack("C*", $xx); # 数値の配列に変換
$zz = pack("C*", @yy); # 数値の配列を文字列に変換
print "[$xx] [@yy] [$zz]\n";
0900デフォルトの名無しさんNGNG
配列の構造体について質問させてください。
いくつでも追加可能な構造体配列が作りたいと思い、
http://www2s.biglobe.ne.jp/~arkadia/cgi/perl_tips.htm
を参考にして、最初、繰り返し push( @$DataArray, \%Data1 ) を使うソースを書いてずっと悩んでいたのですが、
これは配列の要素が、すべて同じリファレンスで構成されているためだと(自分では)納得して、
自分なりにソースを作ってみました。

my (%Data, %Data1, @DataArray, @Name);

%Data0 = ("Name" => "", "Address" => ""); # 構造体定義
@Name = ("Taro", "Hanako", "Ichiro"); # 要素数は可変

foreach (@Name){
%Data = %Data0; # 初期化
$Data{"Name"} = $_;

push( @$DataArray, %Data);
}

配列に入れた(つもりの)ハッシュのリファレンスを使って、
$DataArray->[0]{"Name"} のように使いたいのですが、これも自分の知識では無理でした。
もうどうやればいいのか分かりません。
追加可能な構造体配列を作る方法をどうか教えてください。
0901BlackLightOfStar ◆ifsBJ/KedU NGNG
Re:>898 お前に何が分かるというのか?
0902デフォルトの名無しさんNGNG
なんで人をお前呼ばわりするんですか?
0903デフォルトの名無しさんNGNG
>>900
追加可能な構造体配列というのはなくて、構造体っぽく使うことにした
ハッシュリファレンスを格納する配列(perlの配列ははなから追加可能
なのでことさら追加可能という必要はない)があればいいわけだが、
注意しなくてはいけないのは、ハッシュリファレンスが指すハッシュは
毎回別のものにしなくてはいけないということだ。そのプログラムでは
ループの外で定義された%Dataが毎回使われるので、全部同じ実体に
なってしまう。あとtypoだと思うが、push( @$DataArray, %Data);
はpush( @$DataArray, \%Data);ね。

ということで、%Dataをforeachのループ内で新しく作ればOK.

foreach (@Name){
my %Data = %Data0; # 初期化
$Data{"Name"} = $_;

push( @$DataArray, \%Data);
}

それから、最初の行のmy宣言は中身とほとんどあってないのでちゃんと
直すように。use strictの使用を勧める。

0904デフォルトの名無しさんNGNG
chaoticのことをchaosicと書いていた奴か。
0905デフォルトの名無しさんNGNG
>>900
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perllol.html

my $DataArray = [];
my @Name = qw(Taro Hanako Ichiro);

push @{$DataArray}, { Name => $_ } for @Name;

my $name = lc $DataArray->[0]{'Name'};
$DataArray->[0]{'Address'} = "$name\@example.com";

print "$_->{'Name'} : $_->{'Address'}\n" for @{$DataArray};
0906BlackLightOfStar ◆ifsBJ/KedU NGNG
Re:>902,904 逆ギレすんな。
0907デフォルトの名無しさんNGNG
無礼な人ですね。
0908900NGNG
>>903
すげーー。 ありがとうございます!!
言われてみれば、そういう使い方ができますね。
ループ内でハッシュを新しく宣言しなおす、という方法はまったく思いつかなかったです。
これならその都度、リファレンスも別のものに変わると言うわけですね。

push( @$DataArray, %Data); はタイプミスじゃなく、敢えてそうしました。
自分のソースでは、\%Data のリファレンスが変わっていないので、\%Data を push しても、
同じリファレンスを渡すだけだと考えまして、ハッシュの中身を配列に全部移した後で
配列の途中(それぞれのハッシュの先頭)へのリファレンスを $DataArray->[n] で
拾おうと思ったんです(無理でしたけど)。

宣言部は、コピペするときになるべくソースを短くしようと思って、use strict とっぱらったんですが、
その過程でミスしてしまったようです。
短くするなら>>905氏くらい短くしろ!と言われそうですが・・・力不足ですみません。

>>905
ありがとうございます。
デリファレンスをいきなり使うパターンですか。
完全に自分の想像外なソースでしたが、サイトを見たり、ソースをいじったりしてだいたい仕組みが掴めました。
シンプルかつ実に面白いソースですね。
0909BlackLightOfStar ◆ifsBJ/KedU NGNG
Re:>907 逆ギレすんな。
0910デフォルトの名無しさんNGNG
他のスレでやってください。場違いでしょう。
0911デフォルトの名無しさんNGNG
>>893
読んで見ました。
$str =~ s/\Q表\\E/表\\\/;
に変更してみたらエラーは出なくても結果は変わらず状態です。
何か解釈がおかしいのでしょうか?

>>890
$str =~ s/\x5C/\\x5C\\x5C/;
ということでしょうか?
こちらも変化無し状態です。

よろしくおねがいします。
0912デフォルトの名無しさんNGNG
文字化けだって?
文字コードがシフトJISと分かっててなぜ文字化けするかね
0913デフォルトの名無しさんNGNG
>>896
perldoc EncodeのHandling Malformed Data
0914デフォルトの名無しさんNGNG
バカking、わざわざ数学板から出張して荒らしてるんじゃねぇよ。
よく書き込んでいる
>お前に何が分かるというのか?
ってのがあるが、お前の事なんか理解できるか、ボケ。
周りに理解してもらう前に自分が周りを理解しろ。
0915デフォルトの名無しさんNGNG
>>911
\x92\x5C
0916デフォルトの名無しさんNGNG
「Re:」の使い方を一目見ただけで
こいつの精神の閉塞ぶりがよくわかる
0917デフォルトの名無しさんNGNG
>>911
$str = "表示"; とした時点で、$strの中身は
95 5C 8E A6 ではなく、95 8E A6 となっている。
「表」ではなくなってしまっているのだから、
「表」だけでどうにかしようってのはムリな話。
$str = '表示'; とするか、
$str = "表\示"; とするか、
use encoding "sjis"; をすべき。
0918BlackLightOfStar ◆ifsBJ/KedU NGNG
Re:>912 perlではバックスペースでのエスケープを優先するからだろう。こういう場合はシングルクオーテーションが有効だったかな?
0919デフォルトの名無しさんNGNG
いちいちageんなふぉ
0920デフォルトの名無しさんNGNG
>>918
独り言ならチラシの裏でやってください。
0921デフォルトの名無しさんNGNG
「Re:」をレスアンカーの前に置く神経は理解できない、というより歪んでいる。

・電子メールの「Re: 」はコロンの直後に空白がくる4バイト。
・この「Re」は略語ではなく、「〜に関する」という意味の前置詞。

ここまでは些末なことだし、知らない人も多いだろう。

・誰もが知っているとおり、「Re: 」はサブジェクトに添えるものである。
 人名に添えるものではない。

この狂人がメールを使ったことがないとは考えられないから、
「Re:」の由来がメールとは無関係ということはないはず。
0922デフォルトの名無しさんNGNG
CPANは、一般的には(perl使いの間では)、なんと発音されてますか?
0923デフォルトの名無しさんNGNG
しーぱん
0924デフォルトの名無しさんNGNG
>>922
しぱーん
0925デフォルトの名無しさんNGNG
しーぽん
0926デフォルトの名無しさんNGNG
>1
>1
<<1
1>>
Re:>1

どれもきもいなぁ。
0927デフォルトの名無しさんNGNG
すれ違い
0928デフォルトの名無しさんNGNG
スィ〜ぱん
0929 NGNG
スィ〜ぴゃぬ
0930デフォルトの名無しさんNGNG
くぱん
0931デフォルトの名無しさんNGNG
ぬるぽ
0932デフォルトの名無しさんNGNG
ガッ!
0933デフォルトの名無しさんNGNG
あんぱん食いて
0934デフォルトの名無しさんNGNG
     ___
    /     \     __________
   /   ∧ ∧ \  /
  |     ・ ・   | < 漏れを喰うの?
  |     )●(  |  \__________
  \     ー   ノ
    \____/
0935デフォルトの名無しさんNGNG
スレ埋めるにはまだ早いだろ…。
0936デフォルトの名無しさんNGNG
シェルである重い処理をすると2時間 CPU使用率20%

それをperlで作ってバッチ処理をすると 30分 CPU使用率 95%

これって、シェルより早いけどなんでなんでしょうか?
0937デフォルトの名無しさんNGNG
>>936
処理内容に依存するでしょ。
シェルから実際に起動するコマンドが重ければ重いだろうし、
シェルから大量にコマンド起動してたらその起動の処理自体が重い
(Solaris なんかだと fork(2) が重いので特にネックになりそう) だろうし。
0938936NGNG
>>937

vmstat でブロックI/Oを見てるけどシェルの場合はたいして
I/Oがでていないのに、CPUが使われていないようにみえる・・
CPU使用率が低いのにELAPSが長いということは、ファイルI/Oが多いはずなのに・・
CPUのディスパッチの優先順位がシェルの場合低い気がする・・
0939デフォルトの名無しさんNGNG
ひとりごとは他所でおねがいします。
0940デフォルトの名無しさんNGNG
>>938
だから一体なにが知りたいのかね?
それに既にそれは Perl の話ではなかろう?
0941デフォルトの名無しさんNGNG
速度が必要ならシェルスクリプトは使うな、
これでいいでしょ。いまはCとシェルしかない時代じゃないんだし。
0942デフォルトの名無しさんNGNG

釣れないようですね w
0943940NGNG

せっかく煽ってるんだけら、返事ください
お願いします! 

0944938NGNG
>>943

はいはい、どうしたのー
ぼくちゃん? かまってほしいのかな?


0945デフォルトの名無しさんNGNG
>>944
びびでばびでぶーってなんだったっけ
0946デフォルトの名無しさんNGNG
CPU 20% で 180分 動作する シェルスクリプト より
CPU 95% で 30分 動作する Perl の方が性能が悪い
0947デフォルトの名無しさんNGNG
ぽちぽち(.⊥.)
0948デフォルトの名無しさんNGNG
(・∀・)
0949デフォルトの名無しさんNGNG
5.9.2まだー
0950BlackLightOfStar ◆ifsBJ/KedU NGNG
私はperlは主に文字列処理に使うものだと思っているのですが、
それとCGIの他に、どのような目的で使われますか?
0951デフォルトの名無しさんNGNG
詩を書くため
0952デフォルトの名無しさんNGNG
首飾り
0953BlackLightOfStar ◆ifsBJ/KedU NGNG
Re:>951 これから詩人になろうかな?無理か。
Re:>952 せいぜい頑張ってくれ。
0954デフォルトの名無しさんNGNG
active perl 5.6.1 を使ってます。
3次元配列を、連想配列(?)を使って表していたのですが、
値をローテーションするために、参照渡しを使おうと思い、
*factor{"111"} = *factor{"211"}
とやってみたのですが、エラーになりますた。

perl標準(?)の多次元配列をつかって、
*factor[1][1][1] = *factor[2][1][1];
もエラーになって駄目ですた。

ポインタで渡す方法紹介きぼんぬ♥
0955デフォルトの名無しさんNGNG
ポインタなんてPerlには無いよ
0956デフォルトの名無しさんNGNG
なんでそんなややこしそうなことをしようとするのだろう。
0957デフォルトの名無しさんNGNG
あたまのなかもややこしいからです
0958デフォルトの名無しさんNGNG
$str = s/
 abcdefg
/{
 '/'を含む計算式
}/ex;

とやると文法エラーにされました。
区切り記号変えればいいんだろうけど、なんか納得いきません。

mapみたいに、
replace { ...計算式... } ( $string, /abcdefg/ );
という感じで書く方法ないでしょうか?
0959デフォルトの名無しさんNGNG
>>958
エスケープしろよばーか
0960デフォルトの名無しさんNGNG
ほんとだな
0961958NGNG
式の側に変な記号入れなきゃいけないのはイヤです
0962デフォルトの名無しさんNGNG
なんか頭悪そうな香具師みたいだな
0963デフォルトの名無しさんNGNG
$str = "<a href="$url">";

とやると文法エラーにされました。
区切り記号変えればいいんだろうけど、なんか納得いきません。
0964デフォルトの名無しさんNGNG
>>955
たとえば、
*a=*b;
はポインタがわたってると思ってました。

>>956
値を渡すと遅くなると思ったからです。
0965デフォルトの名無しさんNGNG
グロブ
0966964NGNG
たとえば
$a=1;
$b=2;
*a=*b;
print $a;  ←2
$b=3;
print $a;  ←3
となります。

ローテーションの規模が大きいので、値渡しでやると結構時間がかかるんです。
ポインタ渡しならメモリ管理プロセスを省略できる(推測)ので、
早くなると思ったからです。
0967デフォルトの名無しさんNGNG
やべーこいつ*がポインタだと思ってるよどうする?↓
0968958NGNG
文字列中でエスケープ入れるのと訳がちがうでしょうが

perlの文が書かれる部分で、文法変わっちゃうんですよ。
みんなそれで平気なんですか
0969デフォルトの名無しさんNGNG
いや別に名前なんてどうでもいいんですわ
同じようなことができれば

ま、もういいです。
0970デフォルトの名無しさんNGNG
意味自体違うし
0971デフォルトの名無しさんNGNG
「向いてない」っていうのはこういう奴のためにある言葉だな
0972デフォルトの名無しさんNGNG
>>969
同じようなこともなにも、あんたCも全然知らんだろうが。
脳内言語と「同じように」と言われても、基地外子ねとしかいえんよ。
0973デフォルトの名無しさんNGNG
質問です。
質問スレで質問者をたたいてるやつって、なんなんですか?
0974デフォルトの名無しさんNGNG
あげてまで質問する事か?
0975デフォルトの名無しさんNGNG
残り少ないんだから仲良くしろよおまいら
0976デフォルトの名無しさんNGNG
短い時間にたくさんの煽りレス、しかも文体が同じ感じ
これは一体・・・
0977デフォルトの名無しさんNGNG
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!
0978デフォルトの名無しさんNGNG
>>950
>私はperlは主に文字列処理に使うものだと思っているのですが、
>それとCGIの他に、どのような目的で使われますか?

誰かが言ってるように、「詩を書くため」、「首飾り」にも
使えないことはありませんが、あなたのおっしゃる文字列処理、
CGIの他には、レポート作成、システム管理によく用いられ
ています。レポート作成というのは、PerlがPractical Extraction
and Report Languageの略であることから分かるように、ちょっ
とした統計などを行なって書式を整えて出力するなどのことです。
システム管理とは、たとえば、アクセスを監視するとかログを集計
するとか他のサーバとの交信を管理するとか、さまざまなことで
よく使われています。

0979デフォルトの名無しさんNGNG
>>978
なんで荒らしにレスするの?
0980デフォルトの名無しさんNGNG
BlackLightOfStarというハンドルを見ても、レスの付け方を見ても、
こいつが精神を病んでいることは明らか。
それが見抜けない>>978が何を言っても聞くに値しない。
0981958NGNG
s(...)(式)exgでOKでしたごめんなさい。さっきまでperldocの存在をしらんかった
0982デフォルトの名無しさんNGNG
>>981
ひとつ賢くなったな。
おめでとう。
もう忘れるなよ。
0983BlackLightOfStar ◆ifsBJ/KedU NGNG
Re:>979-980 逆ギレすんな。
0984978NGNG
>>983
BlackLightOfStarさん、こんにちは。
私の>>978のレスについても感謝してください。
0985デフォルトの名無しさんNGNG
Re:>984
マジレスは無視。
0986デフォルトの名無しさんNGNG
>>979 >>984

あいつら自演だからもう放っとけ
0987デフォルトの名無しさんNGNG
ワオぉーん!?
0988デフォルトの名無しさんNGNG
えらく伸びてるなーと思ったら、こういうことか orz
0989デフォルトの名無しさんNGNG
989
0990デフォルトの名無しさんNGNG
990
0991デフォルトの名無しさんNGNG
991
0992デフォルトの名無しさんNGNG
992
0993デフォルトの名無しさんNGNG
993
0994デフォルトの名無しさんNGNG
994
0995デフォルトの名無しさんNGNG
995
0996デフォルトの名無しさんNGNG
996
0997デフォルトの名無しさんNGNG
997
0998デフォルトの名無しさんNGNG
998
0999デフォルトの名無しさんNGNG
aho
1000デフォルトの名無しさんNGNG
mona
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。