Perlについての質問箱 9箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGPerlについての質問箱です
"There's more than one way to do it"ということで
Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc2.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするので
WEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
過去ログは>>2-4あたり
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
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://pc2.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc2.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/l50
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/l50
0004デフォルトの名無しさん
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/
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG今度は質問を答える側に回っているわけで、そういった循環は大事にしたいな、と。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG>新しいコードではThreadモジュールの使用は推奨されない。
>代わりにthreadsモジュールとthreads::sharedモジュールを直接利用することが推奨される。
と書いてあるんだけど、これってマジですか?
threads.pmなんて聞いたことも無いぞ?
しかも何でモジュールなのに小文字で始まってるんだよ!
0012デフォルトの名無しさん
NGNGInterpreter threads are different from ``5005threads'' (the thread model of Perl 5.005)
by creating a new perl interpreter per thread and not sharing any data or state between threads by default.
0013デフォルトの名無しさん
NGNGplファイルのアイコンがトカゲマークに変わってしもた・・・
どうせならpmファイルもデフォルトで関連付けろと言いたい。
0014デフォルトの名無しさん
NGNGPerl5.6から新しいスレッドモデルになったと。
Thread.pmが後方互換性のためだけの存在とは思わなかったです。
ついでに質問なんですが、ActivePerl5.8.0で
以下のようなスクリプトを動かすとエラーが出ます。
$resultを出力した後でエラーが出てるので
スクリプトの終わり方に問題があるのかと思うのですが、
原因がよく分からないです。対処法はありますか?
#ソース
use Thread;
my $t = Thread->new(\&hoge);
my $result = $t->join;
print($result);
exit;
sub hoge
{
foreach(0..10)
sleep(1);
}
#エラーメッセージ
Free to wrong pool 27c9f0 not 273f88 during global destruction.
001514
NGNGsub hoge
{
foreach (0..10) { sleep(1); }
return 1;
}
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG駱駝本一冊マスターするのに、何ヶ月くらいかかる?
0018デフォルトの名無しさん
NGNG数年使ってるはずだが、暗記していないと余裕で断言できるな。
ActivePerl の HTML リファレンスがすげー役に立ってる。
>>11
>しかも何でモジュールなのに小文字で始まってるんだよ!
小文字で始まる場合はプラグマだというのが慣習のはず。
で、strict とかも実際にモジュールがあるぞ。
0019デフォルトの名無しさん
NGNGせいぜい自分が使い易いように参考資料を整備しておけば困らない。
あとは、単に読んで理解する力があればいい。
0020デフォルトの名無しさん
NGNG人のコードが読めないと思うけど。
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNG>>996
レスありがとうございます。
みなさんとやり取りで、自分の質問するべきことがやっとはっきりしました。
作ってみたいと思った処理の部分は、例えば、
5桁の数字をランダムに発生させ、その数字を発音させる、
という感じのものでした。これをwavファイルやmp3ファイルを使用して出力
させるとなるとファイル数がとても多くなると思います。
>>996 様が言われるように私には不可能かもしれませんが、「音声合成」と
ぐぐってやってみたいと思います。
0024デフォルトの名無しさん
NGNG10〜19 1刻み
20〜90 10刻み
100
1000
で「つうぇんてぃ・ふぉー・さうざんど・すりぃ・はんどれっど・ふぃふてぃ・ふぁいぶ」と順に流す。
ファイル数は29。…そんな多いか?
0025デフォルトの名無しさん
NGNGどのスレで質問すればいいか察しは付く
何て単語で検索すればいいかだいたい分る
そうゆうもんでしょ
0026デフォルトの名無しさん
NGNGプログラム組め。
0027デフォルトの名無しさん
NGNGUTF-16で"\n"を出力すると、00 0d 00 0a になることを
期待していたのですが、00 0d 0a になってしまいました。
これってどうすればよいでしょうか?
use Encode;
open $out, ">:encoding(UTF-16)", "out.txt";
print $out "\n"; # 00 0d 0a になる
print $out "\x0a"; # これでも 00 0d 0a になる
print $out "\x0d\x0a"; # 00 0d 00 0d 0a になる
close $out;
0028デフォルトの名無しさん
NGNGuse Encode;
open $out, ">:perlio:encoding(UTF-16)", "out.txt";
print $out "hoge\x0d\x0ahoge\n";
close $out;
open $in,"<:bytes","out.txt";
local $/=undef;
my $a = <$in>;
$a =~ s/([\x00-\x20\%\x80-\xff])/'%'.unpack('H2',$1)/ge;
print $a;
0029デフォルトの名無しさん
NGNGそのプログラムの出力は
%fe%ff%00h%00o%00g%00e%00%0d%00%0a%00h%00o%00g%00e%00%0a
ですが、ファイルの中はやっぱり 00 0d 0a になります。
0030デフォルトの名無しさん
NGNGopen $out, ">:raw:encoding(UTF-16)", "out.txt";
print $out "\x0d\x0a\n";
close $out;
open $in,"<:bytes","out.txt";
binmode $in;
003128,30
NGNGしかしperlfuncのbinmodeには
Note that, despite what may be implied in ``Programming Perl'' (the Camel) or elsewhere,
:raw is not the simply inverse of :crlf
-- other layers which would affect binary nature of the stream are also disabled.
とあるんだよな。わからん。
003227,29
NGNG激しくありがとうございました。
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNG>これをwavファイルやmp3ファイルを使用して出力
>させるとなるとファイル数がとても多くなると思います。
だから、
前スレ>>991
> http://www.lhs.com/realspeak/demo/ とか。
> http://demo.lhsl.com/realspeak/speak.asp に
> Language=Japanese&Frequency=8&Voice=Tomoko&UserText=tokyo
> を渡せばwavが返ってくる。
じゃあかんの?と聞いてるんだが。
0035デフォルトの名無しさん
NGNGperl2exeしか知らなかったんですけど
ppっていう便利なツールがあるんですね。
皆さん知ってました?
http://perldoc.jp/docs/modules/PAR-0.75/script/pp.pod
0036デフォルトの名無しさん
NGNG※こういうやり方があるのですね。了解です。
>>34
> http://www.lhs.com/realspeak/demo/ とか。
※ここにはアクセスできて実際にファイルを作成してもらったのですが、
↓のアドレスにアクセスすることが出来ません。
> http://demo.lhsl.com/realspeak/speak.asp に
※アクセスすると、
”Error: Please try again later.”というエラーが表示されて、
↓を実行することが出来ません。
> Language=Japanese&Frequency=8&Voice=Tomoko&UserText=tokyo
> を渡せばwavが返ってくる。
※渡してみたいのですが渡すことが出来ません。
どうすればアクセスできるのでしょう?
0037デフォルトの名無しさん
NGNGActivePerl5.8.3で ppm>install PAR でインストールして
pp -o packed.exe source.pl で生成できました。
簡単ですね!
0038デフォルトの名無しさん
NGNG上手く説明出来る自信がないのですが、
mainパッケージから呼び出したモジュールAが、
同じくmainパッケージから呼び出したモジュールHogeからも呼び出されていた場合、
二回呼び出される事になるのですか?
なんと言ったらいいのか、、メモリの中にモジュールAは二つ存在する事になるのですか?
実際にはありえない例ですが、大きいモジュール(例えばCGI.pmなんか)を各packageから呼び出しまくってた場合、
システムダウンするなんて事とかがありえるのかな、と。
{
package main;
use Hoge;
use Foo;
use A;
}
{
pachage Hoge;
use A;
}
{
pachage Foo;
use A;
}
0039デフォルトの名無しさん
NGNGPOSTメソッドじゃないとダメよ。
0040デフォルトの名無しさん
NGNG一意な名前空間は一個しか存在し得ない
あんたが一章のマニュアルページを10回読んだからって
10章の知識を得た事にはならないし、
10ページに増えてたりしない
0041デフォルトの名無しさん
NGNGラクダ本3版VOL2の29章のuseの項を読むと最初にこう書いてある
「use宣言は、指定されたモジュールを(まだロードされていなければ)
ロードして、そのモジュールからサブルーチンと変数を現在のパッケージ
にインポートする」
ここに書いてあるようにロードは1回しか行われないので安心すれ。
ただしインポートは何度も行われる。
たとえば上の例でAの中に変数$xというのがあってエクスポートされてた
としよう。
そうするとインポートされるたびに、同じ変数が$main::x, $Hoge::x, $Foo::x
という名前でも参照できるようになるが、変数の実体は一つで増えるわけ
じゃない。
0042デフォルトの名無しさん
NGNG複数のパッケージからuseすれば、おそらくメモリ不足に陥るシステムもあるだろうな。
004338
NGNG丁寧なご説明有難うございます。非常に良く理解出来ました。
メモリを少しでも節約したいのならば、
use Module ();
と呼び出すのが良さそうですね。
# 名前空間も綺麗に保てるし一石二鳥、かな?
>>41 氏の解説を見る限り、
ラクダ本には私の細かい疑問の的確な答えが載ってそうな気がします。
激しく欲しいのですが、、
手が、、出ない、、orz
0044デフォルトの名無しさん
NGNGif ($word eq 'hoge') { hoge(); }
if ($word eq 'hage') { hage(); }
if ($word eq 'fooo') { fooo(); }
else { die; }
としていたのを
eval "$word();" or die;
とするのってアリですか?
0045デフォルトの名無しさん
NGNGたまたま手元にラクダ本があったから参照しただけで、perldoc -f use
すれば
It is exactly equivalent to
BEGIN { require Module; import Module LIST; }
except that Module must be a bareword.
とか
The "BEGIN" forces the "require" and "import" to happen at com-
pile time. The "require" makes sure the module is loaded into
memory if it hasn't been yet.
といった感じにちゃんと説明されてるのであきらめずによく調べよう。
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNG(1) $word()の戻り値が偽だったときにdieしてしまう。
(2) $wordの値がhoge,hage,fooo以外だがたまたま定義されているサブルーチン名だったときは
それが呼ばれてしまう
(3) それどころか$wordにとんでもないプログラムの断片が含まれていたらそれがそのまま実行される
たとえば$wordの値が'system "rm -rf /"; hoge'だったら...((((;゜Д゜))))ガクガクブルブル
ということでその置き換えはもとのとはかなり振る舞いが違うものになってしまっている。
たぶん$wordの値がその3つの値のどれかであるか調べるところはちゃんと
書かないとだめ。もちろん$wordの値になにか仮定をして良ければある程度
はサボれる可能性はあるけどね。
$wordが3つの値のどれかであることが保証されれば、呼び出しはevalを使うまでも
なく &$word() で十分。
if ($word eq 'hoge' || $word eq 'hage' || $word eq 'fooo') { &$word(); }
else { die; }
とか、だらだらeqを並べるのがかっこ悪いならあらかじめ
%CHECK = (hoge=>1, hage=>1, fooo=>1); というハッシュを用意しといて
$CHECK{$word} or die;
&$word();
といったあたりかな。
0048デフォルトの名無しさん
NGNGfoo => \&foo,
bar => \&bar,
baz => sub{ BazClass->baz(@_) },
);
$x = $ftbl{ $word } or die;
$x->(@args); # or &$x(@args)
004944
NGNGちゃんと変数の中に何が入っているのかチェックしないと駄目なんですね。
サボりすぎちゃイカン、と。
出なおしてきます。
0050デフォルトの名無しさん
NGNG'/>/' と '/quit/' とかで分岐させたいんですけど。
0051デフォルトの名無しさん
NGNGPealのIF文でマザーのビープ音をならさせたりすることって
可能でしょうか?もしよければ教えてほしいです。
へんな質問失礼しました
0052デフォルトの名無しさん
NGNGとか
0053デフォルトの名無しさん
NGNG@data = qw( a a a b b c );
$select = $data[ rand(@data) ];
とやっていましたが、個数が多いと配列が膨れ上がってしまいます。
(a が1000個とか)
%data = ( a => 3, b => 2 c =>1 );
というハッシュに対して同じように確率に応じた要素選択をするにはどうしたら良いでしょうか。
foreach (values(%data)){ $sum += $_; }
foreach (keys(%data)){ if( rand($sum) < $data{$_} ){ $select = $_; last} }
というのを思いつきましたが、Perlに熟練した皆さんならもっと美しいコードを書くような気がします。
0054デフォルトの名無しさん
NGNGwaitforの引数にはパターンが使えるんだから | で区切って並べりゃいいと思うが。
マッチした文字列はリストコンテキストで呼べば返してもらえる。
あるいは
You can specify more than one pattern or string by simply providing
multiple Match and/or String named parameters.
とあるのでパターンそのものを複数与えることもできそう。
0055デフォルトの名無しさん
NGNGidを画像で表示させて、それをテキストボックスに入力させる
認証ってどうやったらできますか?
005650
NGNG情報ありがとうございます。
明日、さっそく職場でためしてみます!!
0057デフォルトの名無しさん
NGNG>foreach (keys(%data)){ if( rand($sum) < $data{$_} ){ $select = $_; last} }
コードとやりたいことが違ってない?
これだとどれ一つとして選択されない場合があると思うんだが。
rand() は一回だけで、0<=x<1, 1<=x<1+2, 1+2<=x<1+2+3 のどこに入るかで判断するべきなんじゃないかと。
0058デフォルトの名無しさん
NGNG関連して聞きたいんですが、44じゃないです。
---main.cgi
use Mode;
use CGI;
my $cgi = CGI->new();
my %params = $cgi->Vars;
($params{'mode'} || 'foo')->new( \%params )->execute();
---Mode.pm
package Mode;
sub new{
my $class = shift;
my $params = shift || {};
bless $params => $class;
}
package foo;
use base Mode;
sub execute{# fooの処理}
package bar;
use base Mode;
sub execute{# barの処理}
package baz;
use base Mode;
sub execute{# bazの処理}
-----------------------------------
こんな感じで処理振り分けしてますが、なんか問題あるしょうか。
セキュリティ関係ちょっと疎くて不安なのですが。
0059デフォルトの名無しさん
NGNGキーの数が十分少なければこれでいけると思う。一種のバカサーチなのでキーの数が
たくさんあるときは二分法ぽくするとかもう一工夫したいところ。
0060デフォルトの名無しさん
NGNGやってることは >>59 と同じだが。
use List::Util (sum first);
%data = ( a => 3, b => 2 c =>1 );
$idx = rand(sum values %data);
$select = first { ($idx-=$data{$_}) < 0 } keys %data;
>>58
セキュリティつうか、$param{mode} が foo, bar, baz 以外だったらエラーで落ちるけどいいの?
基本は外からやってくる値は信用しない、だと思う。
0061デフォルトの名無しさん
NGNG×use List::Util (sum first)
○use List::Util qw(sum first)
0062デフォルトの名無しさん
NGNGmodeパラメタで渡した任意の名前のモジュールのnewを呼べるってことだから、引数に
hashのreference渡されてOKなものに限定はされるけれども、とってもキケンそうな気が
します。横着しないでチェックしたほうがいいと思うよ。
0063デフォルトの名無しさん
NGNG5箱目の >>199 にこんなのがあった
これで上手く行く理由は俺には分からん
@weight = (25, 25, 150);
foreach (@weight) { $max = $_ if $_ > $max };
until ( $weight[$key = int(rand(@weight))] > rand($max) ) {}
print $key;
0064デフォルトの名無しさん
NGNGへーって感じのコードだ。
スクリプトの動きをよく見て、
3行目の二つのrandに着目してマトリクスを作れば納得いくと思う。
0065デフォルトの名無しさん
NGNGActivePerlでtailコマンド自作して間違ってheadって打ったら色々出てきて気づいた
0066デフォルトの名無しさん
NGNGこれって使い方として正しいですかね?
# code1
if ($foo & $bar & $baz) { &hoge; }
die;
# code2
$foo and $bar and $baz and &hoge or die;
0067デフォルトの名無しさん
NGNG& はビットの論理積。 and と (ほぼ) 等価なのは && 。
code1 は常に die するが code2 は $foo、$bar、$baz、&hoge
の全てが真を返す場合は die しない。
http://perldoc.jp/docs/perl/5.6.1/perlop.pod
006866
NGNGあっ、、申し訳ない、typoです。
正確には、
# code1
if ($foo && $bar && $baz) { &hoge; }
die;
でした。
> code1 は常に die するが code2 は $foo、$bar、$baz、&hoge
> の全てが真を返す場合は die しない。
と言うことはcode2を以下のようにすることでほぼ同じ振る舞いになりそうですね。
$foo and $bar and $baz and &hoge;
die;
0069
NGNGオープンしたいと思い、
$dirname = "hoge";
$filename = "hoge.dat";
mkdir $dirname, 755 or die "error";
open WFILE ">$dirname/$filename";
としてもうまくいきません・・・
そこでディレクトリを移動してから作ろうと思って
chdir $dirname or die "error";
としたけどこれも失敗します。
ディレクトリを作って、そこにファイルを作成したいだけなんですけど
一般的にはどういう手順で行うのでしょうか?
どなたか知恵を下さい!
0070デフォルトの名無しさん
NGNG何が上手くいかないのがわからん。エラーメッセージくらい書けよ。
あと、openの構文が間違っているが、まさかその所為じゃないよな?
0071デフォルトの名無しさん
NGNGmkdir $dirname, 0755 or die "error"; # 8進 だから 0をつけれ
open WFILE, ">$dirname/$filename"; # , が抜けてた
007269
NGNGmkdir $dirname, 0777;
open WFILE, ">$dirname/$filename";
でうまくいきました。。。。お二人ともビンゴです。
0073デフォルトの名無しさん
NGNGマジメにエラーハンドリング書くほどのものじゃなくても or die "$!"; ぐらいは
つけといた方が何かといいと思うよ。
0074デフォルトの名無しさん
NGNGファイル名のチェック用にスクリプトを作成してるんですが、
my $str = "filename++";
my $key = "name++";
$str =~ /$key/i;
のような場合、$keyが変数展開されてしまい、エラーが出てしまいます。
$strや$keyは、都度変わる文字列にしたいため、''を使わずに、
マッチ時に変数展開させないようにする方法はありますか?
0075デフォルトの名無しさん
NGNG変数展開されないと困ると思う。エラーがでるのは、正規表現がおかしい
から。
$key に与える文字列で複雑な正規表現を使わないで、部分的なマッチで
いいのなら
$str =~ /\Q$key\E/i
のようにして、+ がメタ文字あつかいされないようにすればいい。
007653
NGNGあ... orz
>>59-60
スピードはさほど問題ではないので、この方法を使おうかと思います。
二分法まで使わなくても、サーチ方向を前からと後ろから使い分けるだけで私の場合は十分そうです。
>>63
カコイイけど分からん(汗
007774
NGNGお恥ずかしい限りですが、メタ文字扱いされない方法として、
変数展開されなければいいと短絡的に考えていました。
もう少し用語の勉強もしたほうがいいですね…。
やりたいことは無事出来ました。
ありがとうございました。
0078デフォルトの名無しさん
NGNGすみません、「POSTメソッドじゃないとダメ」という意味が分かりません。
ぐぐっても?でした。
自分でホームページを作って、
http://demo.lhsl.com/realspeak/speak.asp
をそこに埋め込めば良い、
ということなのでしょうか?
0080デフォルトの名無しさん
NGNGパクってこいばええよ。
あとは適当にやれ。Perlなんか適当にやればいいよ。
基礎から学必要ぜんぜんないよ
でも正規表現は覚えたほうがええよ。
0081デフォルトの名無しさん
NGNG了解です。
Perlの質問に始まって、CGIの基礎に向かってしまう。
Perlの質問へ戻ることができるのは、いつのことやら・・・。
先は長そう(^^;)
0082デフォルトの名無しさん
NGNG想定する結果は、
8(1+1+6)分の1の確率で0が、
8(1+1+6)分の1の確率で1が、
8(1+1+6)分の6の確率で2が、
戻ってくればいいことがわかる。
で、3行目に着目。
最初の乱数が横軸、後者の乱数が縦軸とした場合、以下のような結果になる。
0 1 2
0 0 1 2
1 * * 2
2 * * 2
3 * * 2
4 * * 2
5 * * 2
*:乱数の再計算。つまりは、振りなおし。
数字:$keyに代入される値。
気合入れてコード追えよ。
0083デフォルトの名無しさん
NGNG64かとオモタ
自分で算出した確率がおかしいと思ったらuntilの条件部ばっか見てて「振りなおし」を考慮してなかったや
0084デフォルトの名無しさん
NGNGどの本を見ても良くわからないことがあるのです。
package main;
sub new {} # <- コンストラクタ
上記のように、mainパッケージの中でコンストラクタ作っても問題ないのでしょうか?
なんか自分でも何が聞きたいのかわかり難いのですが、なんと言うか、
どの本をみても本体から読み込む別のモジュールの事について話をしているような気がしまして、、
ってこれって意味無いのかな?
0085デフォルトの名無しさん
NGNG意味ないです。
JavaでMain.javaなんてクラス作らないのと同じです。
0086デフォルトの名無しさん
NGNG> ってこれって意味無いのかな?
意味があるかどうかはあんたが考える事。
コンストラクタったって単なるクラスメソッドだし、
sub newにしたからってコンストラクタになるわけじゃないし、
聞いてる事がよくわからないです。
0087デフォルトの名無しさん
NGNGそうか、matrixにすると一発で分かるな
試行毎の確率考えないで、振り直しの無限数列が収束するとか考えてた俺は馬鹿か
0088デフォルトの名無しさん
NGNGJavaとかだったら、そのクラスのコンストラクタはクラスの中に書くことが言語仕様によって規定されてるけど、
Perlではそうではない。
というか、Perlではそもそもルーチンやメソッドやコンストラクタなどを区別しない。
ルーチンに、コードによってメソッドやコンストラクタの能力を持たせることができるだけだ。
だから、どんな風に組もうともそれはお前の自由だが、逆に自己流のコーディングをすることで、
教科書的コーディングの持つ様々な利点や簡便さをドブに捨てていることになる。
……もしかしてお前、strictとか嫌いなんじゃないか?
0089デフォルトの名無しさん
NGNGsub new{
shift;
bless {} => hoge;
}
package hoge;
use base main;
sub method{
my $self = shift;
print ref $self;
}
package foo;
my $obj = hoge->new();
$obj->method();
# hoge です。あはは
0090デフォルトの名無しさん
NGNGあるオブジェクトが、あるメソッドを持ってるかどうかが知りたいのです。
例として
$obj = TestObj->new();
で $obj->method(); をしてエラーにならないか
ということなのですが・・・
前スレあたりで名前空間の一覧を出す方法が出てた気がするのですが、
過去ログが見つからなくて・・_no
ご存知の方がいましたら、教えていただけないでしょうか?
0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNG/((埼玉)....|......)県県庁/
を日本語に訳してくれ。
頼む。。。
0093デフォルトの名無しさん
NGNG名前空間の方はよく知らないけど、メソッドあるか調べるならそのもの
ずばりのcanというのがあります。
perlobj(1)のDefault UNIVERSAL methodsのあたり参照。
0094デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7ekbk/perl5.005/perlobj.html#Default_UNIVERSAL_methods
0095デフォルトの名無しさん
NGNG>>93-94 のように can を使うのが本筋だけど、>>91 のように
eval って $@ を調べるのもあり。名前空間にこだわるなら、
exists $TestObj::{method} && defined &TestObj::method
>>92 文字コードとPerlのヴァージョンによるのでなんとも言えない。
0096デフォルトの名無しさん
NGNG日本語1文字は2文字として見られる様です。
0097デフォルトの名無しさん
NGNG多分、文字コードがEUCで、no utf8なんだとは思うんだけど、正直、意味不明
のコード。>>96 の通りとして直訳すると、
「埼玉(全角2文字)県県庁」か「(全角3文字)県県庁」にマッチして、
$1 が「埼玉(全角2文字)」、$2 が「埼玉」か
$1 が「(全角3文字)」、$2 が undef。
「〜県県庁」に引っ掛けて「〜」の部分に取り出したかったのかなぁと思うん
だけど、その場合、EUC ならこう書くと思う(SJIS なら[\xA0-\xFF]{4}を
.... に替える)。
/([\xA0-\xFF]{4}|和歌山|鹿児島)県県庁/
ただし、$1 が本当に県名かは要チェック。
0098デフォルトの名無しさん
NGNGif (!$symlink_check) {
$c = 0;
while(-f "$LOC") {
$c++;
if ($c >= 3) { &error("■ロック中"); }
sleep(2);
上記で、symlinkが出来るかどうかのチェックをしているようなのですが、
1行目の(eval { symlink("",""); }, $@ eq "") がよく分かりません。どのような値が帰ってくるのでしょうか?
0099デフォルトの名無しさん
NGNGそのシステムでsymlinkをサポートしていれば真、なければ偽が返る。
symlinkをサポートしていないシステムでsymlinkを実行すると致命的
エラーになるので、evalしたあとに$@を見ることでそれをつかまえようと
しているわけだ。
symlinkの引数が空文字列なのは、わざと失敗させることでゴミが残らない
ようにしてるんだろうな。
perldoc -f symlinkには $symlink_exists = eval { symlink("",""); 1 }; という
同じような例がある。
0100デフォルトの名無しさん
NGNG詳しい説明
サンクスコ
0101デフォルトの名無しさん
NGNG助かりました ありがとうございます
0102デフォルトの名無しさん
NGNGうはっ「威張るってなんだろう?」とか思ってました(汗
evalだとあった場合に実行しちゃうので・・・ 存在するかどうかだけを知りたかったのです。
まぁ なんにせよありがとうございました。
0103デフォルトの名無しさん
NGNGopen FILE, "test.txt";
print $! . "\n";
ってしか書いてないのに、実行すると
『デバイスに対する不適切なioctlです』
と必ず出てしまいます。リブートしても同じ。OSはRedHat9(2.4.20-8)。
FreeBSDに入れ直して同じようにしたら出ません。
これはRedHat9のせい?
0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNGこれでできるかな。
0106デフォルトの名無しさん
NGNGRedHatは知らんが、必要がないならばprintに渡す引き数で文字列の連結はしない方が早いぞ
print $!, "\n";
0107デフォルトの名無しさん
NGNGopenが成功してるときは$!の値は意味がないと思われ。
0108デフォルトの名無しさん
NGNGと同様の動きをするプログラムを
spiltを使わず、s///gなどを使って書いてください。
悩んでまつ(´・ω・`)へるぷ・・・
0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG簡単じゃん、答えるまでもない。ああ、やりゃいい。
ヒント:m!!g
0111デフォルトの名無しさん
NGNGだせぇ、でもTMTOWTDIで許す。
って、優香、宿題にマジレスすんなよ。
悩め > 108。
0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNG@x = grep($_ ne '-' , ($y =~ m/(.)/g));
0114113
NGNG0115デフォルトの名無しさん
NGNG特にオマエだ > 113
0116113
NGNG$y = "a-b-c";
_('Д` )_ )_ ダメカ...
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNGunshift @x,'' if $y =~ m!^-!;
118は$y='abcd';のとき失敗。一行はむずい?
0120デフォルトの名無しさん
NGNG水を得た魚のようにヘタレどもが集まってくることだな。
0121デフォルトの名無しさん
NGNG0122デフォルトの名無しさん
NGNGBy default, empty leading fields are preserved, and empty
trailing ones are deleted.
の後半を忘れてませんか?
と重箱の隅をつついてみる。
0123113
NGNG>>113の正規表現を(-|[^\-]*)にすれば一行だ。
0124113
NGNG0125デフォルトの名無しさん
NGNG@x = split /-/, $y;
じゃだめなのかと・・・。
いいじゃんこれで
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNG@x = $y =~ m!([^-]*)(?:-|$)!g;
while (@x&&!$x[$#x]) {pop @x}
>>124
$y = '-aA-bB--cC---dD--';だったらどうなる?
0128デフォルトの名無しさん
NGNG0129デフォルトの名無しさん
NGNGどーぞ。ただし答えられる奴がいるかどうかは又別問題
0130デフォルトの名無しさん
NGNG@x = ($y =~ m/[^\-]+/g);
0131デフォルトの名無しさん
NGNG@X=$y=~/-/g;
0132デフォルトの名無しさん
NGNGmy @x = $y =~ /([^-]*)(?:-*$|-)/g;
--$#x;
0133デフォルトの名無しさん
NGNGで使用する場合どうしたらいいのでしょうか?
例えば、下の例でいくと$testは空白のままです。
fooの所でhoge->new();を追加すると11が帰ってくるのですが、
このようにしないと、インスタンス変数は使えないのですか?
package main;
my $hoge=hoge->new();
my $foo=foo->new();
package hoge;
sub new {
my $class = shift;
my $define = {};
$define->{'BUZ'} = '11';
bless $define,$class;
}
sub GetBuz {
my $self = shift;
return $self->{'BUZ'};
}
package foo;
use base hoge;
sub new {
my $class = shift;
my $define = {};
bless $define,$class;
my $test = $define->GetBuz;
print "$test";
}
0134デフォルトの名無しさん
NGNG> 例えば、下の例でいくと$testは空白のままです。
当然だろ、$define = {}だぜ。
> fooの所でhoge->new();を追加すると11が帰ってくるのですが、
> このようにしないと、インスタンス変数は使えないのですか?
普通はnew()も継承するけどな。オマエのも別に間違いではない。
あと、foo->new()で作られたインスタンスのrefは’’だよ、気つけな。
それからuse strict入れるとエラーなるぞ。
0135134
NGNGこのままだと、語弊があるな。普通は明示的に$define = hoge->new();などのようにするつぅ事。
何もperlに限った話ではないと思うぞ。何か勘違いしてないか >133
0136デフォルトの名無しさん
NGNGfooはhogeを継承しているが、newはfooで定義しなおされているので、
foo->new()ではhogeのnewは実行されない。
hogeのnewは継承を意識したクラス引数を取るパターンになってるので
fooのnewを以下のようにすればいいんじゃないかな。あとprintのあとで
$defineを返してないのは凡ミスだろう。
sub new {
my $class = shift;
my $define = $class->SUPER::new();
my $test = $define->GetBuz;
print "$test";
$define;
}
0137デフォルトの名無しさん
NGNG$define = $class->SUPER::new() で一度、
hoge側のnewを呼び出しておかないと、いけないんですね。
継承ってことだから、use base qw(hoge); を行えば全部
利用できるかと勘違いしてました。
もちっと修行してきます。
0138枢軸 ◆AmzNr0BSVY
NGNGflock FH,2
sleep 1;
は、sleepがなくとも、同時期書き込み防止できるよね?
0139デフォルトの名無しさん
NGNG有っても無くても防止出来ないかもしれない。
0140枢軸 ◆AmzNr0BSVY
NGNGならseek FH,0,2も追加。
0141デフォルトの名無しさん
NGNGsleepもseekもロックとは無関係。
よくある誤りだが、open FH, ">$file"などとしていると、
ロックする前にファイルを空にしてしまう。"+<$file"とするべき。
0142枢軸 ◆AmzNr0BSVY
NGNGサンクス、sleepは理解できたが、
seekの動きがいまいち理解できない(´;ω;`)ウッ…
0143枢軸 ◆AmzNr0BSVY
NGNG何故か教えれ!!
0144デフォルトの名無しさん
NGNGアドバイスしようがない。どういう使い方してるの?
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNGread(STDIN,$data,1)などしてみましたがlinuxの入力バッファリングに阻まれているのが現状です。
0147デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq5.html#How_can_I_read_a_single_characte
0148デフォルトの名無しさん
NGNGありがとう。モジュールがないと厳しいみたいですね。
0149デフォルトの名無しさん
NGNGハンドラの中で正規表現を使うとSegmentation fault (core dumped)で落ちる。
# --- begin script --- #
use XML::Parser::Lite;
my $p = new XML::Parser::Lite;
$p->setHandlers(Start=>sub {my $tag = shift; $tag =~ s/a//});
$p->parse('<tag></tag>');
# --- end script --- #
環境は、
$ perl -v
This is perl, v5.8.2 built for cygwin-thread-multi-64int
$ less /usr/lib/perl5/site_perl/5.8.2/XML/Parser/Lite.pm
package XML::Parser::Lite;
# $Id: Lite.pm,v 1.1.1.1 2002/11/01 14:53:57 paulclinger Exp $
$VERSION = sprintf("%d.%s", map {s/_//g; $_} q$Name: release-0_60-public $ =~ /-(\d+)_([\d_]+)/);
おまいらの環境ではどうなる?
0150デフォルトの名無しさん
NGNGPERL58.DLL内でAccess Violation。
perl -v
This is perl, v5.8.3 built for MSWin32-x86-multi-thread
(with 8 registered patches, see perl -V for more detail)
Copyright 1987-2003, Larry Wall
Binary build 809 provided by ActiveState Corp. http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Feb 3 2004 00:28:51
0151デフォルトの名無しさん
NGNG「"D","","A","C","B"」といった配列を通常にソートした場合、
「"","A","B","C","D"」と並び替えられますよね?
それを「"A","B","C","D",""」といったふうに、何も入ってない部分が一番最後に回ってくるように並び替えたいんです。
この場合、どのようなソート順の定義をすればいいか、何方かご教授お願いします。
0152デフォルトの名無しさん
NGNGmap { chop; $_ } sort map { $_ . "\xff" } @input;
0153デフォルトの名無しさん
NGNG@tmp = sort grep length, @input;
push @tmp, ('') x (@input - @tmp);
0155デフォルトの名無しさん
NGNGcallbackの中にregexpがあると落ちるみたいだね。
XML::Parser::Lite.pm覗いたけど、あたしの頭じゃ、よう分からん(^^;;;;
作者にレポートしたら?
XML::ParserならOKだよ。
あと、callbackはsub {my $expat = shift; my $tag = shift; $tag =~ s/a//}
0156デフォルトの名無しさん
NGNGソート順の定義を素直にやるなら
sort { ($a eq '' || $b eq '')? ($b cmp $a): ($a cmp $b) } @input
てな感じになるだろう。でも比較方法指定なしのソートのほうがかなり速いので
153の方が速度的には有利だと思うよ。
0157デフォルトの名無しさん
NGNG例えば、サブルーチンを一つのパッケージに纏めるだけの単純なもののような。
必要無いなら使わなくても良いとも思ったのですが、
今のPerlはオブジェクト指向だなどという言葉もちょくちょく聞くので
特に必要が無くてもそのような記述にした方が良いのかとも思い迷ってます。
#確かに見た目は良くなるというか多少読み易くはなるのですが……
0158デフォルトの名無しさん
NGNG「オブジェクト指向デザインは、それが意味のある場合に使い、
そうでない場合には避けること」…と駱駝本には書いてある。
0159デフォルトの名無しさん
NGNG> 小規模なスクリプトでのオブジェクト指向って無駄でしょうか。
無駄って事はないと思うよ。
今複数カテゴリチームのBBSとML管理、及びそれぞれのチームのIndexページ
を統合するやつ書いてるんだけど、初めてOOPで書いた。
ついでにHTMLもテンプレート化してHTML吐き出しを排除。デザインもcssファイルで
外部ファイル化してる。
正直、もう戻れないなあ、と思ってます。
前回書いた奴は2500行のべた書きだけど、触る気にならないです。ってか
それがOOPで書いてみようか、っていう動機なんだけど。
だってちょっと触りたいな、と思ってもさっぱりワヤで自分で書いたものなのに
見る気もしない。
モジュールもせいぜい長くても100行程度、短いのは30行ぐらいしかないのもある。
オブジェクトにする意味があるのなら大きい小さいは関係ないと思います。
興味があるなら小さいものでもやってみるべきだと思う。
本当に新たな手法を手に入れる事になるから。
その上で、
「オブジェクト指向デザインは、それが意味のある場合に使い、
そうでない場合には避けること」
は、もっともです。
0160デフォルトの名無しさん
NGNGグローバル変数で書いた方が早い。いくつかサブルーティン化
したものと比べるとすぐ分かる。
0161デフォルトの名無しさん
NGNG規模が中程度ならサブルーチン化
小規模ならば無名サブルーチン
みたいな使い分けしてるっぽ。
0162デフォルトの名無しさん
NGNGよければみんなでよってたかってぃι"めτください。
0163149
NGNG「splitやregexpは使えません」って書いてあった。
ソース解析してたら
>Start=>sub {my $tag = shift; $tag =~ s/a//}
で定義されたサブルーチンが直接正規表現の中に埋め込まれていた。
そのせいみたい。
0164157
NGNG自分の書いているのは機能を分けるとなると
サブルーチン一つにパッケージ一つとかになるような
簡単なものばかりなので必要無いなら使わないの言葉に従う事にします。
#既に幾つかOOで書き直して居たりしますが
0165デフォルトの名無しさん
NGNG文字コードのスレに書き込んだのですが確かな回答が得られませんでした。
test.txtという、shift-jisで保存されたテキストファイルがあります。
(ファイル名も、置かれているディレクトリも常に同じ。)
このファイルを、utf-8に変換したいのですが、やり方がわかりません。
いろんなサイトを参考にして、何種類かやり方があるようなことがわかり、
試しに、
use utf8;
$input_filename ='C:\hoge\test.txt';
$output_filename ='C:\hoge\test.txt';
open my $in,'<:encoding(shift_jis)',$input_filename or die "open $input_filename: $!\n";
open my $out,'>:encoding(utf8)',$output_filename or die "open $output_filename: $!\n";
while(<$in>){print $out $_;
}
close($in) or die "read $input_filename: $!\n";
close($out) or die "write $output_filename: $!\n";
という風に書いてみましたが、結果はtest.txtの中が空になるだけでした。
0166デフォルトの名無しさん
NGNGまた、別のやり方として、
use utf8;
$input_filename ='C:\hoge\test.txt';
$output_filename ='C:\hoge\test.txt';
use Encode qw(from_to);
open my $in, "<", $input_filename or die;
open my $out, ">", $output_filename or die;
while(<$in>){
from_to($_, "shift_jis", "utf8");
print $out $_;
}
という風なやり方も試してみましたが、結果は同じでした。
どこがいけないのでしょうか?
ちなみに、保存するファイル名を変えるとうまくいくのですが、
できれば同じファイル名にしたいのです。
どなたか詳しい方、よろしくお願いします。
0167デフォルトの名無しさん
NGNG↑!
0168デフォルトの名無しさん
NGNGあれだけはっきり書いてやったのに。失せろ。
0169デフォルトの名無しさん
NGNG>open my $out,'>:encoding(utf8)',$output_filename or die "open $output_filename: $!\n";
これやった瞬間にファイルが空になる。
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGこの時に、Unix系のOSのログイン時のようにキー入力をエコーしないようにしたい
のですが何かいい方法があったら教えてください。
0172171
NGNG0173デフォルトの名無しさん
NGNG初期かええていないって
環境変数 は どう
0174デフォルトの名無しさん
NGNG一度はラマ本読んだ方がいい?
駱駝本は買うべき?
0175デフォルトの名無しさん
NGNG>>174
俺は 駱駝本⇒カワセミ本って来て、
常駐してるのはCGI&Perlポケットリファレンス
キレイなサンプルコードがあればそれ見たほうが早いかも(なかなかないがね)
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNG大抵は自作自演以下略な流れになるんだよなあ……。
0179デフォルトの名無しさん
NGNGhttp://www.oreilly.co.jp/BOOK/msql/
http://www.pearsoned.co.jp/washo/prog/wa_pro41-j.html
http://pc2.2ch.net/test/read.cgi/php/1030209573/
http://pc2.2ch.net/test/read.cgi/tech/1079745865/
0180デフォルトの名無しさん
NGNG>>4 参考
とりあえずラマ本とEffective Perlは読んでおけ
ラクダは金あるなら買ってもいいけど、perldoc で大抵間に合う
0181デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNGとりあいず今の本読み終ったら、ラマ本読んでみるよ。
0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNGサンクス、 <br>
とりあいず今の本読み終ったら、ラマ本読んでみるよ。 <>
184: デフォルトの名無しさん<>sage<>04/03/25 14:31<>
まずクックブックを薦める。後はperldocで間に合わない時だけでいい。 <>
185: デフォルトの名無しさん<><>04/03/25 17:38<>
「CGI&Perlポケットリファレンス」はPerlのリファレンス本としては <br>
最強でしょ。 <>
186: デフォルトの名無しさん<>sage<>04/03/25 18:03<>
下記のテンプレサイトのsmtpでのメール送信スクリプトを使用して、添付ファイルを送付することは可能でしょうか。 <br>
ttp://www5a.biglobe.ne.jp/~n_rieko/perl/smtp.htm#perl <br> 普通のメール送信までは出来たのですが、ログを添付ファイルとして送付したいと思っています。 <br>
<br>
net::smtpやqmailも使用出来るのでそちらを使ったほうが早そうですが・・。 <>
0187デフォルトの名無しさん
NGNGヘッダ、データ部の作成ってところで、$send_dataに自由に何でも <br>
入れられるできるようになってるので、添付ファイルつきのメールが <br>
どうあるべきかをよく調べて作ってやれば可能だと思う。MIMEの <br>
RFCを読むとか、出来合いのメールアプリで自分に添付ファイルつき <br>
メールおくって中身を見てテキトーに真似するとかね。 <br>
<br>
私ならCPANにあるMIME-ToolsかMIME-Liteあたりを使うと思うけど、 <br>
使い方調べたりする手間とどっちが楽かは微妙といえば微妙だな。 <br>
コレも一種の"There's more than one way to do it"ということで。 <br>
<>
188: デフォルトの名無しさん<>sage<>04/03/26 11:00<>
<a href="../test/read.cgi/tech/1079114157/187" target="_blank">>>187</a>さん <br>
ありがとうございます、検討してみます。 <br>
<br>
2Mのログ7つを固めて送らなければいけないので負荷の問題で、もっと軽い処理にしなきゃいけないかとも思っています。 <>
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNGmy $instance = Classs->new();
こんな感じのtypoとか、実行前にメソッド呼び出し先のクラスが正しくuseされているか
チェックするツールがあった気がするのですが、誰か知りません?
0190デフォルトの名無しさん
NGNG激しくシステム依存な予感
>>189
Perlは実行しないとクラスがuseされてるかどうか分からないし、
実行前にクラス名のtypoを見つけることは出来ない。残念だが。
C++なりJavaなりに移行するか、実行時エラーで我慢するしかない。
0191デフォルトの名無しさん
NGNGCGI::SessionをCPANよりインストールを試みましたが、
途中で、止まってしまいます。OSは、FreeBSDです。
~~~~~~~~~~
BEGIN failed--compilation aborted at blib/lib/CGI/Session/File.pm line 12.
dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED tests 2-14
Failed 13/14 tests, 7.14% okay
t/api3_mysql........skipping test on this platform
t/api3_obj_store....(offline mode: enter name=value pairs on standard input)
_(プロンプト)
何か入力を促されていると思うのですが、適当に入力しても反応が
見られません。
どのように対処すればよろしいでしょうか?
よろしくお願いします。
0192性器
NGNG(?{ last }) とか (?{ next }) とかするとPerlが止まってしまいます
何で???
0193189
NGNG厳密に文法を解析してエラーチェックしてくれなくてもよいのだけど、
my $f=shift @ARGV;
open(F,$f);
while(<F>){
$classes{$2}=1 if(/(^use )(.*);$/);
print "line $.: warn $2 have not been loaded.n" if( /(s{1,})(w*)->(.*)((.*)/ && !$classes{$2} );
}
close(F);
のような単純な正規表現よりは強力なのきぼんぬな感じなのですが、
何か良いツール無いですかね。
0194デフォルトの名無しさん
NGNG\\ \7 \n
0195デフォルトの名無しさん
NGNG$x = (2050 / 2.05) - 1000;
print $x;
としたとき、本来、$xは0になると思うのですが、0になりません。
正しい計算結果を得るにはどうしたら良いのでしょうか。
ぐぐっても、perlは倍精度浮動小数点だということしかわからず。
それが関係してるのでしょうか?
ちなみにgoogle計算機でも0にならなかったです。
0196デフォルトの名無しさん
NGNG$x = int(2050 / 2.05) - 1000; # 小数点以下切り捨て
$x = sprintf("%3.0d", 2050 / 2.05) - 1000; # 精度を明示的に指定
0197デフォルトの名無しさん
NGNG0199197
NGNGData-Properties-0.02 # TODO:エスケープを処理していない。←論外
Config-Properties-0.56 # Unicodeエスケープにも対応!
というわけで、Config-Propertiesを使ってみます。
0200デフォルトの名無しさん
NGNGmy $fh = shift;
# ファイルハンドルとして扱える、*FHや$fhが渡されたときだけ
# 真になるようにするにはどう書けばいいですか?
return $fh =~ m/^(GLOB|\*)/; # みたいな方法しか思いつきません。
# 確実な方法を教えてくださいです。。。
}
open(FH, '<', 'test1.txt');
print is_filehandle(*FH), "\n";
open(my $fh, '<', 'test2.txt');
print is_filehandle($fh), "\n";
0201デフォルトの名無しさん
NGNGFileHandle モジュール使え
0202デフォルトの名無しさん
NGNGC/C++でいうとなんですか?
0203デフォルトの名無しさん
NGNGmy $fh = shift;
return defined *$fh{IO};
}
かな?
0204デフォルトの名無しさん
NGNGHTML→JavaScript→Perl→PHPときて今アセンブラに手を出してますが何か飛ばしてる気分
0205デフォルトの名無しさん
NGNG補足しとくと、2.05 ちうのは「中途半端な数」だ
浮動小数 演算 誤差 とかでぐぐれ
0206デフォルトの名無しさん
NGNGありがとう!
0207デフォルトの名無しさん
NGNGuse bignum;
$x = (2050 / 2.05) - 1000;
でいいじゃん
0208デフォルトの名無しさん
NGNG再帰的な構文をマッチする正規表現を構築するため、正規表現の
再帰部分を<HOGE>として、表現全体と置換するようにしてみました。
しかし、3層のネストをマッチする表現を構築しようとしたところで、
Perlの文字列型が溢れてしまい困っています。
そこで質問なのですが、Perlでは正規表現の一部をプリコンパイルしたり出来ますか?
あるいは、長い正規表現を短い正規表現で代替する方法はありませんか?
本物のパーサーは書きたくないです…。教えてエライ人!
0209デフォルトの名無しさん
NGNGperlの正規表現は再帰を扱う機能がある
0210デフォルトの名無しさん
NGNG(??{ code }) でいけると思われ。詳細はperlre(1)参照すれば
バランスしたカッコにマッチするパターンの例もあるよ。
0211195
NGNG0212デフォルトの名無しさん
NGNG入力された文字列に特定の文字が入っているかどうかを
探すにはどうやればいいんでしょうか。
(たとえば"●"または"▲"の文字が入っていればOKと返すような)
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNGダウト。たとえばEUCなら
"□ゥ" =~ m/●|▲/
は真なので日本語のマッチは結構難しい。
ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Match
あたりが参考になると思う。
unicodeにしちまえばいいという話もあるらしいが
そっちはよくわからんので詳しい人ドゾー。
0215デフォルトの名無しさん
NGNG当方、ここ数日でperlを詰め込んでいます。
とほほさんや色々のサイトを見ながらある文章の意味を調べているのですが、
if (/$XX=([^\;]+)\;?/)
{
の意味がさっぱりです。
すみません、どなたかヒントなどをいただければ大変ありがたいです。
0216デフォルトの名無しさん
NGNG\; -> ;
ヒントなど。
0218デフォルトの名無しさん
NGNGわかんねーからきいてんじゃんかよ
ばかかおめー
0219デフォルトの名無しさん
NGNG普通このようとならindexじゃない?
0220デフォルトの名無しさん
NGNGヒントなど。
「俺→胃袋→宇宙」
0221デフォルトの名無しさん
NGNGヒントなど3。
Mハゲ=ベジータ;
>>215=ベジータ
0222デフォルトの名無しさん
NGNG1つはid(id.txt)だけの
1
2
3
のようなファイルで,
2つめはidと名前の書いてある(db.txt)データベース
1,田中
2,鈴木
3,山田
があったとき,id.txtの内容をdb.txtを使って,
田中
鈴木
山田
のように置換したいのですが何かいい方法はありますでしょうか?
id.txtを1行ずつ読み込み,db.txtの内容を配列に格納し,
foreach文で配列を回して,idがマッチしたときにidに対応する
名前に置換しようと思ったのですが,名前の配列の取り出し方が
わかりませんでした.
0223デフォルトの名無しさん
NGNGopen DB, '<' . $db_txt or die $!;
my %db;
while (<DB>) {
/^(\d+),(.+)$/ or next;
$db{$1} = $2;
}
close DB;
open ID, '<' . $id_txt or die $!;
open TMP, '>' . $tmp_txt or die $!;
while (<ID>) {
/^(\d+)$/ or next;
print TMP $db{$1}, "\n";
}
close TMP;
close ID;
rename $tmp_txt => $id_txt or die $!;
この処理を頻繁にやるなら db.txt は予め DBM 等に。
0224デフォルトの名無しさん
NGNGダッセーw
0225212
NGNGありがとうございました!!
0226222
NGNGありがとうございました!
Perlビギナーのため,ハッシュの使い方もわかりませんでしたが,
勉強になりました.
最初にidに対応する名前を配列に設定して,次にidファイルのidに
マッチした配列を書き込むということなんですね.
0227デフォルトの名無しさん
NGNGm// と //は同じって事でおk?
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNGif (/ # 正規表現開始(m/の省略形)
$XX # 変数XXの内容を正規表現の一部として展開
= # イコール文字
([^\;]+) # セミコロン以外の文字の一つ以上の連続
\;? # 任意のセミコロン
/x) # 正規表現中に空白とコメントを含めるためのオプション
{
$XX = 'hoge'; # のとき、
hoge=abcde; # や
hoge=abcde # がマッチする
hoge=; # と
hoge= # はマッチしない
foobar=agadgfaskdjagfasd #は当然マッチしない
# しかし
foobarhoge=abcde;abcde
# でも「hoge=abcde;」の部分がマッチするので、
# 使い方によっては/^$XX=([^\;]+)\;?$/としないと危険かもしれない。
0230デフォルトの名無しさん
NGNGまさに天からの助けだったよ。
前スレなので、もうどなたかもわからないけど本当に本当にありがとう。
勝ったらまたカキコしまつ。
0231デフォルトの名無しさん
NGNG224じゃ無いが、ここらへん俺もダサいと思う。
> open DB, '<' . $db_txt or die $!;
> open TMP, '>' . $tmp_txt or die $!;
0232デフォルトの名無しさん
NGNGってことか?
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNGと
{@$ref[0]}[1]
はどう解釈すればいいの?
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNGスカラ ${ }
配列 @{ }
ハッシュ %{ }
グロブ { }
のようにグロブ以外は { の前にコンテキストを示す記号が入る。
もしグロブをデリファレンスしたかったのなら
perl -e 'use strict; my $ref =[\*STDOUT]; print {@$ref[0]}[1] '
は STDOUT に対して [1] の無名配列の文字表現を出力する。
0240デフォルトの名無しさん
NGNGアフォ
0241デフォルトの名無しさん
NGNGどうして"意外"なの?
0242デフォルトの名無しさん
NGNGグロブ(type glob)のデリファレンスは *{ $var } だぞ。
print {FILEHANDLE} (args)
これはグロブをデリファレンスしているわけじゃない。
間接メソッド呼び出し
method {object} (args)
と同じ構文でファイルハンドルを参照しているだけだ。
0243デフォルトの名無しさん
NGNGまず自分で勉強してこい
0244デフォルトの名無しさん
NGNGどーしてもわからないところで詰まってるので、質問させて下さい。
テキストファイル(ハンドル:TXT)に、
1,名前,メール,内容
2,名前,メール,内容
3,名前,メール,内容
ってな感じでデータ保存してまして、
この最後の行の最初の文字から何行分データがあるか数えたいのですが、
open(TXT,"+>> $txtfile");
@txt = <TXT>; #全データを取り込み、
$last_txt=pop(@txt); #最終行の文字列を取り出して、
@words=split(/,/,$last_txt); #文字列を配列に変換し、
$last_id=shift(@words); #last_idを取り込む
push(@txt,$last_txt); #元に戻す
close(TXT);
ってな感じでやってるのに、$last_id=3となりません。
どこがいけないんでしょうか?
0245デフォルトの名無しさん
NGNGテキストファイルの最後に改行が2つないかい?
俺が思うに改行が2つあるため
@txt = ("1...\n","2...\n","3...\n","\n");
って感じになったと思う。
ちなみに
@txt = ('1,名前,メール,内容', '2,名前,メール,内容', '3,名前,メール,内容');
$last_txt=pop(@txt);
@words=split(/,/,$last_txt);
$last_id=shift(@words);
push(@txt,$last_txt);
print $last_id;
で3になった。
漏れの質問だが
コンストラクタってなんだ?
教えてくれ。。。
0246デフォルトの名無しさん
NGNG何行分のデータがあるかを知るのに、最後の行の最初の項目から得なきゃならん特別な理由があるのか?
無ければ配列の要素数は配列をスカラに代入することで得れる。
$last_id = @txt;
0247デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?q=%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF%E3%80%80perl&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0248245
NGNGopen(TXT,"$txtfile");
print ((split /,/,(@x=<TXT>)[$#x])[0]);
この二行でいいじゃん。
ところで、
<FH>;
って感じに略したら、どの配列変数に代入されてるの?
0249デフォルトの名無しさん
NGNG一ヶ月にしては上達しすぎ。
0250デフォルトの名無しさん
NGNG一行ずつ読んで一行ずつ書き出すとヘッド動きまくりでHDDが痛む。
この辺りの取捨選択ってどう言う基準でやってますか。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNG固定長のバッファをリング状に連ねたもの。
一番古いバッファから、新しい書き込みによって破壊されていく。
少ないメモリーで効果が発揮されることが特徴。
現在は、メモリーに余裕があるため使われなくなった。
0253デフォルトの名無しさん
NGNGさすがに一文字ずつはCPUの無駄使いな余寒
0254デフォルトの名無しさん
NGNGこのあたりはよく釣れますかね?
0256デフォルトの名無しさん
NGNGありがとう。
あなたいいひと。
0257でふぉな名無しさん
NGNG>>250
Perlのよーな言語を使うなら気にするな。
そのあたりはOSにまかしとけ。特定環境を想定するもんじゃないし。
メモリがんがん使うと仮想記憶が動いてHDDを動かすわけだし
気にするときりがない。
そもそも最近のHDDはそんなにやわじゃないし、そこまで気にする
よーなでけープログラム書けるようになってから悩め(笑
0258244
NGNG一ヶ月では知識&発想がちゃいますね。
ありがとうございました。
246の人もサンキューデス。
配列の要素数を知るっていう配列操作調べたけど、
ないと思ってました。それでいけるんですね。
書き直してみます。
0259デフォルトの名無しさん
NGNGこの意味を教えてください
0260デフォルトの名無しさん
NGNG<*> はカレントディレクトリのファイル一覧(配列)を取得します。
で>>259ですが試してみたら、
そのファイル一覧配列の一番先頭のファイル名が代入されました。まる。
0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNGのでこちらで質問させてください。
CGI::Sessionでセッションを使用しようとしてるんですが、セッションデータ
の引継ぎの方法がよくわかりません。
最初に
$session = new CGI::Session("driver::File", $sid, {Directory => $session_dir});
でセッションオブジェクトを生成し、
$session->param("aaa", "v_bbb");
$sid = $session->id();
のようにデータをいれ、セッションIDを取得し、そのIDで新しいセッション
オブジェクトを
$session = new CGI::Session("driver::File", $sid, {Directory => $session_dir});
のように取得しても、そのセッションオブジェクトからは前にいれたデータは
取り出せません。(もちろんセッションデータは指定のフォルダに存在しています)
質問したいのは、セッションデータを引き継ぐ方法として上記のやり方は
正しいのかということと(間違ってるからうまくいかないのだとおもいますが)、
もし間違っているのであれば、どうすればうまくいくかということです。
よろしくお願いします。
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNGWebプログラミング板に行った方が適切な回答が得られると思うが、
手元で簡単に試した限りではそのやり方で問題ないはず。
% perl -e 'use CGI::Session; $s=new CGI::Session(undef, undef, {Directory=>"/tmp"}); $s->param("aaa", "bbb"); print $s->id(),"\n";'
cbcea6ee8470002e9a3f496fdb8a6c24
% perl -e 'use CGI::Session; $s=new CGI::Session(undef, "cbcea6ee8470002e9a3f496fdb8a6c24", {Directory=>"/tmp"}); print $s->param("aaa"), "\n";'
bbb
どっか別のところで間違えてんじゃねーの?
0266263
NGNG0267263
NGNGやっぱりwindowsなのがいけないのかなぁ・・・
0268デフォルトの名無しさん
NGNG× Directory => "/tmp"
○ Directory => "C:\\tmp"
CGI::Sessionは、Windows上ではバックスラッシュつかわないとダメなのです。
これがあなたの助けになればいいのですが :)
0269デフォルトの名無しさん
NGNGhoge(\@bar);
sub hoge()
{
my @foo1 = @$_[0];
my @foo2 = @{$_[0]};
}
で@foo2の方が期待した結果を得れるのですが
@foo1と,@foo2ではどう違うのですか?
0270デフォルトの名無しさん
NGNGは
@{ $_ }[0];
って意味なんじゃね?
0271デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNGは大学生と見た!
0274デフォルトの名無しさん
NGNGたぶんどこにも代入されない
1行飛ばしたい時に使ったりする
空読みって言ったりする
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNG一行飛ばすとは?
0278デフォルトの名無しさん
NGNGアリガト!(´▽`)
>>275
たぶん、配列の1個目の要素をデリファレンス。と思う。
#コンストラクタが理解できねぇ・・・
0279デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNGPerlの勉強を始めているのですが、初心者用の本「初めてのCGI&Perl」というを買いました。
しかし、詳しい文法・レファレンス・関数等やPerl独特の省略表現などについての記述が薄く、私にとってとても分かりにくいのです。
またPerlでよく利用されている正規表現についても、知識の薄い私にとって、この本は分かりにくいのです。
よろしければ、Perlについてこれらを満たすことの出来る良書を紹介していただけませんでしょうか。
具体例もあるに越したことは無いのですが、それよりも文法・リファレンス・正規表現について詳しく解説してあるものが欲しいです。
専門書でもかまいませんが、でぉるだけ安価な良書を紹介いただければ更に嬉しく思います。
参考までに私の知識レベルとしては、C、VB、C++、で一般的な業務アプリケーションが作成できるレベルです。
利用形態としては、CGIとローカルでのログ整理のスクリプト処理・データベースのローカル更新などを検討してます。
識者の皆様本当によろしくご指導くださいませ。
0282デフォルトの名無しさん
NGNGname = "hoge1" value ="hoge"
name = "hoge2" value =1230
などを
while (m/name=\"(.*?)\".*value=(.*?)(\ |>)/g)
{
%data = (%data,$1 => $2);
}
と連想配列に入力するのですが""で囲まれた要素は""まで入力されてしまいます。
これから""を除くにはどうしたら良いでしょうか?
s /\"//s;とかすると要素に文字列にダブルクォーテーションが入った時に
期待どおりに結果が出ないので困っています。
どうかご教授を。
0283デフォルトの名無しさん
NGNGs/\"(.*)\"(?=.?value)/\1/g;s/value.?=.?\"(.*)\"$/\1/;
0284デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html
>>281
>>4
>>282
$data{$4} = $8 while /
name \s* = \s*
(?:
(")
| (')
| (\b)
)
(.*?)
(?(1)")
(?(2)')
(?(3)\s)
\s*
value \s* = \s*
(?:
(")
| (')
| (\b)
)
(.*?)
(?(5)")
(?(6)')
(?(7)(?:\s|$))
/gx;
0286デフォルトの名無しさん
NGNGそのテキストファイルって、
hoge1 = "hoge"
hoge2 = 1230
とかじゃだめなの? name とか value とか冗長じゃね?
あと >>282のコードを、 %data = (%data, eval($1) => eval($2) ); とするのではだめ?
name = "hoge1" value ='hoge' x 10
name = "hoge2" value =1230 * 10
とかも書けるよ。危険だけど
0287250
NGNG>>257
プログラムはでかくないけど読むファイルは数千行〜一万行くらいあるっす(´・ω・`)
まあサイズ自体は1M〜5Mくらいだけどアクセス結構あるので……。
#念のため言うと共有鯖では無く専用サーバっす。
#分割駄目・生テキストファイルでやってくれと言う謎の制約ががが。
0288デフォルトの名無しさん
NGNG「test,hoge1,testtest,hoge1,hoge1,hoge2,test」
という文字列があった場合、2番目に出てくるhoge1や最後に出てくるhoge1のみを
検出、置換する場合はどうすれば良いのでしょうか?
上のデータを用いて「2番目に出てくるhoge1をhoge3にする」場合の期待値
「test,hoge1,testtest,hoge3,hoge1,hoge2,test」
文字をsubstrで切り刻みながら置換するのではなく、正規表現で綺麗に一発で
出来そうな気がしないでもないのですが、どうやったらよいのか分かりません。
何か良い方法があれば教えてください。
宜しくお願いします。
0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNG正直お勧めです。
http://www.gihyo.co.jp/books/syoseki.php/4-7741-0817-0
0291デフォルトの名無しさん
NGNG一気読みダメ、1行ずつダメ
んじゃ間とって数十行ずつやれば?w
0292デフォルトの名無しさん
NGNGちょっとgoogleで検索してみましたが、どうもnamespaceといったキーワードがないです。
Perlでオブジェクト指向プログラミングをするとどんな感じになるんですか?
0293288
NGNGありがとうございます。
最初は何故これで行くのかが分からなかったのですが
(.*?hoge1.*?)hoge1
が「前後に何か文字がある可能性があるhoge1とその後ろにあるhoge1」
で
\1hoge3
が「\1は最初の括弧の内容をそのまま、その後ろはhoge3に」
ということで良いんでしょうか?
$data =~ s/^(.*?hoge1.*?)(.*?hoge1.*?)hoge1/\1\2hoge3/;
で3番目のhoge1が置換されるから、こういう解釈であってると思うのですけど・・・
0294デフォルトの名無しさん
NGNG.*?と.*の違いを理解しよう。キーワードは最短マッチと最長マッチ。
0295デフォルトの名無しさん
NGNG答えじゃん!
0296デフォルトの名無しさん
NGNGクラスはpackage に過ぎない。オブジェクトはblessされた物に過ぎない。
でnamespaceとOOPってなにか関係あるの? packageでじゅーぶんじゃん
0297デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html#WARNING_on_1_vs_1
>>293
http://www5a.biglobe.ne.jp/~n_rieko/perl/8.htm
>>292 >>296
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlmod.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlobj.html
http://perl.infoware.ne.jp/documents/perlboot.ja.html
0298デフォルトの名無しさん
NGNGこんなのは?
# conf_file
$data = {
hoge1 => 'hoge',
hoge2 => 1230,
};
package main;
do('conf_file');
print $data->{hoge1}; # hoge
print $data->{hoge2}; # 1230
0299デフォルトの名無しさん
NGNG細かいツッコミだが
#--- conf_file ---
my $foo = 'hoge'; # 識別子 foo は script から見えない (見せない)
{
hoge1 => $foo,
hoge2 => 1230,
};
#--- script ---
#!/usr/bin/perl
use strict;
my $bar = do './conf_file' or die; # 謎の変数をいきなり出現させない
print $bar->{'hoge1'}; # hoge
print $bar->{'hoge2'}; # 1230
__END__
0300288
NGNG>>295
>>297
?の有無の差でなにがどうなるか分かりました。
>>297さんに教えていただいた先の情報は正直まだ理解できてるとはいえませんが
頑張って読んでます。
ありがとうございました。
0301デフォルトの名無しさん
NGNGyet another.
パース方法に悩むならXMLも一興。
# hoge.xml
<hoge1>hoge</hoge1>
<hoge2>1230</hoge2>
use XML::Simple;
my $xml = XMLin('hoge.xml');
my $hoge1 = $xml->{hoge1};
my $hoge2 = $xml->{hoge2};
0302デフォルトの名無しさん
NGNGXMLの使い方を勉強しなおせ、ばか
0303デフォルトの名無しさん
NGNGこれは何をやってるのか教えておくれ
0304デフォルトの名無しさん
NGNGルートエレメントが2つあっちゃダメだろ
データ構造も変だし。属性使え
0305デフォルトの名無しさん
NGNGうーん、なんとなく >>282 はもともとからXMLのような気がしてきた。
<hoge name=namae value=aaa />
↑こういうデータから抽出したいのかも。
0306デフォルトの名無しさん
NGNG>>303
\s : 「空白」一文字とマッチする正規表現演算子
\S :「空白以外」の一文字とマッチする正規表現演算子
\. : ドットにマッチ。
よって $mname =~/([\s\S]*)\./; は、
「空白と空白以外の続きで、最後がドット」の文字列にマッチする。
つまり、わからん。何がしたいんだ?
0307デフォルトの名無しさん
NGNGこの意味を教えてください
0308でふぉな名無しさん
NGNGもう定番だがEffective Perlなぞはどうだろう。
既にプログラミングの素養はあるわけだし、281に必要なのは
この本の趣旨である「Perlらしいプログラミング作法」とか
そのためのよりつっこんだ文法(トークン)への考察ではと推察する。
私もCあがりなのでなんかCっぽい記述になりがちで面白くない。
で、この本で改めて理解を深めている最中だ。ちなみに\2800
0309263
NGNG最初のセッションオブジェクトをファイルに保存するより早く二個めの
セッションオブジェクトが作成されていたので、最初のセッションオブジェクト
で生成したセッションIDが結果的に見つからず、新たなセッションオブジェクト
を生成していました。
0310でふぉな名無しさん
NGNGなんだ、いまどきたった数Mbyteなら気にするな。
その程度メモリに常駐しているプログラムなんてごろごろいるだろ。
キャッシュとかバッファリングとか仮想記憶とかそんなあたりで
ちょっとOSのファイルやメモリ管理論をかじれば全然気にならなくなる。
すれ違いになるんでこんぐらいで止めとく。
0311デフォルトの名無しさん
NGNG^ : 文字の先頭から検索
(.) : () は見なかったことにして、 . は何らかの文字 1文字。
\1: 直前の() 内で囲まれた正規表現にマッチ。した文字列
+ : 直前の正規表現が一回以上繰り返している場合マッチ。
$ : 文字列の最後
よって、「文字列の先頭から、1文字以上の何らかの同じ文字が文字列の終端まで続いている」文字列にマッチする。
つまり、なにがしたいんだ?
0312デフォルトの名無しさん
NGNGってなんですか?
0313デフォルトの名無しさん
NGNG連番トリップを検索する時に使う正規表現。
0314デフォルトの名無しさん
NGNG$ は行末 だぜよ
0315デフォルトの名無しさん
NGNG$hoge="bc";
$hoge=~s/^/a/;
print $hoge
はどんな結果でしょうか?
0316デフォルトの名無しさん
NGNG正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/l50
0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNGpackage
0319デフォルトの名無しさん
NGNG新たにサーバを移転し、SMTP認証が必要になったため
my $smtp = Net::SMTP->new('smtp_server');
$smtp->auth( $smtp_username, $smtp_password );
とauthの一行を追加したのですが全く送ってくれません。
perldoc.jpでは、
auth ( USERNAME, PASSWORD )
SASL認証を試みます。
とありますがSASL認証とSMTP認証って違うのでしょうか。
perldoc.jpにはSMTP認証についての記載はありませんでした。
0320デフォルトの名無しさん
NGNG翻訳してあるいいページありませんか?
0321デフォルトの名無しさん
NGNGhttp://perldoc.jp/
0322デフォルトの名無しさん
NGNGlocalで*xxxの時、サブルーチンも局所化されてないのですか?
0323デフォルトの名無しさん
NGNGどうも。助かりますた。
0324デフォルトの名無しさん
NGNGそれは型グロブの局所化。
なぜmyで出来ないのかは疑問。
0325319
NGNGあきらめてsendmail使おうと思いまして、
use Mail::Mailer;
$sendmail = '/usr/sbin/sendmail';
my $mailer = Mail::Mailer->new("$sendmail");
としたのですが、
syntax error at (eval 21) line 1, near "require Mail::Mailer::/usr/s"
と、おこられました。
Sends mail using any of the built-in methods.
You can alter the behaviour of a method by passing $command to the new method.
sendmail
Use the sendmail program to deliver the mail. $command is the path to sendmail.
perldocで読みましたが、僕には
sendmailへのパスをnew methodに渡せ、と読めるんですが。。
何か勘違いしてますか?
0326デフォルトの名無しさん
NGNGlocal($x, $y) = @_;
return $x + $y;
}
このプログラムの意味を教えてください!!
0327デフォルトの名無しさん
NGNG僕ちんはそんな釣りには引っかからないよーーーぺっぺっぺっ""
0328デフォルトの名無しさん
NGNG…ここに聞く前に、なんか初心者本でも買えば?
0329デフォルトの名無しさん
NGNG第一引数はメールクラスのタイプ。sendmail, qmail等。
第二引数以降にsendmailのパス等を指定する。
0330デフォルトの名無しさん
NGNGなんだかとってもわかりにくいマニュアルだが、SYNOPSYSに
$mailer = new Mail::Mailer $type, @args;
とあってあとの方のARGUMENTSってとこに
"new" can optionally be given a $command and $type. $type is one
"sendmail", "mail", ... given above. The meaning of $command depends
on $type.
と書いてあるのでなんとなく
my $mailer = Mail::Mailer->new('sendmail', "$sendmail");
とやれって意味じゃないかと思う。試してないのではずしてたらスマソ。
0331デフォルトの名無しさん
NGNG$a = <IN>;
$frg = &Sub_a($a);
print "$frg\n";
close(IN);
sub Sub_a{
$frg2=False;
if(@_ eq "a"){
$frg2=True;
}
return $frg2;
}
------------------------------------
>cat a.txt
>a
------------------------------------
なぜか上手くいきません〜。。。
すみませんが、ヒントください!
0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNGopen(IN,"a.txt");
$a = <IN>;
chomp $a; # 改行があれば改行を削る
$frg = &Sub_a($a);
print "$frg\n";
close(IN);
sub Sub_a{
$frg2=False; # 通るけど、引用符で括った方が安全だよ
if($_[0] eq "a"){ # ここが一番問題。スカラーとリストのちがいに注意
$frg2=True; # 通るけど、引用符で括った方が安全だよ
}
return $frg2;
}
0335デフォルトの名無しさん
NGNGprint "$array[0][1]"; # 20
こんな感じに二次元配列を宣言したいのですが、どうもうまくいきません。
0336デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
0337デフォルトの名無しさん
NGNG0338デフォルトの名無しさん
NGNG1.データファイルについてMD5やstat()などでハッシュを取り別ファイルに保存する
2.データファイルについて、indexを作成しファイルに保存(行毎に探索するのではなくseekで飛べるように)
3.もしデータファイルに改変があってもハッシュとの整合性で検出できる。改変があったらハッシュとindexデータを再生成
っつー感じではどうか。
0339デフォルトの名無しさん
NGNGただし、処理系や他言語で記述したモジュールのバグに起因するもの
とsyscallの不適切な使用によるものは除くとします。
0340デフォルトの名無しさん
NGNGPerlに限らずあらゆるアプリケーションにおいてそうなんだが、「100%ない」とは言い切れない。
ただ、俺自身は今まで3年以上Perlをいじっているが、単体のPerlでSEGVったことはない。
0341デフォルトの名無しさん
NGNGの意味がわかりません。
初めはlacal (*in) = \@_;のミスだと思っていたのですか、そうじゃないみたいです。
0342デフォルトの名無しさん
NGNG呼ぶ側が
foo(*X);
となっていたら、そうやって受けるのは自然だと思うが?
0343デフォルトの名無しさん
NGNGサンクス!
型グロブを引数として渡すのは頭に無かったです。
0344デフォルトの名無しさん
NGNG0345*
NGNGanonymous ftpからソースをダウンロードしようと思ったが
10年前の情報だったので手に入らなかった
誰かソースコードを持っている人はいませんか?
0346デフォルトの名無しさん
NGNG著者に直接聞いたら?
0347デフォルトの名無しさん
NGNGスマートな方法はありますか?
$str="abcdef";
for $x (split(/(..)/g,$str)) {
print "$x\n";
}
ってやっても、ひとつおきに null が混ざるんだけど。
substr使うのが普通なのかな。
0348デフォルトの名無しさん
NGNG$str="abcdef";
for $x ($str =~ /(..)/g) {
print "$x\n";
}
split について誤解があるみたいだから、
perldoc -f split
もしといてね。
0350デフォルトの名無しさん
NGNGおおおおっ、正規表現オプション g の素敵な使い方ですね。
0351デフォルトの名無しさん
NGNG$str="abcdef";for (split(/(..)/g,$str)){print "$_\n"}
これの出力結果が違うのはどうしてですか?下のものには
余計な空の行が入ってしまうように思います。
0352デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html
http://perldoc.com/perl5.8.0/pod/func/split.html
0353デフォルトの名無しさん
NGNGPerlで、メッセンジャーが起動されているかどうかチェックすることって可能ですか?
オンラインゲームの不正にメッセンジャーが使われることを回避したいのです。
0354デフォルトの名無しさん
NGNG可能でしょう。 でも、あなたの言ってるオンラインゲームがCGIゲームなんだったら、結構面倒かも。
でも、メッセ側でオンライン状態を通知しないとかされたらムリか。
>オンラインゲームの不正にメッセンジャーが使われることを回避したいのです。
ネトゲでメッセの使用を規制するって正気の沙汰とは思えないですがね。
0355デフォルトの名無しさん
NGNGいくらでもあるわけで、あまり気にしない方がいいんじゃ?
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNGファイルハンドルは IO::File を使えば名前なんか考えなくていい。
0358デフォルトの名無しさん
NGNGよくあるパスワードを入力する時のようにユーザのターミナル上に出力される文字を*に変換する方法を教えてください。
0359デフォルトの名無しさん
NGNGハァー?
0360デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNGdieだと catchできませんしね
Errorモジュールなるものがあるらしいですが、
アレを使ったほうがいいですか
0362デフォルトの名無しさん
NGNGいや、シェル上での話です。HTML勉強すればtemcapでも読めるようになりますか?プゲラ
0363デフォルトの名無しさん
NGNG「プゲラ」とか煽るのは禁句だと思うぞ
0364デフォルトの名無しさん
NGNG0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNGごめんなさい。
グーグルでもう一回探しなおしてきます。
0367デフォルトの名無しさん
NGNG>C:\>perldoc eval
>No documentation found for "eval".
よくわからなかったのでぐぐったのですが、よくわからないので
もう少し教えてください。
try { /*例外を投げたいような処理→*/ throw new NullPointerException; }
catch (Exception e){ /*例外処理*/ }
みたいなコードは
eval { #例外が起こるかもしれない処理、例えばゼロ除算
}
if($@){ #例外処理
}
って書けばいいわけですか?
簡単といえば簡単ですが、難しいといえば難しいですね。
気軽に使っても問題ないのかな
0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNGガッ
このスレでぬるぽみるとは思わなかった・・・
0370デフォルトの名無しさん
NGNG気軽に使っていいよ。ほんの少しだけ遅くなるけど。
ちなみに、try-catchに馴染んじゃった人、例外に型が無いと抵抗がある人は、
http://search.cpan.org/~uarun/Error-0.15/Error.pm
とかもある。
0371デフォルトの名無しさん
NGNGどうもありがと。try-catchが大好きというわけじゃないので、
必要な場面でどんどん使って生きたいと思います。
ただ、catch(char* e){} catch(int e){} みたいに型で処理を分けられないみたいなので、
必要になったときはerror.pmのお世話にならせてもらいます。
実際には例外もそんなに出番が無いかもしれないけど。
open() or hoge();とか、ゼロ除算の場合でも$x = $a / $b unless($b);ってしたほうが楽かもしれない
0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNG0374デフォルトの名無しさん
NGNGError: neither 'HKEY_LOCAL_MACHINE/SOFTWARE/ActiveState/PPM//InstallLocation'nor
'HKEY_CURRENT_USER/SOFTWARE/ActiveState/PPM/InstallLocation'found in registry at
C:\Perl\bin\ppm.bat line 29.
と表示されてしまいます。何回かインストールしなおしてもこの様な状況で
ActivePerl-5.8.0.806-MSWin32-x86を使用しています OSはXPです
少々スレ違いかも知れませんがよろしくお願いします
0375デフォルトの名無しさん
NGNGbuild 809にupdate汁
0376デフォルトの名無しさん
NGNG$value =~ s/</</g; <と>はタグ拒否だとおもうんですが
$value =~ s/>/>/g; "と&を置き換えるのはなんでですか?
$value =~ s/"/"/g;
$value =~ s/&/&/g;
0377デフォルトの名無しさん
NGNGちなみに、君の書き込みで、変換前と変換後の文字が同じに
なってまつよ。
&& &>とか書かないとね。
0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNG使うほうが楽だと思われる。
0380デフォルトの名無しさん
NGNG0381デフォルトの名無しさん
NGNG最も大きな理由は、置き換えないと悪い人に利用されるから。
Googleで「XSS 脆弱性」を検索してみることをオススメする。
手抜きすると「致命的不具合」扱いになって、情報処理推進機構様がやってきますよ(w
0382デフォルトの名無しさん
NGNG解決しました。本当に感謝してます ありがとうございました
0383デフォルトの名無しさん
NGNGphpとか、jspとかに移行する気はないの?
0384デフォルトの名無しさん
NGNGもとはサーバ会社がサーバの宣伝に提供してたから、その会社の許可してる一般的な構成でないといけなかった。
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNG0387デフォルトの名無しさん
NGNGperlccでバイナリになってたりする
0388デフォルトの名無しさん
NGNGperlcc よりもSpeedyCGIのが早い。
一番のネックはプロセス起動のコストなのよ
0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNGこのときのファイルパスってライブラリの呼び出し元からのパスになりますよね
これをライブラリからのパスにしたいんですが どうすればいいでしょうか
0395デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNG0398394
NGNG0399デフォルトの名無しさん
NGNGライブラリのパスに依存という仕様自体が激しく気持ち悪いが、
#--- Foo/Bar.pm ---
package Foo::Bar;
use Cwd 'cwd';
my $my_path;
while ($my_path = each %INC) {
$my_path =~ s|(?<=Foo/)Bar\.pm$|| or next;
$my_path = cwd . "/$my_path" unless $my_path =~ m|^(?:[A-Z]:)?/|;
last;
}
print "$my_path\n";
#--- script ---
#!/usr/bin/perl
use Foo::Bar;
__END__
0400デフォルトの名無しさん
NGNGリマインダーみたいにその日にメールで通知してくれるような簡単
なスクリプトを cron で実行させたいと思っているのですが、ドシ
ロートなのでうまく動いてくれません。どこがマズイのか教えてい
ただけるとありがたいのですが。
------------------------------------------------------------------------------
#!/usr/bin/perl
$sendmail = "/bin/mail";
$mailto = "myaddress¥@example.com";
$subject = "Don't forget to get NHK textbook¥ !";
$body = "今日はNHK語学講座テキストの発売日です。¥n忘れず書店へ行って購入するように¥!";
$commandline = "$sendmail -s $subject -t $mailto ";
exec $commandline;
------------------------------------------------------------------------------
試しにコマンドラインから上記スクリプトを実行すると、以下のような
エラーが出ます。
------------------------------------------------------------------------------
sh: -c: line 1: unexpected EOF while looking for matching `''
sh: -c: line 2: syntax error: unexpected end of file
------------------------------------------------------------------------------
一行目には`なんて打ってないのでエラーの意味が分かりません。
## ちなみに、この場合のエラーメッセージが伝えるところの
##「一行目」というのは、スクリプト中の $sendmail = "/bin/mail";
## の行を指すのですよね?そこからして間違ってますか?
環境は Redhat8 です。Perl は上記の通り、/usr/bin/perl
0401デフォルトの名無しさん
NGNGとりあえず、smtpをtelnetで体験してみると良いかもですよ:-p
.
0402デフォルトの名無しさん
NGNGちうか、HTTP SMTP POP3 IRC あたりは
telnet叩いて手で喋れないと、漢ならば!
いったんプロトコルを理解してから各モジュールを使えば
ぐっと理解は深まるし、何かあったときの解決も早い。
0403デフォルトの名無しさん
NGNGつーか、\を エンマーク¥(¥)にしている時点でネタ ケテーイ
0404デフォルトの名無しさん
NGNGautouse, List::Util, Scalar::Util お前らの所為で小一時間ほど悩んじまったじゃねーか
0405400
NGNG>>401,402
んー、「 smtp を telnet で体験してみる」というのは、
つまり、コマンドラインから mail の送信をやってみる、
というような意味でしょうか?もしそういう意味なので
あれば、ウチのサーバ(上述のRedhat機)では telnet
を通さないようにしているので、代わりに ssh でのセッ
ションで、同等のことを何度かチェックしているのです
が.....つまり、その時(=ssh セッション中での mail コ
マンドでメールの送信をやってみたりすること)に、対
話式にコマンドが聞いてくる部分がスクリプトに盛り込
まれていないと、こっちが「返事」をしたことにならな
い、というような理解でよいのでしょうか?しかしもし
そうだとすると自分が書くにはちょっと荷が重いです。
>>403
んー、ネタではないつもりなのですが.....。\(←全角)
って、ここでは¥になっちゃいますよね?違うのかな?
0406デフォルトの名無しさん
NGNGJPEGもうつらんし(window ,active perl 5.8)
TCL/TKにGUIは乾杯してる。。。
でもTCLは気持ち悪いしな
0407でふぉな名無しさん
NGNGってゆうかさ、
shellから
/bin/mail -s Don't forget to get NHK textbook¥ ! -t myaddress¥@example.com
って打ってちゃんと動くか?動かないだろ。
そのスクリプトの exec $commandline; ってこれをやろうとさせてるんだよ?
で、これみればエラーメッセージの意味、理解できないかい?
ま、Perl云々以前の問題だな。
print $commandline;
で何を実行させようとしてるのか、ちゃんと確認してからexec なりしてやれよ。
0408デフォルトの名無しさん
NGNG.
0409400,405
NGNGありがとうございます。
https://www.stackasterisk.jp/tech/program/perl03_03.jsp
の猿真似で、以下のスクリプトにて送信できるようになりました。
---------------------------------------------------------
#!/usr/bin/perl
$from = "myusername¥@mydomain";
$to = "myaddress¥@example.com";
open MAIL, "|nkf -j -mO| /usr/sbin/sendmail -f $from -t $to";
print MAIL "From: Schedule Reminder <$from>¥n";
print MAIL "Subject: Don¥'t forget to get textbook¥!¥n";
print MAIL "To: $to¥n";
print MAIL "¥n";
print MAIL "今日はNHK語学講座テキストの発売日です。¥n";
print MAIL "忘れず書店へ行って購入するように!¥n";
close MAIL;
---------------------------------------------------------
で、目的のものは得られたのこれで良しと言えばそうなのですが、
当初の自分がやろうとしていた >>400 の書式とは違うので気持
ちが悪いというか、これではまったく勉強になりません。
0410400,405,409
NGNG## 今度は「長すぎる行がある」だの言われて跳ねら
れるので分割しました。
確かに、今回の丸写しスクリプトは、書いてみればまぁなんとな
く納得は行くのですが、しかしいつまでも丸写しをしている限り、
ちょっとした応用も利きそうにありません。
>>400 のダメな例では、まずbodyが挿入されないのはダメダメと
して、次に、-s $subject の状態だと、>>400 の例に挙げている
ような定型 subject では、途中にスペースがあるので、最低でも
-s ¥"$subject¥" のようにしてやらねばならないこと、までは分か
りました。
しかし >>400 を叩き台にした場合、文字コードを変換するプロセス
をどこに噛ませてやればいいのかが分かりませんでした。そもそも
>>400 の書式では、どのように修正してもまったく見込みがないの
でしょうか?
0411デフォルトの名無しさん
NGNGman sendmail
0412デフォルトの名無しさん
NGNG何かいい方法はないでしょうか?
0413デフォルトの名無しさん
NGNGいろいろな機能を作るのを手伝ってくれませんか?
私はHTMLを勉強しているのですがperlも覚えたいと思っています
暇な時でもいいので掲示板のお手伝いをしてくれませんか?
http://windows.s56.xrea.com/ウザかったら普通にスルーしてください。
0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNGサイト作りの話題はWEB制作板へ
ここはPerlに関する質問や雑談などをするスレです。
0416遙皇 ◆HEHARUKAoo
NGNGSegmentation faultが出てビクーリしますた。
0417401
NGNG完全にperlの話ではありませんが乗りかかった船なので、、
> コマンドラインから mail の送信をやってみる、というような意味
まさしくその通り。
> ウチのサーバでは telnet を通さないようにしているので、
あーちとズレてますね。そー言う事じゃないんですよ。
何も考えず「smtp telnet」でググって下さい。
んで出てきたサイトを片っ端から開いて読んで下さい。
貴方のやろうとしている事の根本はソレです。
どんな事でもまずは根本を理解するのが近道ですよ。
# 全てを理解したならば、私が >>401 で書いた事もきっとわかるはず。
.
0418デフォルトの名無しさん
NGNGMAIL FROM: 408
RCPT TO: 417
DATA
こういう風に書いてあげるとよいかもですね。(わ
.
250 OK
0419デフォルトの名無しさん
NGNG俺も勉強せねば。メールはちょとやってみたい。
0420402
NGNGその他社内鯖管理とかやってるんで
どーしても3〜5層には詳しくならざるを得ない罠
もちろん8層は苦手だ orz
0421デフォルトの名無しさん
NGNGStorable.pmを使ってデータをfreeze→ファイルに保存
freezeされたプログラムを実行する単なるローダだけをCGIで記述
0422デフォルトの名無しさん
NGNGDocumentRoot の外に置けば済むような。。。
0423デフォルトの名無しさん
NGNG. "<div class=header>\n"
. "<span class=name>$FORM{'NAME'}</span>\n"
. "<span class=time>$time</span>\n"
. "</div>\n"
. "<div class=mesg>$FORM{'MESG'}</div>\n";
この.の意味ってなんですか?
0424デフォルトの名無しさん
NGNG文字列を連結する演算子。Perlは型がいい加減な言語なので、数値と文字列で
加算/連結の演算子を分けないと混乱するとかしないとからしいYO。
0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG何の役に立つのですか?
画面表示が速くなるだけ?
0427デフォルトの名無しさん
NGNGperl -e '$|=1;for(0..4,"\n",5..9){print;sleep 1;}' < /dev/null
非バッファリングはスループット的に見るとむしろ遅くなるが、
上記例題を見れば、どういう場面で必要かわかるだろう。
0428デフォルトの名無しさん
NGNG有り難うございます。ある問題を抱えてまして、どうやら$|=1が原因らしいと
いうところまでは分かったのですが、$|=1 の意味を正確に理解していなかった
為に質問させていただきました。あの例題で動きがよく理解出来ました。有り難
うございました。
最初の"ある問題"も質問しようと思ったのですが、もう少し調べて見ようと思います。
解決できなかったらまたお願いします(>_<)
0429デフォルトの名無しさん
NGNGされてしまいます。
#!/usr/bin/perl
$| = 1;
print "Content-type: text/html\n";
print "Pragma: no-cache\n\n";
print "<html>test</html>";
-----------------------------------
tcpをダンプしたらこんな感じでした。ヘッダとして出しているつもりが本文となってしまっています。
HTTP/1.1 200 OK
Date: Thu, 15 Apr 2004 10:20:52 GMT
Server: Apache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=EUC-JP
18
Content-type: text/html
12
Pragma: no-cache
11
<html>test</html>
0
-----------------------------------
$| = 1; を外すと正常に動きます。何故なのでしょうか?
(apache2です)
0430デフォルトの名無しさん
NGNGTransfer-Encoding: chunked
を調べろ。 君の悩みは HTTP RFCの範囲だ。
0431デフォルトの名無しさん
NGNGchunked coding 云々の話になるので
Webprog板へ逝け、と云いたいトコロなのだが
とりあえず $| = 1; を、ヘッダを吐いた直後にはさんでごらん?
0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG\x0D\x0A\x0D\x0A だろ
0434デフォルトの名無しさん
NGNGprint OUT "hoge";
flock(OUT, 2);
close(OUT);
これでhoge書き込み中の、読み書きは防げますか?(全てのプログラムにflock使用してます。)
0435デフォルトの名無しさん
NGNG「18 や 12 や 11 や 0 みたいな謎の数字は何?」と訊いているんじゃなくて
「>>429 が HTTP ヘッダのつもりで出力したの文字列が,メッセージボディの方に
来ちゃったのはなんで?」と訊いているように見えるけど,
それでもやっぱりチャンク形式エンコーディングの話題になるの?
つーかごめん。漏れも >>429 の悩みには答えられないわけだが。
0437デフォルトの名無しさん
NGNG0438デフォルトの名無しさん
NGNGapache2は知らんけど ネットワーク関係のプログラムで安易に \n を使うのはやめれ。
\nが指すものは環境によって変わる。 http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
HTTPメッセージヘッダの改行は \n ではなくて \x0d\x0a (CRLF) だ。
もしこれで直るならHTTPの範囲だし、apache関係のスレで調べた方がいいよ
0439デフォルトの名無しさん
NGNG0440デフォルトの名無しさん
NGNGprint OUT "hoge";
flock(OUT, 2);
close(OUT);
は
open(OUT, ">file.txt");
flock(OUT, 2);
print OUT "hoge";
close(OUT);
と同様。
0441デフォルトの名無しさん
NGNG有り難うございます。
実際私が疑問だったのは、$|=1; を書くのと書かないのとでなぜ
こんな違いが出るのかが知りたかったのですが、apacheの機能と
関係があるようですね。
気軽に$|=1;とするのは止めるようにします。何故こうなるのか
をご存知の方がいないかなと思ったのですが。
あと、純粋なperlを聞くこの板でcgiの事を聞いてしまい失礼しました。
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNGHTTP/1.1 200 OK
Date: Fri, 16 Apr 2004 12:01:17 GMT
Server: Apache/1.3.29 (Debian GNU/Linux) mod_fastcgi/2.4.0 DAV/1.0.3
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
11
<html>test</html>
0
という結果になる。なのでapacheのせいのような気がするんだよな。
$|=1だと各print毎にwriteシステムコールが呼ばれるが、$|=0だと
バッファされて全部が一気に一回のwriteでかかれると思うので
その辺の違いでapacheのバグでも踏んでるじゃないかと。
0445デフォルトの名無しさん
NGNGsub tsu{
$i=0;
open(IN, "data.txt")||die"data.txtをオープンできません:$!\n";
while($guho=<IN>){
$xml1[$i]=$guho;
$i+=1;
}
close(IN);
以下略
というようなサブルーチンを作ったのですが、Jperlで実行したところ、
data.txtをオープンできません:No such file or directory
とでてくるんですが、文法ミスでしょうか?わかりません。
あ、data.txtはちゃんとこの.plファイルのあるフォルダに存在します。
0446デフォルトの名無しさん
NGNGスペースがないのが気になる。
open IN, "data.txt" or die "data.txtをオープンできません:$!\n";
my する気がないのなら、、、
1 while push @xml1,<IN>;
0447デフォルトの名無しさん
NGNG@xml1 = <IN>;
0448デフォルトの名無しさん
NGNGついでに
sub tsu {
$i = 0;
open IN,"data.txt" or die "$!\n";
while ($guho = <IN>) {
$xml1[$i] = $guho;
$i++;
}
close IN;
}
って書け、見にくい。
全角スペース使うな。
0449デフォルトの名無しさん
NGNG
0450445
NGNGう〜ん、どうなってるんだ。現在調査中^^;
0451433 ◆60FZTwCTrE
NGNGちょっと考えてみた。
$| = 1; ってのは、selectとかしてないんだったら
STDOUTのバッファリングを止める(=本来ブロックされるべき読み込み処理も、
行末などを待たず即座にreturnする)
という命令になるので、>>429の例では次のような感じか?
1.「$|=1;」した時点で、Apache側がCGIのSTDOUTをバッファしなくなり
ソケットデータ読み込みからreturnする
2.不意にreturnしてしまい(このあたりがバグなのか?)
Apacheはヘッダ読み込みが終わったと勘違いして、デフォルトのヘッダを出力
3.次のデータからは、本文扱いになってしまう
4.ちなみに、「18」「12」「11」と3分割されてしまうのは、print文の数による。
1つのprint文で出力した場合は分割されないはず
間違っていたらスマソ
0453デフォルトの名無しさん
NGNGスレ違いだけどレスしとくな。
パイプって知ってるか?なんでCGI側の内部のバッファ動作いじるだけでapache側のreadが中断されるんだよ?
apache2で問題なのはread後のバッファ内容検査の部分だと思うが…
あと、CGIで$|をいじるってことは当然 nph- だよな?
でないとどうせapacheの子プロセスが一旦バッファするから意味ないぞ。
0454429
NGNGが付けるということは$|の段階でそこから本文扱いになってしまうようですね。
perlでは$|=1と$|=0で出力の方法が違うのでしょうか?
本文に 18,12,11などの数字が入るのは明らかにおかしいと思うのですが
バイナリで見るとperlがそういう文字列を出力しているのでしょうね。
apacheのバグかもしれませんが。
trussを使えばどういう出力をしているのか分かりそうですが、ちょっと
私には敷居が高いですね...。
0455429
NGNG0456デフォルトの名無しさん
NGNG一体何人が使ってると思ってるんだ?
まず自分の設定ミスを疑えよ。
0457デフォルトの名無しさん
NGNG数字が入るのがおかしいと認識しているのならそれは間違い。
あらかじめ長さがわからないCGIの出力をchunkedで送るのは
HTTP/1.1を使う限りよくあることだ。chunkedエンコーディング
がよくわからなければ、HTTP1.1のRFCを読むとかしろ。
ttp://www.cresc.co.jp/tech/java/Servlet_Tutorial/Lesson_38.htm
あたりも例があってわかりやすいかな?
問題はCGIの出力のヘッダ部にあたるところがそう解釈されずに
本文としてclientに送られてしまっていることだと思う。
0458429
NGNG>>457で教えてもらったページで勉強します。
ということで終了。有り難うございました。助かりました。
perl板でこんな感じになってしまってすいません。
最後に一言。
>>453 でnph-じゃないと$|=1の意味がないって書いてあるけどそんな
ことはない。この場合apacheはバッファしない。確かにあのサンプル
だけみて意味がないと言ったなら理解はできるが。
>>1に従ってこれ以上は書きません。
0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNG0462デフォルトの名無しさん
NGNG(中略)
要するに、Perlユーザは絶望的に親切なのだ。
0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNG残り半分は病的に親切な解答レスでできています。
0465デフォルトの名無しさん
NGNG生成したセッションIDは前もって作っておいたsessionsテーブルのid(1番目のフィールド)に
保存されますが、そのセッションIDと対になるセッション変数の内容(tieしたハッシュの内容)は
a_session(2番目のフィールド)にバイナリの形で保存されているという解釈で良いんでしょうか?
一旦生成したセッションをdeleteで削除すると、該当するレコードが消えるというのと
tie %session, 'Apache::Session::MySQL', セッションID,\%attr;
tied(%session)->delete;
my $id = $session{visa_number};
の順番に処理するとセッションの情報は消えても%sessionの中身は消えないのは分かったのですが
(最初セッションを消したから、その時に%sessionも初期化されなおすのかと思い込んでました)
deleteせずに直接該当のレコードを削除したらセッションIDでtie出来なくなったので
a_sessionに情報が保存されてるのかと思ったのですが、それで良いんでしょうか?
宜しくお願いします。
0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
NGNGCGIというよりモジュールの使い方だからここでOKかと思ったのですが
板違いだったら申し訳ありませんでした。
0468デフォルトの名無しさん
NGNGまー、WebProg には↓というスレがあるんでそっちの方が適任かもね。
Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/
で、せっかくソースも提供されてるんだから、素直にソース嫁。
使ったことないがさくっとソース眺めたところではそのようだ。
シリアライズにはデフォルトでは Storable を使ってる。
そして、なぜ実装の詳細が知りたいのかが気になる。
0469465
NGNGそうですね、ソース読むべきでした。
ごめんなさい。
DBのデータに結びついているセッションのデータが別の場所にあって
deleteを使わずに直接レコードを消してしまったら、それが消えずに残っちゃうのかな?
と思っての質問でした。
・・・やはりソース読むべきでした、この内容なら。
申し訳ありませんでした。
0470デフォルトの名無しさん
NGNG一々convertするの面倒だよ
会社の中にアスキーコードしか使わない奴なんて何人いるんだろ?
0471デフォルトの名無しさん
NGNGどの部分の日本語のことだゴルァ
use encoding であまり困ってなかったりして。
0472デフォルトの名無しさん
NGNGマルチバイト文字使う人いるよね
0473デフォルトの名無しさん
NGNGWindowsXP日本語版はOSが使ってますが
0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNG正規表現なのかforeachで処理するのかできないのかよくわからないのですが
たとえば 長い文字列の中で「<(xxxx)>」という文字列に複数一致させて
$1を用いてif文などの処理を1つづつ行うことは可能なのでしょうか?
0477デフォルトの名無しさん
NGNGfor (/<(xxxx)>/g) { $1 }
0478デフォルトの名無しさん
NGNGm//演算子のgオプション
% perl -e '$a="gaga hoge"; while ($a =~ /(\S+)/g) {print $1,"\n"}'
gaga
hoge
0479デフォルトの名無しさん
NGNG0480デフォルトの名無しさん
NGNGファイルを配列に読み込まずに、本物の配列のように扱いたいのです。
0481デフォルトの名無しさん
NGNGtie して DB_File した方が楽かもねぇ。。。
0482デフォルトの名無しさん
NGNGけっきょくファイルを読んでくることに変わりはないし、
Perl(に限らず、ふつうのファイルシステム)は
可変長テキストのランダムアクセスには弱いぞ。
インデクスだけdbmで組んでみれば?
たぶん>>480は、数百万行規模のファイルを読ませたいと
想像したが、いかが?
0483デフォルトの名無しさん
NGNGで、それの特定の要素でソートするために今は配列に入れてやってますが、
その過程でファイル自体を完全に配列のように扱えれば楽なのに、と思ったのです。
要は、出来るだけメモリを喰わずにCSVファイルの中身をソートして
出力しようというのが動機です。
0484ひよこ名無しさん
NGNG掲示板のようなプログラムです。
そのPerlで記述した文法の中で、文字化け対策を行っていました。
テストサーバでは良くある文字化けリストの文字を打っても
文字化けが起こりませんでした。
でも本番用のサーバでは良くある文字化けを打つと文字化けが
起こってしまいました。
これはサーバの環境が違うからでしょうか?
0485482
NGNG現在のPerlでは、そのような機能は実装されてないし、
CSVは一見固定長に感じるだろうがファイルシステムから見れば
可変長テキストデータだから、けっきょく全行読み込んでこないと
行を切り出すことすらママならないのだ。
@a = <FH>; で全行取ってこれるだけでもありがたいと思おう。
>>484 WebProg ニイケ (ぴゅう太風)
0486デフォルトの名無しさん
NGNGメンテナンスリリースなんでそんなには変わってないが、個人的にはこれが嬉しい
・In place sort optimised (eg @a = sort @a)
0487デフォルトの名無しさん
NGNGありがとうございました! そういう書き方ができるのに
気づきませんでした。いままでSplitで分割してました…。
0488デフォルトの名無しさん
NGNG環境によるだろうが、千行程度なら気にせずメモリに読み込んで構わないんじゃないか?
たかだか数十〜数百KBだし。
で、ファイルが非常に大きくてメモリに全部読み込めないとか、メモリをできるだけ節約するなら、
既に出ているインデックス案か、分割して普通にソート後、マージソートでいいんじゃないだろうか。
0489デフォルトの名無しさん
NGNGWindowsXPでJperl(5.005_03)を使用しております。
ミリ秒単位を表示したいのですが、localtaimでは秒までしか取得できません。
ぐぐってみたところ
Win32::Timer
で可能と書いてあったのですが、よくわかりませんでした・・・
申し訳ないですが、どなたか教えてくださいませ。
よろしく御願いします。
0490デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/php/997829243/
0491デフォルトの名無しさん
NGNGこれらの文って、
検索した結果を全部配列に入れた後にforによるループが始まるの?
それとも、検索して引っかかる毎にブロックの中が評価されてるの?
0492デフォルトの名無しさん
NGNGforはいったん全部配列に入る。 whileは正規表現の中でループ回る。
お好みでどうぞ。
0493デフォルトの名無しさん
NGNGもういないかもしれないが、Tie::File というモジュール使えば配列通して行ごとにファイル内容を
扱えるようだ。
ttp://search.cpan.org/~mjd/Tie-File-0.96/lib/Tie/File.pm
ファイル全体をメモリに置かず基本的にオフセットで管理、キャッシュも使ってるようだ。
0494デフォルトの名無しさん
NGNGマルチバイトの半角カナもあるわけだが
0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNGたぶんUCS-2だ。もはや単バイトではなかろうて。と、脱線してみる。
0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNGプライベート
1.パブリックの反対
2.秘密の行為を指して使う(例:プライベート・セックル)
変数
1.定数の反対
2.変な数
0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNG今読んでる本は、殆ど何も書いてないので・・・。
0501デフォルトの名無しさん
NGNGhttp://www.rfs.jp/sitebuilder/perl/04/02.html
0502デフォルトの名無しさん
NGNG@hairetu = ( 123, 456, 789)
となっている配列の値をを、
%hash{'a'} %hash{'b'} %hash{'b'}
というキーになっているハッシュに値として順番に入れるには
どういう方法をとるのが一番やはいですか?
初心者の私は場合わけして入れるしか思いつかないのです。
お願いします。
0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNGすぐに思いつきました。
酒飲んでると駄目ですね。
0505デフォルトの名無しさん
NGNG解決したようだが一応。
上の質問の書き方だと何がやりたいのかよくわからない。特に
>@hairetu = ( 123, 456, 789)
>%hash{'a'} %hash{'b'} %hash{'b'}
の対応付け。なんで a, b, b なのか。
ついでに $hash{a} なんじゃないの?とか。
0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNGまとめて入れるなら
@hash{ qw/a b c/} = @hairetu;
とか?
0509デフォルトの名無しさん
NGNG誤表記等、今書きこみるとぐだぐだですね。
みなさんのおっしゃるとおりです。すみません>>505
これからは飲酒しての質問はしない様にします。
>>506,507ありがとうございます。
0510デフォルトの名無しさん
NGNGppm、install time-hires、install io-zlib、install win32-api、install http-lite
と入力していくんですが、
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
C:\Documents and Settings\○○ ○○>ppm
PPM - Programmer's Package Manager version 3.1.
Copyright (c) 2001 ActiveState SRL. All Rights Reserved.
Entering interactive shell. Using Term::ReadLine::Stub as readline library.
Type 'help' to get started.
ppm> install time-hires
Cannot chdir back to C:/Documents and Settings/○○ ・○: No such file or direc
tory at C:/Perl/lib/FindBin.pm line 182
BEGIN failed--compilation aborted at C:/Perl/lib/FindBin.pm line 188.
Compilation failed in require at C:\Perl\site\lib\ppm-conf\ppminst.bat line 16.
BEGIN failed--compilation aborted at C:\Perl\site\lib\ppm-conf\ppminst.bat line
16.
Error: connect: Unknown error
C:\Documents and Settings\○○ ○○>install io-zlib
'install' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
0511デフォルトの名無しさん
NGNG再起動、再インスコを何度も繰り返してみたのですが実行できません。
なぜできないのか指導お願いします;;
環境
win xp H.E
CPU セレロン1.4G
インスコ ActivePerl-5.8.0.806-MSWin32-x86
このスレの発見が遅れてしまいマルチっぽくなってます。
向こうでも謝罪はしておりますが申し訳ありません。
0512510
NGNG再起動、再インスコを何度も繰り返してみたのですが実行できません。
なぜできないのか指導お願いします;;
環境
win xp H.E
CPU セレロン1.4G
インスコ ActivePerl-5.8.0.806-MSWin32-x86
このスレの発見が遅れてしまいマルチっぽくなってます。
向こうでも謝罪はしておりますが申し訳ありません。
0514デフォルトの名無しさん
NGNGユーザ名がマルチバイト故にハマってる症状にみえる。
0515デフォルトの名無しさん
NGNG名前一覧表(name.txt)があって
ミケ
ポチ
ハラス
と、中身が記述されています。個別にファイルも作ってあります。(ミケ.txt、ポチ.txt)
で名前から選んで削除するときに,name.txtの内容をリストに表示して選択して、
そのデータが $name として渡ります
unlink("$name.txt"); で個別のファイルは消えるんですが、その次に
name.txtの中身の$nameに該当する部分も削除したいのですが何かいい方法はありますでしょうか?
name.txtを1行ずつ読み込み,$nameにあたる行がきたら別のテキストに格納するか飛ばすかして,
もとのルーチンに戻そうと考えたのですが,思い通りにいきません。
(name.txtの中身が空白になるとか、途中までしか記述しないとか)
何か考え方が間違ってるのでしょうか?
if (open(IN, "name.txt")) {
while (<IN>) {
$dname .=$_;
chop;
if ($_ eq $name) {} ←ここをどうしたらいいのか?
}
close(IN);
}
どなたか答えていただけないでしょうか?お願いします。
0516デフォルトの名無しさん
NGNGname.txt を全部読んで削除するしかない。
以下、もし>>515がCGIで使われてる場合のアドバイス。
読む->変更->書く のような動作はファイルをロックしないとヒドい目に遭う。
ロック云々に関してはWebprog板にスレ立ってたようなので割愛。
ロックが嫌いならば、
「同じ長さの特別な記号で書きつぶす」
という手法も使えなくもない。
0517510
NGNGインスコ完了しました。
ありがとうございます。
>>514
まだ試していませんがまたおかしいようでしたら試すため
知識の1つにさせて頂きます。
ありがとうございました。
0518デフォルトの名無しさん
NGNGCGI以外にどんな用途があるんでしょうか?
元々UNIX上でテキスト処理に使われていたらしいですが・・・
0519デフォルトの名無しさん
NGNGUNIX上でテキスト処理に使っておりますが、何か?
0520デフォルトの名無しさん
NGNG0521でふぉな名無しさん
NGNG自動メール配信していますが何か?
0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNG0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNG*このヌレは藻前らがPerl自慢をするヌレになりますた*
*ごゆっくりお楽しみください*
0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNG0530デフォルトの名無しさん
NGNG0531デフォルトの名無しさん
NGNGsolarisサーバ上で動くソケット通信プログラムを作っています。
やる事は、あるポートで受けたデータを少し加工してファイルに書き込むだけです。
inetdで起動させようとしているのですが、ファイルが作成されません。
実際はデータ加工の処理が入るのですが大体の処理は以下のようなかんじです。
$|=1; # バッファリングしない
while (<STDIN>){
open(FILE,">> log.txt");
print FILE "$_\n";
close(FILE);
}
print文を、
print FILE "abcde\n";
等と変えてみたのですがダメでした。
クライアントとからは、サーバプログラムをinetdに登録する前は接続エラー(当然ですが)となり、
inetd登録後は接続エラーにならないので一応起動されてはいるようなのですが・・・。
inetdを使わずソケットを作成すればうまく行くのですが、これだとコンソールからの起動となり
大前提がコンソールを表示してはいけないとなっているので苦戦中です。
inetd使用時のファイルに扱い方に問題があるのでしょうか?
またinetdを使用しなくても、コンソールを表示せずにプログラムを起動する方法が
ありましたら教えて頂けないでしょうか?よろしくお願いします。
0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNGProc::Daemon はどうですか?
もしくはDaemontoolsで起動するとか。
0534515
NGNG>name.txt を全部読んで削除するしかない。
すいませんが全く意味がわかりません。
name.txtを1行ずつ読み込んで削除するのはダメだということですか?
なんかすごい頭の悪い質問の仕方をしてるみたいで申し訳ないんですが・・・
0535デフォルトの名無しさん
NGNGファイルシステムというのは、文字単位で挿入/削除するのに向いてないので、
テキストエディタでやっている「1行削除」のような簡単なことではないのだよ。
現にテキストエディタのようなものでも、先頭の1行を削除したら、
(エディタのメモリ上にある)ファイルイメージを全部元ファイルに上書きしてる。
>name.txt を全部読んで削除するしかない。
これの回答だけ書いておく。
open(F, "name.txt");
@a = <F>;
close(F);
splice(@a, 5, 1); # たとえば削除
open(F, ">name.txt");
print F @a;
close(F);
もっとアトミックに更新を行う方法もあるが割愛。
「同じ長さの特別な記号で書きつぶす」 の方が楽なケースもあるが、
(削除したい行へファイルポインタを持って行き、0x09 などを殴り書きするとか)
リストに「削除マーク」を追記していくという手法もあり。
(レコードが増えたら "うんこ\n" を追記し、
レコードが消滅したら "\tうんこ\n" などの、他とは区別できる行を追記。
name.txt を読み込みながら、メモリ上で有効リストの再構成を行う。
リストが長くなりすぎたらときどき掃除)
0536デフォルトの名無しさん
NGNGんの前に、ファイル管理name.txtなんか作らなければいいじゃないかね。
その name.txt の内容って、ディレクトリの情報そのものじゃん。
ディレクトリの情報から取得するようにすればファイルを unlink したら
ディレクトリの一覧からは消えるんだから・・・ええと説明めんどい。
つまり、いいたいことは name.txt は捨てて opendir() 使え。
0537デフォルトの名無しさん
NGNGlog.txt というファイルが作られるディレクトリはどこか
openに失敗した時のことを考慮しているか
失敗する理由はなにが想定されるか
これらの点を検討せよ
0538デフォルトの名無しさん
NGNG$bar = $foo;
を
$bar = $fooを置換しその結果を返す;
のようにやりたいのですが、どうすれば良いのでしょうか。
mapやgrepを試してみましたが配列が返って来るのでダメでした……。
0539デフォルトの名無しさん
NGNG$bar = $foo;
$bar =~ s///;
0540デフォルトの名無しさん
NGNGすみません書く時に間違えてました。
そちらの方を一回でやりたいのです。
0541デフォルトの名無しさん
NGNG0542デフォルトの名無しさん
NGNGありがとうございました。
0543デフォルトの名無しさん
NGNGbless {
foo => undef,
bar => undef,
}, $self;
で、new内で初期化するサブルーチンinitを呼び出して、
sub init
{
my $self = shift;
$self->{foo} = new AAA::Foo; # Fooオブジェクトを生成
$self->{bar} = $self->{foo}->newbar(); # Foo::Barオブジェクトを生成
}
とかしようとすると、
Can't use string ("Foo") as a HASH ref while "strict refs" in use at Hoge.pm
というエラーが出ます。
実際のスクリプトでは、Hoge = Fooだったり、CPANから落として来て入れたモジュールに
Fooというモジュールがあったりして、名前が被ってるからstrictが怒ってるのかなぁと思ったのですが、
googleで調べてみると、ハードリファレンスじゃなくてシンボリックリファレンスだから
駄目なんだ、とか書かれており、よく分かりませんでした…。
どうすれば良いのでしょうか?
Perlのバージョンは5.6.1です。よろしくお願いします。
0544デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7ekbk/perl5.005/perlobj.html
sub new {
my $self = shift;
bless { foo => undef, bar => undef }, $self;
$self->init();
としているに 300 ペリカ。
0545デフォルトの名無しさん
NGNGとりあえずリンク先を読む前に支払いを…
ノ⌒[300ペリカ]
…読んで参ります
0546デフォルトの名無しさん
NGNGmy @array = (1,2,3);
foreach(@array){
try {
throw Error();
} catch Error with {
next;
};
}
これって無限ループになるのだけど、なぜ?
use Error; にしたり、ループにラベルつけると期待通り。
0547デフォルトの名無しさん
NGNGError.pmのcatchの処理をするところでwhile(1){...}
があるので、そのループへのnextになっちまってるんだ
と思う。ラベルつけるとOKなのはそのせい。
use Error;だと期待通りってのは勘違いじゃないかと。
tryの前にprint "$_\n";いれるとわかると思うが
use Error qw(:try);のままでラベルつけたときと
全然動作違うよ。
0548546
NGNGありがとう。 while(1) ありました。
use Error; は勘違いでした。stacktrace を始めてるみたいです。
あとでもう少しコードを追ってみるです。
# 件の問題でコケた瞬間 apache のログが数十GBに→停止。
# なかなか良いトラップでした。。。
0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNGAというクラスと、Aを継承するBというクラスがあったとして、
Aのメソッドsay()が
sub say {
print "I'm ";
}
Bのメソッドsay()が
sub say {
# super.say()みたいなもの
print "20 years old.";
}
で、$b->say();とした時に、I'm 20 years old.と表示させたいのですが、
super.say()みたいなものって、Perlではどうすればいいのでしょうか?
$b->SUPER::say();
$b->say();
とやれば、結果的には同じ結果が出るみたいですが、モジュールのカプセル化とか
そういうの考えると、あまりこういうやり方は良くないんじゃないかと思いまして…。
0551デフォルトの名無しさん
NGNGエラーが出ます。「問題が発生したため、Perl Command Line Interpreterを
終了します。」と出力されます。プログラムは一応動くのですが、終了時にエラー
が出るのが気持ち悪いのです。
どなたか解決法をしりませんか?表示にはフォントとして"System"フォントを指定
しています。環境はWindowsXP HomeとActive Perl 5.8.0.805です。
0552デフォルトの名無しさん
NGNGSUPER::say()
0553デフォルトの名無しさん
NGNGB は A を継承しているのだから、A の事を「知って」いて構わない。
sub say {
my $self = shift;
$self->SUPER::say();
print "20 years old.";
}
$b->say(); # I'm 20 years old.
use B; するスクリプト中で $b->SUPER::say(); とするのはマズいが、
子の中で親クラスのメソッドを呼んで悪い道理はあるまい。
http://perl.infoware.ne.jp/documents/perlboot.ja.html
0554デフォルトの名無しさん
NGNGあ、なるほど$selfからさかのぼればいいのですね。
ありがとうございました。
0555デフォルトの名無しさん
NGNG名前付き(?)ハッシュや配列のリファレンスでは駄目なのでしょうか。
確かに、例えばモジュール等でリファレンスが欲しい場合の手間は省けますが。
0556デフォルトの名無しさん
NGNG>確かに、例えばモジュール等でリファレンスが欲しい場合の手間は省けますが。
その理解でいいよ。
これらの神髄は、入れ子構造、Cで言う struct とか
リストを作るときに発揮される。
リファレンスはスカラが収まる場所にはほとんど格納できるから。
Perl4の頃は、配列のハッシュのようなものを実現するためには
デリミタをつけた文字列をハッシュの各エントリに .= (文字列追加)して
取り出すときに split したりとか…苦労したもんだ。
%h = ('foo', [0..2], 'bar', [4..6]); とか。
要素の参照は $h{'bar'}[2] -> 6 でできる。
リファレンスはそれ自体が型を持っているというのもポイント。
元々Perlは型が緩い言語だったが、リファレンスはけっこう型に厳しい。
そして、「何のリファレンスか」を得ることもできるので、文脈依存の処理が書きやすい。
0557デフォルトの名無しさん
NGNGリファレンスが欲しい場合に
名前付き配列/ハッシュを作ってからそのリファレンスを得る方法
でも、五割がたはまぁ、いい
でも、残りの半分は 無名配列/ハッシュ を使った方がスマートだ。
# Perlの性質上、どうしても使わなきゃダメって場合は少ないけれど
# 無名配列を使うよりも非常に複雑で無駄な手間がかかる
嘘だと思ったら、ためしにシュワルツ変換を無名配列を使わずに書いてごらん。
0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNGwperlが指定できい(?)っぽくてDOSがウザいんだけど。。。。
ちなみに俺は金払ってません_| ̄|○
0560デフォルトの名無しさん
NGNG-gui で窓なし可。
コピペ
ただしウザイ「金払え」ダイアログが出てきた(w
ショートカットが実用的かも。
0561デフォルトの名無しさん
NGNG>>35
0562デフォルトの名無しさん
NGNGして新しいファイルに書き込むプログラムを書いているんですが、探索方法
を逐次探索でやるというまでもなくものすごい時間がかかってしまいます。
こういうときはどのような探索方法をどのようにして実現すればよいでしょうか?
なにか常套手段などありますでしょうか?
ちなみに辞書ファイルはアルファベット順になっており、一行の形式はcsvです。
"単語","意味1","意味2",・・・
0563デフォルトの名無しさん
NGNGコンテキストメニューに自作のツール登録してる
0564デフォルトの名無しさん
NGNG>>562
妥当な線でインデックスを作成しとくとか
もしくはアルファベットごとに辞書ファイルを分けちゃうとか
0565デフォルトの名無しさん
NGNGちみのやりたいことは、perl dbm でぐぐると解決するものと思われ
64Mの元ファイルを処理するのが1度でいいのなら、
もっと手抜きできる方法はいくらでもある。
0567デフォルトの名無しさん
NGNGSearch::Dictでいけるかも
0568デフォルトの名無しさん
NGNG何か比較的かしこい方法はありますでしょうか。
Memberは、それぞれユニークなIDを持っています。のでハッシュを使うのが筋だとは思うのですが、
Managerで$bless {member => \%member}, $pkg;
で、$self->{member}->{'ID'} = new Member();
とかやるのも、あまり美しくない気がして…。
0569デフォルトの名無しさん
NGNGどうやって作るのでしょうか。
0570デフォルトの名無しさん
NGNG意味がわからないの?やり方がわからないの?
どっち?
0571デフォルトの名無しさん
NGNG漠然と、例えば行頭の位置を index() で検索して
別のファイルに記録して置いたりするのかな等とは思ったのですが、
でも内容が変わったらその度に作り直さないと駄目な気がして、
書き込みが多い場合は却って負荷が大きくなるのではないかと思ったのです。
で、もしかしたらこの考え方は間違いで別の良い方法が有るのかと思い、
そうであればやり方が思いつかないのでご教授願えたらと。
0572デフォルトの名無しさん
NGNGディスクの容量に制限がなけりゃDB_FileかGDBM_Fileを使って
HASHにするのが一番速い。
>>567 の Search::Dictは見たのか?
Search::Dictは2分探索だがこれを補完探索に書き換えれば
もっと速くなるだろう。
0573デフォルトの名無しさん
NGNGこれから少し試してみます。
0574デフォルトの名無しさん
NGNGいっぱい試せ。
0575デフォルトの名無しさん
NGNG0576デフォルトの名無しさん
NGNG自戒の意味が篭められているように見受けられました。
0577デフォルトの名無しさん
NGNG>>4のEffective Perlは初学者向けじゃない?
0578デフォルトの名無しさん
NGNGPerlはまったく初学者だけど他の言語ならプログラミングできるよ
つうひとにはお薦めできると思う。
0579577
NGNGじゃじゃじゃじゃあ、effective perlかってみます。
サンクス。
0580デフォルトの名無しさん
NGNG0581デフォルトの名無しさん
NGNG>>149
0582デフォルトの名無しさん
NGNGperl -e 'kill(11,$$)'
0583デフォルトの名無しさん
NGNGEffective Perlは
他の言語の経験があって、「飲み込みの速い奴」ならお勧めできるな
なんでオライリーを避けるかよく分からんが
ラマ本より優れた入門書はないと思うけどな
0584デフォルトの名無しさん
NGNG取る方法ってありませんでしたっけ?
例えば、main で定義された関数やら変数やらの一覧とる方法
0585デフォルトの名無しさん
NGNG%main:: とか、package hoge; なら %hoge:: とか
0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNGお前勇気あるな。
そういうのって心理的抵抗があって無意識のうちに避けるものだが。
0588デフォルトの名無しさん
NGNG0589デフォルトの名無しさん
NGNGキタ━!!ありがとう。
一生懸命 %{main} こうやっててできなかった…。
::つければいいのね。
0590デフォルトの名無しさん
NGNG敬意を込めてバカ勇者と呼んでいいか?
undefするとは思いつかなかった、俺もやってみるよ
0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNG0595デフォルトの名無しさん
NGNGローカル鯖だろうから良いんじゃない(例外もあるけど)。
ウチはWin2K+Apache2+mod_perl2のローカル鯖で>586に載せた事をやった。
元々は途中でパッケージ名書き換えたときに書き換え前のパッケージ名が
テーブルに登録されたままなのを発見して、
面倒だから undef() すれば初期化されるかなとか思ってやってみたら失敗したという話(´∀`)アハハ
0596デフォルトの名無しさん
NGNG(´∀`)アハハ
0597デフォルトの名無しさん
NGNGサーバとの接続を切って、Net::IRC::Connectionオブジェクトと
Net::IRCオブジェクトを捨てるにはどうすればいいのでしょうか。
モジュールのソースも読んだのですが、Net::IRC::Connection::quit()で
サーバとの接続を切る(と思われる)くらいの事しかわかりませんでした…。
標準入力からコマンドを入れて、安全に終了させたいのですが…。
0598デフォルトの名無しさん
NGNGこれは消してもかまいませんか?
0600デフォルトの名無しさん
NGNG0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNG0603デフォルトの名無しさん
NGNG$honbun =~ s/$FORM{'text'}/<font style=\"background:#00ffff\">$FORM{'text'}<\/font>/g;
print "本文=$honbun";
というプログラムで本文を置換したいんですけどフォームからaaaなどを入力してもエラーにはならないけど
コーヒーと入力するとエラーになってしまいます。
どうしたらコーヒーと入力してもエラーがでないんでしょうか?
0604デフォルトの名無しさん
NGNGCGI/Perlの質問はWebprogで。
「ー」=0x815B ゆえに起こってる問題。'[' = 0x5B.
完璧な答えを書くのマンドクサので
quotemeta
\Q
あたりのキーワードで、Perlマニュアル調べれ。
0605デフォルトの名無しさん
NGNGヤッターマン
ライター
以上の3つの単語を正しい順に並べなさい。
0606デフォルトの名無しさん
NGNGにつけ
たきび
○○○
0607デフォルトの名無しさん
NGNG0608597
NGNG毎回Ctrl+cで止めるのはきついです…。
0609デフォルトの名無しさん
NGNGstart() でNet::IRCにイベントループさせるのではなく
do_one_loop() を使って自前でループさせれば?
0610デフォルトの名無しさん
NGNGつまりstart()を止めるメソッドとかは実装されていないということですか…。
わかりました。do_one_loop()使ってみます。
ありがとうございました。
0611デフォルトの名無しさん
NGNGつーか、start() の中身が
while(1){
$self->do_one_loop();
}
こんな感じ
0612デフォルトの名無しさん
NGNGNet::IRCのドキュメント読まずに書くけど
start()メソッドの実装は
sub start {
my $self = shift;
while (1) {
$self->do_one_loop();
}
}
なので、自前でループしても全然問題ないみたいね。
0613デフォルトの名無しさん
NGNG現在、掲示板を改造しているのですが
名前につけるトリップの他にMACアドレスで生成する
トリップの機能をつけたいのですが
どのようにMACアドレスを取得すればよろしいでしょうか。
イメージはこんな感じです。
名前 山田太郎◆KdCIエD ◎CDgfg87Dg2
◆は名前のトリップ ← 使うか使わないかは自由
◎はMACアドレストリップ ← 自動的に付く
0614デフォルトの名無しさん
NGNGIP アドレスではなく MAC アドレス?
0615デフォルトの名無しさん
NGNG0616デフォルトの名無しさん
NGNG0617デフォルトの名無しさん
NGNG0618デフォルトの名無しさん
NGNG凄い、画期的だ。
ぜひともそれが実現するまで2chに来ないでほしい。
自鯖なら実現出来るよ。
いいか、実現するまでくるなよ。
0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNGipconfig.exe /all
でPhysical Addressを取り出せば取り敢えずできる。
標準出力をつないで取れ
0621デフォルトの名無しさん
NGNG誰が送るんだ?
詐称出来る情報に意味あるか、ヴォケ
ネットワーク板にでも行ってこい
0622デフォルトの名無しさん
NGNG0623デフォルトの名無しさん
NGNG送信したデータがどういう経路をたどるか分かってます?
そんなこと言ったら、全ての上りデータに意味がなくなってしまいますが。
ネットワークの仕組みを勉強してみては?
0624デフォルトの名無しさん
NGNGへぇ……
IP アドレス詐称して TCP で通信するのはかなり難しいが
0625デフォルトの名無しさん
NGNGヴァカ発見
マジワロタage
0626デフォルトの名無しさん
NGNG0627デフォルトの名無しさん
NGNG使ってる座標系を明示しろ。極座標系なら r, θ, φ, t かもしれんし、
同次座標系なら x, y, z, w だろうし。
> あと座標0,0は画面左上であってますか?
その座標系の定義による。
0628デフォルトの名無しさん
NGNG>ネットワークの仕組みを勉強してみては?
ワロタ、お前がしろよ
0629626
NGNG???
自分のプログラミングレベルが低すぎるのでLANケーブルで首つっt(ry
0630デフォルトの名無しさん
NGNGそれならば、普通は (x1, y1, x2, y2) だわな
0631デフォルトの名無しさん
NGNGPerlスレなんだからPerl(CGI動作上)で取得する方法例を明示して下さいよ。
ののしり合いはそれからにしてください。
>>629
座標系はいくつかの表現方法があって数学的素養です。
どういう座標系かは扱うライブラリ等に依存しますので一般論はありません。
その世界でどう定義しているかが話の出発点です。
0632デフォルトの名無しさん
NGNG>Perl(CGI動作上)で取得する方法例を明示して下さいよ
サーバ側から取れるわけないでしょ。バカですか?
0633デフォルトの名無しさん
NGNGオチツケ!煽る方間違ってるぞ!
0634デフォルトの名無しさん
NGNG方法1:MACアドレスを送るようIEを改造する
方法2:MACアドレスを送るブラウザを自作
方法3:MACアドレスを送るプロ棋士を自作して自分のマシン設置。IEからそのプロき(ry
方法4:諦める
方法5:泣く
方法6:逆切れする
0635デフォルトの名無しさん
NGNGいや、間違ってるつもりはないが・・・?
0636634
NGNG0637デフォルトの名無しさん
NGNGちゃうちゃう。俺がいいたかったのは、元の質問ではクライアントが限定されてないでしょってこと。
だからクライアントでMACアドレス取って送ればええやんって言ったの。
そしたら何か勘違い君が「Perl(CGI動作上)で取得する方法例を明示して下さいよ」とか自身満々に言ってるわけ。
0638デフォルトの名無しさん
NGNG>>618
>>621
>>624
>>625
>>628
>>631
残念でしたね(プ
まぁMACアドレスも偽装できるんで>>621の2行目には同意。
0639デフォルトの名無しさん
NGNGまあたしかに。サーバ上で動くPerlだけでは実現不可能だ罠
0640デフォルトの名無しさん
NGNGあることを知って、くずれおちるのであった orz
0641デフォルトの名無しさん
NGNGルータの内側のセグメントじゃ、MACアドレス衝突さえしなきゃいいので
MACアドレス偽装され放題で、謝罪と賠償を要求されるニダ...チォブ
0642デフォルトの名無しさん
NGNG>>628
謝罪はまだですか?こっちはひどく傷ついているんですが。
ごめんなさいの一言も言えないぐらい恥ずかしいですか、そうですか。
0643デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNG> まぁMACアドレスも偽装できるんで
て言うか、IP アドレス持ってても MAC アドレス持ってないこともあるんだから、どんな方法使ってもダメだよ。
0646デフォルトの名無しさん
NGNGネットワークそのものに対する知識でヴァカにされてるのに
マジウケルw
0647デフォルトの名無しさん
NGNG0648デフォルトの名無しさん
NGNGで、どこがおかしいと思う?言えないの?ふーん。
0649デフォルトの名無しさん
NGNG0650可哀想になってきたのでマヂレス
NGNGMACアドレスはレイヤー2で使うアドレスなので
レイヤー3(IP)やレイヤー4(TCP)では全く使わない、情報として含まれていない。
故に、サーバ側がヘッダ等からMACアドレスを取得するのは不可能
# 細かいところは突っ込むな、スレ違いで解説なんかしたくねぇ > 分かってる人
クライアントが送るとか言ってる奴
→ ネットワーク越しのアプリケーションで、クライアントが自称する情報なんか信用できないって
>>631 は皮肉だろ
クライアントが送ることに意味はないから、(出来るものなら)サーバ側で取得する方法言ってみろと
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG言ってることも微妙に間違ってるし。
> ネットワーク越しのアプリケーションで、クライアントが自称する情報なんか信用できないって
なんていってる奴は、ネットで電子決済なんてできないといってるようなもんだよ。
PKI ぐらい勉強してから書き込んだ方が恥をかかなくていいと思う。
0653デフォルトの名無しさん
NGNG0654デフォルトの名無しさん
NGNGだって最終的には>>613の
名前 山田太郎◆KdCIエD ◎CDgfg87Dg2
◎CDgfg87Dg2 に使われるだけですよおまいら。
◎CDgfg87Dg2ですよおまいら
おまいら ◎CDgfg87Dg2 ですよ
0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNG0657デフォルトの名無しさん
NGNG0658デフォルトの名無しさん
NGNG厨は、明日までかもしれない罠。鬱。
0659デフォルトの名無しさん
NGNGひょっとして元質問者は送信元IPのMACアドレスを取得できると思ってたのかなぁ
0660デフォルトの名無しさん
NGNG降り出しに戻す気ですかー(w
↓では次の方ドゾー
0661デフォルトの名無しさん
NGNGwindowsとかで.pl使うと、エラー表示が一瞬でて消えてしまいます。
どうにかならないでしょうか?
0662デフォルトの名無しさん
NGNGとりあえずだな、
.pl拡張子のファイルをダブルクリックするとっていう意味か?
Windowsのバージョンは?
それならDOSプロンプトかコマンドのプロパティの設定がらみだ。
もしくは専用のツール使え。
0663デフォルトの名無しさん
NGNGActivePerl
http://www.activestate.com/Products/ActivePerl/
入れてる?
0664デフォルトの名無しさん
NGNG>>662
>質問の仕方も素人だな。
お手を煩わせます。
>.pl拡張子のファイルをダブルクリックするとっていう意味か?
そうゆう意味です。
>Windowsのバージョンは?
2000です。
>それならDOSプロンプトかコマンドのプロパティの設定がらみだ。
やってみます。
>>663
入れてます。this is perl, v5.6.1と出ました。
0665デフォルトの名無しさん
NGNGそれじゃ困るんなら
・cmd開いてそこから実行
・batファイル書いてそのプロパティで閉じないように指定
・スクリプトが終了しないように <STDIN>; などの行を末尾に入れる
(これで改行かCTRL-C入れるまで終わらない)
等の手段をとる。
0666デフォルトの名無しさん
NGNGありがとう。あれから探して専用ツール入れてみました。
慣れてないので妙です。
<STDIN>; は試してみましたが、なんだか上手くいきませんでした。
他の二つは、後で調べてやってみたいと思います。
0667デフォルトの名無しさん
NGNGWindows2000だったら
[フォルダオプション]-[ファイルタイプ]からplを探して
拡張設定のほうをいじるようかな。
"c:\perl\bin\perl.exe" "%1" %* とかなってるのを
cmd.exe /k c:\perl\bin\perl.exe "%1" %*
にするぐらいしか思いつかん。バッチ作るとか面倒ってことだろ。
でもこれだとperlでの引き数指定できないし、開発とかする目的なら
Copalとかだったかの統合環境もどきツール使った方が楽かも。
0668デフォルトの名無しさん
NGNGいえ。こっちの質問の仕方が良くなかったのです。ありがとう。
>http://homepage3.nifty.com/aokura/#Perlを始めよう!
これ入れてみました。アイコンだけ元の黄○に戻して今使ってます。
Copal後で調べてみます。Copalがよさげだったら乗り換えます。
0669デフォルトの名無しさん
NGNGプログラムを作ろうと思っています。
1 住所を日本語で入力(Excel等で)
東京都 港区 芝浦 1-1-1
2 入力したファイルを読み込み
順番を逆にする
東京都 港区 芝浦 1-1-1 を
1-1-1 芝浦 港区 東京都
と。
3 逆の順番に並び替えたものを
ファイルに書き込み
読み込みは open を使って
順番を逆にするのは、reverse とか sort を使うのってのは
わかるんですけど、具体的にそれらを組むってなるとちょっと
わからないんです。
ヒントでもかまいませんのでどなたかご教授いただけますか?
よろしくおねがいします。
0670デフォルトの名無しさん
NGNG1.読み込みは open を使って
2.一行読み込んで配列に格納
3.順番を逆にするのは、reverse とか sort を使う
4.ファイルに書き込み
5.2へ戻る
質問は何ですか?
0671デフォルトの名無しさん
NGNGああそれは、
whileで回しながらspritをスペース区切りで使って
@なんたらにブチ込んでやれば良いんですよ。
0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNGやりたい順番にやりたいことを書けばよいです
ヒントは全部自分で言ってますよ
あとはgoogleなどの検索サイトで調べてみて下さい
0674デフォルトの名無しさん
NGNG日本語で入力(Excel等で)って書いてあんじゃん
~~~
0675デフォルトの名無しさん
NGNGふーん、だから?
0676デフォルトの名無しさん
NGNGExcelで「名前を付けて保存」→「ファイルの種類」のところを調べてごらん。
(ってなんでム板でこんな低脳なことを教えなきゃならんのだ)
0677デフォルトの名無しさん
NGNG~~~
0678デフォルトの名無しさん
NGNGそっとしてあげてくれませんか
0679デフォルトの名無しさん
NGNGいるというのはこちらのスレでよろしかったでしょうか?
0680デフォルトの名無しさん
NGNGCOM経由でセルを書き換えていけばいいだけじゃん。
0681デフォルトの名無しさん
NGNGなるほど。どんな感じのプログラムになるの?
雰囲気だけでもいいから書いてみてくれないかな。
0682デフォルトの名無しさん
NGNGとりあえず現状では、ファイルを読み込んで、別名のファイルに
書き込むってのはできました。
わからないのは
reverse や sort を組み込むのがよくわかりません。
今の時点で作成したのは以下の通りです。
open(in, "<address.txt");
open(out, ">revaddress.txt");
while (<in>){
print(out);
}
close(in);
close(out);
今の段階では txt 形式で住所を読み込んでいます。
プログラム初心者なんで…お願いします。
0683デフォルトの名無しさん
NGNGprint reverse @a;
0684デフォルトの名無しさん
NGNGどういう場合にはこういう方法を取るべきとか、こういう特徴を求めてるなら
これを使うべきとか、この程度のデータ量ならこうだとか、このタイプのデータなら
これで十分とか、メリット・デメリット・ポピュラーかそうでないか、用途別、
そういう比較・解説をしてくれているサイトはないでしょうか?
DB関係はさっぱり触ったことがないので、何をどうするのがポピュラーなのか知りたいのです。
それともPerlでデータを取り扱う時はこれ一択だとか決まってるのでしょうか?
0685デフォルトの名無しさん
NGNGその際にどのようなフォントが利用できるのか、
また、どのようにして利用できるのか、が分かりません。
できれば、HG創英角ポップ体にしたいのですが、こういうことは
可能なのでしょうか?
環境は Debian woody で、
ii perl 5.6.1-8.7 Larry Wall's Practical Extraction and Report
ii perl-base 5.6.1-8.7 The Pathologically Eclectic Rubbish Lister.
ii perl-modules 5.6.1-8.7 Core Perl modules.
ii perlmagick 5.4.4.5-1woody A perl interface to the libMagick graphics r
です。
有識者の方、アドバイスよろしくお願い致します。
0686デフォルトの名無しさん
NGNG<a href="http://zzz.zzz.zzz./"></a>
を
<a href="http://xxx.xxx.xxx/">http://xxx.xxx.xxx/</a>
<a href="http://zzz.zzz.zzz./">http://xxx.xxx.xxx/</a>
としたいのですが、これを自動で処理させるには、どのように
記述すればいいですか?
0687デフォルトの名無しさん
NGNGhttp://zzz.zzz.zzz./
を
<a href="http://xxx.xxx.xxx/">http://xxx.xxx.xxx/</a>
<a href="http://zzz.zzz.zzz./">http://xxx.xxx.xxx/</a>
とするのではなくて?
0688デフォルトの名無しさん
NGNGopen(in, "<address.txt");
open(out, ">revaddress.txt");
while (<in>){
@a = split(/ /);
print reverse @a;
}
close(in);
close(out);
と作成して実行させると DOSの画面上では問題ないのですが
revaddress.txt には何も入力されていません。
どこか問題があるのでしょうか?
0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNGまずURLを取り出す。マッチングで()使って$1使うとか。
次にタグの間で分割して取り出したURLをいれりゃぁええやろ。
0691デフォルトの名無しさん
NGNGhttp://member.nifty.ne.jp/hippo2000/perltips/Spreadsheet/ParseExcel.htm
嫁。
0692デフォルトの名無しさん
NGNGヒントを出してくれたみなさんありがとうございました。
無事に完成することができました。
0693デフォルトの名無しさん
NGNGCSV保存でSTDINのほうが楽な場合が多そうだけど、場合によっては
これも使えそうですね。
0694デフォルトの名無しさん
NGNGfoo(<<TEXT;
my text
TEXT
);
のように最初の終端文字列の後にセミコロンをつけるとエラーが出て、
省くと正常に動作するのですが
これはどのバージョンの perl でも同じですか?
ウチは 5.8 を使っているのですが、仕様なのかバグなのか良く解らないので。
0695デフォルトの名無しさん
NGNG0696デフォルトの名無しさん
NGNG&foo(<<TEXT);
my text
TEXT
0697デフォルトの名無しさん
NGNGありがとうございます。
0698デフォルトの名無しさん
NGNGもういっちょ補足。
my @array = (<<H1, <<H2, <<H3);
ヒアドキュメント1
H1
ヒアドキュメント2
H2
ヒアドキュメント3
H3
なんてことも出来る。
0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNG鏡見ちゃったの?
0701デフォルトの名無しさん
NGNGいや、君を見ちゃったのさ
0702デフォルトの名無しさん
NGNG>>701に座布団一枚!
0703デフォルトの名無しさん
NGNG<<HOGEが変数と同じ、そして(少し離れたところで)ヒアドキュメントが始まり、HOGEで終わると考えよう。
そうすると foo(TEXT); がOKで foo(TEXT;); がNGなのはすぐに納得行くね
foo($a); と foo($a;); の違いだ。
0704デフォルトの名無しさん
NGNG説明下手くそだな〜
0705デフォルトの名無しさん
NGNGしかし何から始めたら良いか分からない・・・w
誰か超初心者な問題だしてください。
0706デフォルトの名無しさん
NGNGあなたは何者ですか?
0707デフォルトの名無しさん
NGNG日本人です
0708デフォルトの名無しさん
NGNG0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNG0711685
NGNGどなたか分かりませんか?
よろしくお願いします。
0713684
NGNG最近はSQLでなくXMLなんかも使われてきてるようですが…。
0714デフォルトの名無しさん
NGNGcsv 使え。それで困ったら他の手段を考えろ。
0715デフォルトの名無しさん
NGNGこういう質問の仕方をよく見るが、喧嘩うってんのかと思う。
アホウはテメエだけ。
0716デフォルトの名無しさん
NGNG>こういう質問の仕方をよく見るが、喧嘩うってんのかと思う。
こういうつっこみの仕方をよく見るが、DQN度高いなと思う。
字義通りとるアホウはテメエだけ。
「おはようございます」に「はやくねえよ」と答える知能の低さ。
0717デフォルトの名無しさん
NGNG気にならないなら、さっさと>>685の質問に答えてやれよ。
それとも>>685と同類のアホウか?(w
0718デフォルトの名無しさん
NGNG(ありがとう >>696)
0719デフォルトの名無しさん
NGNG0720デフォルトの名無しさん
NGNGそれ思い込み
0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNG0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNG0725デフォルトの名無しさん
NGNG0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNG0729685
NGNGperlmagick で annotate を使って書き込むデフォルトのフォントは
あまりかっこいいフォントではないので、変更したいのです。
調べたところ、-font オプションで指定できるということは分かっているのですが、
どのようなフォントが指定できるのか、他から持ってきたフォントでも
使えるのか、そのためにはどうすればよいのか、が分かりません。
そのため、こちらでお分かりになる方がいらっしゃれば・・・とお伺いしました。
もし、お分かりでしたらぜひご教授ください。
よろしくお願いします。
>perlmagick を使って画像に文字を埋め込んでいます。
>その際にどのようなフォントが利用できるのか、
>また、どのようにして利用できるのか、が分かりません。
>できれば、HG創英角ポップ体にしたいのですが、こういうことは
>可能なのでしょうか?
0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNGs/%x%/aaa/;
で良いでしょうか?s/\%x\%/aaa/ とエスケープすべきでしょうか?
どちらでも置換できてしまうんですが。
0734デフォルトの名無しさん
NGNG<q cite="http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html">
Perlにおけるバックスラッシュ付きメタキャラクターはすべて
\b, \w, \n のように alphanumeric であることに気がついて
いるでしょ う。他の正規表現言語の幾つかのものとは異なり、
alphanumeric でないバックスラッシュ付きシンボルはありません。
ですから、\\, \(, \), \<, \>, \{, \} のようなものは常に、メタ
キャラクターではなくリテラルキャラクターとして解釈されます。
</q>
0735デフォルトの名無しさん
NGNG%はメタ文字ではない。だからエスケープする必要は無い。そのくらい調べろ。
>>734
的外れな回答は止めろ。
その文章では「英数字以外の文字をエスケープすると常にそのものとして扱われる」とあるだけだろ。
0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGに対する回答にはなってると思うが
心の狭い奴が多いものだなぁ
0738735
NGNG自分だけが特別物知りだと思い込むのは良くないな。
>>734<q>で囲まれてなければ「その文章では」ではなく「お前のレスは」とでも書くのが普通だろ。
>>737
なるほど悪かった。「的外れな回答」ではなく「中途半端で役に立たない回答」とでもするべきだったな。
質問者の質問は「エスケープすべきか否か」だぞ。
0739733
NGNGなるほど。つまり % はメタキャラクターじゃないから \% としても % と同じことで、
わざわざエスケープする必要は無かったわけですね。
ありがとうございました。
0740デフォルトの名無しさん
NGNG\wとか全く使わないなら\Q使うのが楽だけど。
0741遙皇 ◆HEHARUKAoo
NGNG0742デフォルトの名無しさん
NGNGどう反応すればいいんだ?
0743デフォルトの名無しさん
NGNGお前、恥ずかしい奴だな
0744デフォルトの名無しさん
NGNG0745デフォルトの名無しさん
NGNG0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNGPerlにオブジェクト指向って必要なのかな・・・?
・・・と、言うか、オブジェクト指向自体必要なのかと疑問に思う。
0748デフォルトの名無しさん
NGNG0749デフォルトの名無しさん
NGNGそれは何故なんだろうね・・・
オブジェクトにしなくてもいいような・・・
パッケージ概念があるんだから、変数の衝突もないし、
さらに、Perlのオブジェクトにはプライベート変数なんて概念ないし。
リファレンスで構造体を作成。
その構造体の変数にアクセスする関数を作成。
使う時は、その関数を呼び出すだけで、
無理にオブジェクトにする必要ないのでは・・・?と思う。
0750デフォルトの名無しさん
NGNG> 使う時は、その関数を呼び出すだけで、
> 無理にオブジェクトにする必要ないのでは・・・?と思う。
「関数を呼ぶだけ」と「メソッドを呼ぶだけ」の違いがそんなに無理なことなの?
0751デフォルトの名無しさん
NGNGそう、だからほとんど違いがないでしょ。
だから、オブジェクトにする意味があまりないような・・・って感じ。
Perlのオブジェクト指向って何のためにあるのだろう?って考えると、
C++とか使う人が、扱いやすいように。そんな理由から。
それ以外に利点が考えられないんだよね。
なんて言うか・・・
オブジェクトなんぞ必要ない!と言い切る人とかいてるけど、
最近、そういう人の気持ちが分かってきたような・・・
0752名無し募集中。。。
NGNG結局構造体のリファレンス返す程度のもんでしょ?
0754デフォルトの名無しさん
NGNGっていうかそれ自体が既にオブジェクト思考なんだと思うが。
指向とか嗜好とかでもいいんだけどね。
オブジェクト指向ってあくまで思想的なものだったりプログラムの
保守技術やら記述の美しさや再利用性とかそういうメリットを求めての
結果というかテクニックとか実装みたいなもんだろ。
言語仕様にあるのはあくまでオブジェクト指向を支援するものであって
そのひとが必要ないなら必要ないでいいし、使うとメリットがあると思えば
使えばいいだけのこと。あたりまえなはなし。
で、小さいプログラム作っているうちはあまり感じないが数百人を超える
プロジェクトとかになってくればそれだけ厳密性や独立性が大きく問われる
ことになりオプジェクト指向という一種の作法をみんなで使うことが重要だったりも
するってことやろ。
0755デフォルトの名無しさん
NGNG>>754
まぁ、な〜んとなくオブジェクトって物が無駄な気がして言っただけなんだけど・・・
オブジェクト指向を使えば保守性が格段にあがるとか、
あまりそうは思えないんだよな・・・
独立性も、オブジェクトを使わなくても独立性を持たせれるし・・・
しかし、オブジェクト指向って作法をみんなで使うって部分は利点があるな。
ちょっとなるほどと思った。
0756デフォルトの名無しさん
NGNG0757デフォルトの名無しさん
NGNG# pacage Windowがあるとして
$window = &Window::new(); # 構造体へのリファレンスを返す
&Window::setup($window, @args)
&Window::show($window);
とか言うのも立派なオブジェクト指向になってる。それを
$window = new Window();
$window->setup(@args);
$window->show();
と書けるようにしただけ。
君が言ってるのは、「オブジェクトなんていらないジャン。変数$windowがあればいいじゃん」ってことだろうけど、
その変数$windowをオブジェクトって呼んでるんだよ。
0758デフォルトの名無しさん
NGNG>>757の例で言えば
後者の方がなんとなく(・∀・)イイ!!って感じれればそうかけばいいし
べつに前者みたいでいいじゃんって思えば前者で書けばいい。
保守性が格段によくなるわけじゃないけどなるべく簡素にかけたほうが
いいのはいうまでもないでしょ。何度もいうけど格段に変わるもんじゃあない。
非常につまらない例で恐縮だが
&Window::show($widow);
なんていうつまらんバグをやっちまう確率がへる訳だ。そういう効果もある。
バグなんて結構こんなつまらない勘違いの類いであったりもするだろ。
例えば変数のスコーピングに関してもより人間が管理する部分が減るだけ
バグの確率が減少する。
確率は0にはならないだけにこういう言語の仕様の活用で減らせるバグは
ほんの少しでも減らして行こうという姿勢もある訳だ。
0759横入君
NGNG俺、あんま自分でオグジェクト作らんけど、あれだよね。
インポート式のモジュールはサブルーチンの名前空間汚す。
多少なりとも意識して使えば問題ないけど、なんとなく気持ち悪い。
オブジェクト指向はあれさ、パッケージ名一つ汚すだけ。
でもあれなんだよね、プロトタイプが使えないんだよね。
俺はルーチン作る時プロトタイプに頼りまくってる。
もしかして、間違ったこと書いてたら突っ込んでやって下さい。
0760デフォルトの名無しさん
NGNGperlの実装がいいか悪いかという話ならともかく。
0761デフォルトの名無しさん
NGNGif($_ == 'a'){ print("a\n"); }
}
上のコードを実行して「a」以外の文字
例えば「b」を入力しても、if文が実行されてしまいます。
この書き方は間違ってるんでしょうか?
0762デフォルトの名無しさん
NGNGう〜ん?
その構造体がオブジェクトなの?
たしかに、オブジェクトと言えばオブジェクトなんだろうけど・・・
オブジェクト指向の利点の一つは、
グループ化して関数わかり易いですよ(?)ってヤツじゃないの?
たとえば・・・
$window = new Window();
$window->setup->size(200, 100);
$window->setup->color("red");
$window->show();
・・・みたいな。
この辺に、わかりやすさがあってみんな使ってたんだとばかり思ってた。
でも、これってあまり意味ないな〜とか思い出したって訳。
書き方も「$」が「&」になるか、「->」が、「::」になるかの違いだけで済むし。
たしかに、引数を書かないといけないから一行が少し長くはなるけどね。
でも、まぁ記法としてオブジェクト使うって言うのなら多少利点があるかな〜と思った。
Aさんは第1引数に構造体を渡してもらうのを期待してる関数を作って、
Bさんは第2引数に構造体を渡してもらうのを期待してる関数を作って・・・
そんな事になったら、わかりにくくなるしね。
・・・まぁ、引数の順番がめちゃくちゃでも大丈夫にする事もできるんだけど。
しかし、その構造体事態がオブジェクトだと言うのなら俺の勘違いですた。
・・・でも、C言語にも構造体はあるぞ・・・
でも、オブジェクト指向では・・・ まぁいいっか。
要は、好きにしろって事だね。(w
0763デフォルトの名無しさん
NGNGたしか、オブジェクト内でプロトタイプ宣言は無視されるんだっけ?
俺は、プロトタイプ宣言しない派なんだよ。
理由は、忘れちゃったけど・・・
それも、あまり意味がないって理由でプロトタイプ宣言を使わないようにした。
>>760
そりゃいえてるね。
じゃ、この話題は終了で。
>>761
if ($_ eq "a") { print "a\n"; }
0764デフォルトの名無しさん
NGNG0765761
NGNGPerlは、C言語知ってる人には馴染みやすいとよく聞くんですが
どうもまだシックリきませんねぇ…
0766デフォルトの名無しさん
NGNGC屋なら、らくだの最後だけ立ち読みしといたほうがいい。
よけいな手間が減る。
0767デフォルトの名無しさん
NGNG文字の比較と数字の比較は違う。
数字で等しいと真 「==」
文字で等しいと真 「eq」
数字で等しくないと真 「!=」
文字で等しくないと真 「ne」
文字の比較で、大なり小なりの比較もあるけど、
あまり使わないだろうから、覚える必要なし。
0770デフォルトの名無しさん
NGNGオブジェクト指向的な考えは、現実の操作や状態なんかをもとに
設計したり実装するのに便利。例えばUIまわりとかね。
あと、保守も多少は楽になる。
少なくともコピペを繰り返すよりはいいし、仕事をしててよく依頼される
「似てるけど、ちょっと違う」処理を何度も書くときは重宝します。
というわけで自分の経験としては、趣味的なプログラムより
業務系のプログラムと相性が良い、という印象。
あと、ネットゲーみたいにバシバシ機能追加/変更するようなものも、
オブジェクト指向のほうが機能追加/変更しやすいです。
まあ、ラリーさんもオブジェクト指向の必要性は感じているから
Perl6はその辺りがより強化されるのでしょう。
個人的には楽しみにしてますけど、Perl6は人気ないっぽいのが残念。
0771デフォルトの名無しさん
NGNG型がないから「どうキャストすれば分からない」ため、
==とeqみたいな違いがある、と考えればよろしいかと。
0772デフォルトの名無しさん
NGNG> しかし、その構造体事態がオブジェクトだと言うのなら俺の勘違いですた。
> ・・・でも、C言語にも構造体はあるぞ・・・
> でも、オブジェクト指向では・・・ まぁいいっか。
Cでオブジェクト指向するって話はぐぐれば出てくる。
classキーワードがなければオブジェクト指向じゃないってのは偏見
0773デフォルトの名無しさん
NGNGPerl にオブジェクト指向があって良かった一例だと思うよ。
何にせよ、既に言われている通りソレを必要だと感じている人が使えば良い。
0774デフォルトの名無しさん
NGNG構造体ですら、どうでもいいんだよ
言語仕様によるところのメソッド呼び出しだとか、構造体はどうでもいい
オブジェクト指向ってのは考え方なの
その考え方でコードを書くときに便利なように、幾つかの約束事が用意されていたり、強制されていたりするだけ
蛇足だけど、「オブジェクト指向」って言葉はおかしいんだよね
「オブジェクト指向ほげ」だとか「オブジェクト指向ふが」と言うべき
それをしないから混乱する。
オブジェクト指向プログラミングをする際に、オブジェクト指向プログラミング言語は必要じゃないよ
それこそC言語でも出来るし、BASICでも出来るんじゃない? 俺はやりたくないが(w
0775デフォルトの名無しさん
NGNG僕はPerlでプログラムを書いていて、ある日とつぜん
特定の関数群を呼ぶときは常に第1引数が特定のハッシュ変数になるのに気づいて
「あ」
とか思って、以降は素直にオブジェクト指向的な書き方をするようになったのさ(苦笑)。
0776デフォルトの名無しさん
NGNGPerl用の開発環境とかエディタは、皆さんどういう物を使用してますか?
何か良い物があれば教えて頂きたいのですが。
0778デフォルトの名無しさん
NGNG|∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ,)∩ < >>777 が!!
丿 ノ \________
〜 .つ
し~
彡
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
||| ガリ
||| ガリ
∩ .|||
|∧∧ ||| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(TД)∩ < オレの >>777 がぁぁぁぁぁああ!!!
丿 ノ \______________
〜 .つ��
し~
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0780デフォルトの名無しさん
NGNG0782デフォルトの名無しさん
NGNGhttp://www.cpan.jp/
0783デフォルトの名無しさん
NGNGprint 100000000000000000000000000;
とすると、出力結果は
1e+026
となってしまいます。
100000000000000000000000000
と出力させるにはどうすればいいでしょうか?
よろしくおねがいします。
0784デフォルトの名無しさん
NGNG0785783
NGNGレスありがとうございます。
変数に、
$x = 10000000000000000000000000;
と入ってる場合はどうすればよいのでしょうか?
0786デフォルトの名無しさん
NGNG0787783
NGNG$xには数値の1000000000000000000が入っています。
誤解させてお面なさい!
0788まあ、ネタだろうが。
NGNG> $xには数値の1000000000000000000が入っています。
はぁ ?
「変数に何が入ってたって」 って書いてあるんだが...。
0789デフォルトの名無しさん
NGNGワロタ
>>787
イヤイア、786は$xに123が入ってても
10000000000000000000000000がプリントされるぜ。
それがお望みなんだろ。
こういうのもある。
use Math::BigInt;
$x = Math::BigInt->new(10000000000000000000000000);
print $x,"\n";
0790デフォルトの名無しさん
NGNG0791783
NGNGどれも、1111111111111111111111111111111111の場合うまくいきません。
本当に説明不足でごめんなさい。
0792デフォルトの名無しさん
NGNGそれは、変だな。
俺の環境なら、ちゃんと
100000000000000000000000000
と出力される。
PC を買い換えるか、プログラマに向いていないとあきらめることを推奨する。
0793783
NGNGと出力したいのではなく、
1111111111111111111111111111111111
と出力したい場合です。
0794デフォルトの名無しさん
NGNG>100000000000000000000000000
>と出力される。
プッ、日本語勉強しようね。792ちゃん。
>>793
792は無視しといていいよ。
0795アヒャヒャヒャ
NGNG0796デフォルトの名無しさん
NGNG0797デフォルトの名無しさん
NGNG> プッ、日本語勉強しようね。792ちゃん。
ネタにマジレス、かっこいいなぁ。(藁
0798デフォルトの名無しさん
NGNG・BigIntを使う
・コードに数値を直接書き込まない。newには生の数値でなく文字列を渡す
OK
perl -MMath::BigInt -e "print Math::BigInt->new('1111111111111111111111111111111111')"
NG
perl -MMath::BigInt -e "print Math::BigInt->new(1111111111111111111111111111111111)"
0799デフォルトの名無しさん
NGNG0800783
NGNG2**1000
などの計算の場合はどうすればいいでしょうか?
0801デフォルトの名無しさん
NGNGもちろんMath::BigInt のperldoc は見てから質問してるんだろうな?
0803デフォルトの名無しさん
NGNG「プログラマに向いていないとあきらめることを推奨する。」
と書いておけば、ネタだと言うことに気づくと思ったが、俺もまだまだだな。(藁
0804デフォルトの名無しさん
NGNG1に2を1000回掛ける
0805デフォルトの名無しさん
NGNG2 * 2 ⇒ 4
4 * 4 ⇒ 16
☆ 16 * 16 ⇒ 256
256 * 256 ⇒ 65536
☆ 65536 * 65536 ⇒ 4294967296
☆ 4294967296 * 4294967296 ⇒ 18446744073709551616
☆ 18446744073709551616 * 18446744073709551616 ⇒ 3.4028236692093846346337460743177e+38
☆ 3.4028236692093846346337460743177e+38 * 3.4028236692093846346337460743177e+38 ⇒ 1.1579208923731619542357098500869e+77
☆ 1.1579208923731619542357098500869e+77 * 1.1579208923731619542357098500869e+77 ⇒ 1.3407807929942597099574024998206e+154
として、☆ がついている数値を掛けると言う方法もあるよ。
0806デフォルトの名無しさん
NGNGんな事しっとるわい
0807デフォルトの名無しさん
NGNG0808デフォルトの名無しさん
NGNG0809デフォルトの名無しさん
NGNG阿呆だね、尾マイは。783を囲んで駄弁る会をぶち壊すような真似はすんなょ。
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNGあるCGIから別のCGIにPOSTするにはどうしたらよいですか?
また、その際に送信側でパラメータのセット、
受信側で取得する方法も教えてください。
ちなみにPerlのバージョンが古いので
CGI.pmモジュールは使えません。
cgi-lib.plか何かでできないものでしょうか?
どなたかお知恵を。
0812デフォルトの名無しさん
NGNGWebProg板へ
0813デフォルトの名無しさん
NGNG板違い
0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNG0816デフォルトの名無しさん
NGNGコンピュータ使ってりゃ常識だけどな
0817デフォルトの名無しさん
NGNG0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNG0820デフォルトの名無しさん
NGNG--test.txt--------------
1=2=3
4=5=6
・
・
・
7=8=9
------------------------
open(FIL, "test.txt")
@mes = <FIL>;
foreach(@mes){
@w = split(/=/, $_);
push( @$DataArray, \@w );
}
print LOG "[0][0]:$DataArray->[0][0]\n";
print LOG "[1][0]:$DataArray->[1][0]\n";
結果が以下ののようになり最後のレコード分のデータしか格納されません。
[0][0]:7
[1][0]:7
どなたか、全てのデータを上手く格納する方法教えて頂けないでしょうか。
0821デフォルトの名無しさん
NGNGmy @w = split(/=/, $_);
0822デフォルトの名無しさん
NGNG#include <stdio.h>
void set_a(int *p);
int main()
{
int a[10], i;
set_a(a);
for(i = 0; i < 10; i++){ printf("%d ", a[i]); }
return 0;
}
void set_a(int *p)
{
int i;
for(i = 0; i < 10; i++){ p[i] = i; }
}
と同じコードをPerlで書こうと思って
以下の様に書いたのですが、配列にうまくデータを格納出来ません。
正しい書き方を教えて頂けませんか?
@a;
set_a(@a);
foreach $i(@a){ print("$i "); }
sub set_a
{
for($i = 0; $i < 10; $i++){ $_[$i] = $i; }
}
0823デフォルトの名無しさん
NGNGopen FIL, '<' . 'test.txt' or die $!;
while (<FIL>) {
chomp;
push @$DataArray, [ split /=/ ];
}
0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNGそれ、関数内で書き換えただけで終了してるぞ。
結果を受けないとダメに決まってる。
2行目
@a = &set_a(@a);
関数内で最後書き換えた値を返す。
return @_;
それと、関数呼び出す時は、「&」を頭につける。
付けたくない場合は、関数を使用前に作る。
main関数内で使う関数は、プロトタイプ宣言するか、
main関数より前に定義しておくってのはC言語と同じだろ。
0826デフォルトの名無しさん
NGNGこれは間違いでしょ。リストを付ける、これが正解。
0827デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsub.html
0828デフォルトの名無しさん
NGNG正直、お前は必要ない。
0829822
NGNG配列はポインタで渡して、関数内で書き換える事が出来ないんですか?
普通の変数は、参照渡し出来ますよね。
$d = 0;
&set_d($d);
sub set_d{ $_[0] = 10; }
>関数呼び出す時は、「&」を頭につける。
>付けたくない場合は、関数を使用前に作る。
822のコードでも普通に動くみたいなんですが、
「&」を付ける意味って何なのでしょうか?
0830デフォルトの名無しさん
NGNGラクダ本の参照について書いてあるところ読みなはれ。
その例は参照渡しにすらなってない。
>「&」を付ける意味って何なのでしょうか?
Perl4はサブルーチンの呼び出しに&をシンボルの頭につけてた。
これは古い仕様。Cのようにカッコをつけるか、プロトタイプ宣言して
カッコを省略するかどっちか。
0831デフォルトの名無しさん
NGNGsub set_d( local(*d)=@_; $d[0]=10;}
0832デフォルトの名無しさん
NGNG@_に関しては少し特別だったの忘れてた。
ただし関数の引数がC++で言うところの「参照」と同じ扱いに
なるのは、いくつか条件があったはず。俺は紛らわしいから
いつもリファレンスでやり取りしてるけど。
0833822
NGNG>その例は参照渡しにすらなってない。
う〜んでも、関数から帰って来た後、print("$d")で表示すると
しっかり「10」になってるんですが…
これって参照渡しとは違うのですかねぇ?
>Perl4はサブルーチンの呼び出しに&をシンボルの頭につけてた。
>これは古い仕様。Cのようにカッコをつけるか、プロトタイプ宣言して
>カッコを省略するかどっちか。
結局どういう事なのかイマイチよく分からないのですが、
うちの環境、ActivePerl5.8.3だと、関数呼び出し時に
&付けようが付けまいが、括弧付けようが付けまいが
プロトタイプ宣言しようがしまいが 全部普通に動くんですが…
0834デフォルトの名無しさん
NGNG知ってて言ってるならいいが
sub foo { print "[@_]\n" }
sub bar { print 'bar:'; foo }
sub baz { print 'baz:'; &foo }
sub boo { print 'boo:'; &foo() }
bar(1,2,3); # bar:[]
baz(1,2,3); # baz:[1 2 3]
boo(1,2,3); # boo:[]
>>833
>>827 は読んだか?
0835デフォルトの名無しさん
NGNG好きにしろ。
ただし、お前のソースは読みたくない。
0837デフォルトの名無しさん
NGNGここで聞いても正確な答えが返ってくるとも限らないからラクダ本嫁としか言えない。
俺が言い得るのは、関数呼び出しに&をつけるのは古いということだけ、か。
暇なPerlerの人が答えてくれるかも。
>sub baz { print 'baz:'; &foo }
この書き方大嫌い。動的スコープ死ねw
0838デフォルトの名無しさん
NGNG引数のリストは展開されたあとにそれぞれの要素が一つずつスカラーへのリファレンスと
して@_に頭から入れられるので、f($d)なら必ず$dを変更することはできるが、f(@a)だと
@aのその時点で存在するところまでしか変更できない。極端な話@aがまだ空ならなにも
できないということじゃないかな。
とはいえわかりにくいのでオレもすぐにmy(〜) = @_;で受けてしまうし、引数で値返したければ
リファレンス使うようにしてるね。
0839デフォルトの名無しさん
NGNG>f(@a)だと
>@aのその時点で存在するところまでしか変更できない。
あ、なるほど。
0840デフォルトの名無しさん
NGNGuse strict文を使うと定義されていない変数は怒られますよね。
Can't use an undefined〜、とかって。
ソースにですね、
@aaa = @{$bbb}
とか
foreach(@{$bbb}){
とか書きたいのですが、
@{$bbb}を定義しろと怒られてしまいます。
use strict文を使用すると上記のような書き方はできないのでしょうか?
ご存知の方、お教えくださいませ。。。
0842デフォルトの名無しさん
NGNGわーできました!
ありがとうございます!!
0843デフォルトの名無しさん
NGNGしょうもない質問かもしれませんがよろしくです。
0844デフォルトの名無しさん
NGNGhttp://member.nifty.ne.jp/hippo2000/perltips/CPAN.htm#CONFIGURATION
http://member.nifty.ne.jp/hippo2000/perltips/CPAN.htm#FAQ
0845822
NGNG関数にも色々な書き方のパターンがあったりして分かり難いですね…
で、結局PerlではCみたいに
配列を別のポインタで操作するみたいな事は出来ないんでしょうか?
Cでいうこんな感じ↓
int a[] = {0,0,0};
int *p = a;
for(int i = 0; i < 3; i++){
p[i] = i;
printf("%d ", a[i]);
}
0846デフォルトの名無しさん
NGNG*p = \@a;
print "$p[0], $p[1], $p[2]\n";
0847デフォルトの名無しさん
NGNGPerl と C は別の言語なので、C の概念や流儀は捨てて考えた方がいい。
my @a = (0, 0, 0);
local *p = \@a; # no strict 'vars'
for (my $i = 0; $i < 3; $i++) {
$p[$i] = $i;
print "$a[$i] ";
}
0850デフォルトの名無しさん
NGNGperlでsetuidを立ててsystem関数を動作させようとしている
cgiがあるのですがアパッチのログには下記のように出てうまくいきません。
Insecure dependency in system while running setuid at createHomeDir.cgi
このcgiスクリプト内では
my $result = system("mkdir /home/hogehoge");
とディレクトリを作成する作業をしようと思っています。
スクリプトを作成した後
#chown root createHomeDir.cgi
#chmod 4755 createHomeDir.cgi
とやってrootで動作させるようにしているのですが、、、
何か情報をお持ちなかたはお教えいただけますとありがたいです。
0851851
NGNGすいませんCGIの質問は
WEBプログラム板ですね。
失礼しました。
0852850
NGNGえーっと板違いなのは重々承知ですが
850の情報をお持ちな方はご教授いだだけますとありがたいです。
0853デフォルトの名無しさん
NGNGダメです。
0854デフォルトの名無しさん
NGNGuseradd すればいぃのでは?
perl=>CGI 繋がりで webmin なんていかがです?
0855デフォルトの名無しさん
NGNGsetuidしてるからtaintモードで実行されてるので、
本当にsystemにそう書いてるんなら、環境変数が
汚れてるんだろうな。
とりあえずperlsec(1)よく読め。ぐぐれば日本語訳も
みつかるだろう。
0856デフォルトの名無しさん
NGNG動くかどうかわからないが、-Uつけてみれ。
#!/usr/bin/perl -U
0857デフォルトの名無しさん
NGNG世界中のハッカー諸君がんばってよ
0858デフォルトの名無しさん
NGNG0859デフォルトの名無しさん
NGNGバグばっかでw
Perl改めApacheにしろよ>Larry
0860デフォルトの名無しさん
NGNGいや、日本語の勉強してるんだろ。
0861デフォルトの名無しさん
NGNG(俺の頭が)バグばっかでw
0862デフォルトの名無しさん
NGNG0863デフォルトの名無しさん
NGNG0864デフォルトの名無しさん
NGNGPerl 5.8では既に多国語対応はかなりのところまで来ている。
http://d.hatena.ne.jp/tateisu/20040112
お前の使ってる安物プロバイダがどのバージョンのPerl使ってるかはしらねーけどな。
0865デフォルトの名無しさん
NGNG0866デフォルトの名無しさん
NGNG0867デフォルトの名無しさん
NGNGbinmode($_, ":encoding(cp932)") for STDIN;
binmode($_, ":encoding(????)") for STDOUT;
$input=<STDIN>;
print STDOUT $input;
というプログラムにcp932の"〜"を食わせてeucの"〜"が出てくる
ようにするには????の部分に何を指定すればいいですか?
0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNGperlではどう書くのか知らないけど。
0870デフォルトの名無しさん
NGNGUnicode作ってる団体に抗議しとけ。
現実的な対応はこんな感じ。
use utf8;
{
package Encode::MyEUCJP;
use base qw(Encode::Encoding);
__PACKAGE__->Define(qw(MyEUCJP));
sub encode{
$_[1] =~tr/\x{ff5e}/\x{301c}/;
return Encode::JP::encode("euc-jp",$_[1],$_[2]);
}
sub decode{
die "not implemented\n";
}
}
binmode($_, ":encoding(cp932)") for STDIN,STDERR;
binmode($_, ":encoding(MyEUCJP)") for STDOUT;
$input=<STDIN>;
print STDOUT $input;
〜 だけじゃなく http://euc.jp/i18n/ucsnote.ja.html にある文字も処理することになるだろね。
0871867
NGNG新しいEncodingをPerlで書いて追加できるってのはおもしろい
ですけど、ここまで大掛かりにやらないとならないものだった
とは... 単に自分の検索能力が低くて名前を見つけられてない
だけだと思ってましたが本当になかったのですね。回答ありが
とうございます。
0872デフォルトの名無しさん
NGNGprint "転写したいDNA配列を入力してください。\n\n\n";
$dna = <STDIN>;
chomp $dna;#改行コードを除く
if ( $dna =~ /^\s*$/ ){#何も入力がないなら
exit;
}
$DNA = "\U $dna \E";#大文字に変換
#####
$RNA = reverse $DNA;#逆にする
$RNA =~ tr/ATGC/UACG/;#AはU TはA GはC CはGに変換
print "転写されたRNA配列は\n";
print "$RNA\n";
print "です。\n\n\n";
exit;#終了
######の部分に
「ACGT以外の文字があった場合はプログラム終了」
というのをしたいんですが、
if ($DNA =~ /[^ACGT]/ ){
exit;
}
ではうまくいきません。
どこがいけないんでしょうか?
0873デフォルトの名無しさん
NGNG0874872
NGNG忘れてました。
0875デフォルトの名無しさん
NGNG$dna = <STDIN>;
$dna =uc $dna;
$dna =~s/[^ACGT]//g;
length $dna or exit;
では?
0876872
NGNGありがとうございます。
ありがとうございます。
0877デフォルトの名無しさん
NGNGそれだとACGTが一文字でもあれば、他の文字がさりげなく
削られて何事もなかったかのように先に進んでしまうような
気がする。
$DNA =~ /^[ACGT]+$/ or exit;
とかの方がいいんじゃないだろうか。
0878名無し募集中。。。
NGNGこれでもいけるな
0879デフォルトの名無しさん
NGNG今回は教えを乞いたくてやってきました。
私は今、sendmailを使ったメール転送CGIに取り組んでいます。
ところがやってみると
No recipient addresses found in header
というエラーがでました。
これは、受け取り側アドレスがヘッダーの中にないというような
内容だと思うのですが、
To: $mailadr_toと指定していますし、変数にもアドレスは入っているのです。
あれこれいじってみても結果がかわりません。
if(open(SENDMAIL,"| $sendmail")){;
print SENDMAIL <<"EOM";
To: $mailadr_to
EOM
close(SENDMAIL);
}
受け取り側部分を取り出すとこんなソースです。
$sendmailのなかはsendmailのパスが-tをつけて入ってます
お気づきの点があれば、教えてください。
0880デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/tech/
>Javascript は Web 制作板、CGI は Web プログラミング板へ。
0881デフォルトの名無しさん
NGNG>お気づきの点があれば、教えてください。
CGIとsendmail(8)の質問であることに気づいた。
open(F, "| /usr/sbin/sendmail -t");
print F <<EOS;
To: [email protected]
body
EOS
close(F);
ヘッダパートとボディパートは空行で区切りだこんちくしょう
手で sendmail 叩いて実験しろうんこ
0882デフォルトの名無しさん
NGNG0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNG0885デフォルトの名無しさん
NGNG0886デフォルトの名無しさん
NGNGうわだれだやめろなにをすr
0887デフォルトの名無しさん
NGNGもっとユニークな乱数を発生させる関数ってないですか?
組み込み関数の乱数だと、変に同じ数字がつづく事があるんで・・・
0888デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq4.html#Why_aren_t_my_random_numbers_ran
http://search.cpan.org/search?query=random
0889デフォルトの名無しさん
NGNG同じ数字がまるで続かないのもそれはそれで
不自然だろ?(笑)
とりあえず最近のOSなら/dev/randomから読む
のが最強といっていいのだろうか? 手軽に使う
ならCPANのCrypt::Randomとかね。
ただモンテカルロ法みたいにたくさん必要だと
/dev/randomじゃ足りないと思うので、適当な
擬似乱数を使うことになるだろう。
Math::RandomとかMath::Random::MTとか試して
みるのがいいんじゃない?
0890デフォルトの名無しさん
NGNGいい加減、うざいからやめてくれ。
0891デフォルトの名無しさん
NGNGオマイのほうが(ry
0892デフォルトの名無しさん
NGNG別にここ初心者スレじゃないし資料読ませりゃ大抵わかるだろ。
それでもわからんなら仕方ないけど。
0893デフォルトの名無しさん
NGNG0894デフォルトの名無しさん
NGNGリンク先を見ようともしない奴なんだろ
0895デフォルトの名無しさん
NGNGサイトの宣伝だと思ってるんだろ。
0896デフォルトの名無しさん
NGNGmy $c = ord substr($str, $pos, 1);
if (($c >= hex("81") && $c <= hex("9F")) ||
($c >= hex("E0") && $c <= hex("EA")) ||
($c >= hex("FA") && $c <= hex("FF"))) {
こんなBasicみたいな、Cみたいな書き方でないPerl風の
もっといい方法を教えてください。
0897デフォルトの名無しさん
NGNG0898デフォルトの名無しさん
NGNGord substr => ord $str (ordは文字列の先頭1文字を見る
0900デフォルトの名無しさん
NGNGリンクを貼るだけで回答した気になっているのが気に入らない。
0901デフォルトの名無しさん
NGNG該当箇所のヒントぐらい与えないと、ハッキリ言って
情報価値ゼロ。本人は得意げにリンクを貼るぐらいだから
そのドキュメントに書かれていることに熟知してるんだろ?w
0902デフォルトの名無しさん
NGNG>該当箇所のヒントぐらい与えないと、ハッキリ言って
>情報価値ゼロ。
んなこと言ってるから、いつまでもアホウのまんまなんだよ。
0903デフォルトの名無しさん
NGNGだったら放置すればいいだろ
0904デフォルトの名無しさん
NGNGはきちんとした回答だと思うが。情報価値ゼロとか言ってる香具師はリンク先見てないだろ。
0905デフォルトの名無しさん
NGNGせめてなにか一言でもかけ。
0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNG荒らしじゃないですよ、一応言っとく。
何処かに初心者板とかないですかね?
0908デフォルトの名無しさん
NGNGしかしそれに特化した利便性はない。
0909デフォルトの名無しさん
NGNGWin32::GuiTest使ってみたら?
0911デフォルトの名無しさん
NGNG0912デフォルトの名無しさん
NGNGソースの先を我がものでコピペするより1024倍好感が持てるが?
0913デフォルトの名無しさん
NGNG0914デフォルトの名無しさん
NGNGぐぐれ は、今の常識だろーよ。
少なくとも俺は機嫌が悪くても、正答のヒントくらいは書く。
0915デフォルトの名無しさん
NGNGの方はともかくとしても
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq4.html#Why_aren_t_my_random_numbers_ran
の方はヒントの書き様もクソも無いだろ
リンク先どころかURLすらも読んでない奴にバカ丁寧にしてやる必要があるのかねぇ
0916デフォルトの名無しさん
NGNGperl勉強中の名無しです。
今、TSVに区切られたファイル(約200件)を、
Postgresのテーブルに流し込むということをやっています。
調べてみたところ、Postgresに[copy]コマンドというものを発見。
これで流し込む事は出来ました。
しかし、copyはPostgreSQLのプロンプトでしか使えないようです。
perlの中で[insert]文を書いて流し込みたいのですが、
この場合どのような書き方をすれば良いのでしょうか。
どうぞ宜しくお願いいたします。
0918デフォルトの名無しさん
NGNGありがとうございます。
DBD::Pgですか。
ド頭に宣言するアレですね。
今日は徹夜でやってみます。
結果は後ほど報告まで。
0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNG親切に書かれてるものをさらにくだいて書く必要があるかどうかってのがポイントだろ
誰が書いても同じものを書き直すのはただの手間でしかない。
0921デフォルトの名無しさん
NGNG0922デフォルトの名無しさん
NGNGそれで不十分ならその旨質問すればちゃんと答えてくれてるだろ
何が気に入らないのか分からんな
「man読め、CPAN行け」だけなら俺もちょっと酷いかとは思うが
具体的なポインタまで示してくれてるんだから十分に親切だと思うぞ
0923デフォルトの名無しさん
NGNGそうすれば本も売れてウマー
0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNG0927デフォルトの名無しさん
NGNG意外と有り得るかも、持ってたとしてもほんの数人じゃない?
以前からPerlやってりゃ要らないもん、特に2版とか持ってる人は
0928デフォルトの名無しさん
NGNG順当に初めての〜から買うべきだったのかと思ってちょっと欝。
テキストをHTMLにコンバートしたかったんです。
あと自作の掲示板とか。
0929デフォルトの名無しさん
NGNG新機能の差分は欲しいんだけどねぇ。
Cookbookのほうが重宝するですよ。
0930907
NGNG0931デフォルトの名無しさん
NGNGちょっとすればラクダ本買ったことが間違ってなかったことに気がつくよ。
それまでの辛抱。
0932デフォルトの名無しさん
NGNG理系人間が生真面目に正確に翻訳しただけの技術文書。
プロの翻訳家が翻訳すればもっとわかりやすくて魅力的な文章になりperlにより親しめるというものだがな。
日本語訳なんだから変数名も$hanakoとか$tarouとかに変えればいいんだよ。
@sushi = qw(toro ikura hirame);とか。
あのくそ面白くも無い翻訳文章を、何度も何度も読み返して体に慣れさせないとラクダ本は読了できない。
苦痛でしかないと思うが、>>928ガンガレ
体がラクダになれた頃、君は一皮剥ける。
0933デフォルトの名無しさん
NGNGhttp://news14.2ch.net/test/read.cgi/mnewsplus/1084965631/
0934デフォルトの名無しさん
NGNGそりゃ訳者に言い過ぎ。
0935928
NGNGがんばります。
>>932
2巻はまだ買ってないし、プログラミング用語にも疎いので、スカラーとかレキシカルとか難しい
英語は(時々日本語も)意味を調べなおして自分で訳しなおさないと理解できなかったりしますw
スカラーコンテキスト→単数扱い、リストコンテキスト→複数扱い、評価→判定とか
まぁ、文系なので・・・・・・
0936デフォルトの名無しさん
NGNG古いラクダ本持って無いなら、買っても間違いじゃないと思うよ
正しく歩けるから、そこらのCGI向け初心者本とか買うよりはずっと正解
0937デフォルトの名無しさん
NGNG「初心者のためのPerl」じゃなくて、「初心者が書いたPer」だろ、
って言いたくなる本もあるしね。
>>932
オライリー本のほとんどは訳者がわかって訳してる。
それだけでコンピュータ本の翻訳としては平均以上。
0938デフォルトの名無しさん
NGNG訳者がわかって訳していても、その本を読むPerl初心者が取っ付き難いのが問題だといっているんだよ。
オライリー本を訳したのは訳者であって翻訳家でないというのが我々の不幸。
英語の言い回しをそのまま忠実に訳すから日本語になった時面白くない。
0939デフォルトの名無しさん
NGNG一度「プログラミングC++」の訳読んで見れ。泣くから。
0940デフォルトの名無しさん
NGNG「日本語から英語(原文)を想像してそれを日本語に訳す」
のが正しい読み方だと俺は思ってる。
「プログラミング言語C++第3版」の訳はあまりにもひどすぎる。
訳者に「ニホンゴワカリマスカ?」って聞きたくなるし
正誤表を印刷したら26ページにもなったし
そこに載ってない間違いも少なくないし...
まあPerlスレで言うことじゃないか。
0941デフォルトの名無しさん
NGNGむしろかなりましな部類だと思う。
0942デフォルトの名無しさん
NGNG0943デフォルトの名無しさん
NGNG難しい問題ではある。一つの語を全然別の語に訳しなおすとか。
0944デフォルトの名無しさん
NGNG存在するならば、コンピュータ書籍を翻訳できる翻訳家を列挙してくれ。
0945デフォルトの名無しさん
NGNG0946デフォルトの名無しさん
NGNG相対パスなどで実行するとき、
$ ../../tools/mytool.pl foo.txt
そのperlファイルが自分と同じディレクトリにあるライブラリをrequireで
呼んでいる場合、下のように実行パスを調べて付加してやらないと
カレントを探してないといわれていまいます。
#/usr/bin/perl
#mytool.pl
if ($0 =~ /^(.*\/).*$/) { $epath = $1; } else { $epath = './'; }
require $epath .'mylib.pl';
なにかもっといい方法があるのでしょうか?
0947デフォルトの名無しさん
NGNG0948デフォルトの名無しさん
NGNGuse utf8 とか use encoding 'shiftjis' して、
-f に utf8 で全角を含む文字列を渡すと結果が間違いとか。(多分このせいで File::Find がおかしくなるとか)
system ('echo OKあ'); の結果が予想したようにならないとか。
なんか設定があるのかと思って探しましたが、見つかりませんでした。
(元が Unix のツールだから、システムコールで unicode は考えてないのかと思いましたが、
open は大丈夫なのでちょっと不思議だなあ、と)
use utf8 とか use encoding 'shiftjis' しないと、SJIS でスクリプト書くの大変ですし。
みなさんスクリプトやデータに日本語(SJIS)使いたい時、どうしてます?
use encoding や use utf8 しないで、EUC でスクリプト書いて、I/O を jcode などで自分で変換するのが
一番確実な気がしてきました。(特に unicode を使いたい訳でもないので)
が、そんなもんなんでしょうか?
今書いてる奴は実行環境の問題で jperl は使えないし。
0949デフォルトの名無しさん
NGNGこんなのは。
use encoding 'shift_jis';
use Encode;
sub en{
encode('shift_jis',$_[0]);
}
sub de{
return decode('shift_jis',$_[0]);
}
my $path='c:\test';
opendir(my $dir,en $path);
my @files=grep {$_ ne '.' && $_ ne '..'} map {de $_} readdir($dir);
closedir($dir);
0950デフォルトの名無しさん
NGNGファイル名の文字コードやコマンド引数の文字コードを
指定しとくとunicode文字列を適当に変換してくれる
ような仕組みも必要なんだろうね。いちいち自分で変換
するなんてめんどくさくてやってられん。
0951949
NGNGWin32::OLEとかを使う時などは結構役に立つと思う。
myopendirとか作ってラップするという手もあるけど、この手法なら非標準の出力先・入力元(Win32::OLEなど)でも使えるので。
ただし入出力するものにde en とつける必要があるが(ただdecodeとかそのまま使うよりは楽)
system (en 'echo OKあ');
>>950
読み込んだり書き出したりする時に文字コード変換する仕組みはあったと思うぞ。
my $sjisfile='sjisfile.txt';
my $utf8file='utf8.txt';
my $eucfile='euc.txt';
open my $in, "<:encoding(shiftjis)", $sjisfile or die;
open my $out, ">:encoding(utf8)", $outfile or die;
open my $out2, ">:encoding(euc-jp)", $outfile or die;
while(<$in>){print $out $_;print $out2 $_}
close($in);
close($out);
close($out2);
0952デフォルトの名無しさん
NGNGストリーム中のデータはPerlIOが処理してるれるけど、それじゃなくて。
0953948
NGNGそれだと結局、ファイル名に SJIS にない Unicode 文字使われた時に File::Find::find が
おかしくなるとか、結構ツライんですよね。
個人的にはいらないんですけど、Win だと意識せずにファイル名に使ってる人とかいるんで。
open のファイル名では使えたような気がしたんですけど、今ためしたらダメでした。
なるほど、現時点の Perl では、ストリームI/O でしか Unicode を意識してないって事ですか?
それならそれで判断しやすいんで、当面は自分でコード変換しますけど・・・。
そもそも Win 版は ANSI 版の API しか使ってないのかな。
最近 Win では ActivePerl しか使ってないけど、本体を自分でビルドしたら変わるかもしれないですね。
ヒマできたら調べてみよ・・・
0954948
NGNG別の原因だったかもしれないですけど。
0955948
NGNG私の勝手な思いとしては、変換というよりは、システムコールが Unicode 対応なら
そのまま渡すと思っていたんですが、結局はそうじゃないんですね?
0956デフォルトの名無しさん
NGNGFile::Findについては調べてないけど
0957325
NGNGオライリーの本、そんなにわかりにくいとは思わないけど。。。
オブジェクト指向perl勉強しようと思ってマスターコース読んだけど、
イマイチしっくりこず、「実用perlプログラミング」読んで目から鱗でした。
0958教えてモンゴメリー伯爵
NGNGa,b,c,d
あ,い,う,え
というデータがあるとしよう。
これをだな
1,a,あ
2,b,い
3,c,う
というふうにしたいわけだが....
どうしたらいいのじゃ
0959教えてモンゴメリー伯爵
NGNG0960デフォルトの名無しさん
NGNG@csvData1 = split (/,/, $csv1);
@csvData2 = split (/,/, $csv2);
@csvData3 = split (/,/, $csv3);
for ($i=0; $csvData1[$i]; $i++) {
$newData = join (',', ($csvData[$i], $csvData[$i], $csvData[$i]));
push @newCsvData, $newData;
}
実際動かして試してないから、わからんが、
これで行けんだろ。
眠いから寝る。
0961デフォルトの名無しさん
NGNG間違えた。
>$newData = join (',', ($csvData[$i], $csvData[$i], $csvData[$i]));
ここの所。
$newData = join(',', ($csvData1[$i], $csvData2[$i], $csvData3[$i]));
へ変更。
0962デフォルトの名無しさん
NGNGスレ違い?
0963デフォルトの名無しさん
NGNG昔 Vz
今 Meadow
0964デフォルトの名無しさん
NGNG0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNG0967デフォルトの名無しさん
NGNGって、なんか上の方にも似たような話なかったか
0968デフォルトの名無しさん
NGNG手垢のついた話題、無理に持ち込まなくてもいいぞ
0969デフォルトの名無しさん
NGNGと指定したとき、ファイル名の大文字・小文字の違いを無視して
ファイルを読み込ませる方法ってありますか?
0970デフォルトの名無しさん
NGNG意味ふめー
> aaa.pl *.txt
でどうになって欲しいの? (どこがまずいの?)
0971名無しさん@初回限定
NGNG*.txtって指定したら全部対象になるようにしたい。
元々がDOS使いの人間で、ファイル名の大文字小文字の違いを意識してなかった。
おかげで、*.txtって指定して、*.TXTが処理してなかったというテイタラクをしてしまった…
0972デフォルトの名無しさん
NGNGシェルが処理すべき問題で、Perlが処理すべき問題じゃない
readdir()とかと正規表現使えば出来ない事は無いけどな
0973デフォルトの名無しさん
NGNG0974デフォルトの名無しさん
NGNGaaa.pl *.[tT][xX][tT]
0975デフォルトの名無しさん
NGNGカッコ悪くはないです。
拡張子といっても、3文字だけでも大文字小文字の組み合わせで8種類あるし、
txt、htm、doc、cntなど色々とあるので、もう少し流用しやすい方が嬉しい。
まぁ、txTなんて拡張子をつける人なんて考えられないけど、人のやることだし…
>>974
こんな手があるとは…
ってことは、973の {txt,TXT} を [Tt][Xx][Tt] とする手もアリですね。
0976デフォルトの名無しさん
NGNG0977デフォルトの名無しさん
NGNG$perl -MFile::DosGlob=glob -e 'print <*.txt>'
>>972さんが言っているように、aaa.pl *.txtと打ち込んだ時、
*.txtを展開しているのはPerlじゃなくてシェルだから、解法は
シェルの機能に依存しちゃうので厳密に言えば板違いかも。
0978デフォルトの名無しさん
NGNGどうしてPerlはこんなに速いんでしょうか。
0979デフォルトの名無しさん
NGNGユーザーが多いからそんだけバグも早くつぶれるし、
色々口出し^H^H^H助言してくれる輩もいるから、
自然と処理系も最適化されるんじゃないの。
0980教えてモンゴメリー伯爵
NGNG960よ あっぱれじゃ見事処理できたぞよ
ほうびをやろう これほうび→ (ω)
0981デフォルトの名無しさん
NGNGプリコンパイル方式だからとかそういう話でなくて?
0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNGしててるとか最適化のせいでしょ。そもそも Perl はネイティブコードのジェネレートも無いし。
何万行もあるコードかいたらそれなりに遅いとおもうけど、普通のスクリプトのサイズじゃ
たかが知れてるわな。
0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNGはいはい
0987デフォルトの名無しさん
NGNG0988デフォルトの名無しさん
NGNGVBでPowerPointを操作するVBAをマクロ記録機能を使って作ったのですが、
これをPerlに置き換えられなくて困っています。
わかる方がいたら教えて下さい。
ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:="D:\test\test.bmp", LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=75, Top:=-74, Width:=570, Height:=689).Select
With ActiveWindow.Selection.ShapeRange
.Fill.Transparency = 0#
.Height = 344.62
.Width = 285.12
End With
With ActiveWindow.Selection.ShapeRange.ActionSettings(ppMouseClick)
.Hyperlink.Address = "D:\test\test.bmp"
.SoundEffect.Type = ppSoundNone
.AnimateAction = msoFalse
End With
With ActiveWindow.Selection.ShapeRange.ActionSettings(ppMouseOver)
.Action = ppActionNone
.SoundEffect.Type = ppSoundNone
.AnimateAction = msoFalse
End With
環境は
Pen3:1GHz
Memory:2GB
OS:Windows2000Professional
Soft:MSPowerPoint2002SP-2
ActivePerl5.6.1.635
です。
0989デフォルトの名無しさん
NGNG俺は立てられないので。
0991デフォルトの名無しさん
NGNG乙!
0992デフォルトの名無しさん
NGNGひょっとして、全くやり方がわからんから、お前ら Perl で書いてアップしろって言ってるのか?
だったら、とりあえず \Perl\html\faq\Windows\ActivePerl-Winfaq12.html でも読めよ。
5.6.x にはこのファイルないかもしれんけど。無かったら 5.8.3 入れてドキュメントだけ見なよ。
がんばって書いてみたけど思ったように動かないなら、どう書いたのか書きなよ。
大体が、Perl でそれを書いたとして、できるのは実行した時に開いてるファイルに対する
処理だけなんだけど、それでいいのか?
0993988
NGNGPerlを使ってPowerPointでいくつかのグラフや画像をスライドに貼り付けていく作業の中で
「マウスクリック時の動作として指定ファイルのハイパーリンクを開く」
というのだけがどうしてもうまくいかないのでその部分の記述を教えて欲しくて書き込みました。
ドキュメントは5.6.xにもあるので見てみました。
OLDでの基本的なExcelやWordの動きのサンプルが載っていましたが
今回のものにはあまり参考になりませんでした。
一応これまでもPowerPointでグラフを挿入したり、
Excelで表を作りその文字列に同ブック内別シートの
指定セルへのハイパーリンクとかはやっているのですが、
どうにも今回のPowerPointでスライドに貼り付けた画像に
ハイパーリンクを設定するという作業がうまくいきません。
my $ppt = Win32::OLE->new('PowerPoint.Application') or die "PowerPoint start Error";
my $doc = $ppt->{Presentations}->Add(msoTrue);
$ppt->ActivePresentation->Slides->add(1,1);
my $pic_file = 'C:\test\test.bmp';
my $NewPic = $ppt->ActivePresentation->Slides(1)->Shapes->AddPicture($pic_file, 0, 1, 225, 115, 285, 345);
これでPowerPointの起動からスライドを1つ作ってそこへ画像の貼り付けまで出来ます。
この続きでその貼り付けた画像をマウスでクリックした時の動作として
その画像をハイパーリンクで開くという事をしたいのです。
my $NewMouse = $NewPic->ActionSettings(ppMouseClick);
$NewMouse->{Hyperlink}->{Address} = $pic_file;
こんな感じとかいろいろやってみているのですがマウスクリック時の動作の設定は全く変わりません。
その設定方法を教えて欲しいのです。
開いているファイルに対する処理の記述だけで結構ですので宜しくお願いします。
0994デフォルトの名無しさん
NGNGこれは仕様ですか?というかリストのセパレータはカンマじゃなくて
=>でもいいのね
0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNGperl -e 'print (1=>2=>3=>4=>5)[4]'
perl -e 'print $tmp=(1=>2=>3=>4=>5)[4]' これならOKです
0997デフォルトの名無しさん
NGNGhttp://perldoc.com/perl5.8.4/pod/perlop.html#Comma-Operator
>>996
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldata.html#List_value_constructors
http://perldoc.com/perl5.8.4/pod/perlop.html#Named-Unary-Operators
0998デフォルトの名無しさん
NGNGhttp://perldoc.com/perl5.8.4/pod/func/die.html
0999デフォルトの名無しさん
NGNGprint(1=>2=>3=>4=>5) [4]
最初の括弧が関数の引数の括弧になっている。
print 関数に引数に 1=>2=>3=>4=>5 を渡して、
print 関数の戻り値の[4]番目を参照してエラーになってる。
print "", ( 1=>2=>3=>4=>5 )[4] なら大丈夫
10001000
NGNG>$time = stat($file)[8]; # おおっと、括弧を忘れた
print ((1=>2=>3=>4)[3]);
これでいいということか、なるほど。
=>はComma演算子と同義語だけど、その左辺値に対しては
Stringとして解釈されることを強制するわけね。
ハッシュではなくて、普通のリストに=>を使ったら、一番右の値以外の全てが
文字列になるということなのかな?
と、送信しようと思ったら>>999レスありがとうございます。
>最初の括弧が関数の引数の括弧になっている。
なるほど。
print +(1=>2=>3=>4)[3];
これでもOKでした。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。