Perlについての質問箱 13箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGPerlについての質問箱です
"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デフォルトの名無しさん
NGNG1 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デフォルトの名無しさん
NGNGPerlプログラミング講座: 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デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1097547110/
削除依頼しておくぞ。
0005デフォルトの名無しさん
NGNGこっちでいいよ
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGなんで次スレを立てて削除依頼だされなきゃならんのよ?
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNGif ($_ =~ /$tango/)
と
if ($_ =~ /.*$tango.*/)
ってどっちの記述もまったく同じ効果ですか?
違いがわからないのですが…。
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG$'、$`、$&じゃねーの?
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その記述における目的にとっての「効果」は同じ。
でも勿論、マッチした文字列の内容は大きく異なっている可能性が高い。
正規表現にgオプションを付けたりすると、途端に動作に差が出る。
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGちょっと効果が変わるよね。
0019デフォルトの名無しさん
NGNGあー、そっか。
002010
NGNG0021デフォルトの名無しさん
NGNGif ($hoge) { use MODULE }
と書いてみたのですが、どうもはじめからロードされてるように動きます。
マニュアルをみたら
「 use MODULE; は BEGIN { require MODULE } と一緒 」
とあったのですが、この場合
if ($hoge) { require MODULE }
と書けばよいと考えてしまってよいのですか?
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGサンクスです。
これで良いんですね。安心しました。
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG話を聞いた気がするのですがすっかり忘れてしまいました。
それ関係の情報へのリンクなり何なり教えていただけると喜びます。
0026デフォルトの名無しさん
NGNGhttp://search.cpan.org/search?query=Inline&mode=all
http://perldoc.com/perl5.8.4/pod/perlfilter.html
0027デフォルトの名無しさん
NGNGありがとん。
0029デフォルトの名無しさん
NGNGここの誤爆だろう
http://pc5.2ch.net/test/read.cgi/tech/1097547110/14-35
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGとか
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デフォルトの名無しさん
NGNGperldoc perlembed 見れ。
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGるbyさいきょう
0036デフォルトの名無しさん
NGNGありがとうございます。
でも以前にこれみたとこは、わけわかめだった…。
0037デフォルトの名無しさん
NGNGPerlの中でCなどを書いた方が、
Cで始めからストレートに書くより速いんですかね。
Rubyの中でPerlを記述した方が普通にその言語で書くより生産的?
よく分からないのですが。。。
0038デフォルトの名無しさん
NGNG速いってのは、実行速度が? それとも開発期間が?
0039デフォルトの名無しさん
NGNGそれは馬鹿とハサミの関係だね。
うまく使えれば良いけどそうでなければむしろ泥沼にはまるんじゃない。
004037
NGNGレスどうもです。
いや、実行速度でも開発期間でもどちらでもよいのですが。
たとえばCだとインラインアセンブラとかでアセンブラ埋め込めたりできますけど
「ループの中のみ」とか、コアを絞りこんで置き換えて使うような
それ相当の機能と機能と考えたほうがよいのか。
そうじゃなくて全面的に記述はCで書いて、実行系はPerlでやる、みたいな
そういう存在なのか?よく分からなかったのです。すんません。
004137
NGNGみたいな。。という素朴な疑問です
0042デフォルトの名無しさん
NGNGCにPerlを埋め込んでというのは仕事では扱ったことがないので
あくまで想像に過ぎないのだが、Perlの強力な文字列操作機能を
Cから使いたいという要望はあるかもしれない。
実際、Perlでなら普通にやるような文字列検索や書換えなどを
C/C++でやるには、そういうライブラリもたくさんあるにはあるが、
全部をC/C++で済ますより、その部分だけPerlにまかせるれば
簡単に済む場合は多そうな気がする。これは部分最適の例かも。
そして、それが開発工数の削減につながるなら、開発プロセスの
全体最適ということにこじつけれるかもしれない。
いずれにせよ、それぞれの言語の長所がうまく活かして、
短所を補えるなら組み込みの意味もでてくるのでは。
言うは易しで行なうは難しという感じだが。
0043デフォルトの名無しさん
NGNG004437
NGNGレスありがとうございます。
相互補完的に使うものなのですね。
確かに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デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNG糞虫は死ねよ。
0051デフォルトの名無しさん
NGNGインターネット上で叩かれるのみならず、市販の書籍でも
「私(監修者)はPerlがダイキライなので、この章はとばして読んでください。」
なんて言われる始末ぷぷぷ。
別の本では「Perlなど触りたくもないのですが、仕方がなく」と嫌々ながらwwwwwwwwwwwwwww
「もっとも、世界中のPerlプログラムなど、どれも皆単なる偶然で動いているだけなのでしょうから、
その意味で典型的なPerlプログラムと言えますが(わらい)」とか書かれたり。
ちなみに、残念ながら捏造でも何でもないwwwwww
ぷぷぷ。
ぷぷぷぷぷ。
Rubyやってて良かったよ。お前らと一緒にされるのはごめんだ。
汚らしいゴミperlerめ。プログラマ板から出ていくまでお前らを叩き続けてやるからな。
汚らしい。
糞虫。
嫌な気分になってくれれば幸いだ。俺はそれを望んでいる。
ゴキブリに感情があるのか知らんが。
0052デフォルトの名無しさん
NGNG変数の実数を知る方法は無いでしょうか。。
($test,$sasa) = split(/,/, $nihi);
$sasaに何が格納されているか知りたいのです。
cgiの中の<html></html>にprintf "$sasa"としてみましたがエラーだらけとなってcgi自体機能しなくなりました。
0053デフォルトの名無しさん
NGNG二度と来なくていいよ。さよなら
0054デフォルトの名無しさん
NGNGなんかあったのか? ルビ厨
必死さがかなり笑える。。ww
0055デフォルトの名無しさん
NGNG試しにコマンドラインから実行してみて
そして観察してみてください。
0056デフォルトの名無しさん
NGNGその本にはメモリの確保などの記述がなかったです
どのようにメモリは確保できるのでしょうか?
または そのような考え方はないのでしょうか?
素人質問ですいませんがお願いします
0057デフォルトの名無しさん
NGNGPerlはソースが公開されているよ。
0058デフォルトの名無しさん
NGNGだから何?
0059デフォルトの名無しさん
NGNG何って・・・分からないの?
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デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGhttp://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基本的にPerlが自動で確保,拡張します
0064デフォルトの名無しさん
NGNGおまえか?
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNGUTSL
006756
NGNGまさか ソースを読んで関数を見つけ出せということ?
個人でそんな気力はありませんorz
>>63
ありがとうございます
ということは リーク等はPerlにバグがないかぎりありえないということでしょうか?
また 基本的にと言うことは 意図的に確保する方法もあるのでしょうか?
0068デフォルトの名無しさん
NGNG前から思ってたけどこれってウニコードのエスケープはデコードできないよね・・・
0069デフォルトの名無しさん
NGNG伝聞だから本当かどうかは分からないけど。
0070デフォルトの名無しさん
NGNGウニコードのエスケープと URL エンコードは別物だからね。
0071デフォルトの名無しさん
NGNGもしmallocみたいのを期待しているんだとすれば
期待はずれかもしれないけれど
例えば、配列 @a について $#a = 1000000; とかすると
それなりのメモリはされるはずです。そんな風な確保(?)の仕方はあります。
0072デフォルトの名無しさん
NGNGメモリ確保を意識しなくっちゃらならない場面って
ほとんどありません。
0073デフォルトの名無しさん
NGNGラクダ本のPOSIXモジュールのmallocの欄にもC固有のものであるとしか書かれていないし。
0074デフォルトの名無しさん
NGNGfj の malloc/free 論争を思い浮かべてしまってイヤン。
まさかここで発動したりしないよね?
0075デフォルトの名無しさん
NGNG馬鹿みたいにデカいファイルを開くとかぐらいか…。
そんな機会は今までになかったけど。
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNGリークに関しては、ガベコレが参照カウント式なので
リファレンス使って環状リンク等を作ると
自分でチェインを切らない限り、リークします。
サーバ書くとか、長く動くプログラムを作るときは注意したほうがよいです。
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG008077
NGNGこれは大して気にする問題ではないです。
事実上。
008177
NGNGデフォルトになったんけ?
008356
NGNGどう確保するかではなく
要するに 意図的に確保する必要はない
なんですね
どうもありがとうございました
0085デフォルトの名無しさん
NGNG5.6系統だとメモリー量がんがん増えてくね。
5.8でやっと改善したって感じ。
それでも、GCも頻繁にやってくれずにかなーりたたないと動作してないなぁ。
でも、ソースの組方しだいではメモリー使用量半分ぐらい減らせたりしたな。
0086デフォルトの名無しさん
NGNG自分で書いたプログラムを実行したら
print() on closed filehandle HTML at ./aa.pl line 14.
という エラーが出ました
読んでみても意味が良く分かりません
HTMLは
open HTML , '>', "~/test.html";
で 開いたものです
すいませんが教えてください
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNG~
0089デフォルトの名無しさん
NGNG009086
NGNG>>87
どういうことでしょうか?
まだ 始めたばかりで分かりません
ファイルはopenで開いて次にもうprint で書き始めています
チェックと言うもののやり方を教えて頂けると幸いです
>>88
~を外してフルパスでやっても変わりはありませんでした
0091デフォルトの名無しさん
NGNGとか。まともな本読んだ方がいいと思うが。
009286
NGNGありがとうございます
どういうことでしょうか?
そういうチェックなら知っているのですが
open HTML , '>', "~/test.html"
なので 出力用に開いているので確実に生成されるのではないのでしょうか?
すいませんが教えてください
0093デフォルトの名無しさん
NGNGとりあえず今のコードを可能な限り削って
エラーが再現する完全なコードを掲示してみそ。
009486
NGNGありがとうございます
書き直さずに 再現性を高めるために削っただけですが以下のようなものです
#!/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;
すいませんが よろしくお願いします
009586
NGNG1番少なくすると
#!/usr/pkg/bin/perl -w
open HTML , '>', "~/test.html";
print HTML '<html>';
close HTML;
こんな感じだと思います
すいませんがよろしくお願いします
0096デフォルトの名無しさん
NGNGとりあえず >>91 さんの言ってるとおり
open HTML, '>', "test.html" or die $!;
としてみることですな。
0097デフォルトの名無しさん
NGNGあ、まちがい。
open HTML, '>', "~/test.html" or die $!;
009886
NGNGいれても
No such file or directory at
で エラーで終るだけです
009986
NGNGどなたか 通るファイルのオープンを見せてくださらないでしょうか?
それで通らないのなら私の環境が悪いと言うことなので
すいませんがよろしくお願いします
0100デフォルトの名無しさん
NGNGhttp://tohoho.wakusei.ne.jp/lng/199905/99050073.htm
フルパスでもだめってのは謎だけど、
↓こうでもすればいいのかな?
my @uidentry = getpwuid($>);
open HTML, '>', "$uidentry[7]/test.html" or die $!;
セキュリティ的にはどうか分からんが。
010186
NGNGチルダをフルパスにしたらできました
さっきはできなかったのに‥
さっきは なにか他のエラーでとまってたのかな‥
本当にすいませんでした
考えてくださった皆様ありがとうございます
>>100
ホームディレクトリにわたる 方法まで教えてくださりありがとうございます
それで行きたいと思います
私が今作ってるのはイメージビュアーなので セキュリティーとかは関係ないのでw
今回は 途中で私のミスがあり長引かせてしまってすいませんでした
ありがとうございました
010286
NGNGはじめから ファイルができない云々より
/の入ったパス名のファイルを作ろうとしていたのが原因でしたorz
本当に皆様には御迷惑をお掛けしました
本当にすいませんでした
0103そんなのあるの?
NGNG0104デフォルトの名無しさん
NGNGaaa と eee に囲まれた部分(\nbbb\nccc\nddd\n)
を抜き出すことってできますか?
0105デフォルトの名無しさん
NGNG/sスイッチで改行も含めてマッチします。
ターゲットが$_に入っている場合は大体こんな感じ
print $1 if (/aaa(.*)eee/s);
0107デフォルトの名無しさん
NGNGありがとうございました!
0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNGやだ
0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNGprint "@test[2]\n";
print "$test[2]\n";
2行目と3行目の実行結果はまったく同じなのですが、
printするときは@と$、どっちを使ってもまったく同じなのでしょうか?
0116デフォルトの名無しさん
NGNGスライス について調べるといい。
後は $, かな
0117Ruby >>>>>>>>>>>>>> Perl
NGNG俺は正直なところを言えばPerlにはがんばって欲しい。やられ役がいないと寂しいしw
だがPerlの糞コードや欠点を見ると笑えるし、またそれをちょっと煽り書きすると
信者が狂ったように絡んでくるそのことの方が楽しくて、このスレをチェックするようになった。
0119デフォルトの名無しさん
NGNGqmail信者とpostfix信者
チョンとジャップ
トンガリとスネ夫
と同じ雰囲気があるね
0120デフォルトの名無しさん
NGNGおいおいRuby信者と同じにするなよ
0121Ruby >>>>>>>>>>>>>> Perl
NGNG俺は正直なところを言えばPerlにはがんばって欲しい。やられ役がいないと寂しいしw
だがPerlの糞コードや欠点を見ると笑えるし、またそれをちょっと煽り書きすると
信者が狂ったように絡んでくるそのことの方が楽しくて、このスレをチェックするようになった。
0122デフォルトの名無しさん
NGNGperl 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> @{$data}{@column_names}
これ、なんか怪しくない?
quote する以前に、そのまま出力出来てるの?
0124デフォルトの名無しさん
NGNG$sth->execute( @column_names, @{$data}{@column_names} );
こっちのほうがわかりやすくね?
0125デフォルトの名無しさん
NGNG2.http://bbb.b.b/b/cgi
1のプログラム上から引数を渡して2のプログラムを動作させて
結果を1のプログラムに返すようなことって可能でしょうか?
2のサーバーのローカルにあるデータベースからデータを取得して
1のサーバーのローカルにあるデータベースにデータを保存したいと
おもっております。
0126デフォルトの名無しさん
NGNG> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> (WEBプログラミング板 http://pc5.2ch.net/php/ )
0127デフォルトの名無しさん
NGNGアクセスできる?
0128デフォルトの名無しさん
NGNGおまいは一つ前のレスも見れないのかと
0129デフォルトの名無しさん
NGNGつまらん奴
0130デフォルトの名無しさん
NGNGつ●
0131デフォルトの名無しさん
NGNG黙れ
0132デフォルトの名無しさん
NGNG$dbh->quoteがおかしいと思うならなぜそんな複雑なプログラム
で確かめようとするかな?
print $dbh->quote('あなたが渡してるつもりのもの');
だけ実行して結果みてみろよ。
0133デフォルトの名無しさん
NGNG日本語めちゃくちゃですよ。
0134デフォルトの名無しさん
NGNG(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なりして貼り付けてみそ。
0135134
NGNG0136デフォルトの名無しさん
NGNG可能です。LWP覚えてからWEB板で聞いてみなはれ
0137デフォルトの名無しさん
NGNGエロイ方教えてください
0138にょん
NGNG$|で調べてみてにょん
0139デフォルトの名無しさん
NGNG0140にょん
NGNG(..たしかに => '>> はクドイな)
0141137
NGNG0142デフォルトの名無しさん
NGNG適当な回答するな。思いっきり条件付きだろうが。
0143デフォルトの名無しさん
NGNGContent-type: text/html; charset=EUC-JP
<html>
<body>
${body()}
</body>
</html>
END_OF_DATA
sub body {
print "hello";
}
のように、ヒアドキュメント内に関数を埋め込むことができる
と聞いたのですが、これを実行すると、body()の実行結果が
最初に出力され、その後 Content-type 以下が出力されて
しまいます。
${body()} の位置に出力させることは可能でしょうか。
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNG文字列を埋め込むんだから、bodyは文字列を返さないとだめだろ。
printしたらその場で出力されてしまう。
あと${body()}は、${\(body())}の間違いだと思われ。
0146デフォルトの名無しさん
NGNG${\body()}で十分だろ
0147デフォルトの名無しさん
NGNGreturn "hello";
}
0148デフォルトの名無しさん
NGNG0149122
NGNGmy $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調べてみたけど、ファイルから読み出して行番号を打っていく方法しか見つかりませんでした。
0151デフォルトの名無しさん
NGNG$hoge =~ s/^/++$i/emg;
少し凝るなら
$hoge =~ s/^/sprintf("%3d: ",++$i)/emg;
0152デフォルトの名無しさん
NGNGありがとうございました。
0153デフォルトの名無しさん
NGNGつまりFHを明にテキストモード扱うようにさせるコマンド(方法)って
何かありますでしょうか?
FHならopen/closeすればいいのですが、
binmode STDOUT;
を途中で解除したいわけですが。
0154デフォルトの名無しさん
NGNGbinmode 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デフォルトの名無しさん
NGNGPerl 「Perlユーザは臭い」
Java 「Javaなんてうんこ」
C++ 「C++なぞ問題外.^^;;;」
Ruby 「Rubyこそ最高言語」
by Rubyユーザ一同
0156デフォルトの名無しさん
NGNG2chで馬鹿みたいな書き込みしてる偽信者ぐらいだろう…
0157デフォルトの名無しさん
NGNG最低だなお前らwwwwwwwwwwwwwww
0158デフォルトの名無しさん
NGNG90分毎にhtmlファイルのソースを編集するってことを
したいと思っているのですが、
その場合
現時刻を計測
↓
90分をカウントする
↓
ファイルの読み込み
↓
ファイルの修正
の繰り返し…って具合に作成すればいいのでしょうか?
0159デフォルトの名無しさん
NGNGはい
0160デフォルトの名無しさん
NGNGまあとりあえずそれでやってみれ
0161デフォルトの名無しさん
NGNGファイルのコードがshif-jisの為、うまく読み込んでくれません。
入力したファイルをutf-8に変換して編集後に再度元のコードに戻したいの
ですが、どのような方法があるでしょうか?
0162デフォルトの名無しさん
NGNGいろいろな方法があります。
♪Active5.8とはなんぞや?
0163デフォルトの名無しさん
NGNGEncodeモジュールを使う
♪Active5.8とはなんぞや?
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< くっちゃらはぴはぴ!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< くっちゃらはぴはぴ!
Py厨〜〜〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」  ̄ / /
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNGopen HOGE1 ,">hoge.txt"
print HOGE1 "hello\n";
print HOGE1 "world\n";
と書くと、hoge.txtに
hello
world
と出力されるのはなぜでしょうか。
この場合、hoge.txt には world だけ出力されるのが正しいと思うのですが。
0169デフォルトの名無しさん
NGNGprint HOGE1 "hello\x0D";
print HOGE1 "world\x0D";
0170デフォルトの名無しさん
NGNGなんで、そう出力されるのが正しいと思うのか、興味あるな。
0171デフォルトの名無しさん
NGNG168です。
>と>>の違いが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デフォルトの名無しさん
NGNGprint HOGE1 "hello\n";
close HOGE1;
open HOGE1 ,">hoge.txt";
print HOGE1 "world\n";
close HOGE1;
ってやってみれ
0173デフォルトの名無しさん
NGNG>> append(O_APPEND)
open(2)をよく見てみれ
0174デフォルトの名無しさん
NGNGhoge.txtに
>hogehogehoge$foohogehoge
と書かれているとき、$fooの値を
perl側で代入して読み込む方法はないでしょうか
0175デフォルトの名無しさん
NGNG(´-`).。oO( 台風のせいかな? )
0176デフォルトの名無しさん
NGNGeval使え…と言いたい所だけど、
$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有難うございます
$b =~ s/\$foo/$foo/g;
でやってみたいとおもいます
厨な質問で申し訳ありませんでした
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNG0182デフォルトの名無しさん
NGNGPerl5 限定の話だとして、
安定版 (通常はこれを):
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そんなことはないと思う。
0184デフォルトの名無しさん
NGNGMacPerlは5.6.2 r2 のもより。
OSXでは5.8.2のもより。
0185デフォルトの名無しさん
NGNG$ 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そんな器用なものは入っていないかと思われ(苦笑)@だって標準のperlだし。
0188デフォルトの名無しさん
NGNGhttp://www.cpan.org/modules/by-module/Mac/
を見るといろいろとあるようなので、perl -MCPAN -e shell で突っ込んでみるのも良いかも?
0189デフォルトの名無しさん
NGNGレスありがとう。
CAPNに出回ってないかと…。英語苦手なものでスミマセン。
いまは、AppleScriptを呼び出したり、逆にAppleScriptの
ドロップレットから、perlを呼んだりして、一応出来るんで
すが、なんか不毛な気がするので。
0190デフォルトの名無しさん
NGNG踏む踏む、なぁるほど。。
漏れの場合、うに機と同じ感覚でterminalで動かしていたりするからあんまり苦になっていなかったりします(w
♪試しにperl -MCPAN -e shellしてみたらなんだかいろんなもの拾い始めた鬱@Securty up-dateしたら消し飛ぶ悪寒(泪)
・・・ ftp://ftp.perl.org/pub/CPAN/MIRRORED.BY が取ってこれないみたい(滂沱)@ブラウザだと、ささっと取ってきやがる(怒)
0191186
NGNG漏れも perl -MCPAN -e shell は、やったんです。
んがっ!けたたましくインストしたけど、正直ワケワカメorz。
darwin::MacOSX::File::Catalog.pm
が、臭いんだけど…。
MacJPerlでラクしすぎたせいで基本すら解ってない事に
気づきました。Mac用のモジュールって、MacPerl用だったり
しません?上のはdaewinってなってるから平気かと思ったん
ですけど。てか、勉強し直すか、Classic上でMacJPerl使います。
ごめんなさいでした。ショボーン━━(´・ω・`)━━
0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNGMac::AppleEvents を入れてみたけれど、変なダイアログとか、喋ったりとかしたのでおそらく使えるかと思います(w@make test
使い方とかはマニュアル嫁ってことで。
ところで search.cpan.org は、もう寝たみたいですなぁ(哀)
>>192
俺様文化です(w
0195デフォルトの名無しさん
NGNG数にリストで渡したときの挙動が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ユーザはどのように特定したらいいのでしょうか?
0197デフォルトの名無しさん
NGNG(´-`).。oO( cmd.exe と command.com の違いじゃないの…?)
>>196
(´-`).。oO( $< $> $( $) %ENV 辺りを眺めてみたら…?)
0198デフォルトの名無しさん
NGNG$value = "表示します。";
があった場合、
$value = "表\示します。";
に置換したいです。
$value =~ s/表/表\\/g;
ってやってみたらうまく動作しませんでした。
よろしくお願いします。
0200デフォルトの名無しさん
NGNGNet::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リリース遅すぎると思うんですが
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG"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デフォルトの名無しさん
NGNGuse encoding "utf8";
0205デフォルトの名無しさん
NGNG"牙ず?" になっちゃった事は、どうやって確認した?
UTF-8 文字列を無理やり EUC-JP と見なして表示させると、そう見えるね。
でも中身は 0xE6 0x8E 0xB2 0xE7 0xA4 0xBA 0xE6 0x9D 0xBF のまま
破壊されていないはず・・だから
$str =~ /\W/'%'. unpack('H2',$1)/eg;
で良くね?
もしかしたら、破壊しちゃった?なら無理だけど。
0206デフォルトの名無しさん
NGNG!を付けなければ破壊されないよ。
0207デフォルトの名無しさん
NGNG誤ってデコードしなけりゃいいだけだと思うのだが、それは
別の香具師で手がだせないという問題?
0208デフォルトの名無しさん
NGNGJcode.pmを使ってエンコードすると"掲示板"に戻せるように変換されるので
壊れてはいないと思います。
$str =~ s/\W/'%'. unpack('H2',$1)/eg;
でやると"牙ず?"をeucでエンコードしたことになってしまうみたいで
"牙ず?"にしか戻らなくなってしまいます。
0209デフォルトの名無しさん
NGNG基本的な文法を覚え、参考にしているWebページにあるサンプルコード程度のレベルなら
何も見ずに書けるようになりました。
しかし、普段このスレで出る質問はまだまだ自分には難しく感じます。
中には理解できるものもありますが、見ただけでは全然わからないソースもあります。
参考書・参考ページのサンプルコードを真似してる超初心者のレベルを脱出し、
実用的なコードを作れる入り口のレベルに達してさらに上達していくためには
どのような勉強方法がいいのでしょうか?
本屋でPerlに関する参考書を見たのですが、どれもWebページで代用できるようなものばかりです。
このスレで質問に答えて下さるようなプロの皆様は参考書を見たりするような
基本的な勉強方法を終えた後にどのように今のようになりましたか?
よろしければお聞かせください。
0210デフォルトの名無しさん
NGNGCPANにおいてあるモジュールのソースをperlインタープリターになったつもりで読みまくる。
0211デフォルトの名無しさん
NGNG他人の書いたコードを読むのがいいのでは?
0212デフォルトの名無しさん
NGNGこれは...ちょっときついです。
まだまだ修行が足りないようです...。
>>211
周りにPerlを使って何かを作っている人がいないのです。
Webを検索すればたくさん出てくるでしょうか?
『これが俺の作ったソースだ! 見てくれ!』って感じで公開しているところは多いのでしょうか?
0213デフォルトの名無しさん
NGNG酷いコードが多いからCGI関係はやめておいた方がいい
とりあえずuse strictしてあるコードを探して読みまくるべし
0214デフォルトの名無しさん
NGNG他人のコードを読みまくると「どうしてこういう設計になってるんだ」という疑問が湧いてくる。
湧いてこないうちは読込みが足りない。湧いてきたらデザパタ勉強汁。
0215デフォルトの名無しさん
NGNGプログラムは作成したのですが…
----------------------------------------------------------
#ファイルをオープンする。
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デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNGとりあえず、openで>か、>>が要るんじゃないか?
ま、このままじゃ、<br>しか、書き込まんが。
0220209=212
NGNG>>214
ありがとうございます。
use strict、って確か文法を厳しくチェックしますよ、って言う宣言ですよね。
早速探して読みまくってみようと思います。
0221デフォルトの名無しさん
NGNGhttp://age.tubo.80.kg/age01/img-box/img20041023162407.txt
脳内処理でスマソ。
0222デフォルトの名無しさん
NGNGなんかむちゃくちゃですねスマソ
ちゃんと書き直します。。。
0223デフォルトの名無しさん
NGNGhttp://age.tubo.80.kg/age01/img-box/img20041023183313.txt
修正と動作確認をしましたm(_ _)m
0224デフォルトの名無しさん
NGNGWinならタスクスケジューラーもあるしなー
Macは・・・Macも最近はBSDか
0225デフォルトの名無しさん
NGNGできる人とできない人をドラゴンボールの世界に例えて、戦闘力で教えてください。
0226デフォルトの名無しさん
NGNGどの辺りでしょうか?
もう半日くらいperlのソース追っかけてるけど見つからない
0227デフォルトの名無しさん
NGNG操気弾(エネルギー弾の遠隔コントロール)が使えるかどうか。
使えるけど使わない人も多い
ヤムチャは雑魚だけど、普通の地球人としては異常なレベルの強さ
0228デフォルトの名無しさん
NGNGPerlでオブジェクト指向プログラミングができないと『会社で使えねぇヤツ』って事にはならないんですか?
他の言語(Java等) でも同じことが言えるのでしょうか?
0229デフォルトの名無しさん
NGNGPerl で OOP しない人→とにかく食べられればいい人
Perl で OO なモジュールを使う人→食べ方にも気を遣う人
Perl で OO なモジュールを書く人→厨房のごたごたまで覗く人
そもそも Perl の OOP は後付で個人的には変態的だと思う。
Java だと OOP は使って当たり前ではないかと。
0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNGCan't locate Win32/API.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .
) at kore.pl line 13.
となってしまいます。とりあえず()内が見つからないというのは理解できましたが、ではココからどうすれば良いのか皆目見当がつきません。
スレ違いというかそれ以前の問題だとは思いますが、どうかお教えくださいお願いします。
0232デフォルトの名無しさん
NGNGその程度も自力解決できないようじゃそのうち罠botに
やられるのがオチなのでやめとけ(w
0233デフォルトの名無しさん
NGNGperldoc.jpのError.pmを参照
0234デフォルトの名無しさん
NGNG> ()内が見つからないというのは理解できましたが
いや、()内でWin32/API.pmが見つからない
「Documents and Settings」というフォルダに半角スペースがあるのわかる?
0236デフォルトの名無しさん
NGNG(つд⊂)ゴシゴシ
(;゚д゚) 罠bot
(つд⊂)ゴシゴシ
_, ._
(;゚ Д゚)! kore.pl
0237231
NGNG分かります、ということはDocuments and Settings となっているところを
半角を削ればいいのでしょうか?
>236
罠かな…
0238デフォルトの名無しさん
NGNG5.8.2等他のバージョンは現在入手可能でしょうか?
activestateのHPでは5.8.4しかDLできないようなのですが…;;
0239デフォルトの名無しさん
NGNG0240238
NGNG他のバージョンで試した方が良いとアドバイスをもらったもので…。
0241デフォルトの名無しさん
NGNGuse Error; セヨ。
もうとっくにある。
0242デフォルトの名無しさん
NGNG即効性もなく、ひどく遠巻きな方法だけれど
sh, grep, sed, awk と進んで C のK&R本を読み、
オライリーの本を「初めての..」「ラクダ本」「クックブック」と進めていくと
文化的な背景も含めて理解しやすいような気がするよ。
少なくとも俺はそうだった。まぁ時代的に進めると単純にそうなるのだが...
0243デフォルトの名無しさん
NGNGWin32::APIをuseしてる割には
Win32::APIがインストールされてない
(少なくとも C:/Perl/lib C:/Perl/site/lib . で見つからない)
ってことです。これってWin版にはバンドルされてるんだっけ?
0244デフォルトの名無しさん
NGNGhttp://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デフォルトの名無しさん
NGNGPL_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俺はバリバリ使ってますけど。
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNG便乗質問!!
use Error すると record という関数がインポートされますが
これってどう使うのでしょうか?
マニュアルにはさらっと、シンタックスシュガーと書かれてるだけでよくわからんです。
知ってる方教えてくだされ。
0251231
NGNGありがとうございます。Win32-API-0.41落としたのはよいのですが
インストはCのperlにおいてみたんですがだめでした。
どなたかごしどうおねがいできませんか?
0252デフォルトの名無しさん
NGNGUNIX系だとその後
perl Makefile.PL; make && make install
ですぐ事は済むのだがね。。。
Winのひとおしえてあげてください。コンパイラ必要なのかな?
0253デフォルトの名無しさん
NGNGWin32::APIはCのコンパイラがいるみたい。コンパイラを持ってるなら
perl Makefile.PL
nmake
nmake test
nmake install
ってやればいいんだけど、持ってないなら、ActivePerlを使ってればppmからインストールできる。
0254231
NGNGActivePerlを使ってppmからインストールしようとしましたが
ppm> install-API.pm
Unknown command 'install-API.pm'; type 'help' for a list of commands.
となってしまいます。
ココからどうすればよいのでしょうか? どうか御教授お願いできませんでしょうか?
0255253
NGNG今インストールしようとしているモジュールはWin32::APIでしょ。
だから
ppm> install-API.pm
じゃ意味が通じない。
ppm> install Win32-API
でやってみ?
0256231
NGNGありがとうございます
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デフォルトの名無しさん
NGNGkore.plでぐぐったらここに思いっきり懇切丁寧に書いてあるわけだが...
ttp://tomato.cable.nu/buta/biginner.html
ということでうざいからもう来ないでね
0259デフォルトの名無しさん
NGNG昇順にかつユニークに出力するプログラムを作成せよ。
但し、perlソースは5行以内かつ実行時間3000ms以下
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNG出来ない人はレスしなくてOK
0262デフォルトの名無しさん
NGNGそれって質問なのか?
↓こっちでやれば?
Perlでリクに答えるスクリプトを作るスレ
http://pc5.2ch.net/test/read.cgi/tech/1086143976/l50
0263デフォルトの名無しさん
NGNGでもプログラムのプ( ´,_ゝ`)の字もしらないこの俺
調べるのもまんどくせ2chへ質問しちゃえ
調べる気もない、教えてもらっても理解しようとする意志がない、Perlをやる気もはなっから無い
これじゃ嫌われるわな
0264デフォルトの名無しさん
NGNGこれの出力がなぜか"22"になります。これはどうしてでしょうか?
perl -e 'print &{&{sub{my $v($v=1,sub{$v},$v=2)[1]}}},$v'
これならちゃんと"2"になるんですが。分かる人いますか?
0265デフォルトの名無しさん
NGNGperl -e 'print &{&{sub{my $v;($v=1,sub{$v},$v=2)[1]}}},$v'
0266デフォルトの名無しさん
NGNG(my $v=1,sub{$v},$v=2)の二番目三番目の$vはグローバルスコープの変数だったのね。失礼。
0267デフォルトの名無しさん
NGNG試してみたら次の文にならないとスコープは有効にならないということ
のようですな。勉強になった。
while (((my $x = <>) == 1) || ($x == 2)) {
print "x=$x\n";
}
なんてやっても1しか受け付けないってことで、知らないとうっかり書いて
しまいそうだなぁ。use strictすれば怒られるからわかるけどね。
0268264
NGNGちょっと違ってたみたいです。。。
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デフォルトの名無しさん
NGNGmy($k,$v);
while(($k,$v)=each %Hash){...}
}
こうか。
あーなんかよくわかんなくなってきた。
ラクダ本読んで出直してきます。
0270デフォルトの名無しさん
NGNGperl -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ラクダ本読んでもスコープまわりの説明はいまいちハッキリしない
んだよな。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あ、なるほど。セミコロンで区切られる式の評価順序の問題だったのですね。
リストと無名関数を使ってちょっと変わった構造のプログラムでも書いてみようかと
思ったのですが、myの評価順序はかなり制約になりそうですね。
0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNG0275デフォルトの名無しさん
NGNGですが、何か?
0276デフォルトの名無しさん
NGNGsegmentation fault になっちゃうよ
どういうこと〜?
0277デフォルトの名無しさん
NGNG0278デフォルトの名無しさん
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読み込み用と書き込み用に同一のファイルを同時に開くな。
tmpファイルを使うか、配列かなんかに突っ込んどけ
0280デフォルトの名無しさん
NGNG-iオプションという手もあるな。大きなプログラムの一部にするには
ちょっと面倒だが。(Perlクックブックに例がある)
0282NIDA
NGNG// 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デフォルトの名無しさん
NGNGsub 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$str = "A";
for($i=0;$i<26;$i++){
@tmp = unpack("CC",$str);
print pack("CC",$tmp[0],$tmp[1]+$i);
}
0285278
NGNG0286デフォルトの名無しさん
NGNG作ろうと思うのですが、データ形式がテキスト形式でperlと相性のいい
DBを教えてください
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNGサンクスコ
0289NIDA
NGNG>>283, 284
chr, ord, pack, unpack なんて関数があるんですね。
ありがとうございました。 m(_ _)m
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNGマジカルインクリメント
my $char = 'A';
foreach (1 .. 26) {
print $char++;
}
#結果 : ABCDEFGHIJKLMNOPQRSTUVWXYZ
0292デフォルトの名無しさん
NGNGそれじゃ半角じゃない。
str[ 1 ]++;とやっているから全角でやりたいのは確かだ。
0293デフォルトの名無しさん
NGNGmy $char = 'A';で半角になっているのに、
#結果 : ABC...と全角になっているのは何故ですか?
0294デフォルトの名無しさん
NGNGではだめ?(w
0295デフォルトの名無しさん
NGNGカコイイ
0296デフォルトの名無しさん
NGNGcgiファイルで
#!/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初心者用の導入サイトでも見ろよ
0298デフォルトの名無しさん
NGNGprint "Content-type: text/htnl\n\n";
を書かなきゃ表示されんぜ。
0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNG#!/usr/local/perl
0301デフォルトの名無しさん
NGNG君は本気で言ってるのかね?
0302デフォルトの名無しさん
NGNGそもそも >>282 の例もおかしいことに気付いてやれよ。
0303デフォルトの名無しさん
NGNGどこがおかしいんだ?
0304デフォルトの名無しさん
NGNGこういうのやってみたいんですが、できますか?
0305デフォルトの名無しさん
NGNGe'use
ほげなオプションありまへん。
0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNGperl script.pl < file の場合はうまくいくけど、
script.pl < file はうまくいきません。
なぜなんでしょうか?
(リダイレクトせず単体では動作します。)
(ActivePerl/WinXP)
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNG0311307
NGNGprint $_ while(<>);
0312307
NGNGscript.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デフォルトの名無しさん
NGNGcmd.exe の使い方は Windows 板へ。
http://pc5.2ch.net/win/
0315307
NGNG>>313
レス自体はありがたいが質問の答えやその問題点が分かってない
ならレスは不要。逆に混乱や迷惑になるのでやめてください
逆切れスマソ
0316デフォルトの名無しさん
NGNGそこまで書いてりゃ逆切れもスルーできるんだがなぁw
0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNG逆切れするのは勝手だけど、話を振っといて、
自己解決したらハイサヨナラってのはどうかと思うぞ。
どういう仕様が原因でそうなったかとか解決方法とかを
書いて情報共有してもバチは当たらないと思うがどうよ。
0319デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNG実行UID/GIDで実行可能なパーミッションのとき真、それ以外は偽。
くわしくはラクダ本の「ファイルテスト演算子」について書いてあるところ
またはperlfunc(1)を参照せよ。
0321デフォルトの名無しさん
NGNG1:DBの更新を行う。(insert,update)
2:DB更新完了後、その旨をhtml画面で表示する
というものを作ったのですが、1のDB更新件数が膨大になるとi更新処理に時間が掛かりすぎnternal server errorで落ちてしまいます。
なにか対策方法はあるのでしょうか?
0322デフォルトの名無しさん
NGNGありがとうございました。
0323デフォルトの名無しさん
NGNG# perldoc -f -X
がいいんだけど。
0324デフォルトの名無しさん
NGNGLinux環境では単に実行権限があるかどうかを調べてるようなのですが、
Windowsだとexeファイル以外は偽を返すようです。
あるいはWindowsではexeファイル以外は実行権限を持たないように管理されてるのかもしれませんが・・・
0325デフォルトの名無しさん
NGNG英文ドキュメントすら読めない>307
知ったかレスで逆切れされてる>313
カスばっか(ププ
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNG情けないことにLinux環境とかのドキュメント読むのに慣れてないもので、
そういう便利な機能があることに気がつけなかったです;
ググったところ、最初にperldocの日本語訳されたものが出てきたので助かりましたが。
0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNGruby基地、また、帰ってきたか(プッ
0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNG>>>>>>>>>>>>>>>>>>>ruby
0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNGさて。なにやら面白そうなことが始まる悪寒。
Perlコーディング初心者質問スレ Part 38
http://pc5.2ch.net/test/read.cgi/php/1097158988/361-
多分ネタだと思うけれども(w
0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNGRuby 厨ウゼーとか言われそうであれなんだけど、 Ruby だとこんなのができるよ。
% ruby -ropen-uri -e "print open('http://2ch.net/').read"
Perl でもできるとかなり嬉しい悪寒。
0338デフォルトの名無しさん
NGNGperlはそのまんまゴミ。
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Perl
0339デフォルトの名無しさん
NGNGが足らなさすぎ
もうちょっとRuby勉強しろ、ぼけ
0340デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNGperl -MLWP::Simple -e "getprint 'http://www.2ch.net' "
0342デフォルトの名無しさん
NGNGいや、短く書くコンテストをしたいわけじゃなくて、多態で幸せになれるという話なのですが・・・
0343デフォルトの名無しさん
NGNGキャンバスを一回クリックし、そこを中心としてマウスを動かしして二回目のクリックの
とこまでを半径とする真円を作りたいのですがうまくいきません。楕円はできるのですが。
教えていただければ幸いです。
0344デフォルトの名無しさん
NGNG君、プレゼン能力ないね
0345デフォルトの名無しさん
NGNGそれはPerl/Tk関係ないな、算数を思い出せ。
クリックされた2点間の距離を計算して半径にしろ
0346デフォルトの名無しさん
NGNGはい、ないですが、それがどうしたのでしょうか?
0347デフォルトの名無しさん
NGNGuse LWP::Simple;
my $content = get('http://www.2ch.net');
open my $fh, '<', \$content;
じゃ駄目なのかい?
0348デフォルトの名無しさん
NGNG0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNG0351デフォルトの名無しさん
NGNG>>136
>>142
この142さんの「思いっきり条件付きだろうが。」とは
どういった状況を指しているんでしょうか?
自分ではOSかfairewallで内側からのportの使用を制限している時ぐらい
しか思い浮かびません。
サーバーをまたいで動作するプログラムの動作条件がどのくらい厳しい物になるのか
知りたいためご教授下さい。
0352デフォルトの名無しさん
NGNGでぐぐれ
0353デフォルトの名無しさん
NGNGフォームからのパスワードが変数にうまく入っていないようでして
ユーザファイルのパスワードとフォームに入れたパスワードの評価式がうまくいきません。
ユーザファイルの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$idをキーとするハッシュに汁。
そのままやるんなら、idとpassが1行に1個しかかけないね。
$data=<IN>が糞。
0355デフォルトの名無しさん
NGNG「ようでして」じゃなくてちゃんと調べろよ。入力パラメタの値を
そのまま表示するぐらい簡単だろ?
それにフォームからのパスワードが変数に入ってないといいながら
肝心の変数にいれるとこを出さないでいれちまった後の処理を
貼ってもしょうがない。
0356デフォルトの名無しさん
NGNGその戻り値として、Cのバッファ(char *)(100文字)を返しているのですが
うまく格納できません。
Cソース抜粋
char *test_buff;
test_buff = malloc(100);
return test_buff;
perlソース抜粋
$buff = system("test.exe");
0357デフォルトの名無しさん
NGNG0358デフォルトの名無しさん
NGNGCの方で文字列を標準出力に書き出して、Perlの方からはパイプを使って読め。
0359デフォルトの名無しさん
NGNGマルチポストかよ。死ね。
0360デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#Why_can_t_I_get_the_output_of_a_
0361348
NGNG0362デフォルトの名無しさん
NGNG独り言?
0363348
NGNGうん。でも心の何処かで助けを求めてる自分が居るような気がする。
0364デフォルトの名無しさん
NGNGwhile( $hogehoge =~/正規表現/gm)
{
$get = $&;
}
と言う風に、マッチングした複数行にわたる文字列を取得して
いますが、$hogehogeが巨大なテキストファイル(だいたい500k以上)
になるとループが動きません。この方法ではダメだとか、
ほかにいい方法があればご伝授ください。
0365デフォルトの名無しさん
NGNGんなこと言わずにもっと具体的に問題点を書きなよ。
0366348
NGNG藻前イイヤツだな
0367デフォルトの名無しさん
NGNG?
マッチすると無限ループするのか
斬新だなぁ
0368デフォルトの名無しさん
NGNG正規表現の内容によってはバックトラックがはげしく行われる等の
理由で無限ではないがものすごく時間かかることはあり得るな。
正規表現を具体的にさらせばなにか答えてくれる人がいるかも?
0369364
NGNG>>368
同じファイルで、マッチングしない部分を切り取って、
ファイルサイズを小さくした場合、正常にループが動き、
マッチングも思い通り行きますので、無限ループに陥っているわけではないみたいです。
デバッグでも確認しましたが、ループそのものが吹っ飛んでプログラム
自体が強制終了しているようです。ファイルサイズもそんなに大きくないので、
訳が分かりません。ただ、モジュール(*.pm)のサブルーチンに、$dataのような
形で渡しているのが気にはなるのですが、配列にして参照渡ししても事態は
変わりません。
0370デフォルトの名無しさん
NGNGあるいはcpu時間の制限されてるとか...
0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNGたとえば、yahoo-movieの興業成績ランキングにリンクされている映画の
題名、出演者などを自動収集したりしたいのですが、Perlでできるのでしょうか?
また、Perlでするのは正しいのでしょうか?また、簡単にできるのでしょうか?
ご教授お願いします。
0373デフォルトの名無しさん
NGNG問2. まぁ正しい
問3. 人による、ある程度Perlが使える人間にとっては簡単
0374デフォルトの名無しさん
NGNGPerlの専売特許
0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
NGNG虫の居所の悪いときなら「チラシの裏に・・・」って言うんだけどね。
>>364
while ($hogehoge =~ /(正規表現)/gm) {
$get = $1;
}
としてみてはいかが?
0377デフォルトの名無しさん
NGNG$hogehogeに含まれるマッチする最後の文字列が欲しいんだよね?
/(regex).*?(?!regex)/gm
なんてどうだろ
んで$get = $1
あとregexに関わる特殊変数は使わない方がパフォーマンスはよいです
0378364
NGNGいろいろやってみましたら、正規表現の記述に問題があり、
動作が不安定になるようです。具体的には、複数行にわたって
start とendではさんでいる間の(.*|\n)+が問題だったようです。
繰り返し数はほとんど無限と思っていましたが、調べてみたら
32766あたりが最大のようです。
0379デフォルトの名無しさん
NGNG正直、どんなデータに何をしたいのかとか実際に実装してみたパターンを
晒してもらわないと想像でしか言えないんだけど、
m オプションを付けてるんだから (.*|\n)+ みたいなパターンは要らない気がする。
/(start\n(?:.+?)end\n)/gm
とかでええのでは?
あと、 >>377 の指摘の通り、 $& みたいなのは使っちゃダメだ。
/([^\n]*\n[^\n]*\n)/gm みたいなのででかいテキストのマッチを試してみたけど、
$1 なら一瞬で終わるのが $& を使うと激遅になる。
しかも、コード中の別の箇所で一度でも $& を使うと同様に激遅になる。
$`, $&, $' は死んでも使っちゃダメだ。いや、使ったら死ぬ。
0380デフォルトの名無しさん
NGNGなんかregexec.cをみるとREG_INFTYという定数があって、32767っぽいですな。
んで、+,*はそれぞれ{1,REG_INFTY},{0,REG_INFTY}と同じになっているようです。
無限じゃないのか〜。
0381デフォルトの名無しさん
NGNGひょっとしてこれが出たのかな?
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デフォルトの名無しさん
NGNG0383364
NGNGどうしてもうまく行きません。具体的にデータをだしてみますので
ご教授いただければ助かります。
対象文字列は、
$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まだよくわかんないけど、その $data を取るならこうかなあ。
/(^>comment\d*\n[\s\S]*?)(?=>comment\d*\n|\z)/gm
0386デフォルトの名無しさん
NGNG32,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デフォルトの名無しさん
NGNGpush @result, $& unless s/正規表現//gs;
}
よくわかっていません、、、
0388デフォルトの名無しさん
NGNGやるなら
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取りさった状態で取得したいなら @result と split の間に grepを挟む。
ifの場合でもforの場合でも同じ。
@result = grep { !m/^>comment/ } split("\n", $1 ....
0390デフォルトの名無しさん
NGNG隠しファイル以外をゲットしたいときも似たようなことやるよね。
@files = grep !/^\./, readdir DIR;
0391デフォルトの名無しさん
NGNG漏れはやらないなあ。
my @files = <*>;
0392364
NGNGつなげ直すしかないのかなあ。
$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シェル使うのならそうだね
0394デフォルトの名無しさん
NGNGシェル使う?これだとシェルを起動しちゃうんだっけ?
0395デフォルトの名無しさん
NGNGいまいちデータの構造がどうなっててどうしたいのか伝わらんのだが
...
>comment_start
>comment1
foo
bar
baz
>comment2
hoge
huga
hage
>comment_end
...
てな構造で $get には >commen_start の次の行から >comment_end の直前行まで欲しいってこと?
0396デフォルトの名無しさん
NGNGもともと行になってんだから行単位に処理した方が
楽かもな。
0397デフォルトの名無しさん
NGNG同じ動作であれば下ので充分いけますよ。
print $1 if ($data =~ m/(>comment_begin.*>comment_end[^>]*)>/s);
0398デフォルトの名無しさん
NGNGグロブはシェル呼ぶはずだよ。たしか。
0399364
NGNGわかりにくくて、すみません。
>comment_start
foo
bar
baz
>comment2
hoge
huga
hage
>comment_end
hoge
nuke
kuke
と言う風に、>comment +データ領域 単位で取得したいのですが。。
全データが大きいので、正規表現の* とか+が動かない場合があって
苦労しています。
0400デフォルトの名無しさん
NGNG手元のラクダ本(2nd edition)には
“グロブを行うときにはサブシェルが起動される。だから、自分でreaddir関数を呼び出して得られたファイル名に対しgrepをする方が速いことが多い。”
と書いてある
まぁ“現在の実装では”と後付けされてはいるが
0401397
NGNGか。
0402デフォルトの名無しさん
NGNGますますワカラン・・・w
>comment_start
foo ← >comment1は無いの?
bar
baz
>comment2
hoge
huga
hage
>comment_end
hoge ← >comment_start は無いの?
nuke
kuke
何にせよこれがファイルに書いてるデータならwhileで回してフラグ使ってチマチマやるのが正解だと思う
0403デフォルトの名無しさん
NGNG知らんカッター。じゃああんまり使わんようにしよう。
0404398
NGNGグロビング表現を対応させるために、
Larryはシェルを呼ぶようにしたんだと思う。多分。
シェル依存にしないでPerlで実装させる手もあったんだろうけどね。
0405397
NGNG要は取り出したい部分が comment_start と comment_end に囲まれている
「というだけではなくて」comment_end の後に 1セクションぶら下がってる
って、ことに四苦八苦していると理解していいのか?
0406364
NGNG$cb=">comment_begin";
$ce=">comment_end";
$get = $1 if($data =~ m/($cb.*$ce[^>]*)>/s);
でうまくいきました。皆様大変ありがとうございました。
while loopを使って内部処理も同時にしようと思ったのが、つまづきの
始まりでした。得られた結果を順番に処理していくことにします。
0407デフォルトの名無しさん
NGNG0408デフォルトの名無しさん
NGNG0409デフォルトの名無しさん
NGNGマークアップ言語風に start〜end タグで囲まれてるデータじゃなくて
たぶん辞書風に title->content(s) と列挙されているデータなんだよ。
で、contents部分のフィールド数が可変だから行方向にならべるしかない、みたいな。
伝票とか、ヘッダとアイテムで構成される一般的なデータ構造もこの構造とるよ。
まあ、ファイル格納というよりはDB向きという気もするけどね。
0410364
NGNG正規表現を使って複数行の取得をして、それができたら
グループ分けで値を取得して、同時に処理も可能だと
楽だなと思った次第です。ごく簡単な正規表現しかしらないので、
今までは、行ごとに区切って、つなげてとやっていたのですが、
今回いろいろ教わりましたので、少しperlのスキルが上達した
感じです。ただ、巨大なファイルでなければ動いていたのですが、
こんなところに落とし穴があったとはという驚きもあります。
0411デフォルトの名無しさん
NGNGメールのmbox形式が、このケースの場合近いんじゃないかな?
日付やタイトルで範囲指定して中身を取り出す操作に近い気がする
0412デフォルトの名無しさん
NGNGまあ結局、">comment_begin"〜">comment_end"の組が32767以上あったら破綻する訳だ。
巨大もなにも、何かのログファイルだったりすると当たり前に越えるだろうから、
whileとフラグでチマチマやる方が正解。
0413デフォルトの名無しさん
NGNGm//mでやる場合はそうだけどm//sの場合のマッチは1回だけだから
32767の制限にはひっかからないし >>406 のやり方で
ぜんぜんOK何じゃないの?
0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNG0416デフォルトの名無しさん
NGNG何らかの検索条件を指定して(例えば●●フィールドの
値が××のレコード)を検索するようなことをやりたいんだけど、
どうやったら速いかな。
ちなみにCSVファイルは1日1ファイル、1ファイル数万行、
1レコード15カラムくらい。
0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNG無理じゃね?
1レコード15カラムでざっくり200バイトとして、
1ファイル2万行。ってことは4MB。
日々蓄積ってのが期間がわからんけど、1年としたら
1GB余裕で超えるべ。
0419デフォルトの名無しさん
NGNGそのへんの検索エンジンが何TBメモリ積んでると思ってるんだ
0420デフォルトの名無しさん
NGNGあと動作させるのは普通のPC(Windows2000)で
メモリはよくて256MB、おそらく128MBです。
0421デフォルトの名無しさん
NGNGいや、書いてないから分からない。
0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNGレコード数どのくらいいけるの?
0427デフォルトの名無しさん
NGNGいやー、多分君は聞かれてないと思うぞ。
0428デフォルトの名無しさん
NGNG儂が扱ったのはMysqlで3万件ぐらいだけど、知ってる人のは100万件超えてる。
0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNGのう
0432デフォルトの名無しさん
NGNG速さを求めるならRDBMSに突っ込んだほうが良いかと思われるけど。
お手軽にやるならDBI+DBD::CSVかなぁ。
0433デフォルトの名無しさん
NGNG(代)
〔「わたし」の転〕一人称。男性が、目下の者に対して尊大な感じを伴って用いる語。おれ。
「―も年をとった」
〔近世では、主として女性が用いた。
「薄雲はしほと涙ぐみ、―はかやうに落ぶれて路頭にさ迷ひありく事/浄瑠璃・当麻中将姫」〕
0434デフォルトの名無しさん
NGNG0435デフォルトの名無しさん
NGNG約4億
0436デフォルトの名無しさん
NGNG2000万件くらいから3000件ぐらい選択するのに
どのくらいかかるかな。
0437デフォルトの名無しさん
NGNG0438デフォルトの名無しさん
NGNG100回ファイルを作る動作をすればいいだけじゃないか
0439デフォルトの名無しさん
NGNGアフォ?
0440デフォルトの名無しさん
NGNGオラクルで2000万件超の業務データ扱ってるけど
インデックス張っておけば単純な検索なら一瞬だよ。
(まあ、索引付けた列のカーディナリにもよるけどね)
CSVをDBMSに転送して、そっちで検索かけたほうが賢いんじゃない?
0441デフォルトの名無しさん
NGNGデータをDBに落としてI/FをDBIあたりで出力をWEBに出すというのがラクです。
ただDB用にメモリ128MBしか充てられないとすれば
追加で何かちょっとしようとしたら途端に辛くなるかもね。
0442デフォルトの名無しさん
NGNG安上がり汁!!
0443デフォルトの名無しさん
NGNGどのような方法があるでしょうか?
セッションやPersistentを使っても接続は毎回切れてしまいますし
mod_perlで試してみたのですがプロセスがMaxSpareServers分起動され
必ず前回のコネクションが保ったままのプロセスにアクセスされるとは
限らないため期待する動作になりません。
プログラムAとBを作り、Aは常駐してbindしコネクションを保ったままにし
BからAにセッション情報を渡して前回のコネクションを保持するという
方法が一番現実的なのかな
0444デフォルトの名無しさん
NGNGそのプログラムAをApacheのモジュールとしてええのでは?
コネクションに番号付けて管理しておき、セッション番号と照らし合わせて
渡してあげる。みたいな。
0445デフォルトの名無しさん
NGNGサンクス
>441
サンクス
>442
ノーサンクス
0446デフォルトの名無しさん
NGNGopen F, ">$_" for 1 ..100;
なんてな
ところで
ttp://qa.perl.org/phalanx/distros.html
みんな使ってるかい?
0447デフォルトの名無しさん
NGNGDBのコネクションプーリングが目的なら Apache::DBIだな。
他に ttp://sqlrelay.sourceforge.net/ という手もある。
ネトゲーの中継とかなら自分でつくるとかかもな。
0448デフォルトの名無しさん
NGNGとにかく設計書のページ数をかせぎたい・・・。
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNGありがとう。・゚・(ノ∀`)・゚・。
さっそくググってみます。
0451デフォルトの名無しさん
NGNGpod埋め込んでいてperldoc知らないとも思えないし...
0452448
NGNG0453デフォルトの名無しさん
NGNG前のcgiで使用したスカラ変数の中身を
呼び出し先でも使いたいのですが方法はありますでしょうか。
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNG0457デフォルトの名無しさん
NGNGperlで普通に先頭行から読んでいるのですが、最終行から逆に読んだり出来ますか?
0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNG???
0460デフォルトの名無しさん
NGNGD 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言葉のそのままの意味で逆に読むことはできない。
ファイルが余り大きくないなら全部配列に読み込んで、時刻をみながらpopしていくのが楽。
458氏のようにtailの結果をリバースしてくのもいいかも。
あるいはopenしたあと、seekでラストまで飛んで適当なオフセットで戻ってくとか。
そんなかんじかな。
0462デフォルトの名無しさん
NGNG既存の物があるかな?
0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNGコマンド名なんて聞いてねーよ
0465デフォルトの名無しさん
NGNGどういう意味?/^#include.+?\.h>/でいいじゃん。
0466デフォルトの名無しさん
NGNGどういう探し方をしたのか知らんがコレでは無いのか?
http://search.cpan.org/~amichauer/C-Include-1.40/Include.pm
0467デフォルトの名無しさん
NGNGmy %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";
}
0469デフォルトの名無しさん
NGNGPerl/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サンクス。「parseする」とだけでは曖昧だった。
やりたかったことは、h2xsのようにマクロと関数宣言が大量にずらずら並んだ
ヘッダファイルをスキャンし、別言語から利用するためのスケルトンを一括作成したかったのだ。
466のC::Includeで簡単にできそうなので助かった。
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNG可能
0474デフォルトの名無しさん
NGNGとりあえず引用符の扱いに気を付けてくれ
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あっちにもコッチにも…。
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眠いので適当、しかもjperl限定。
s/(?:(\D+[\D\s]*\D+)\s?(?=\d)|(\d)\s)/$1$2,/g;
日本語の扱い
http://www.din.or.jp/~ohzaki/perl.htm#JP
0480479
NGNG「\s」 → 「\ 」で。
0481初心者
NGNGありがとうございました。
おかげで助かりました。
0482デフォルトの名無しさん
NGNG0483マイク ◆yrBrqfF1Ew
NGNGこんなところにハッカーはいない。
0484デフォルトの名無しさん
NGNG正しい意味でのハッカーか、それとも誤用が広まって
正しい意味になりつつあるハッカー(≒クラッカー)か。
0485デフォルトの名無しさん
NGNG0486457
NGNGありがとう。
popは使わなかったけど、配列をreserveで裏返した後、foreachに入れて、適当なところで、lastで抜けた。
処理時間が、五分の一になった。ありがとう。
0487デフォルトの名無しさん
NGNG↑は
if($in{'bakadesu'} ne "")
と同じ意味なのでしょうか?
0488デフォルトの名無しさん
NGNG値が 0 も偽
perlでは有名な話
0489デフォルトの名無しさん
NGNG$in{'bakadesu'} eq ""
$in{'bakadesu'} == 0
not defined $in{'bakadesu'}
not exists $in{'bakadesu'}
は全て偽
0490デフォルトの名無しさん
NGNG0491デフォルトの名無しさん
NGNG微妙どころかほとんど反対じゃないかと(笑)
0492デフォルトの名無しさん
NGNGunless($in{'bakadesu'})なら等価
>>491
? ne だから、逆ではないんでね?
0493デフォルトの名無しさん
NGNG'' ne ''は偽
!'hoge'は偽
'hoge' ne ''は真
!'0'は真
'0' ne ''は真
0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNG1個ずつダブルコーテーションで囲んでやりたいのですが、
方法はありますか?
例えば、
csv → 001,002,003 だった場合
@aaa = ("001","002","003") という配列にしたいのです。
@w_aaaを読み込んだcsvとしたとき
foreach $tmp(@w_aaa){
@aaa = split(/,/,$tmp);
}
とやると
(1,2,3)
という配列になってしまって困ってるのです。
0497デフォルトの名無しさん
NGNGん?ちゃんと @aaa = ("001","002","003") になると思うが?
そのあとの @aaa の内容を処理する箇所のやりかたがまずいのでは?
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パッケージグローバルはmyじゃ無くてourじゃ無かったか?
直接いじらせないで取得関数を作るのが正解な気もするが・・・
0501デフォルトの名無しさん
NGNGour で正解。
0502すみません
NGNG文字データの中に半角文字が含まれていたらエラーを
返したいのですが、半角文字を検出するにはどのような方法が
あるのでしょうか?
ちなみに、ActivePerl 5.8.4.810を使ってます。
0503デフォルトの名無しさん
NGNG情報が足り無すぎる。
エンコードは?Shift_JISかEUC-JPか、はたまたUTF-8か、
メール関係ならISO-2022-JP(JIS)もよく使われる。
半角文字とはASCIIコードにあるアルファベットや数字記号のことなのか?
半角カタカナの事なのか?いや、両方か。
話はこれらの情報がそろってからだ。
0504すみません
NGNG情報が少なくてすみません。
エンコードはShift_JISです。
半角文字とはアルファベットも数字記号も
半角カタカナもあらゆる半角全てです。
目的としては『全角文字以外』のものが含まれていたら
エラーとしたいのです。
0505デフォルトの名無しさん
NGNGなら
/^(?:[\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
0507デフォルトの名無しさん
NGNG$pat = 'ab' ; # 繰り返すパターン
から、'ababab' を得るスマートな方法はどんなものでしょうか。
0508デフォルトの名無しさん
NGNG0509デフォルトの名無しさん
NGNG見たことあるはずだけど記憶になかった。
ありがとう。
0510デフォルトの名無しさん
NGNG1099202399を与えると、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うちでは戻らないけど 10/31 14:59:59 と 15:00:00 になる。タイムゾーン?夏時間?
0512デフォルトの名無しさん
NGNG1時間差ってあたりが夏時間ぽいので、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,(b,b,(c),b),a)"のように置換する関数fooを作りたいのですが、正規表現でつまづきました。
どうやったらいいですか?
sub foo{
my $a = shift;
$a =~ s{
ここの正規表現がわからない!
}{
my $b = $&;
$b=~s/^_//g;
"(". foo($b) .")";
}gmex; #ここのオプションも自信ない
}
0514510
NGNGありがとうございました。
$isdatをみてみたところ、ご推察のとおり1で夏時間になっていました。
localtimeを使わないで、gmtimeを使うことにします。
0515デフォルトの名無しさん
NGNGその形のプログラムでは正規表現をどういじっても","が出てこないと思うのだが(笑)
とりあえず","がないのと改行が残るのに目をつぶれば、
(?:_\w+(?:\n|$))+
でいけると思われ。
0516513
NGNG何とかなりそうです。ありがとうございました。
0517デフォルトの名無しさん
NGNGで"は付けなくていいの?(w
@aaa = map qq|"$_"|, @aaa;
0518デフォルトの名無しさん
NGNGこのやりとりで初めて「夏時間」の
具体的な部分を理解した漏れは重度のアレだ。
0519デフォルトの名無しさん
NGNG糞サーバー?
スーパー1シャーシ+井桁よりもスーパーTZシャーシを使う方向で。
0520デフォルトの名無しさん
NGNG気にすんな。漏れ (>>511) も当てずっぽうだった(恥)
>>519
>>510 のサーバは海外のか海外に設置してるサーバじゃないのかな?
環境変数 TZ をセットし直せば localtime もうまくいきそうな気もする。
0521496
NGNGあ、すみません、(001,002,003)といった配列になってくれればいいんですよ。
(1,2,3)となってしまうのが問題だったわけで。
でも、そうやってダブルコーテを付けることもできるのですね!
今後使えそうなテクです!ありがとうございます!
0522デフォルトの名無しさん
NGNGんぢゃ、強引にこうしておく(w
@aaa = map sprintf(qq|"%03d"|,$_), @aaa;
0523デフォルトの名無しさん
NGNG('A', 'B', 'C', 'D')[2] # 'C'を返す
という簡単な記法がありますが、ハッシュみたいなリストで
Key3を取り出す下のような簡単な書き方はないのでしょうか?
('Key1', 1, 'Key2', 2, 'Key3', 3, 'Key4', 4){Key3} # 3を返す
ちゃんとハッシュに入れてからじゃないと駄目なんですか?
0524_gunzip
NGNG0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG"001"とせず、001とすると8進数の01として扱われるので注意。
0529デフォルトの名無しさん
NGNGppmを起動して、install *****(パッケージ名)
と打っても改行されるだけでインストールしてくれないのですが。
どなたか解決策を教えてください。
0530デフォルトの名無しさん
NGNGgoogleで検索にかけるなりしたらどうですか。
0531529
NGNGgoogleで検索してみてもこの症状についての説明を見つけられず・・・・。
探し方が甘いでしょうか?
0532デフォルトの名無しさん
NGNGppm> というプロンプトが出てる?
ppm> install *** で何も言わずにppm>とプロンプトに帰ってくるのか、それとも帰ってこないのか?
帰ってこないのなら単に時間がかかっているか、それともリポジトリに接続できていないか。
プロキシの設定などを調べる。
のか
か
かかかか
か
ぁぁぁぁかかかかか
か
かかかかか
0533529
NGNG20分ほど放置してみましたが何も起こらなかったので、
プロキシの設定などをやり直してみます。
0534デフォルトの名無しさん
NGNGそういうのではないのでしょうか?ちがってたらごめんね。
0535526
NGNG0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNGuntie せずにハッシュの内容をデータファイルに反映させる方法はありましょうか?
0538_gunzip
NGNG0539デフォルトの名無しさん
NGNGif ($a < $b) {
print "\$a < \$b\n";
} elsif ($a > $b) {
print "\$a > \$b\n";
} else {
print "\$a = \$b\n";
}
これでいいですか
0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNGということが聞きたいのではないかと思ってみる。
0542_gunzip
NGNGprint "\$a ", ('=', '>', '<')[$a <=> $b], " \$b\n";
とか書くことも出来るけど、あまりやらない方が良いだろうね。
0543デフォルトの名無しさん
NGNGprint "\$a ",('<','=','>')[($a<=>$b)+1]," \$b\n";
0544543
NGNGしかも-1の処理がスマート。(|||_|||)ガビーン
0545デフォルトの名無しさん
NGNGperl/Tkでwindowを出してみたんですがfontをsystemにしても
日本語が化けてしまいます何故でしょう?(Shift Jisで保存してます)
0546デフォルトの名無しさん
NGNG例えば
客1 口座番号 住所 電話
客2 口座番号 住所 電話
客3 口座番号 住所 電話
・
・
というような内容のファイルがあったとして、
それをリストのように読み込みたいのですが、
arrayを使った場合、それぞれの客の住所や電話番号
はどうやって保存すればいいのでしょうか?
学校の課題なのですが、perlは数時間しか授業でしてない
のに、わからないことだらけで困ってます。ファイルを
読むなんてこの課題の中で一番最初のところなのにそこで
つまずくなんてほんともう泣きそうです。
すみません。
0547デフォルトの名無しさん
NGNG保存ってなんだ?
0548デフォルトの名無しさん
NGNG学校の友達に聞いた方が早い。
0549デフォルトの名無しさん
NGNG保存っていうのは言葉が間違ってたらすみません。
variableの中に入れるというのでしょうか?
クラスには残念ながら連絡をとれる友達はいません。
0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNG0552_gunzip
NGNG#!/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さっそく試してみます。とてもうれしいです!!
とりあえず明日になったら教授に話をしにいきます。
ご迷惑をおかけしました。
0554デフォルトの名無しさん
NGNGprint grep{ eval } ('$a < $b', '$a == $b', '$a > $b');
これで充分。
0555デフォルトの名無しさん
NGNG$str =~ s/black (dog)|white (cat)|pink (pig)/$1$2$3/ ;
これ、 -w 付けて実行するとマッチしなかったところが、初期化されてない値だゴルァ、と言われますが、
言われない書き方はありますか。
e で一つずつ判定、と言うのはできるだけ無しの方向で。
0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNG実際初期化されてないんだからどうにもならんと思うが。
no warnings使うか、$1$2$3使わないように書き直すか、と
いったあたりだろう。
後者の例は、
$str =~ s/black (?=dog)|white (?=cat)|pink (?=pig)//;
とか。
0559デフォルトの名無しさん
NGNGOct 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デフォルトの名無しさん
NGNGStartとEndのところを(Start|End)で拾って、月と同様に
ハッシュ用意してひけばいいんじゃねーの?
0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNG引っ掛ける心配がないのであれば、(S|E)で拾って他のとこ捨てればそのまま
使えますな。
0563デフォルトの名無しさん
NGNG$line =~ /^(\w+) (\d+) (\d+:\d+:\d+).+?(S(?:tart:)|E(?:nd:))([\d\.]+) (\d+:\d+)$/
0564デフォルトの名無しさん
NGNG(S(?:tart:)|E(?:nd:))とやっても(?:...)の部分が消えるわけではないので、
$4はStartかEndになっちゃうから、(Start:|End:)とやるのとかわらない。
(?=...)のzero-width positive lookーaheadのつもりだったのかな?
これのときはさらにその後にtart:やend:を食うパターンを別途用意
しないとマッチしないよ。
0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNGprint "$mon{$1}/$2$3$4\n" if ($line =~ /^(.+?) (.+ )s.+(S|E).+?(:.+)/);
危険だけど。
0568デフォルトの名無しさん
NGNGttp://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FTk
0569デフォルトの名無しさん
NGNGこの仕様 (warning 出る) ってどうなんだろ?
選択の中でグループ化を使う (そして $1, $2, ... で参照する) のは推奨できない、
っていうこと?
そりゃ使いづらくね?
0570559
NGNG$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行で簡単に出来るような他の方法がありましたらご教授ください。
0572559
NGNG$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デフォルトの名無しさん
NGNGsystem("hoge &"); じゃダメだっけ?
0574デフォルトの名無しさん
NGNG出来ました(/∇\*)
その発想が出てこなかったのがクヤシイ
ありがとうございました。
0575デフォルトの名無しさん
NGNG持って、プログラムを組んだのですが、テキストなので
キーサーチができず、CPUの使用率が50%ほどになってしまいます。
1万レコードぐらいのデータはやはり、DBでもつべきでしょうか?
0576デフォルトの名無しさん
NGNGWindows は知らないけど、 UNIX なら Berkeley DB (DB_File) あたりがお手軽かな。
0578デフォルトの名無しさん
NGNG下のコメント部分も読みましたか?
0580デフォルトの名無しさん
NGNG1 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デフォルトの名無しさん
NGNG1 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デフォルトの名無しさん
NGNGm/^(\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表示するところを
use List::Util;
foreach (1..max(keys %cnt)) {
print $_.' '.$cnt{$_}+0."\n";
}
あたりでいいんでね?
0585デフォルトの名無しさん
NGNG元のデータをblessしたくなければコピーするしかないと
思われ。
my $self = {%$hash};
0586デフォルトの名無しさん
NGNGmy($hash)=@_;
my $self=$hash;
bless $self;
return($self);
}
そもそも、これおかしくね?
0587デフォルトの名無しさん
NGNG別に
0588586
NGNGこれだとリファレンスじゃないものはbessできんと怒られるんだが
0589583
NGNGうまくいきました。デリファレンスしたものがそのまま無名ハッシュに入るんですね。
ありがとうございました。
>>586
直接書いてたら間違えてました。。。
手元のを見たら、
my($class,$hash)=@_;
となってました。
0590デフォルトの名無しさん
NGNGありがとうございます。
でもこれですと、Undefined subroutine &main::max called at blastcount.pl line 14, <> line 32000.
とエラーが出ました。どうすればよいのでしょうか。
0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNGすみません。わかりません。どう変えたらいいのでしょうか?
0593デフォルトの名無しさん
NGNGuse List::Util qw(max);
0594デフォルトの名無しさん
NGNGサンクスコ
DB化も考えて見ます
0596デフォルトの名無しさん
NGNG$A=pop @array;
$B=pop @array;
$C=pop @array;
みたいな処理をやってたりしますが、これを一文でやる方法はありますか?
($A,$B,$C)= ...
みたいな形で。
0597_gunzip
NGNG0598_gunzip
NGNG($a, $b, $c) = reverse splice @array, -3, 3;
かな。
0599デフォルトの名無しさん
NGNGとか。
連投して済まない。
0600デフォルトの名無しさん
NGNGあえてするなら>>599かな。
0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNG0603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
NGNG一つの言語しか使えない素人発見
0605デフォルトの名無しさん
NGNG0606デフォルトの名無しさん
NGNG0607デフォルトの名無しさん
NGNG0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNGJcode.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デフォルトの名無しさん
NGNGsubstr($s, どっか) =~ /ほげほげ/
0611609
NGNG#!/usr/bin/perl
use Jcode;
BEGIN{ unshift(@INC, './abc'); }
だと駄目で
#!/usr/bin/perl
BEGIN{ unshift(@INC, './abc'); }
use Jcode;
だとOKでした。
BEGINはBEGINの方に書くのですね
0612デフォルトの名無しさん
NGNGありがとうございます。自分としてはスライスを使って上手くこの辺を
操作する方法がないかなと探してしたのですが、どうも上手くいきません。
@A=(0,1,2);
($a,$b,$c) = ($m=$#A-2, @A[($#A..$m)], $#A-=$m)[1];
0613612
NGNG範囲演算子は左の値が大きくないとダメみたいですねえ。
なんでこんな言語仕様なのかは不明です。
0614デフォルトの名無しさん
NGNG0615612
NGNG($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デフォルトの名無しさん
NGNGBEGINを先に書かないと間に合わないのは、useは
BEGIN { require Module; import Module LIST; }
と等価なので、BEGIN同士なら先に書いたほうが先に
実行されるからだな。
でもいまどきは@INC直接いじらないでuse lib使うんじゃ
ないかと。やってることはほとんど同じだけど(とマニュアル
にも書いてある)こっちの方が見やすいし。
0617デフォルトの名無しさん
NGNGb = 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デフォルトの名無しさん
NGNGuse 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$dataB = <$fh>;
}
でいいんじゃねーの
0620デフォルトの名無しさん
NGNGsub check_integer($$){
...
}
とやって、
別なとこで、check::check_integer( );
とやったとき、プロトタイプは有効にならないですか?
やってみたらならなかったので、途方にくれています。
0621620
NGNGrequire じゃなくて use 使ってインポートしないと、
プロトタイプ有効になんないのね。
できたできた。
0622デフォルトの名無しさん
NGNG多少メモリはつかうが、
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デフォルトの名無しさん
NGNGuse File::Slurp;
$_ = read_file('data.txt');
print abs($1-$2) . " ($1 - $2)\n" while (/a = (.+?)\nb = (.+?)\n/sg);
0624609
NGNG>BEGIN { require Module; import Module LIST; }
これ見て全て納得しました。
use はBEGINと同じようにコンパイル時に処理されるとは認識していたのですが
BEGINが一番優先度が高いと勝手に思い込んでいました。
私みたいなおっちょこちょいさんが多いからuse libが作られたのかな。
BEGINNERはBEGINをBEGINの方へ書くのではなくuse lib使えってことですね。
0625デフォルトの名無しさん
NGNG0626デフォルトの名無しさん
NGNGとエラーがでます。みてみたらPerl58.dllはありましたが56はなかったです。
どなたかPerl56.dllいただけませんか。
よろしくお願いします。
0627626
NGNG0628デフォルトの名無しさん
NGNG5.8がいいならクリーンインスコしてみそ
0629デフォルトの名無しさん
NGNGファイル名.htmもしくは.htmlの拡張子部分を消そうとして
$path =~ s/(\.htm|\.html)//;
とやらかしたんですがl(小文字のL)が残ってしまうです。
左側にマッチした時点で置換してしまってるだけだというのは分かるんだけど、
「じゃ、どうするべ」
という方針が立たない、、
とりあえず二行に分けて済ませたんですが、
エライ人はこれ、どうやってますか?
つうかスレ違い?正規表現スレは難しすぎて、、、。
0630デフォルトの名無しさん
NGNG順序変えればいいだけなのね。
スレ違いスマソ。
0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
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デフォルトの名無しさん
NGNGwhile(<>){
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コレクションクラスが欲しいってことなのかな?
同じオブジェクトの重複を許すのなら普通に配列にpushすればいいと思う。
重複を許さないなら、そのオブジェクトのアドレスをキーにしてハッシュに入れる。
CPANにも似たようなものはある(Set::Bagとか)。
http://search.cpan.org/modlist/Data_and_Data_Types/Set
同一のオブジェクトかどうかの判定はアドレス同士を文字列として比較 eq。(数値比較 == でもいけるらしい)
比較用のメソッド持ってもいいし、演算子オーバロードするのもよし。
同じクラスのオブジェクトかどうかの判定には ref という関数を使う。
0635デフォルトの名無しさん
NGNGそれを比較してもよい。これだとついでにオブジェクトの生成順もわかる。
あとはハッシュなり配列をblessして
コレクションクラスをつくるだけ(作らなくても良い)。
0636デフォルトの名無しさん
NGNGごく簡単に書けばこんなかんじ。
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});
}
0637632
NGNG丁寧な有難うございますm(__)m
そういえばハッシュのキーって勝手に重複判定してくれてますね、目から鱗でした。
取り敢えずSetクラスのオブジェクトをメンバ変数に持つ奴を使います。
0638デフォルトの名無しさん
NGNG0639デフォルトの名無しさん
NGNGあとで気付いたけど、どうせ$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分かっているとは思うけど、リファレンスのアドレスを「文字列」にしたものをキーとして使います。
つまり 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$xx{\$x}=$x;
$xx{\$y}=$y;
は、エラーも警告も出ずに動くでしょ?
0643デフォルトの名無しさん
NGNG#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"+" => \&add,
"\"\"" => \&string;
sub string{
my $this = shift(@_);
return "$this";
}
とかすると再起呼び出しを始める模様です
くそー、ワケワカンナイぜー
0645デフォルトの名無しさん
NGNGsub string {
my $this = shift;
return overload::StrVal($this);
}
でどうでしょうか?
0646643
NGNG0647デフォルトの名無しさん
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
という出力が得られる、という感じにしたいのです。
要は、求める文字を、用意できる文字から、ツリー状に探していきたいということです。
分かりやすく言うと、ドラクエモンスターズの配合を検索する感じです。
いまはローカルで実行して試しているんですが、中々うまくいきません。よろしくお願いします
0650デフォルトの名無しさん
NGNG0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG0653648
NGNGインテリ風に言うとそういう感じです。すいません本当はCGIの方に書こうと思ったんですが・・・
どちらにしてもうっとおしそうなので絶縁中の先輩に聞く事にします。
でももし、ミラクルなやり方があったらぜひ教えてください。
0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNGb = a + a が結果として出てくるあたり、
いまいち結合法則というか、ルールがよくわからんのだが…
0657デフォルトの名無しさん
NGNG同感。
a = b + c
b = a + a
a = b + c
…で無限再帰検索ループに陥る悪寒
0658デフォルトの名無しさん
NGNG配合ゲームっぽい事書いてるんだからそれくらい分かれよ。
0659デフォルトの名無しさん
NGNG0660デフォルトの名無しさん
NGNG同じ結果の配合が何度も出てきても仕方ないから、
検出して止めるんじゃないだろうか?
0661デフォルトの名無しさん
NGNG$ev{b}{c} = 'a';
$ev{c}{d} = 'a';
0662648
NGNGa = 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デフォルトの名無しさん
NGNGa = b + c
b = a + a
c = b + d
a = c + d
c = b + d
という出力が得られる、という感じにしたいのです。
-----------------------------------------
↑そもそもこれが意味フメー、入力が2回に分かれてるから
a = b + d を探したいのかと予想しつつ(さすがにんな単純な話じゃあないと思うが
出力を見たらどうやら違うみたいだし、マジワカンネ
0664デフォルトの名無しさん
NGNG0665663
NGNG0666デフォルトの名無しさん
NGNG0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNG上の用途程度ならいまどきのCPUで実行すれば気にならない速度だと思われ
0670648
NGNG図にするとこんな感じです。
a = b + c などのような組み合わせの種類は1500程で、
ツリーの深さによっては多少大きくなってしまうと思います。
0671デフォルトの名無しさん
NGNGsub new($)
{
my $pkg = shift;
bless
{
l => undef,
r => undef,
}, $pkg;
}
1;
$a = new Node();
$a->{l} = …
0672デフォルトの名無しさん
NGNG{
$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デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNG0677648
NGNGゆっくり読ませていただきます。
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注意して下さい
0680デフォルトの名無しさん
NGNG0681679
NGNGmy ($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;
}
早くお風呂入りたかったのでちゃんと考えないで投稿してました、すみません
0682648
NGNG計算してみた所、4階層目ですでに1000を超えるような状況になってしまい、
1つの検索を終える為には数百万行ほど、組み合わせリストと照らしあわさなければ
ならないようです。これでは実用が難しそうなので、ちょっと考えてみます。
あとお腹が痛いのでそろそろ寝ます。教えてくださった方、本当に有難うございます。
0683デフォルトの名無しさん
NGNGA
B
C
D
E
F
G
と一つ目のファイルがあって、
A
B
D
E
ともう一つのファイルがあったときに、
上のファイルの文字の中で、下のファイルにも
存在するものを出力する。
(この場合は)
A
B
D
E
のように出力できるようにするにはどんなプログラムを書けばいいのでしょうか?
0684683
NGNG二つのファイルを扱うときの質問です。
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
のように出力できるようにするにはどんなプログラムを書けばいいのでしょうか?
0685683
NGNGけるとうれしいです。
さっきの(699)は言ってみれば二つ目のファイルを参照して、一つ目のファイル
にもあるものを出力するものですが、
もう一つ聞きたいのが、二つのファイルに共通のものを出力するというものです。
例えば一つ目のファイルが
1
2
4
で、二つ目のファイルが、
2
3
6
4
だったら
2
4
と出力できるようなプログラムはどうやって書いたらよいのでしょうか。
0686デフォルトの名無しさん
NGNG@baka=<FILE>;
close FILE;
while(<>){
if (grep(/^$_ /, @baka) { # >>684
# if (grep(/^$_$/, @baka) { # >>685
print $_;
}
}
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNG0689683
NGNGありがとうございました。でも、これですと、
if (grep(/^$_ /, @baka)){
のところのif文が働いてくれず、
A 1
B 3
C 1
D 3
E 4
F 6
G 1
と出力されます。どうしたらよいのでしょうか?
0690デフォルトの名無しさん
NGNG/^$_/
0691683
NGNGというのは、
A 1
B 3
C 1
D 3
E 4
F 6
G 1
の先頭が、@bakaの中身と同じだったらということですよね。このままで
いい気がするのですが、どう変えたらよろしいのでしょうか。
0692683
NGNGプログラムの意味を間違えて理解していました。
if(grep(/^$_ /, @baka))
というのは、
A 1
B 3
C 1
D 3
E 4
F 6
G 1
という配列@bakaに対して、$_の先頭と同じだったらということですよね。
こう考えて実行しても、まだ、
A
B
D
E
と出力されてしまい、数字がでません。どこを直したらいいのでしょうか?
0693デフォルトの名無しさん
NGNG$ptn =join(/\n/,<>);# 対象英字のファイルを入力
while ( <> ){ # 数字付きのデータを入力
print if( /^[$ptn]/ );
}
0694686
NGNG>>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;
}
}
0695686
NGNGopen(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;
}
}
0696683
NGNGありがとうございました!
しかもとても簡潔でわかりやすいプログラムで感動しました!
0697683
NGNGわざわざ詳しく調べていただいてすみませんでした。
ありがとうございます。
私もgrepについて調べて、自分なりに直してみたのですが、
($exp = $_) =~ s/\r?\n//;の部分が足りなかったみたいです。
これはchompとはちがうのでしょうか?
また、\r?はどういう意味ですか?
調べたら、\rはリターンで、?は前にある文字の0,1回の表現とでてきたのですが...
0698686
NGNGunixは、\n、Macは\r。だから、winodwsとunixのに対応してるわけ。
chompは、windowsの場合はだめなんすね。2個文字があるから。
0699デフォルトの名無しさん
NGNGただし、テキストモードで開いてる時点で
文字コードの違いは吸収されているわけだから、
\r?は保険同様ですな・・・時々改行コードの変換に失敗したのか
\r\r\nになってるやつがあるから反対はしないけど。
この場合 s/[\r\n]//g; のほうがいいんじゃないかとも思う。
0700デフォルトの名無しさん
NGNGえーっと、ファイルからの入力ならテキストモードで読めば
勝手に\nになってるよ。
0701686
NGNG環境にもよるじゃない。漏れは、
cygwin+perl, v5.8.5 built for cygwin-thread-multi-64int
だけん、shift-jisのファイル読み込むと、s/\r\n//;しないと
うまくいかんです。
0702デフォルトの名無しさん
NGNGそういう特殊な環境を基準に初心者に話を進めるのは如何なものかと子一時間(ry
ちなみにクロスプラットフォームで開発することが多い自分はbinmodeしておいて、
s/\r+\n/\n/g; s/\r/\n/g;やs/[\r\n]+$//;にするのが基本になってる。
中途半端に処理するよりはこういう風にやったほうがいいのでは?
0703デフォルトの名無しさん
NGNG0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNGhttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=10&topic=10035
とかHitしたし・・・。
Parrotって何?状態です。あ、これは調べます。
0706デフォルトの名無しさん
NGNGhttp://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
0707デフォルトの名無しさん
NGNGperl in free(): warning: modified (chunk-) pointer
というメッセージが出るようになりました。
これはプログラムがヒープを破壊した、という意味なんでしょうか?
0708デフォルトの名無しさん
NGNG5.3
6.2
10.4
0.2
5.6
というデータが書かれたファイルを読み込んで、偶数行の数値とその上の行(奇数行)の数値の
差を求める処理はどうすればいいでしょうか?
[実行結果]
0.1
4.2
5.4
という出力を得たいのです。
0709708
NGNGprint "読み込むファイル名を入力してください\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デフォルトの名無しさん
NGNG0711デフォルトの名無しさん
NGNG0712デフォルトの名無しさん
NGNGUnixで動くんだが、デフォルトのコードセットがSJISで、改行コードがLF。しかもスクリプトは
SJISで書けだと。
0713デフォルトの名無しさん
NGNGお前さんは、perlで日本語もまともに使えないのか?
SJISで書けつーのがようわからんが。
0714デフォルトの名無しさん
NGNGperl5.8は、Encode.pm組み込めば、jperl相当のことができる。
0715デフォルトの名無しさん
NGNGそれも怪しいなあ、どの道中間コードにするときに展開されるから速さも変らんぞ
0716デフォルトの名無しさん
NGNG「まともに」は語弊があったかな。SJISだと「機」とか「表」の問題ね。
これがいやでRubyに逃避してたんだが、いちいちEUCに変換するのめんどいのよ。
0717デフォルトの名無しさん
NGNGUNIXやめてWindowsに
0718デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNGできね。
use encoding "shift-jis";
while(<DATA>) {
print if /機/;
print if /表/;
}
_END_
機会
表現
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNGただ、別ファイルから読み込むとだめなんですが、どうしたらよいでつか?
0722デフォルトの名無しさん
NGNGuse encoding 'shift-jis'だけだと、プログラム自体と
STDIN/STDOUTはshift-jisになるが、自分で開いたファイル
まで自動的にshift-jisだと思ってくれるわけではない。
明示的にopenするときに指定してやるか、use openで
デフォルトを変えておけばok。
0723デフォルトの名無しさん
NGNGありがとん。
use encoding "shiftjis";
use open ':encoding(shift-jis)';
で行けますた。shiftjisでもshift-jisでもいいんですねぇ。
""でも''でもいい。イイー
0724デフォルトの名無しさん
NGNG他の方法・他の言語を使うときにはまらないようにな。
0725デフォルトの名無しさん
NGNG先ほど、perlベースのプログラムを実行したところエラーが表示されたので
関連した項目を検索していたら下記の文献を見つけたのですが、環境変数の
設定とかを理解できていないので動かない状態です。マイコンピュータ→プロパティ→詳細→環境変数→××のユーザ環境変数→
TMP(編集)。。このあたりをいじればと思っているのですが。。
どなたか教えて頂ければ幸いです。因みにOSはWin2000です。
dfa.pl 内部で起動している dfa が
テンポラリフォルダへアクセスできないようです。
環境変数 TMP で適当な書き込み可能なディレクトリを指定してください。
0726デフォルトの名無しさん
NGNGSSL 接続に対応したいので検索したところ、Net::SSLeay という
モジュールを入れればよいとのことだったのですが、ActivePerl 5.8 は
非対応でした。
そこで、Crypt::SSLeay というのがあることを知り、ソースからビルドを
試みたのですが、うまくいきません。
.ppm パッケージからもインストールできるようですが、ネット接続の
関係上、ローカルにバイナリのパッケージ一式があり、そこから
ネット接続ナシでインストールできるのがベストです。
何かご存知の方、いらっしゃいませんでしょうか。
0727デフォルトの名無しさん
NGNGTMP="c:\TMP" # 空いてる既にあるディレクトリ
>>726
perllibに置くだけでいいんちゃう。
0728デフォルトの名無しさん
NGNG> ActivePerl 5.8 と Windows で Perl 環境を作っています。
> SSL 接続に対応したいので検索したところ、Net::SSLeay という
> モジュールを入れればよいとのことだったのですが、ActivePerl 5.8 は
> 非対応でした。
> そこで、Crypt::SSLeay というのがあることを知り、ソースからビルドを
> 試みたのですが、うまくいきません。
そいつは残念だったね、おれはうまくいったよ。
> .ppm パッケージからもインストールできるようですが、ネット接続の
> 関係上、ローカルにバイナリのパッケージ一式があり、そこから
> ネット接続ナシでインストールできるのがベストです。
> 何かご存知の方、いらっしゃいませんでしょうか。
ppm パッケージからもインストールできるようですが
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
そこまで分かってるなら、そこからパッケージを盗って来ればいいじゃん。
自分のとこでネットに関係なく閉じたいなら、てめぇのとこでコンパイルするこった
10回や100回失敗したくらいで見ず知らずの他人様に泣きつくなってこった
0729デフォルトの名無しさん
NGNG必要なファイルを適当なディレクトリに置けばネットワークなくても
ppmのインスコできるよ。この辺参考にドゾー。
ttp://www.ss.iij4u.or.jp/~somali/web/_ppm.html
0730デフォルトの名無しさん
NGNGコメントする相手を間違えてるんじゃないの?
0731デフォルトの名無しさん
NGNG開くにはどうしたらいいのでしょうか?
${^WIDE_SYSTEM_CALLS}は廃止されてしまったようです。
0732726
NGNGありがとう。たいへん参考になった。
0733デフォルトの名無しさん
NGNGただ奇抜なだけのもいいけど、これは凄いと唸らせるようなものも歓迎!
0734デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNGprint "ぬるぽ";
0736デフォルトの名無しさん
NGNG別途OpenSSLとかが必要になるはずですけど
そっちのほうはOKなのでしょうか?
0737デフォルトの名無しさん
NGNGこれを利用してファイルの〜行目の数値から〜行目の数値を足す、というようなことはできますか?
例えば、
4
5
91
84
というファイルに対して、2行目の数値(5)と4行目の数値(84)を足したい、と思ったとき、
あくまでも例えとしての表記で、
$a は $.=2の行の数値;
$b は $.=4の行の数値;
$answer = $a + $b;
というようなニュアンスのことをしたいのですが。
0738デフォルトの名無しさん
NGNG>perl in free(): warning: modified (chunk-) pointer
"in free(): warning: modified (chunk-) pointer" でググると分かると思うけど
rubyやらphythonやらdhcpやらbindやらcvs他他でもでるメッセージのようなので
glibcかなんかのバグじゃないのかな? あるいはメモリがイカレてるとか。
0739デフォルトの名無しさん
NGNGどのモジュールがどんな使い方ができるのか、を全体的に知る方法はないでしょうか。
何かをするときにわざわざ調べるんじゃなくて、知っておきたいのですが。
0740デフォルトの名無しさん
NGNGPDFですか?
0741デフォルトの名無しさん
NGNG・予めすべての行のデータを格納しておく
・予めすべての行のファイルポインタを格納しておく
・特定行の数値を取り出すサブルーチンを書く
どれでもいいよ
0742デフォルトの名無しさん
NGNGttp://www.cpan.org/modules/00modlist.long.html
をざっとorじっくり眺めれ。
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNG英語くらい多少は読めた方がいいよ。
日本語ならここ。
ttp://perldoc.jp/docs/modules/
ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
0745デフォルトの名無しさん
NGNGおれ初心者だけどこんなんダメかな?
#! /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沢山あるJPGデータをWebで一気に表示するというスクリプトをDLしてきたのだけど
表示されないの〜っ
.plをダブルクリックするとHTMLファイルが作成されて、同デレクトリ内のを表示する、はず
HTMLができるとこまではいけてます。
人さまからコピッてきたスクリプトをここでさらしてよいものかわかんない
0747737
NGNGありがとうございます。
�@の用に配列に全行の数値を入れて配列番号を指定することで実現できました。
>>745
そんなやり方もあるんですね。
そちらでもやってみようと思います。
ありがとうございます。
0748デフォルトの名無しさん
NGNG晒せないならここに来た意味が無いと思うが?
というか、自分で(作る|改造する)ので無ければ、
スレ違いどころか板違いな気もするが
0749デフォルトの名無しさん
NGNGWebで表示なら板違い。
WebProg板へ
0750746
NGNGコピッた時に欠行してただけみたいですorz
webで表示する部分ではなくて、数あるjegファイルを表示するのに
「デレクトリからリストを抜き出す」(かかれてた#)の指示が違ってるのかなと
思ったですよ
おじゃましました
0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNGとりあえず、ここに質問書け。
誘導は、それからだ。
0753デフォルトの名無しさん
NGNGいま急いで仕上げますんで!
やった!
0754デフォルトの名無しさん
NGNGuse 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分けて処理したいのですがいい方法は無いでしょうか?
&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のレコード順序の法則性 (ブラウザ依存っぽい?)
・こういった処理のベターな方法
の二点をご教授頂ければ焼き肉食べに行きます。
0758757
NGNG<form action="hoge.cgi?flag=1" method="POST" enctype="multipart/form-data">
というように$ENV{QUERY_STRING}を使うとか$ENV{PATH_INFO}を使うという手もありますね。
0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNGなんかわからんけど、CGIモジュール使って
あとはオマカセでいいんでねーの? 勉強か
宿題でどうしても自分でスクラッチから書く
のが条件ならしょうがないが。
0762デフォルトの名無しさん
NGNG>$exp->spawn("ssh $user\@$host\n");
expect使ったことないからわかんないけど
同じ$expで複数回spawnしても、そのインスタンスを何かの変数で受けとかないと
最後にspawnしたコマンドへのメッセージ送信になるんじゃないの?
$exp[n] = new Expect; を接続の数だけやった方がいいんじゃないかな。効率悪いのかもしれんが。
間違ってたらスマン。
0763デフォルトの名無しさん
NGNGだから接続を保存するのは spawnした時点でいいかも。
0764デフォルトの名無しさん
NGNG>>763
ありがとうございます!
えーっと?
ということは、new Expectは最初に$exp = new Expecとして一回だけ宣言するだけでよく、
あとは$exp[n] = spawn(...)を必要な数だけ作っておいて
それを後で個別に$exp[n]->expect(...)以下の文だけをつなげていくということですか?
今はちょっと試すことが出来ないので、とりあえず確認だけ。
0765デフォルトの名無しさん
NGNGmona.com, giko.com, test.com の管理者にはひとこと入れたんだろうな?
# 予約ドメインの example.com, example.co.jp, example.jp, ... を使えと何度(ry
0766デフォルトの名無しさん
NGNG$ENV{'CONTENT_TYPE'}
0767デフォルトの名無しさん
NGNGテキトーに拾ってきて読んでみれば
0768757
NGNGまた、ストリームなのでseekで移動は出来ません。
非filename属性のデータは$FORM{***}につっこみfilename属性のデータは取りあえずどこかのディレクトリ
に書き込んでおくという方法もありますが非filename属性のデータ部分で書き込むファイルのディレクトリ
を判断&setuidするプログラムなのでファイル作成時には既にsetuidされている状態が望ましいのです。
後でchownすればいいのですが処理的に気持ち悪いしスマートな方法は無いかなと思いまして。
該当しそうなテキトーなスクリプトを参考に見てみた感じでは
imgboard.cgi→STDIN全部取得型
CGI.pm→テンポラリディレクトリに書き込み
のような感じで自分の求めている処理ではありませんでした。
処理的に困難であるかとは思ったのですがこの広い世の中誰か実現している人もいるかなと思って投稿した次第です。
0769デフォルトの名無しさん
NGNGそういうストリーミングファイル受信に対応しているPerl製CGIを読んだことがあったな・・・
ウェブ管理ツールか何かだった気がするけど・・・
ちょっとハードディスクの中引っ掻き回してくる
0770デフォルトの名無しさん
NGNGテンポラリに置いといてあとでchown/chmod/renameで別に
構わんと思うのだが、何が気持ち悪いのだろうか。その
感覚を何とかした方が、無駄な努力をしなくて済みそうな
気がする(笑)
0771デフォルトの名無しさん
NGNG>それを後で個別に$exp[n]->expect(...)以下の文だけをつなげていくということですか?
たぶん。試してないけど。。
同一のexpectする内容を何回も書くの嫌だったら、書く場所一つにして同じリファレンス渡してもいいし。
両サイトの反応比較して動作を変えたいとかだと、一工夫必要かもしれないけれどね。
あと$expと@exp(= $exp[n])は違う変数としてレスに書いたから注意してください。
0772デフォルトの名無しさん
NGNGMIME::* 系のモジュールをuseするんじゃだめなのかなぁ? (MIME::Decodeとか)
少なくともMultiPartには対応しているよ。なんかよくわからないけどね。
0773デフォルトの名無しさん
NGNGクッキー使え
0774デフォルトの名無しさん
NGNG帰宅して早速スクリプトを作ってみました。
結論からいうとうまくいきませんでした。
今まで教えて貰ったことをスクリプトにすると下のようになると思うのですが・・・。
このスクリプトでもやはり二つめのサーバには行かず
>>754->>755に投稿したものと同様、一つめのサーバでメールを出してそこで
止まってしまい、「メール送信」から「ここまで」を切り取ると、二つめのサーバ
までログインしてくれて、正常に終了してくれます。
実は$exp=Expectの直下の8行目のfor文で、教えられたことを忠実に処理させようと、
++$iで加算したものを$exp[$i]->spawn(...)としようとすると、
can't call method "spawn" on undefined value...というようなエラー文が
出て終了してしまうので、
苦肉の策として上のようなスクリプトにしました。
何か良い手だてはありませんでしょうか?
0775デフォルトの名無しさん
NGNGuse 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デフォルトの名無しさん
NGNG0777デフォルトの名無しさん
NGNGそういうこともRubyで書けやパゾ
0778デフォルトの名無しさん
NGNGつか、汚すぎて読む気しない
0779デフォルトの名無しさん
NGNG$C/($A+$B)*1000
という計算式の文字列があるとして、これを実際に
計算させて値を得るにはどうしたらいいでしょか?
関数などがあるのでしょうか?
それとも自力で作るしかないですか?
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNGありがとうございます。できました。
0782757
NGNGもし見つかりましたら是非名前だけでもお教え下さいませ
>>770
確かにそうなんです。時々、どうせ使わないレシートをその場で捨てられない自分が嫌になります。
ですがファイルの作成を一時でも別のユーザーに作成してchown、renameでは
unixの各種制約を目的のユーザーに課すことが出来ないんですよね。例えばquotaとか。
>>772
今回はMIME系では解決出来なさそうです。情報ありがとうございます。
代替手段もいっぱいあるしおしっこをすると何故ブルブル震えるんだろう程度の
探求心からの質問でしたので今回はタンスの引き出しにしまっておくことにします。ありがとうございました。
0784769
NGNG一日遅れだけど発見。
ttp://hp.vector.co.jp/authors/VA032507/dsp/ja/webftpclient2.htm
lib/ftpcontrol_sub/putfileex.pl
あたりでやってます
0786デフォルトの名無しさん
NGNGLinux man pagesの英語版日本語版のファイルがあって、
groff方式だから行頭に.SHとなっているのが見出しなので、
NAME
...
名前
...
SYNOPSIS
...
書式
...
みたいなかんじで原文、日本語訳交互に表示させるスクリプトを
でっちあげていたんですが、はまってしまいました。もう朝だし、、、。
よかったらダメなところを指摘してください。
0787デフォルトの名無しさん
NGNG$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デフォルトの名無しさん
NGNGtelnetモジュールを使用して、リモートコンピュータに接続してから、
・screen起動
・外部プログラム起動
・CTRL-A d で[detached]
という操作をperlで実行したいのです。
色々サイトを回って調べて、telnet接続まではできたのですが、
上記手順の「CTRL-A d で[detached]」で行き詰っております。
CTRL-Aという操作をperlのtelnetモジュールで行うには、
どういう記述をすればよいのでしょうか?
(将来的に、CGIとしてWeb公開したいので板違いかもしれません。)
0789788
NGNG申し訳ありませんでした。
0790デフォルトの名無しさん
NGNGC:\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「自分の名前」が「加能圭介」だったりして(w
0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNG最後に
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デフォルトの名無しさん
NGNG1)perlを5.8にversion upしてもう一回コンパイルしてみる。
2)http://www.activestate.com/からLinux用のActivePerlをDLして
インストールしてからppmでインストール。
どちらか好きな方をどうぞ。
0795デフォルトの名無しさん
NGNGユーザアカウントに自分の漢字名を使ってその中に、次の漢字の内の一つが入ってるんじゃないの?
―ソЫ�\噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭�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デフォルトの名無しさん
NGNG0799デフォルトの名無しさん
NGNGユーザー名変更したら解決しました。有り難う御座いました。
ユーザー名には某PCメーカーの『ソ』が含まれておりました……。
0800デフォルトの名無しさん
NGNG専有マシンならdisk直下においといたほうがいい。
またいつか、似たような問題でトラブるよ。
0801デフォルトの名無しさん
NGNGハァ?問題の本質が分かってないんじゃない?
0802デフォルトの名無しさん
NGNGあんたもそのうちトラブるかもね(w
ばかげた「解決法」をweb上でわんさか見かけるんでレスしたまでのこと。
MSから入った初心者はたいがいひっかかる。
0803デフォルトの名無しさん
NGNGそれが分からない君は、シェルを今からでも勉強した方がいいと思うぞ
0804デフォルトの名無しさん
NGNGどうも、シェルは現役時代数百本作ったことがあります。。
でも、今はすっかり忘れてしまって。。むしろperlの方ができるかな
0805デフォルトの名無しさん
NGNG何をノタマッテいるんだか?
単純に漢字の第2バイトの問題だろ。20年以上前からMSが放置してる問題だよ。
0806デフォルトの名無しさん
NGNG当然できます。
0807デフォルトの名無しさん
NGNGシェルを数百本も作ったんですか。
0808デフォルトの名無しさん
NGNG$LANG=C cpan
とかしてみたら?
makeのエラーが日本語で出てるのがあやしい気がする。
0809デフォルトの名無しさん
NGNG1)の方法はPerl 5.8が入っているマシンで試しましたが同じ結果でした。
2)はサーバーのPerlを変える事になるので、他のスクリプトで予期せぬエラーが
出るかもしれないので躊躇っています。
自作のコードばかりなので修正が必要なときは全部自前なのがつらいです。(´∀`;)
アドバイスありがとうございました。
>>808
試してみます。
アドバイスをありがとうございました。
0810でこりん
NGNG2進数のバイナリを10進数にしたいのですが
$recode = unpack("C*",$bin) ←これの"C*"とか”N*”ってどうゆう意味
なんですか?
0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNG変数がオブジェクトか否かを調べたいのですがref($var)の結果がHASHでもARRAYでもSCALARでもREFでもGLOBでもないということから判断する以外に方法はありますか?
0813デフォルトの名無しさん
NGNGttp://www.rfs.jp/sitebuilder/perl/05/func/pack.html
0814デフォルトの名無しさん
NGNG>参照が 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デフォルトの名無しさん
NGNGScalar::Util(5.8より標準)のblessedが正にその用途。
ない・インストールできない場合はこれで
sub UNIVERSAL::__object_class__{ ref($_[0]) }
sub blessed{
local($@);
length(ref($_[0])) ? eval{ $_[0]->__object_class__ } : undef;
}
0816デフォルトの名無しさん
NGNG遅レス。Expect調べてみたところ
$_->expect(300,
[ qr/subject:/i => sub{...} ],
[ qr// => sub {...} ],
...
この手の書き方は、[]の中のパターンを順番にマッチさせていく、という制御というよりは、
パターンにマッチする文字列がどこかで発生したらsub{}を実行するというような、
イベントハンドラ的な書き方みたいだよ。
それから qr//で多分スクリプトがストールしているような気がするのだが、いかがか?
0817デフォルトの名無しさん
NGNGありがとうございます。
読みました。読みましたよ!
>>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ありがとうございました
0820797
NGNG>>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デフォルトの名無しさん
NGNGhttp://www.rsch.tuis.ac.jp/~mizutani/online/with-pc/textline.html
ここら辺でも、参考にして下さい。
0824デフォルトの名無しさん
NGNG0825でこりん
NGNGありがとうございますm(__)m
0826デフォルトの名無しさん
NGNGperlはバッチ処理のための言語です
0827デフォルトの名無しさん
NGNGうそこけ
0828デフォルトの名無しさん
NGNG0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG0831デフォルトの名無しさん
NGNG0832デフォルトの名無しさん
NGNG0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNG会社でデスマ中で返事遅れました。すんまへん。
今までの流れを愚直に書けばこんなかんじになります。
空行待ちは "\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();
}
0836835
NGNGそれからtelnetじゃなくてssshだったっけ?
まぁ一緒だよね。
0837デフォルトの名無しさん
NGNG0838デフォルトの名無しさん
NGNG0839デフォルトの名無しさん
NGNGあんの?そんなの
0841デフォルトの名無しさん
NGNG(...化石ぢゃん)
0842デフォルトの名無しさん
NGNGでは、ぬるぽしてもいいんですか?
0843デフォルトの名無しさん
NGNG0844デフォルトの名無しさん
NGNG0845デフォルトの名無しさん
NGNG@{[$" = qq{\n} and '']}
のように書いているのですが、
「このクソ虫め。条件分の中で “=” だと? “==” だろ? 田舎へ帰ってママのおっぱいでも吸ってろ」
と警告を受けるのですが、他によい書き方はありますか?
と聞こうとしたところでもう一度考えて
@{[($" = qq{\n}) x 0]}
で警告を受けなくなった。俺はクソ虫からちょっとましなクソ虫に成長した。
と日記に書いておこう。
0846デフォルトの名無しさん
NGNGabcdef の場合は 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どう並べたいのかによる。単純には sort {$a cmp $b}@array
0849デフォルトの名無しさん
NGNGそれだと、
no1_11_1 と no1_1_11 の区別がつかない。
0850デフォルトの名無しさん
NGNGこんな感じかな?
@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こんな感じじゃない?
printf "no%*vd ", '_', $_ for sort map{ s/no/v/; s/_/./g; eval } @array;
(この場合、v-stringを使うとラク)
0852デフォルトの名無しさん
NGNG0853デフォルトの名無しさん
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だめだろ、それ
0855デフォルトの名無しさん
NGNG0856デフォルトの名無しさん
NGNGゴメンチャイ
sortブロックの初めにmyですね
0857デフォルトの名無しさん
NGNG疑似ハッシュと同じく失敗機能の一つ。廃止予定。
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{ v1.2.3 => 4 } みたいな書き方がNGになっただけじゃないの? なんなら
print 'no', (join '_', unpack 'U*', $_), ' '
for sort map{ s/no//; pack 'U*', split '_' } @array;
でもよし。packすれば無理にシュワルツする必要なし。短いし。
0859デフォルトの名無しさん
NGNG0860デフォルトの名無しさん
NGNG0861デフォルトの名無しさん
NGNGanonymous でも取れますか?
0862デフォルトの名無しさん
NGNGprint "ファイル名 = ";
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という作業をしたいのですが、読み込んだ後に各行の行頭に半角スペースが入ってしまいます。
読み込むファイルが
100
200
300
という内容の場合、確認用printで確かめたところ、出力ファイルの内容が
_100
_200
_300
となってしまいます。
(『_』は半角スペースだと思ってください)
なぜでしょうか?
0864862続き
NGNGという作業をしたいのですが、読み込んだ後に各行の行頭に半角スペースが入ってしまいます。
読み込むファイルが
100
200
300
という内容の場合、確認用printで確かめたところ、出力ファイルの内容が
_100
_200
_300
となってしまいます。
(『_』は半角スペースだと思ってください)
なぜでしょうか?
0865862
NGNG0866デフォルトの名無しさん
NGNGどっかで
print WRITE "@value";
とかやってんだろ。
0867862
NGNG回答ありがとうございます。
while (my $line = <READ>)
{
print "$line\n"; #配列の中身確認用print
$value[$value_count] = $line;
$value_count++;
}
のすぐ下に確認用として、
print "@value\n";
という行がありました。
この行を削除したら意図した通りに動くようになりました。
配列変数をprint(もしくはファイルへprint) すると
なぜこのような現象が起きるのでしょうか…?
0868デフォルトの名無しさん
NGNG原因はクォーテーションの中にあるから。
print @value,"\n";
とか。
ttp://allabout.co.jp/career/cgiperl/closeup/CU20040818A/index3.htm#5
0869デフォルトの名無しさん
NGNG0870デフォルトの名無しさん
NGNG0871デフォルトの名無しさん
NGNG0872デフォルトの名無しさん
NGNGopen(IN, '| nslookup > out.txt');
print IN "ls ドメイン名";
close(IN);
のようにして、一旦out.txtに結果を吐き出す方法しか
思いつきませんでした。
Perlの変数にlsコマンドの実行結果を直接格納する方法ってあるのでしょうか?
0873デフォルトの名無しさん
NGNG0874846
NGNGと言うか、全く理解出来てないので、
皆様のコードを参考にして出直して参ります..orz
0875デフォルトの名無しさん
NGNG同じプログラムに対して入力も出力もしたいとなると
IPC::Open2。
出力をとりこんでいろいろ加工するんならはじめから
Net::DNSを使ったほうがいいかも。
0876デフォルトの名無しさん
NGNG返事が遅れました・・・ごめんなさい!
>>754です。
投稿して頂いたスクリプトを元に改造を施し
満足のいくものを仕上げることができましたよ。
メールの本文入力域を/\n/にマッチさせるためか、>>834さんのスクリプトだ
とメールを送信し終わってプロンプトに戻ってもしばらくはメールの本文を書
いて、「Not such command」などと怒られてしまうので、そこのところを改良
しました。
でも全体としてみるとかなり参考になりました。
ありがとうございます!
以下にできあがったものを載せておきます。
その他にもアドバイスをくださった方々、ありがとうございました!
0877デフォルトの名無しさん
NGNGuse 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デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNG0880デフォルトの名無しさん
NGNG>しばらくはメールの本文を書いて
? うちの機械ではちゃんと動いたんだがね。
たぶんどっかの expectのなかに []を複数書いちゃって
複数文字列待ち状態になってたんじゃないのかな?
0881デフォルトの名無しさん
NGNGs-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>|;
}
0882878
NGNG0883878
NGNG0884881
NGNG878さんありがとうございました!
0886デフォルトの名無しさん
NGNGsystem"/bin/rm -rf $BackupDIR/*"
みたいな感じでコマンドを実行しているのですが、
標準出力にでるメッセージをプログラムで受け取るにはどうしたらいいのでしょうか?
``でやった方がよい?
0887デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#Why_can_t_I_get_the_output_of_a_
0888デフォルトの名無しさん
NGNGサンクス
0889デフォルトの名無しさん
NGNG$str = "表示するべさ";
$str =~ s/\Q表示\E/表\\示/;
これだと上手く動作するようですが、置換対象が"表示"に限られるので、表→表\にしようとして
$str =~ s/\Q表\E/表\\/;
だとエラーになってしまいます。
なんとかなりませんでしょうか?
ちなみにSJISじゃないと駄目だという状況なのでEUCはNGです。
0890デフォルトの名無しさん
NGNG0891BlackLightOfStar ◆ifsBJ/KedU
NGNG〜を任意の文字列(但し、abc,def,ghi,jklというパターンは含まないとし、0文字でもいい。)
として、
abc〜def〜ghi〜def〜ghi〜jkl
とパターンマッチするかどうかを調べるにはどうすればいいのでしょう?
0892デフォルトの名無しさん
NGNG0894デフォルトの名無しさん
NGNGmy $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
NGNG0896デフォルトの名無しさん
NGNG0897BlackLightOfStar ◆ifsBJ/KedU
NGNG0898デフォルトの名無しさん
NGNG0899BlackLightOfStar ◆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
NGNG0902デフォルトの名無しさん
NGNG0903デフォルトの名無しさん
NGNG追加可能な構造体配列というのはなくて、構造体っぽく使うことにした
ハッシュリファレンスを格納する配列(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デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNGhttp://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
NGNG0907デフォルトの名無しさん
NGNG0908900
NGNGすげーー。 ありがとうございます!!
言われてみれば、そういう使い方ができますね。
ループ内でハッシュを新しく宣言しなおす、という方法はまったく思いつかなかったです。
これならその都度、リファレンスも別のものに変わると言うわけですね。
push( @$DataArray, %Data); はタイプミスじゃなく、敢えてそうしました。
自分のソースでは、\%Data のリファレンスが変わっていないので、\%Data を push しても、
同じリファレンスを渡すだけだと考えまして、ハッシュの中身を配列に全部移した後で
配列の途中(それぞれのハッシュの先頭)へのリファレンスを $DataArray->[n] で
拾おうと思ったんです(無理でしたけど)。
宣言部は、コピペするときになるべくソースを短くしようと思って、use strict とっぱらったんですが、
その過程でミスしてしまったようです。
短くするなら>>905氏くらい短くしろ!と言われそうですが・・・力不足ですみません。
>>905
ありがとうございます。
デリファレンスをいきなり使うパターンですか。
完全に自分の想像外なソースでしたが、サイトを見たり、ソースをいじったりしてだいたい仕組みが掴めました。
シンプルかつ実に面白いソースですね。
0909BlackLightOfStar ◆ifsBJ/KedU
NGNG0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNG読んで見ました。
$str =~ s/\Q表\\E/表\\\/;
に変更してみたらエラーは出なくても結果は変わらず状態です。
何か解釈がおかしいのでしょうか?
>>890
$str =~ s/\x5C/\\x5C\\x5C/;
ということでしょうか?
こちらも変化無し状態です。
よろしくおねがいします。
0912デフォルトの名無しさん
NGNG文字コードがシフトJISと分かっててなぜ文字化けするかね
0913デフォルトの名無しさん
NGNGperldoc EncodeのHandling Malformed Data
0914デフォルトの名無しさん
NGNGよく書き込んでいる
>お前に何が分かるというのか?
ってのがあるが、お前の事なんか理解できるか、ボケ。
周りに理解してもらう前に自分が周りを理解しろ。
0915デフォルトの名無しさん
NGNG\x92\x5C
0916デフォルトの名無しさん
NGNGこいつの精神の閉塞ぶりがよくわかる
0917デフォルトの名無しさん
NGNG$str = "表示"; とした時点で、$strの中身は
95 5C 8E A6 ではなく、95 8E A6 となっている。
「表」ではなくなってしまっているのだから、
「表」だけでどうにかしようってのはムリな話。
$str = '表示'; とするか、
$str = "表\示"; とするか、
use encoding "sjis"; をすべき。
0918BlackLightOfStar ◆ifsBJ/KedU
NGNG0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNG独り言ならチラシの裏でやってください。
0921デフォルトの名無しさん
NGNG・電子メールの「Re: 」はコロンの直後に空白がくる4バイト。
・この「Re」は略語ではなく、「〜に関する」という意味の前置詞。
ここまでは些末なことだし、知らない人も多いだろう。
・誰もが知っているとおり、「Re: 」はサブジェクトに添えるものである。
人名に添えるものではない。
この狂人がメールを使ったことがないとは考えられないから、
「Re:」の由来がメールとは無関係ということはないはず。
0922デフォルトの名無しさん
NGNG0923デフォルトの名無しさん
NGNG0924デフォルトの名無しさん
NGNGしぱーん
0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNG>1
<<1
1>>
Re:>1
どれもきもいなぁ。
0927デフォルトの名無しさん
NGNG0928デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNG0932デフォルトの名無しさん
NGNG0933デフォルトの名無しさん
NGNG0934デフォルトの名無しさん
NGNG/ \ __________
/ ∧ ∧ \ /
| ・ ・ | < 漏れを喰うの?
| )●( | \__________
\ ー ノ
\____/
0935デフォルトの名無しさん
NGNG0936デフォルトの名無しさん
NGNGそれをperlで作ってバッチ処理をすると 30分 CPU使用率 95%
これって、シェルより早いけどなんでなんでしょうか?
0937デフォルトの名無しさん
NGNG処理内容に依存するでしょ。
シェルから実際に起動するコマンドが重ければ重いだろうし、
シェルから大量にコマンド起動してたらその起動の処理自体が重い
(Solaris なんかだと fork(2) が重いので特にネックになりそう) だろうし。
0938936
NGNGvmstat でブロックI/Oを見てるけどシェルの場合はたいして
I/Oがでていないのに、CPUが使われていないようにみえる・・
CPU使用率が低いのにELAPSが長いということは、ファイルI/Oが多いはずなのに・・
CPUのディスパッチの優先順位がシェルの場合低い気がする・・
0939デフォルトの名無しさん
NGNG0940デフォルトの名無しさん
NGNGだから一体なにが知りたいのかね?
それに既にそれは Perl の話ではなかろう?
0941デフォルトの名無しさん
NGNGこれでいいでしょ。いまはCとシェルしかない時代じゃないんだし。
0942デフォルトの名無しさん
NGNG釣れないようですね w
0943940
NGNGせっかく煽ってるんだけら、返事ください
お願いします!
0945デフォルトの名無しさん
NGNGびびでばびでぶーってなんだったっけ
0946デフォルトの名無しさん
NGNGCPU 95% で 30分 動作する Perl の方が性能が悪い
0947デフォルトの名無しさん
NGNG0948デフォルトの名無しさん
NGNG0949デフォルトの名無しさん
NGNG0950BlackLightOfStar ◆ifsBJ/KedU
NGNGそれとCGIの他に、どのような目的で使われますか?
0951デフォルトの名無しさん
NGNG0952デフォルトの名無しさん
NGNG0953BlackLightOfStar ◆ifsBJ/KedU
NGNGRe:>952 せいぜい頑張ってくれ。
0954デフォルトの名無しさん
NGNG3次元配列を、連想配列(?)を使って表していたのですが、
値をローテーションするために、参照渡しを使おうと思い、
*factor{"111"} = *factor{"211"}
とやってみたのですが、エラーになりますた。
perl標準(?)の多次元配列をつかって、
*factor[1][1][1] = *factor[2][1][1];
もエラーになって駄目ですた。
ポインタで渡す方法紹介きぼんぬ♥
0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNG0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNGabcdefg
/{
'/'を含む計算式
}/ex;
とやると文法エラーにされました。
区切り記号変えればいいんだろうけど、なんか納得いきません。
mapみたいに、
replace { ...計算式... } ( $string, /abcdefg/ );
という感じで書く方法ないでしょうか?
0959デフォルトの名無しさん
NGNGエスケープしろよばーか
0960デフォルトの名無しさん
NGNG0961958
NGNG0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNGとやると文法エラーにされました。
区切り記号変えればいいんだろうけど、なんか納得いきません。
0964デフォルトの名無しさん
NGNGたとえば、
*a=*b;
はポインタがわたってると思ってました。
>>956
値を渡すと遅くなると思ったからです。
0965デフォルトの名無しさん
NGNG0966964
NGNG$a=1;
$b=2;
*a=*b;
print $a; ←2
$b=3;
print $a; ←3
となります。
ローテーションの規模が大きいので、値渡しでやると結構時間がかかるんです。
ポインタ渡しならメモリ管理プロセスを省略できる(推測)ので、
早くなると思ったからです。
0967デフォルトの名無しさん
NGNG0968958
NGNGperlの文が書かれる部分で、文法変わっちゃうんですよ。
みんなそれで平気なんですか
0969デフォルトの名無しさん
NGNG同じようなことができれば
ま、もういいです。
0970デフォルトの名無しさん
NGNG0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNG同じようなこともなにも、あんたCも全然知らんだろうが。
脳内言語と「同じように」と言われても、基地外子ねとしかいえんよ。
0973デフォルトの名無しさん
NGNG質問スレで質問者をたたいてるやつって、なんなんですか?
0974デフォルトの名無しさん
NGNG0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNGこれは一体・・・
0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNG>私はperlは主に文字列処理に使うものだと思っているのですが、
>それとCGIの他に、どのような目的で使われますか?
誰かが言ってるように、「詩を書くため」、「首飾り」にも
使えないことはありませんが、あなたのおっしゃる文字列処理、
CGIの他には、レポート作成、システム管理によく用いられ
ています。レポート作成というのは、PerlがPractical Extraction
and Report Languageの略であることから分かるように、ちょっ
とした統計などを行なって書式を整えて出力するなどのことです。
システム管理とは、たとえば、アクセスを監視するとかログを集計
するとか他のサーバとの交信を管理するとか、さまざまなことで
よく使われています。
0979デフォルトの名無しさん
NGNGなんで荒らしにレスするの?
0980デフォルトの名無しさん
NGNGこいつが精神を病んでいることは明らか。
それが見抜けない>>978が何を言っても聞くに値しない。
0981958
NGNG0982デフォルトの名無しさん
NGNGひとつ賢くなったな。
おめでとう。
もう忘れるなよ。
0983BlackLightOfStar ◆ifsBJ/KedU
NGNG0985デフォルトの名無しさん
NGNGマジレスは無視。
0986デフォルトの名無しさん
NGNGあいつら自演だからもう放っとけ
0987デフォルトの名無しさん
NGNG0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。