Perlについての質問箱 17箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/06/04(土) 16:31:48"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc5.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
http://www.perl.org/get.html
● 2005/03/17現在の最新版: 5.8.7
● 2005/03/17現在の開発版: 5.9.2
0002デフォルトの名無しさん
2005/06/04(土) 16:33:041 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
0003デフォルトの名無しさん
2005/06/04(土) 16:33:3211 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
0004デフォルトの名無しさん
2005/06/04(土) 16:34:00Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873110378/
[オンラインマニュアル]
Perldoc.com: http://www.perldoc.com/
perldoc.jp: http://www.perldoc.jp/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
0005デフォルトの名無しさん
2005/06/04(土) 17:45:21| ./`ー _ ,ヘ /
| /:: ─ _ / ヽ/ 静粛に・・・・!
| ./:::: ─ _/ ヽ 今>>1はPerlでプログラムを書いた・・・・・!
| /:::::::::ミ_ ─ _ /'〃
| \:::::::::: ─ _ ─ _ /::/ヽ
| \:::: ─ _||| ||:::/ ヽ 最初に言ったはずだ
| /⌒l ━┳━━━━━━━━━━━━┓ そういったことは一切認めていないと・・・・・・!
| |:i⌒|::|:::::| :::illlllllllllllllll|━━| ::illllllllll|
| |:l⌒| |::::: | :::iillllllllllllllll/ ::::::| :::iillllllllllノ
| |::「]| |::::: \::iillllllllllllllノ/ :::::| :iillllllllノ
|. \_.l |:::::::  ̄ ̄ ̄ ::/ :::::|  ̄ ./
. ./| N:::::::::: (_ ::::_:丿 /
./::: | /: :|::::::::: ー /
/ :::::: |. ./:: ::|::::::: ( ̄ ̄ ̄ ̄ ̄ ̄) /
/:::::::::::::| ./:::: ::|:::::  ̄ ̄ ̄ ̄ ̄ ̄ /
: : :::::::::::::|.../::: ::|:::: __ /
: : :::::::::::::|/:: ::l:: :::::::: /\
::::::::::::::::::|\ ::\ /:::::::::\
:::::::::::::::::| \ ::::\______/:::::::::::::::::
::::::::::::::::| \ ::::::::::::/ |::::::::::::::::::::
0006デフォルトの名無しさん
2005/06/04(土) 23:08:00Perl信者がキリスト教徒みたいに必死に宣伝しマンセーするので、非常に迷惑しています。
早く死んで欲しいですね。
どいつもこいつもほっときゃいずれ死ぬよん♪
漏れもなー
0008デフォルトの名無しさん
2005/06/05(日) 13:06:51ああ、「早」という漢字が読めなかったんですね ;-)
0009デフォルトの名無しさん
2005/06/05(日) 14:52:370010デフォルトの名無しさん
2005/06/05(日) 16:04:550011デフォルトの名無しさん
2005/06/06(月) 00:40:03で、Error.pmの弊害、以下のようなクロージャがメモリリークを起こすと書いてありました。
my $foo;
$subref1 = sub {
$subref2 = sub {
$foo++;
};
};
よーわからんのですが、myを指定してもクロージャブロックは勝手に変数のコピーを持ちつづけるからってことでしょうか?
そしてそれを回避するには?クロージャの中でundefしたら後でクロージャを実行できなくなるだろうし、わからん。
0012デフォルトの名無しさん
2005/06/06(月) 01:18:22私も良くわからない。
for (;;) {
my $foo;
$subref1 = sub {
$subref2 = sub {
$foo++;
};
}
}
みたいにしてみたがいくら待ってもperlのプロセス太らなかった。
こういう意味ではないのだろうか?
0013デフォルトの名無しさん
2005/06/06(月) 04:31:030014デフォルトの名無しさん
2005/06/06(月) 15:28:300015デフォルトの名無しさん
2005/06/06(月) 17:21:090016デフォルトの名無しさん
2005/06/06(月) 19:05:50(いちいち ${$ref_x}[0] とか書くかわりに) $x[0] と言う風にアクセスしたいのですが、
試したところ、下のリストのように、いちいちパッケージ名 Hoge で修飾しないと怒られる個所ができてし
まいます。
use strict の安全性と、別名を使ったアクセスの簡便性を両立させるのって無理なんで
しょうか _| ̄|○|||
use strict;
package Hoge;
sub foo(\@) {
local *x = $_[0];
print "(foo) ";
foreach (@Hoge::x) {
print "$_ ";
}
print "\n";
push @Hoge::x, ('this', 'is', 'a', 'pen', '.');
}
package main;
my @bar = ('Hello', 'World', '!');
Hoge::foo(@bar);
print "(bar) @bar\n";
0017デフォルトの名無しさん
2005/06/06(月) 19:07:34やってくれるモジュールがあれば教えてください。
0018デフォルトの名無しさん
2005/06/06(月) 19:19:08use File::Path;
mkpath("./h/e/l/l/o/w/o/r/l/d", 0, 0777);
0019デフォルトの名無しさん
2005/06/06(月) 19:44:47$Hoge::xをuse strict下で$xと書いたら普通は怒られるというのが問題の本質と
思われるので、use varsかourで回避するしかないんじゃない? 型グロブによる
別名づけはパッケージ変数でしか使えないし。
あるいはCPANでさがせばレキシカル変数の別名を実現するモジュールがあるので
そういうのを使うことを考えてみるとか。たとえばLexical::Aliasを使うとこん
な風に書ける。
use strict;
package Hoge;
use Lexical::Alias;
sub foo(\@) {
my($arrayref) = @_;
my @x;
alias @$arrayref => @x;
print "(foo) ";
foreach (@x) {
print "$_ ";
}
print "\n";
push @x, ('this', 'is', 'a', 'pen', '.');
}
package main;
my @bar = ('Hello', 'World', '!');
Hoge::foo(@bar);
print "(bar) @bar\n";
0020デフォルトの名無しさん
2005/06/06(月) 19:57:47ありがとうございます。 File::Path を使ってうまくいきました。
0021デフォルトの名無しさん
2005/06/06(月) 21:10:49そんな気もするけど>>11の文書って結構古いよね。
今に至るまでのperlかmod_perlのバージョンアップで解消されてるってことはないの?
002216
2005/06/06(月) 22:06:39ありがとうございます。
Cygwin 環境で Lexical::Alias をインストールしてうまくいきましたv
ただ、Win32 環境の方だとちょっと・・・
(nmake install までは正常終了してるっぽいのに、スクリプトを走らせるとうにゃうにゃエラーメッセージが出てきます orz
大袈裟なきもしてきましたので、foo() { } の先頭で no strict 'vars' として逃げてみます。
(すげー問題あったりして(汗
0023デフォルトの名無しさん
2005/06/06(月) 22:24:12ん?
package Hoge;
sub foo(\@) {
our @x;
local *x = $_[0];
print "(foo) ";
foreach (@x) {
print "$_ ";
}
print "\n";
push @x, ('this', 'is', 'a', 'pen', '.');
}
とかでいけない?
0024デフォルトの名無しさん
2005/06/06(月) 23:09:43SQL Server の nvarchar or ntext 型へのINSERT時に文字化けしてしまいます。
ソースコードをSJISで書けば問題なくINSERTできるので、
SJISへ変換してからINSERTすればうまく行きそうな気はしますが、
できれば、ConnectionString? だけ差し替えでDB切り替えられるような作りに
したいのですが、なんか良い方法があったら教えて頂けないでしょうか?
[環境]
OS:Windows XP SP2
DB:SQL Server 2000
Perl:Active Perl v5.8.6
[コード]
#!/usr/bin/perl -w
use DBI;
#my $dbh = DBI->connect('dbi:SQLite2:dbname=memo.db','','');
my $dbh = DBI->connect('dbi:ODBC:perl','user','password');
my $sth = $dbh->prepare("insert into memo ( title, content ) values( ?, ? )");
$sth->execute( "日本語", "ソースはUTF-8です。" );
$sth->finish;
$dbh->disconnect;
002522
2005/06/07(火) 11:13:32ガビーソ! (゚Д゚;)
そうか、our 宣言って、local 宣言と組み合わせた場合は安全なんですね(汗
@Hoge::x (への|からの) 値の変更が筒抜けになる危険なものだとばかり思い込んでました。
それで逝きます。重ね重ねすいません on_
0026デフォルトの名無しさん
2005/06/07(火) 12:37:27ourってuse strict "vars"で怒られなくするという以上の意味は
ないよ。
筒抜けとかなんとかって考えがどこから出てきたのかはわからんが
なんか激しく誤解しているようなので、いい機会だからきちんと
理解しといた方がいいんじゃないかな。
002722
2005/06/07(火) 12:55:39> ourってuse strict "vars"で怒られなくするという以上の意味は
> ないよ。
まさに our 宣言がそれしかしない、つまり新しい変数を作るわけではない、という点が問題だと思うのでつ。
our $x と宣言したレキシカルスコープ内で、$x の実体はあくまで $Hoge::x でつ。
$Hoge::x をスコープ外から他人が触らない保障はないのでつA`;)。
(この意味で「筒抜け」と表現した。)
use strict;
package Hoge;
$Hoge::x = "This is a pen.";
sub foo() {
our $x;
# local $x; # <-- ここで local しないと、、、
print "(foo) $x\n";
}
package main;
foo(); # "(foo) This is a pen.
$Hoge::x = "Hello World!\n";
foo(); # "(foo) Hello World" と表示される。(筒抜け)
0028デフォルトの名無しさん
2005/06/07(火) 13:01:55my $i;
my @hoge = ();
for( $i = 0; $i < 10; $i++ )
{
my $value = i;
push( @hoge, \$value );
}
と、やった場合に、ループの度に新しい$valueが生成される
(前のものは残ってる)と思うのですが、これは
「push( @hoge, \$value );」をやらなくても同じ(毎回新しい$valueが
生成されて、前の$valueは解放されずに残っている)なのでしょうか?
それとも参照方法を失った変数はその都度解放されているのでしょうか?
0029デフォルトの名無しさん
2005/06/07(火) 13:10:47・・・と思う。
もちろんループ回数分の個数 (この場合 10 個) が、別々の実体として。
処理系のソース見たわけではないけど、
普通ガベージコレクタの仕事とはそういうものだよね・・・
003029
2005/06/07(火) 13:27:21仮にループ内で push( @hoge, \$value ); をやらなかった場合、レキシカル変数
$value がスコープから外れた瞬間 (つまりループ 1 回回る毎に) $value の実体は
削除される。
上の例のような単純変数の $value だと確かめようがないが、bless されたオブジェクトなら
そのタイミングで DESTROY メソッドが呼ばれる・・・はず (未確認)。
0031デフォルトの名無しさん
2005/06/07(火) 13:39:26ソースをしっかり読むのがいちばんなんだろうが、とりあえずおおざっぱに
知りたいのならばオライリーの「実用Perlプログラミング」の20章「Perlの
内部構造」を読むといい。
0032デフォルトの名無しさん
2005/06/07(火) 13:42:15パッケージ変数はパッケージ名明示すればどこからでもいじれるので、
いやならレキシカル変数を使うしかない。ourに文句をいうのは筋違い。
そのためのmyだろ?
localは変数自体はそのままで、単に値の退避と復旧を自動的にやるだけ
のものだしな。
003322
2005/06/07(火) 14:20:20> すればどこからでもいじれるので、いやならレキシカル変数を使うしかない。
これは正論だと思いますが、最初の質問 >16 のような、変数の別名を作る場合はそうはいかないのです。
(パッケージ変数 (ていうかシンボル) の型グロブは '*' で参照できて、名前とは独立に付け替えができるのに対し、
レキシカル変数への参照は名前と一体であって書き換えられない。)
まあ、our $x; のあと local*x = \$z; とすることによって $x が $z の別名になって (配列のときも同様)、
しかも「筒抜け」の危険も生じないことがわかったので私めは満足でございますv
003428
2005/06/07(火) 17:02:34DESTROYについて次の様に試しましたら毎回実行されました。
#newで"newしました。\n"、DESTROYで"DESTROYが呼ばれました。\n"を出力しています。
<hoge.pl>
print "開始\n";
my $i;
for( $i = 0; $i < 3; $i++ ){
print "ループ開始\n";
my $hoge = new HOGE();
undef $hoge;
print "ループ終端\n";
}
print "終了\n";
exit 0;
<結果>
開始
ループ開始
newしました。
ループ終端
ループ開始
DESTROYが呼ばれました。
newしました。
ループ終端
ループ開始
DESTROYが呼ばれました。
newしました。
ループ終端
終了
DESTROYが呼ばれました。
0035デフォルトの名無しさん
2005/06/07(火) 18:28:28あの〜、、、
for ループの最後で明示的に undef $hoge; するから $hoge の DESTROY が呼ばれてる、
と思うのは勘繰りすぎでしょうか
0037デフォルトの名無しさん
2005/06/07(火) 19:12:20ループ開始
newしました。
DESTROYが呼ばれました。
ループ終端
の順番になり、undefをやめると
ループ開始
newしました。
ループ終端
DESTROYが呼ばれました。
になる。どっちにしても
ループ開始
DESTROYが呼ばれました。
newしました。
ループ終端
にはならんがなぁ。
003836
2005/06/07(火) 23:49:57hoge.plを電源きると消える場所に置いていたので
再度打ち直して実行したら…ループ開始〜ループ終端で
同じくDESTROYが呼ばれましたorz
DESTROYのタイミングがおかしかったのはnewの中身が次のようになってました(汗
sub new
{
$this = shift;
$self = {};
print "newしました。\n";
bless $self, $this;
}
#再宣言時(ループ2回目以降突入後)に消される仕様なのかと
#そんなわけなのに変な納得の仕方をしてました(汗
0039デフォルトの名無しさん
2005/06/07(火) 23:54:23$selfがグローバルになってるので、次にnewが呼ばれて
上書きされるまではこっちからの参照が残ってるので
DESTROYされなかったわけですな。それならばあの結果
になるだろう。納得。
0040デフォルトの名無しさん
2005/06/08(水) 01:18:24へぇ、あの本、そんな面白そうなことが載ってるんだ。
「実用」というタイトルで何となく敬遠してた本だけど・・・
0041デフォルトの名無しさん
2005/06/08(水) 01:57:31そうやって決めつけて見聞の範囲を制限するから、お前はいつまで
も負け組なんだ。
0042デフォルトの名無しさん
2005/06/08(水) 03:53:25そんな絡むことか? ちなみに、英語版(原書)はAdvanced Perl Programming。
中身も、「実用」よりPerlの内部構造を意識した発展的内容。
Perlはもう役目を終えるべき言語なので、真面目に勉強すべきではないと思うが。。
0043デフォルトの名無しさん
2005/06/08(水) 04:04:520044デフォルトの名無しさん
2005/06/08(水) 14:57:29Perlは終わっちゃうのん?
0045デフォルトの名無しさん
2005/06/08(水) 15:06:020046デフォルトの名無しさん
2005/06/08(水) 15:08:23>>43
ちょっとしたツールとしては
使いたい人間は使い続けるだろうから死滅はしないだろ。
0047デフォルトの名無しさん
2005/06/08(水) 15:31:32> Perlはもう役目を終えるべき言語なので、真面目に勉強すべきではないと思うが。。
何に移るべきだと思う?
0048デフォルトの名無しさん
2005/06/08(水) 16:04:33なので今日もperlを使いつづけているのだった。
0049デフォルトの名無しさん
2005/06/08(水) 16:15:28基盤業務のスクリプトなんかまだまだsh系とかだし。
sedまでで、awkはもうだめとかざらだし。
枯れてるってことはそれはそれで強いんだよね。
perl5も誕生10年、これからこれから。
0050デフォルトの名無しさん
2005/06/08(水) 16:50:23それら被死亡宣告事象は、使ってない人、第三者が死亡宣告したもの。
Perlにとっとと氏ねと言っている連中は、中毒級のコテコテのすご腕のPerlian
だったりする。
要するに、転したいんだよね、Perlを。だけどもっと良いものが作れなかったり、
なかったり、あるいはなかなか移れなかったりして七転八倒してる。
しして、この進化の袋小路で転げまわってるんだ。いつまでもいつまでも(哀)。
0051デフォルトの名無しさん
2005/06/08(水) 17:33:500052デフォルトの名無しさん
2005/06/08(水) 18:06:41お前も含めてというのなら禿同
0053デフォルトの名無しさん
2005/06/08(水) 20:47:020054デフォルトの名無しさん
2005/06/08(水) 20:50:510055デフォルトの名無しさん
2005/06/08(水) 21:15:57> それら被死亡宣告事象は、使ってない人、第三者が死亡宣告したもの。
それでいざ自分たちが当事者になるとMac板の祭りのような
面白すぎることになるわけですね
0056デフォルトの名無しさん
2005/06/08(水) 21:53:470057デフォルトの名無しさん
2005/06/08(水) 22:10:500058デフォルトの名無しさん
2005/06/08(水) 22:34:18なんで最初から作ってなかったんだろ?
言語仕様は嫌いじゃなかったんだけど、ライブラリの未整備でrubyは速攻で捨てたんだよなぁ。。。
CPANやppmがなければ速攻で捨ててたのに>Perl
0059デフォルトの名無しさん
2005/06/08(水) 22:47:06Perlは基本機能だけで十分便利なんだがね。awkやsedに比べて
0060デフォルトの名無しさん
2005/06/08(水) 23:30:420061デフォルトの名無しさん
2005/06/09(木) 00:08:58思うけど。 で、Perlで30行以上になるなら、Javaとか真面目に設計された
言語を使うべきだな。
0062デフォルトの名無しさん
2005/06/09(木) 03:24:49http://www.sarinaga.com/progtoy/perlcookbooklink.html
> ここでは、Perlクックブック―Perlの鉄人が贈るレシピ集
>(urn:isbn:4-87311-037-8)のソースコードへのアクセスがし
>やすいように、ネットワーク上[http://www.unix.org.ua/orelly/perl/cookbook/]
>にあるリソースについて、私が作成したリンク集です。
というしろもの。
0063デフォルトの名無しさん
2005/06/09(木) 05:36:27・Perlの正規表現がデファクトスタンダードになって、その他のものが微妙に使いにくく
感じること多い。
・なんだかんだ言いつつも、Cライクなシンタックスをベースにしてるので、
SHやPython,Ruby,Lispより馴染みやすい(これは本当に大きい)。
・なんだかんだ言いつつもUNIX的なアイディアが素直に実装されている。
(そのせいでWindowsプログラマが馴染み難く感じるという不利な点もあるかも)
0064デフォルトの名無しさん
2005/06/09(木) 09:34:34マン頁をgroff -man -t psで
man 1 sh(FreeBSDのがいい)
をいんさつしても10頁ぐらいなので
カンのいい人なら半日
筋の悪い人でも1週間ぐらい
でたぶん覚えられるけど
ちゃんとしたPerlの教科書は500頁超とかだし、
それに加えてライブラリのつかいかたとかあるし、
あと
優先順位が、低い
C++とかJavaなどのほうが先にくる
0065デフォルトの名無しさん
2005/06/09(木) 10:04:53>・なんだかんだ言いつつも、Cライクなシンタックスをベースにしてるので、
>SHやPython,Ruby,Lispより馴染みやすい(これは本当に大きい)。
大嘘こくなやボケ
0066デフォルトの名無しさん
2005/06/09(木) 10:09:560067デフォルトの名無しさん
2005/06/09(木) 10:45:56Perlは関数の実装で既に道を踏み外した。
0068デフォルトの名無しさん
2005/06/09(木) 11:59:19その程度でおかしくなるなよ
0069デフォルトの名無しさん
2005/06/09(木) 12:13:30っと煽り抜きに思うよな
0070デフォルトの名無しさん
2005/06/09(木) 12:14:55perlで30行で出来ることはJavaへ持っていくと300行ぐらいになることがザラ。
単機能物ならshやperlが強いな。すぐ作れるし。
で、手順書(スクリプト)なのがshで、プログラムなのがperlってところか。
多機能でコアと機能ごとにソース分割して実装し、多人数でメンテする
ようなものこそJavaは強い。コーダの実力を言語仕様がカバーしてくれる。
Java人気の秘密はまさにそこだと思う。
0071デフォルトの名無しさん
2005/06/09(木) 12:30:370072デフォルトの名無しさん
2005/06/09(木) 13:11:07> Perlは関数の実装で既に道を踏み外した。
その評価は酷と言うもの。Perlはもともと、室内を歩くスリッパでしかない。
それを勝手に道路に出たり、カバーをつけてぬかるみを歩こうとしたり、
フローターをつけて太平洋を渡ろうとしたり、翼をつけて空を飛ぼうという
連中がいるからいけない。
0073デフォルトの名無しさん
2005/06/09(木) 14:45:29「オツムがおかしくなりそう」
っていうのは実際に「オツムがおかしくなってしまう」ことを言っているのではないのは明白
0074デフォルトの名無しさん
2005/06/09(木) 15:20:09両者にどれだけ開きがあるのか具体的には分かりません。
自分の状況から比べればどちらもそれほど違うものでは無いだろうと考えました。
0075デフォルトの名無しさん
2005/06/09(木) 15:26:54ただそれだけのことだと思いますが。
0076デフォルトの名無しさん
2005/06/09(木) 15:31:42婉曲表現というものを知らんのか?
0077デフォルトの名無しさん
2005/06/09(木) 17:32:37なったと言っていると思い込んでる人間は一人もいませんよ。
馬鹿ですね。
0078デフォルトの名無しさん
2005/06/09(木) 18:17:55Perlの言語仕様は
腐 っ て る
0079デフォルトの名無しさん
2005/06/09(木) 18:20:160080デフォルトの名無しさん
2005/06/09(木) 18:49:57その腐り具合がちょうど良いから、みんな鼻をつまみなが
らスプーンを突っ込んでるんですよ。
0081デフォルトの名無しさん
2005/06/09(木) 18:53:310082デフォルトの名無しさん
2005/06/09(木) 19:34:070083デフォルトの名無しさん
2005/06/09(木) 19:34:12面白いからいいけど。
0084デフォルトの名無しさん
2005/06/09(木) 19:57:07> 生みの親がアニヲタらしいからな
生みの親は「指輪物語」ヲタでつ。
0085デフォルトの名無しさん
2005/06/09(木) 20:11:31今、何しているのかな?
0086デフォルトの名無しさん
2005/06/09(木) 20:36:43testは内部コマンド、または
perl -MCPAN -e shell
外部コマンド、操作可能な
プログラムまたはバッチファイルとして認識されておりません
と出ます。どんなもんすかね?win2000です
0087デフォルトの名無しさん
2005/06/09(木) 20:39:171. 変数の先頭に $, @, %, \ とかいちいちつけねばならず、タイピングがわずらわしい (いつも 2 〜3 行で済ませられない人だっている!)
2. 括弧を几帳面につけていくと、記号だらけになって目がちかちかする (性格的に、括弧を省略できない人だっている!)
3. 多次元配列をまともにサポートしていない (一次元リストと参照を駆使せねば実現できない)
4. 構造体をまともにサポートしていない (苦し紛れにハッシュで代用)
5. 変な約束事が多い ($_ とか $a, $b と sort の関係とか、いろんな特殊変数とか、イテレータと keys とか <FH> とかシンボルのエクスポートが Exporter.pm だったり継承が @ISA だったり ',' とは微妙に違う '=>' とか etc.)
6. クラスをまともにサポートしていない (ハッシュと、bless がもたらす約束事一揃いで曲りなりに実現。狂気の一歩手前。)
7. 6. のせいで、大半の達人のソースは初心者にはまず解読不能。
8. サブルーチンのプロトタイプの考え方が、最初なんか非常にとっつきにくい。
9. ぬんでファイルハンドルだけが Bare Word っぽい書き方なのか説明できる人は世界に 3 人ぐらいしかいない。
10. 9. にまつわる約束事が原因で、レポート処理言語のはずなのに、サブルーチンにファイルハンドルを渡す方法を見つけるのに一苦労
11, サブルーチンからファイルハンドルを返そうとするともっと死ぬ
12. 最悪のジャーゴン 「型グロブ」。随所に出てくる割に、人に説明するには処理系のシンボルテーブルの話からはじめねばならない。
13. 遅い
(以下可算無限個続く)
しかし Perl は良い。文字列処理とライブラリが異様に充実してるので何をするにも楽ができる。
この長所が他の短所を圧倒する。
たとえ正気を失っても、得るものが非常に大きいのだから無問題。
だいたい Perl が腐ってるとかなんだとかいう香具師らは、腐ってない何かを生み出したことがあるんかい?
0088デフォルトの名無しさん
2005/06/09(木) 20:41:25そのエラーが出るのは、Pathの設定以外考えられないけど。
echo %PATH%
ってやってみれば。
0089デフォルトの名無しさん
2005/06/09(木) 20:42:56多分してない。
サンクスコ。やってみる。
0090デフォルトの名無しさん
2005/06/09(木) 20:49:50C:\PROGRA~1\JUSTSY~1\JSLIB32;
C:\Perl\bin\;C:\WINNT\system32;
C:\WINNT;C:\WINNT\System32\Wbem
0091デフォルトの名無しさん
2005/06/09(木) 20:53:50> 5. 変な約束事が多い ($_ とか $a, $b と sort の関係とか、いろんな特殊変数とか、イテレータと keys とか <FH> とかシンボルのエクスポートが Exporter.pm だったり継承が @ISA だったり ',' とは微妙に違う '=>' とか etc.)
っていうか、ありゃインチキだろ、sort関数は。
> 9. ぬんでファイルハンドルだけが Bare Word っぽい書き方なのか説明できる人は世界に 3 人ぐらいしかいない。
この手抜きっていうか、手作り感が最高にイカシてるぜ。
> だいたい Perl が腐ってるとかなんだとかいう香具師らは、腐ってない何かを生み出したことがあるんかい?
なんでそんなつまらないことしなきゃなんないのサ?
0092デフォルトの名無しさん
2005/06/09(木) 20:56:18オイラモジュールインスコだけで手一杯だ(´・ω・`)。
0093デフォルトの名無しさん
2005/06/09(木) 21:01:49Active Perlだよね?
ならばcpanよりもppmの方が良いと思う
まあ、その前に起動しないと話しにならんか・・・
とりあえず、DOSプロンプト開いて、
C:\hoge> cpan
とやってみたらどうなる?
0094デフォルトの名無しさん
2005/06/09(木) 21:03:38アリガト。やってみる。
0095デフォルトの名無しさん
2005/06/09(木) 21:07:59操作可能なプログラムまたはバッチ ファイルとして認識されていません。
(´・ω・`)。ス万。。悪いから一人でやってみるよ。アリガトね
009693
2005/06/09(木) 21:11:43あれ・・・おかしいねぇ
>>88-90からしてちゃんとパス通ってるのに・・・
ちょっと再起動して見れ。これでも駄目なら私にはわからん・・
0097デフォルトの名無しさん
2005/06/09(木) 21:15:16色々アリガト。ほいじゃー
0098デフォルトの名無しさん
2005/06/09(木) 21:21:061, 2, 4, 5, 8, 12⇒うむ、激しく同意。
3⇒うーん、9割がたの用途においてはリファレンスの入れ子で十分じゃない? 他の言語でも本物の多次元配列実現してる言語ってどれくらいあるのやら……。
6⇒オブジェクト指向を実現する方法としては意外と上手く出来てると個人的には評価してるんですが(^^; ま、@ISAだのAUTOLOADだのシンボルテーブルだのがもたらす諸々の事象については、実にbrain damagedなのには同意。
7⇒ぎくっ(達人、とまではいかんけど^^;)
9, 10, 11⇒同意するので、最早組み込み関数のopen/closeの知識は捨て去って、FileHandleやIO::Fileを使うこと強く推奨したい。ついでにstatはFile::statを、日付についてはDate::Calc等を推奨。
12⇒それなりにモジュールを使えば、大抵の場合は見ずに済ませられるはず……。
13⇒気になったことはありません:-)
0099デフォルトの名無しさん
2005/06/09(木) 21:35:50感覚的にはどれも大した問題ではないというのが俺の本音。
0100デフォルトの名無しさん
2005/06/09(木) 21:51:25どうしようもないほどイカレてると思うね。
最近(5.6.0から)は無名のファイルハンドルを作れるようになったのでまだマシだが…。
$aと$bやl、構造体がないためocaltime()/stat()がリストを返すというのも、まあ気になるっちゃ気になる。
他は大して気にならないね。
0101デフォルトの名無しさん
2005/06/09(木) 22:20:360102デフォルトの名無しさん
2005/06/09(木) 22:20:420103デフォルトの名無しさん
2005/06/09(木) 22:24:10Perl6 はどこに行ってしまったのでしょうか。
また、テンプレートは今度こそ実装されますか
0104デフォルトの名無しさん
2005/06/09(木) 22:38:22それはPerlなしでも実現可能なことばかりだと、僕自身は
思っている。むしろ、Perlに自由を奪われていると僕は思う。
Perlなしではプログラムが書けないなんて・・・あまりにも悲しい。
0105デフォルトの名無しさん
2005/06/09(木) 23:00:56今現在のこの宇宙よりあちらの並行宇宙の方が良かった、なんて感想を述べられても困る。
0106デフォルトの名無しさん
2005/06/09(木) 23:01:100107デフォルトの名無しさん
2005/06/09(木) 23:19:00> Perl6 はどこに行ってしまったのでしょうか。
ていうか来てません
0108デフォルトの名無しさん
2005/06/10(金) 00:05:350109デフォルトの名無しさん
2005/06/10(金) 00:10:16て・
計・
画・
通・
り・
だ・
:
:
0110デフォルトの名無しさん
2005/06/10(金) 00:26:39このページを参考にしながらWindowsでのCPANの設定をしてたのですが、
モジュールをインストールしようとすると、make testまではうまくいき
ますが、make installで、
Use of uninitialized value in <HANDLE> at C:/Perl/lib/CPAN.pm line 4856.
readline() on unopened filehandle at C:/Perl/lib/CPAN.pm line 4856.
Can't call method "close" on an undefined value at C:/Perl/lib/CPAN.pm line 4860
.
というエラーがでてうまくいきません。
なにが原因か分かりませんか?
0111デフォルトの名無しさん
2005/06/10(金) 00:28:11最初のURLですが、(CPAN)までURLです。
すみません。
0112デフォルトの名無しさん
2005/06/10(金) 00:28:11理由はもう書いてある。
0113デフォルトの名無しさん
2005/06/10(金) 00:36:440114デフォルトの名無しさん
2005/06/10(金) 01:47:38Perlがリストで表現することがおかしいと思う人は、
構造体を誤って認識してる人です。
0115デフォルトの名無しさん
2005/06/10(金) 02:00:40やれやれ。あなたにとってはファイルシステムも木構造である必要はなくて、「所詮配列」 なのでしょうね。
0116デフォルトの名無しさん
2005/06/10(金) 02:15:12仮に 「構造体 A と構造体 B をメンバとする構造体 C」 をプレーンな配列で表現するとそれが破綻してしまう。
0117デフォルトの名無しさん
2005/06/10(金) 02:30:37そうですよ。配列ですよ?
0118デフォルトの名無しさん
2005/06/10(金) 02:32:20奇数と偶数をメンバとする自然数は破綻していますか?
0119デフォルトの名無しさん
2005/06/10(金) 03:28:21system ('C:\Program Files\hoge.exe');
とかで出来ると思うんですが、逆に終了させたいときはどのように書けばいいんでしょうか。
なんか引数にどうにかして終了を表すコマンドをくっつければいいのかと思ったんですが、
よくわかりませんでした…。
どなたかアドバイスのほど、よろしくおねがいします。
0120デフォルトの名無しさん
2005/06/10(金) 04:10:360121デフォルトの名無しさん
2005/06/10(金) 04:18:230122デフォルトの名無しさん
2005/06/10(金) 05:12:03別プロセスが立ち上がってるわけで、
強引なコトしないと終了させれないってのはちゃんと頭にあってか?
もしhoge.exeが自作のもんならプロセス間通信でもしてて下さい。
0123デフォルトの名無しさん
2005/06/10(金) 08:50:17perl6は古い。すでにperl6.5まで進んでいるよ。
http://page7.auctions.yahoo.co.jp/jp/auction/g30089957
0124デフォルトの名無しさん
2005/06/10(金) 09:17:07> 強引なコトしないと終了させれないってのはちゃんと頭にあってか?
頭になかったです。
なんか起動は出来るから終了も簡単に出来るものと思ってました…
もちろん自作のもんでもなんでもないです。
すいません…。
0125デフォルトの名無しさん
2005/06/10(金) 09:19:150126デフォルトの名無しさん
2005/06/10(金) 12:25:14便利じゃないのかぁ!
0127デフォルトの名無しさん
2005/06/10(金) 12:26:510128デフォルトの名無しさん
2005/06/10(金) 14:30:09そうか?
Encodeは環境。Jcodeは変換メソッドのあるオブジェクト、jcode.plは変換関数の集合体。
比較するもんじゃないと思うし、Encodeに"苦労して"乗り換えてJcodeのほうが便利に
みえるなら、Encodeの理解が足りないと思われ。
0129デフォルトの名無しさん
2005/06/10(金) 15:18:04知ったかすんな。嘘つき野郎
0130デフォルトの名無しさん
2005/06/10(金) 15:22:140131デフォルトの名無しさん
2005/06/10(金) 15:28:30Jcode 2.0はEncodeのラッパー。しかも多くの場合、Encodeのほうが旧Jcodeより早い。
速度だけで言うならUnicode::Japaneseが最速だが。
0132デフォルトの名無しさん
2005/06/10(金) 16:20:420133デフォルトの名無しさん
2005/06/10(金) 17:27:39ラッパーの意味がわからんのか池沼。
0134デフォルトの名無しさん
2005/06/10(金) 19:23:02「ラッパーでもない旧 Jcode ですら Encode より遅い。
だから (速度をとるなら) Encode 使え。」
という文脈なのでは?
0135デフォルトの名無しさん
2005/06/10(金) 21:08:370136デフォルトの名無しさん
2005/06/10(金) 22:11:59びっくりした! 5.6 の typo やんけ ヽ(`Д´)ノ-3
0137デフォルトの名無しさん
2005/06/10(金) 22:33:36りますか?
0138デフォルトの名無しさん
2005/06/10(金) 22:47:10http://perldoc.jp/docs/perl/5.6.1/perlvar.pod#item__NR
0139デフォルトの名無しさん
2005/06/10(金) 22:48:39特殊変数 $. を使う。
0140デフォルトの名無しさん
2005/06/10(金) 23:47:39Perl 詩になりそうな問いかけだぬ。
local $[ = 1;
@N = (); for ($i = 1; 1; ++$i) { push @N, $i } # 自然数の配列 (=構造体) @N を作る
@even_nums = (); for ($i = 1; 1; ++$i) { push @even_nums, $N[2 * $i] } # @N から偶数の配列 (=構造体) @even_nums を取り出す
@odd_nums = (); for ($i = 1; 1; ++$i) { push @odd_nums, $N[2 * $i + 1] } # @N から奇数の配列 (=構造体) @odd_nums を取り出す
まあたしかにとりたてて破綻はしないな(何
メンバの個数やサイズがきっちり事前に分かる世界なら、>>114 氏の言うとおり、構造体を配列とみなして差し支えないし、
それは時間計算量的に有効な戦略ですらある。
実際、構造体を解するたいていのコンパイラは構造体アクセスを (まずは) インデックス参照命令なり OP なりに落とすしね。
しかしメンバの個数やサイズが実行時にならないと決まらない世界だと、構造体 = 配列、とみなす考え方は、全然有効でない(こともある)。
例えば上の Perl 詩なやり方は、@N = (\@even_nums, \@odd_nums); という木構造を用いた場合より、@even_num や @odd_num まるごとの取り出しに多くの計算量を要する。
それに、どっちみち構造体=配列、という考え方で書かれたソースは、人間様にとって分かりにくいという点は通底している気ガス。
>>114 氏は未だ人類の理解が到達していない深遠な何かを言わんとしているのではないかと期待しつつ、とりあえず常識的な線で反応してみた。
0141デフォルトの名無しさん
2005/06/11(土) 00:51:42$var = `cat hoge`;
これだと外部コマンドが必要なので、もっとスマートなやつおねがいします。
0142デフォルトの名無しさん
2005/06/11(土) 00:57:23> あるファイルの中身を変数につっこむ方法はありますか?
あるよ。
0143デフォルトの名無しさん
2005/06/11(土) 01:04:43open FH, "<hoge" or die; $var = <FH>; close FH;
、、、って無理やり一行にしただけやん ヽ(`Д´)ノ-3
なんか質問者にスゲー試されてる気がする・・・
0144デフォルトの名無しさん
2005/06/11(土) 01:16:02一行しか取れてない時点で負けっぽいが。
{ local undef $/; open FH, "<hoge" or die; $var = <FH>; close FH }
0145デフォルトの名無しさん
2005/06/11(土) 01:20:42行入力演算子だと一行しか読みこめませんよ。
>>144
なるほど、そんな変数があるのですね。
$/ The input record separator, newline by default.
この場合 local は my におきかえちゃだめなんでしょうか?
0146デフォルトの名無しさん
2005/06/11(土) 01:27:59今のところダメ
0147デフォルトの名無しさん
2005/06/11(土) 01:28:300148143
2005/06/11(土) 01:37:30> 一行しか取れてない時点で負
死にたい・・・_| ̄|○|||
0149デフォルトの名無しさん
2005/06/11(土) 02:00:190150デフォルトの名無しさん
2005/06/11(土) 02:28:49open FH, '<' . './hoge' or die $!;
read FH, my $var, -s FH;
print $var;
0151デフォルトの名無しさん
2005/06/11(土) 05:46:58これの場合、 my $fh がブロックのスコープを抜けたときに暗黙に $fh は close されるの?
0152デフォルトの名無しさん
2005/06/11(土) 08:43:470153デフォルトの名無しさん
2005/06/11(土) 10:39:39される。
0154デフォルトの名無しさん
2005/06/11(土) 10:45:17これは?
@nullpo = <GATT>;
0155デフォルトの名無しさん
2005/06/11(土) 11:03:54折れも尻たーい。 バブルが弾けて、会社クビになって、奥さんに捨てられて。。ってとこまで
知ってるけど、彼程度の腕なら再就職先を見つけるのは困難ではないし。。
でも、Perl 6は5年くらい出る出ると言われていた気がするけど、未だ出る気配すらないね。
0156デフォルトの名無しさん
2005/06/11(土) 13:26:41なるほど。これは close し忘れにくくなって良いっすね。
0157デフォルトの名無しさん
2005/06/11(土) 14:15:58XSを使ったモジュール(Cコンパイラを使うやつ)は再インストールしないといけないでしょうか。
0158デフォルトの名無しさん
2005/06/11(土) 16:24:13>>151
>>153
>>156
そこで Ruby ですよ
0159デフォルトの名無しさん
2005/06/11(土) 17:41:13全然関係ないけど。
0160デフォルトの名無しさん
2005/06/11(土) 19:10:030161デフォルトの名無しさん
2005/06/11(土) 20:40:430162デフォルトの名無しさん
2005/06/12(日) 02:19:11しぶしぶperlに戻ってきました。っつても以前はperl4の機能しか使ってなかったんで
もう一度お勉強しなおしたらスゲー面白くて最近ハマってきた。
いい言語かどーかは置いといて、オモレーよperl
0163デフォルトの名無しさん
2005/06/12(日) 02:32:04おもりろりんな言語って言うのは、C++やLispのことを言うのだ。
0164デフォルトの名無しさん
2005/06/12(日) 04:01:440165デフォルトの名無しさん
2005/06/12(日) 04:56:480166デフォルトの名無しさん
2005/06/12(日) 08:00:03,-、 nn
.r-、 _00 /::::'┴'r'
.|::::'´::::r┘ !「`L00、|.l└ク_;厂 /
.|::::「|:::| l| |Ln:::r┘|.l _lニユ、 ./
. ̄└r''"´]_ l| | r゙=゙┐ |└ァ::/ / /.
、ヽ、 ,ゞ´_::::| l| |「二:::7 .|.l └′/ / /
. \\`´ |:::|. l| l 〈::/ 、 ! '/
\ ̄ l
?,@_{'.',qq{\n},"'",q q/q,q q q}=0..4,s,(.),$_{$1},gs,s,(\d)\1,$1+1,eg,tr,0-9,,cd;
s,(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)
,(($1-$2*4+$3*2+$4+$5+$6+$7+$8+$9*7-3)%7+51).'.',exg,print eval;
0167デフォルトの名無しさん
2005/06/12(日) 10:44:330168デフォルトの名無しさん
2005/06/12(日) 10:56:49[\d(\x82[\x4f-\x58])]
というクラス内においてクラスを使おうとするとエラーになります。
何か上手い方法ってありますか?
0169デフォルトの名無しさん
2005/06/12(日) 11:05:420170デフォルトの名無しさん
2005/06/12(日) 11:08:43/((?:\d|\x82[\x4f-\x58])+)/
0171デフォルトの名無しさん
2005/06/12(日) 11:09:248)]{10}
やっぱりこうするしかないのかな。カッコ悪いけど。
0172デフォルトの名無しさん
2005/06/12(日) 11:13:10ありがとうございます。カッコがなぜ二重に必要なのか分りませんが、それ使わせてもらいます。
0173デフォルトの名無しさん
2005/06/12(日) 11:20:09(\d|\x82[\x4f-\x58]){10}
{}←これってクラスにしか使えないのかと勝手に思い込んでました。すみません。
0174デフォルトの名無しさん
2005/06/12(日) 12:12:09いや、matchした連続した数字部分を参照したいかな、と思ったから。
0175デフォルトの名無しさん
2005/06/12(日) 12:27:52どもです、OKです。
/((?:\d|\x82[\x4f-\x58]){10})/
(?:.....)というのはマッチした部分的文字列をを
$1というのに保存しないでしないという意味っすね。
こうすることで全体の10文字が手に入ると。"+"なら一文字以上の
任意の長さの結果が手に入ると。うーん、Perl素晴らしい。
0176デフォルトの名無しさん
2005/06/12(日) 16:13:310177162
2005/06/12(日) 17:49:31Lisp。クロージャ、遅延評価、ストリームなどキーワードはオモロそうだなーと思うが
lisp自体が アホなのでさっぱりわからん。
perl使いに分かるように lispの面白さを広告してみてくれ。
0179デフォルトの名無しさん
2005/06/12(日) 18:22:48> まぁ、自分で書かないとわからんとか言われるんだろうな・・・。
大学でやらされましたよ。人間インタープリタ。
0180デフォルトの名無しさん
2005/06/12(日) 22:56:49それともEUCにするべき?
0181デフォルトの名無しさん
2005/06/13(月) 00:13:590182デフォルトの名無しさん
2005/06/13(月) 00:39:06UTF-8 なのに 2バイト文字とはこれいかに!?
0183デフォルトの名無しさん
2005/06/13(月) 00:41:000185デフォルトの名無しさん
2005/06/13(月) 01:32:14伝統的に「質問箱」となっているだけで、雑談もかまわないとおも
雑談スレは過去何度か経ったが、雑談だけじゃ話が続かないからな
WebProg板に行けばPerl6スレ等もう少し雑談よりのスレも沢山あるがな
0186デフォルトの名無しさん
2005/06/13(月) 02:16:400187デフォルトの名無しさん
2005/06/13(月) 10:13:130188デフォルトの名無しさん
2005/06/13(月) 10:20:050189デフォルトの名無しさん
2005/06/13(月) 10:31:040190デフォルトの名無しさん
2005/06/13(月) 10:38:45って入れただけで動かなくなった。
0191デフォルトの名無しさん
2005/06/13(月) 11:06:26上手く1データ(日付・名前・アドで1行)ずつでんのです。
プログラム初心者でよくわからんのです。
拾い方教えてください。
0192デフォルトの名無しさん
2005/06/13(月) 11:35:42>>4
0193デフォルトの名無しさん
2005/06/13(月) 18:53:50TKモジュールを使って日本語混じりデータの処理をしているのですが、
使えそうな、デバッカーを教えてください。
しばらく前に perl -d:?????? perl.pl でデバッカが使える
とあるWebで目にしました。しかしそのページをブックマーク
し忘れてしまいました。
OSはWindows XP で、Perlは 5.8.6 です
0194デフォルトの名無しさん
2005/06/13(月) 18:59:06デバッカって何?
0195デフォルトの名無しさん
2005/06/13(月) 19:00:03perldoc perldebug
perl -d script.pl # CUIデバッガ 標準添付
perl -d:ptkdb script.pl # GUIデバッガ CPANからインストールする必要あり
0196デフォルトの名無しさん
2005/06/13(月) 19:09:19ありがとうございました。ptkdb ですね。たしかに簡単にInstallできて
さくっと動きました。便利です。たすかりました。
>>194
知らないなら黙って居ろよ ボケェ
0197デフォルトの名無しさん
2005/06/13(月) 19:18:12> デバッカって何?
意地悪い
0198デフォルトの名無しさん
2005/06/13(月) 19:19:25> デバッカーを教えてください。
>>194
> >>193
> デバッカって何?
>>195
> # CUIデバッガ 標準添付
^^
>>196よ、見てるこっちの方が恥ずかしいので勘弁してください。(*ノノ)
0199デフォルトの名無しさん
2005/06/13(月) 19:26:37> デバッカって何?
デバック、デバッカ ――
能力に欠けるプログラマを検出する上で重要なキーワード/概念。
もちろんこれは、デバッグ/デバッガの読み間違いであるが、その読み間違
いを長期間に渡って続けている者は、プログラミングの現場から速やかに
排除されるべきである。
頻繁に「デバッグ」「debug」などの文字列を目にしているはずの現場
において、それでも「デバック」と言い続けているということは、認知
能力に極めて重大な欠陥がある可能性が高いからである。
読んだものをそのまま認識し、タイプすることが何よりも求められるプ
ログラミングという作業に、これほど不適切な人間はいない。
0200デフォルトの名無しさん
2005/06/13(月) 19:28:22いや、「デバッカ」でググって、ろくな情報が無いと
ブーたれてるバカがいるから、これは大事だよ。
0201デフォルトの名無しさん
2005/06/13(月) 19:30:26まあ、「>193 デバックでなくてデバッグな」ぐらいの優しさは標準装備しておこうぜ。
0203デフォルトの名無しさん
2005/06/13(月) 19:38:28あの野郎、iとjの識別ができないわ、Oと0をごたまぜにするわ、
テキスト書かせりゃ 「メーカ―」とか平気で書いて、チェック
させても気づかないわで、川に突き落としてやりたいと本気で思った。
0204デフォルトの名無しさん
2005/06/13(月) 19:52:59De-Bug という言葉の意味も発音も知らないんだ
In-Bug してろよ
0205デフォルトの名無しさん
2005/06/13(月) 19:55:32(*´∀`)
( つ ☆ノハヽヽ
) ,ィ⌒|G|*‘ o‘リ
(_(__人__,つ 、つ
0206デフォルトの名無しさん
2005/06/13(月) 19:59:57ラベルには、英語で Bulldog って書いてあるんだが。
栃木の「ツインリンクもてぎ」もそう。英語では TWIN RING となってる。
まぁ、一種の社会現象ってことか。
0207デフォルトの名無しさん
2005/06/13(月) 21:12:500208デフォルトの名無しさん
2005/06/13(月) 22:20:50悦に入っている痛いやつもときどきいるよな。
まあ、あれは恐るべき罠と評価してもいいかもしんないが。
0209デフォルトの名無しさん
2005/06/13(月) 22:34:25ウォーニング -> ワーニング
ナルポ -> ヌルポ
0210デフォルトの名無しさん
2005/06/13(月) 23:05:350211デフォルトの名無しさん
2005/06/13(月) 23:21:490212デフォルトの名無しさん
2005/06/13(月) 23:23:10$file_is_exist = 'exist' if -e;
は成功するのに
$file_is_exist = -e ? 'exist' : 'not exist';
の -e は括弧がないなんてケシカランと怒られ、検索パターンがどうのと怒られます。
なんでなのでしょうか??
0213デフォルトの名無しさん
2005/06/14(火) 00:13:30りしゃこに変なことするのやめてください
0214デフォルトの名無しさん
2005/06/14(火) 00:16:29開始の?ともとれるわけだが、どちらにもとれる場合は
項になるほう(この場合はパターンマッチの?...?)優先
になる。よくひっかかるのでwarning対象になっていて
カッコで明示しろといわれているわけだ。で、?...?の
最後の?が見つからないので検索パターンがどうこうと
いうエラーもついでに出る。
Warning: Use of "-e" without parentheses is ambiguous at 〜
Search pattern not terminated at 〜
なおエラーについて質問するときは勝手に翻訳しないで
エラーメッセージをありのまま写すのが基本なので以後
注意されたい。
0215212
2005/06/14(火) 00:42:14ん? おお!!
?PATTERN?なんて初めて知ったよ。便利そうですね。ありがとうです。
だけど
$file_is_exist = -e ? 'exist' : 'not exist' ?;
とやっても同じ警告はでてしまうだよ。(-e ?abc? でも -e /abc/でもでる)
?..?の結合度よりも -e ? の結合の方が強いのかな? (-e ? は -e $_ より強い?)
0216デフォルトの名無しさん
2005/06/14(火) 01:28:40どちらの場合もカッコで明示することを推奨しているので
warningは出すということじゃないかと。
/についてもこれは割り算の2項演算子でもあるのでおなじ
あいまいさがあるしね。
同じマッチでも -e m:abc: にすればあいまいさがなくなる
ので出なくなるはずだよ。
0217デフォルトの名無しさん
2005/06/14(火) 01:57:07$file_is_exist = -e $_ ? 'exist' : 'not exist'
0218デフォルトの名無しさん
2005/06/14(火) 02:06:17以下のような文字列なら'abc'を返すような。
$a = 'abc123';
$b = 'abc345';
こんなやり方しか思いつかないです… orz
$i = 1;
$i++ while( substr($a, 0, $i) eq substr($b, 0, $i) );
print substr($a, 0, --$i);
0219デフォルトの名無しさん
2005/06/14(火) 03:47:20$a = 'abc123'; $b = 'abc456';
chop $a until $b =~ /\A\Q$a/;
print $a;
0220デフォルトの名無しさん
2005/06/14(火) 04:05:19おぉ、感激しますた!
先頭一致に捕らわれて、後ろから削る発想がなかったです。
エスケープされてる部分の意味が分からないのでまた調べてみます。
newbieなもんでいろいろな書き方ができるperlに戸惑ったり面白がったりです。
ありがとうございます。
0221デフォルトの名無しさん
2005/06/14(火) 07:25:23$a = 'abc123'; $b = 'abc456';
chop $a until index($b, $a) >= 0;
print $a;
0222デフォルトの名無しさん
2005/06/14(火) 07:26:33$a = 'abc123'; $b = 'abc456';
chop $a until index($b, $a) == 0;
print $a;
0223デフォルトの名無しさん
2005/06/14(火) 08:56:12実行しようとすると、クラッシュするんだけど…(OS=Win98SE)
= = = = =
use encoding 'shiftjis';
print "m9(^Д^)プギャー\n";
= = = = =
↓
日付 06/14/2005 時刻 08:53
PERL のページ違反です。
モジュール : MSVCRT.DLL、アドレス : 0197:7801127c
Registers:
EAX=02dd85a0 CS=0197 EIP=7801127c EFLGS=00010297
EBX=0174c17c SS=019f ESP=0153f708 EBP=0153f710
ECX=00000001 DS=019f ESI=02dd859c FS=3b8f
EDX=00000000 ES=019f EDI=0174c17c GS=0000
Bytes at CS:EIP:
8b 44 8e fc 89 44 8f fc 8d 04 8d 00 00 00 00 03
Stack dump:
0156ef74 00000004 0153f730 2806605a 0174c17c 02dd859c 00000004 0155424c 00000004
02d9d18c 0153f75c 28012870 0155424c 0156ef74 02dd859c 00000004
-d 無しなら、正常に実行される。
なんでだろう? 前のバージョンでもそうだった。
皆さんのところでも、エラーになる?
0224デフォルトの名無しさん
2005/06/14(火) 09:05:19Win98SEか・・・
まずOSのアップグレードからしてみよか。
0225223
2005/06/14(火) 09:24:35ダメです。WinXP でも、全く同じように落ちました。
http://49uper.com:8080/html/img-s/62461.gif
0226223
2005/06/14(火) 09:33:43Shift-JIS / EUC-JP の両方で。
こっちは、全然問題なし。
ActivePerl のバグってことですかね?
0227デフォルトの名無しさん
2005/06/14(火) 09:48:52報告乙。
うちはまだbuild810のまんまだ。
0228227
2005/06/14(火) 09:59:150229223
2005/06/14(火) 10:17:5098SEで、MSVCRT.DLLをインストールCDのバージョンに戻してみたけど、ダメ。
----------
PERL のページ違反です。
モジュール : MSVCRT.DLL、アドレス : 0197:78010848
Registers:
EAX=02dd80d6 CS=0197 EIP=78010848 EFLGS=00010297
EBX=0174cf7c SS=019f ESP=0153f708 EBP=0153f710
ECX=00000001 DS=019f ESI=02dd80d2 FS=461f
EDX=00000000 ES=019f EDI=0174cf7c GS=0000
Bytes at CS:EIP:
8b 44 8e fc 89 44 8f fc 8d 04 8d 00 00 00 00 03
Stack dump:
0156ef74 00000004 0153f730 2806605a 0174cf7c 02dd80d2 00000004 0155424c 00000004
02d9d39c 0153f75c 28012870 0155424c 0156ef74 02dd80d2 00000004
----------
さっきのと落ちたアドレスは違うけど、現象は同じ。
XPでは試してないけど、どうせ同じでしょうな。
0230227
2005/06/14(火) 10:53:090231デフォルトの名無しさん
2005/06/14(火) 11:01:19ttp://bugs.activestate.com/show_bug.cgi?id=39261
0232デフォルトの名無しさん
2005/06/14(火) 12:52:29このパスワードって簡単に破れたり、BBSの中身見れたりするの?
教えて!
0233デフォルトの名無しさん
2005/06/14(火) 13:21:27激しく板違い。
0234デフォルトの名無しさん
2005/06/14(火) 13:24:58WebProg板へGo!
あと具体的にどの BBS かわからないと答えようがない。
0235デフォルトの名無しさん
2005/06/14(火) 15:58:090236デフォルトの名無しさん
2005/06/14(火) 17:55:260237デフォルトの名無しさん
2005/06/14(火) 19:34:29今ごろサンクスコ!!
結局こうしてみました→chop $a while index $b, $a;
嗚呼もうなんだかこの一行に惚れました気持ちえぇですたまらんです。
>>236
いろんなプラットフォームの上で走ってるから難しくないですかね?
インラインAppleScriptとかあるからあってもヘンってことはないのかな。
0238デフォルトの名無しさん
2005/06/14(火) 19:46:070239デフォルトの名無しさん
2005/06/14(火) 19:53:32その気持ちよさ加減がPerlの魔力。
0240デフォルトの名無しさん
2005/06/14(火) 20:05:46無い事も無い
ttp://search.cpan.org/~neilw/Inline-ASM-0.03/ASM.pod
Inline系のモジュールにはCとかTkとかBefungeなんてのまであるから、
調べてみると結構楽しいよ
0241240
2005/06/14(火) 20:08:44Tclの間違い
0242デフォルトの名無しさん
2005/06/14(火) 20:56:450243デフォルトの名無しさん
2005/06/14(火) 21:08:200244デフォルトの名無しさん
2005/06/14(火) 22:19:32激しくありがとう。
0245デフォルトの名無しさん
2005/06/14(火) 22:26:30それに、「shift-jisのテキストファイルに日本語の文字列を追記する」処理をほどこすことになりました。
で、そのまま
open(OUT, ">> $file");
binmode(OUT,"shift-jis");
print OUT "$_\n";
close(OUT);
みたいにshift-jisへのエンコードを追加したりしたんですが、
うまくいきません…。
どなたかアドバイスのほどよろしくおねがいします。
0246デフォルトの名無しさん
2005/06/14(火) 22:57:40binmode(OUT,":encoding(shiftjis)");
0247デフォルトの名無しさん
2005/06/14(火) 23:32:31直りました!ありがとうございます
0248デフォルトの名無しさん
2005/06/15(水) 05:26:09番号順になりますか?例外はありますか?
ちなみにハッシュは規則性はないと聞いております。
0249デフォルトの名無しさん
2005/06/15(水) 08:08:510250デフォルトの名無しさん
2005/06/15(水) 16:28:29行を取り除くにはどうすればいいですか?空行は一行とは限りません 。
0251デフォルトの名無しさん
2005/06/15(水) 16:42:24成功する限り chomp しまくって失敗したら抜けるループ
0252デフォルトの名無しさん
2005/06/15(水) 17:17:05ループを抜けた時、最終行の改行コードが無くなってるので、
書き出す前に復活させる必要があるね。
それなら、$data =~ s/\n+$/\n/; の方が速そうな気がするが…
もちろん $/ = ""; での話。
0253デフォルトの名無しさん
2005/06/15(水) 19:19:070254デフォルトの名無しさん
2005/06/15(水) 19:26:06どっちでも効果は同じ。
ラクダ本(第2版)のp149を見ればわかるように、$/ = ""; が本来の書き方。
それに、undef なら「undef $/;」だろ?
0255デフォルトの名無しさん
2005/06/15(水) 19:38:02まー、$/ = undef; でも undef $/; でも同じなんだが、
プログラム書法の観点で言えば、後者に軍配が上がる。
0256デフォルトの名無しさん
2005/06/15(水) 19:45:28この辺が Perl の魅力であり、場合によっては弱点にもなり得るんだが…
0257デフォルトの名無しさん
2005/06/15(水) 19:46:01>どっちでも効果は同じ。
第2版っていつの時代だか知らんが少なくともその情報は古いな。
自分で確かめろ。
--test.pl--
$file = do { local $/ = ""; open my $fh, 'test.pl'; <$fh> };
print $file;
# ほげほげ
----
perlvar - Perl で定義済みの変数
http://perldoc.jp/docs/perl/5.6.1/perlvar.pod#item__INPUT_RECORD_SEPARATOR
0258デフォルトの名無しさん
2005/06/15(水) 19:47:16オレはなんとなく他に影響でないか不安なので
{ local $/; 〜 } 派だな。
0259デフォルトの名無しさん
2005/06/15(水) 19:51:26> その情報は古いな。
最新の 5.8.7 でも、どっちでも全く同じに動きましたが。
0260デフォルトの名無しさん
2005/06/15(水) 20:01:40え?マジで?
>"" を設定した場合には、複数の空行も 1 つの空行であるかのように扱います。
とあるように、パラグラフモードになるハズなんだけど……。
俺の Perl 5.8.6 はなったんだけどなぁ。
0261デフォルトの名無しさん
2005/06/15(水) 20:07:36デバッガ(-d オプション)で起動すると、最初に実行される行が表示されたあと、
次のようなメッセージが出ます。
= = = = = = = = = =
SetConsoleMode failed, LastError=|6| at C:/AP/PERL/site/lib/Term/ReadKey.pm line 265.
at C:/AP/PERL/site/lib/Term/ReadLine/readline.pm line 1415
readline::readline(' DB<1> ') called at C:/AP/PERL/site/lib/Term/ReadLine/Perl.pm line 12
Term::ReadLine::Perl::readline('Term::ReadLine::Perl=ARRAY(0x27df8d0)',
' DB<1> ') called at C:\AP\PERL\LIB/perl5db.pl line 6367
DB::readline(' DB<1> ') called at C:\AP\PERL\LIB/perl5db.pl line 2203
DB::DB called at hoge.pl line 1
= = = = = = = = = =
OS は Win98SE と WinXP Home SP2 を使っていますが(Perl はもちろん共有ではなく別々に
インストール)、両方とも同じものが出ます。
その後は問題なく動いているようですが、どうも気になります。
皆さんの環境でも、同じでしょうか?
0262デフォルトの名無しさん
2005/06/15(水) 20:09:52-iオプションは便利だ。
ただしメモリに読み込めないくらい巨大なファイルだとこのやり方では
まずい。それほどでかいとお尻から読んでtruncateしたいとこだがかなり
めんどくさくなるだろうなぁ。
0263デフォルトの名無しさん
2005/06/15(水) 20:17:591文字単位でバラバラにされるんじゃないんですか?
0264デフォルトの名無しさん
2005/06/15(水) 20:22:01undef $/; を BEGIN {} で囲むとどういう効果があるんでしょうか。
あと、s/\n+$/\n/s
これって、文中の \n+$ にはマッチしないんでしょうか?
\Z Match only at end of string, or before newline at the end
\z Match only at end of string
を使わなきゃいけないような気がするんですが。
0265デフォルトの名無しさん
2005/06/15(水) 20:28:570266デフォルトの名無しさん
2005/06/15(水) 20:50:310267デフォルトの名無しさん
2005/06/15(水) 22:32:39山田 30 20 50
佐藤 50 50 45
鈴木 45 45 40
に,別のテキスト
山田 20
佐藤 30
鈴木 30
から抽出したフィールドを追加し
山田 30 20 50 20
佐藤 50 50 45 30
鈴木 45 45 40 30
と,やりたいんですが,どうすればいいでしょうか.初歩的なコードだと思うんですが,どうしてもうまくいきません.
0268デフォルトの名無しさん
2005/06/15(水) 22:38:340269デフォルトの名無しさん
2005/06/15(水) 22:44:45せめてコード晒すか、どこまで出来て何が出来ないのか、うまくいかないとはどうなるのかぐらい書いてから質問しろ、ぼけが。
my %data;
open IN, 'a.txt'; # 別のテキスト
while(<IN>) {
my ($key, $val) = split /\s+/;
$data{$key}=$val;
}
close IN;
open IN, 'b.txt'; # 以下のようにスペースで区切られたテキスト
while(<IN>) {
@val = split /\s+/;
push @val, $data{$val[0]} if exists $data{$val[0]};
print join ' ', @val;
print "\n";
}
close IN;
0270デフォルトの名無しさん
2005/06/15(水) 22:49:04my($name, @points) = split / /, $line;
$data->{$name} = [];
push @{$data->{$name}}, @points;
0271デフォルトの名無しさん
2005/06/16(木) 00:08:33そうやって答え出すからそいつらが付け上がるんだろうがヴォケ
0272デフォルトの名無しさん
2005/06/16(木) 00:13:060273デフォルトの名無しさん
2005/06/16(木) 00:14:140274デフォルトの名無しさん
2005/06/16(木) 03:00:33代わりに書いてあげる義務があると思います。
0275デフォルトの名無しさん
2005/06/16(木) 05:12:11少しは努力してまともな説明をする義務があると思います。
0276デフォルトの名無しさん
2005/06/16(木) 08:32:110277デフォルトの名無しさん
2005/06/16(木) 09:36:06困
代
>>275
困
少
>>277
困っている人がいたなら
心を開いて接してあげればいいと思います。
0278デフォルトの名無しさん
2005/06/16(木) 09:41:28一緒に困ってあげましょう
0279デフォルトの名無しさん
2005/06/16(木) 09:42:46暇なら何かモジュール作っておくれ
0280デフォルトの名無しさん
2005/06/16(木) 10:10:35BEGIN:
これを使わないと$/をundefにするのが-pによって最初の行を読み込んだ
後になるので間に合わない。
$:
/m修飾子が指定されていないから文中にマッチする心配はない。
また\n+は最長マッチなので結果的には末尾の改行もこちらで食われて
残ることもないが、意味的には\zの方がわかりやすいか?
(最短マッチだと違いが出る。s/\n+?$/\n/とs/\n+?\z/\n/を比べてみよ)
0281デフォルトの名無しさん
2005/06/16(木) 11:04:18> 解く問題があればあとはどうでもいいわけで。
仕事、ないの?
0282デフォルトの名無しさん
2005/06/16(木) 14:20:250283デフォルトの名無しさん
2005/06/16(木) 14:25:05引っ張りだして、yyyy/mm/MM/dd hh:mm:ss と表示してあげたいんですが、
どうしたらよい?
0284デフォルトの名無しさん
2005/06/16(木) 15:50:40質問に偽装した嫌がらせが来ましたよ。
0285デフォルトの名無しさん
2005/06/16(木) 16:30:140286デフォルトの名無しさん
2005/06/16(木) 16:57:5116桁というのがよく解らんが
$str = getDate(); #16桁の数字取得
$str = s/(....)(..)(..)(..)(..)(..)(..)/$1\/$2\/$3\/$4 $5:$6:$7/;
とか。取得するSQLで工夫したほうが話は早そうだがナー。
0287デフォルトの名無しさん
2005/06/16(木) 19:20:560288デフォルトの名無しさん
2005/06/16(木) 22:27:31個人的にはunpackをおすすめ。
0289デフォルトの名無しさん
2005/06/16(木) 23:55:330290242
2005/06/17(金) 02:43:47foreach $b(split(/\n/, get($daturl))){
$i ++;
my($name[$i]) = split(/<>/, $b);
}
こんな風にしてLWP::Simpleを使って読み込んでいたのですが、
iswebにアップロードしたら動かなくなりました。多分iswebじゃ使えないみたいです。
なので何か別の代わりになる方法を探してるんですが、ありますか?
0291デフォルトの名無しさん
2005/06/17(金) 02:48:44キチガイ!!
0292デフォルトの名無しさん
2005/06/17(金) 03:04:370293デフォルトの名無しさん
2005/06/17(金) 03:40:09SQLのDATE_FORMAT系の関数を使え。
なければDate::Format。
0294デフォルトの名無しさん
2005/06/17(金) 03:40:58> なので何か別の代わりになる方法を探してるんですが、ありますか?
LWPの機能部分を全部自分で書く。
0295デフォルトの名無しさん
2005/06/17(金) 03:42:23http://search.cpan.org/~gbarr/TimeDate-1.16/lib/Date/Format.pm
0296デフォルトの名無しさん
2005/06/17(金) 05:19:51スキーマを読み込んで、文法が正しいか判定するやつ。
0297デフォルトの名無しさん
2005/06/17(金) 08:00:50スキーマってなんだよ
0298デフォルトの名無しさん
2005/06/17(金) 08:16:16噂では、Perlをパースできるのはperlだけ、らしいぞ。
0299デフォルトの名無しさん
2005/06/17(金) 09:08:04スキーマって、なんのスキーマだよ。
0300デフォルトの名無しさん
2005/06/17(金) 09:33:13ファイルを分割する関数ってありますか?
例えば40MBのファイルを15MB、15MB、10MBみたいに。
コマンドの split -b 15m hoge みたいなの。
0301デフォルトの名無しさん
2005/06/17(金) 09:34:580302デフォルトの名無しさん
2005/06/17(金) 09:47:430303デフォルトの名無しさん
2005/06/17(金) 10:03:14ないよ。
0304デフォルトの名無しさん
2005/06/17(金) 10:20:0420AB年C月は何日あるか
って調べる関数とかないのでしょうか?
0305デフォルトの名無しさん
2005/06/17(金) 10:20:21ないよ。
0306デフォルトの名無しさん
2005/06/17(金) 10:20:37ないの?
もしやるとするなら何か方法ある?
0307デフォルトの名無しさん
2005/06/17(金) 10:24:45閏年の計算は確立されてるやん・・・
0308デフォルトの名無しさん
2005/06/17(金) 10:25:07ないんですか?
もし●年×月が何日あるか調べたい時は何か方法がありますでしょうか?
>>306さん
system 'split -b 15m hoge';
で出来るのでは?
0309デフォルトの名無しさん
2005/06/17(金) 10:26:45> もしやるとするなら何か方法ある?
……もちろんある。
0310デフォルトの名無しさん
2005/06/17(金) 10:27:22ミス
>>304へのレスです。
0311デフォルトの名無しさん
2005/06/17(金) 10:30:36えーっと手間をお掛けしまして申し訳ないのですが
その計算方法をお教えいただけますでしょうか?
0312デフォルトの名無しさん
2005/06/17(金) 10:31:33ググれって、お前が手間を掛けろ。
あとは「西向く士」だ。
0313デフォルトの名無しさん
2005/06/17(金) 10:32:28> もし●年×月が何日あるか調べたい時は何か方法がありますでしょうか?
Date::Calcでできるかも。
0314デフォルトの名無しさん
2005/06/17(金) 10:34:170315デフォルトの名無しさん
2005/06/17(金) 10:34:41これだな。
$days = Days_in_Month($year,$month);
0316デフォルトの名無しさん
2005/06/17(金) 10:43:17>system 'split -b 15m hoge';
>で出来るのでは?
これだとプラットホームに依存しちゃう気がして。
もうちょっと調べてまた夜来ます。
0317デフォルトの名無しさん
2005/06/17(金) 11:00:24File::Splitだな。
0318デフォルトの名無しさん
2005/06/17(金) 12:56:19なんで?
0319デフォルトの名無しさん
2005/06/17(金) 12:58:210320デフォルトの名無しさん
2005/06/17(金) 13:22:13sysreadで一発。
$f = "hoge";
$a = 0;
$b = 15 * 1024 * 1024; #バイト数(15MB)
open R,$f;
while (sysread(R,$line,$b)){
open W,">$f_$a";
print W $line;
$a++;
close W;
}
close R;
0321デフォルトの名無しさん
2005/06/17(金) 13:42:18なんで?
0322デフォルトの名無しさん
2005/06/17(金) 13:45:540323デフォルトの名無しさん
2005/06/17(金) 13:55:460324デフォルトの名無しさん
2005/06/17(金) 14:08:550325デフォルトの名無しさん
2005/06/17(金) 14:53:27Ruby使えよ
0326デフォルトの名無しさん
2005/06/17(金) 14:54:32$a, $bはsortが使うので勝手に使ってるとエラーになることがある。
たとえば
my($a, $b);
@list = sort {$a <=> $b} @list;
なんてやると
Can't use "my $b" in sort comparison at 〜
といっておこられる。あとstrict vars下でも$a, $bはいきなり使って
怒られないとかいやらしい仕様になっている。
sort使わない場所でエラーにならなきゃ使っても問題ないといえばないが、
いちいち考えるのメンドウだし使わない習慣にしといた方がいいよ。
0327デフォルトの名無しさん
2005/06/17(金) 14:56:17なるほど。ありがとうございます。やっと納得できました。
$a, $b のほかにはトラップになりそうな変数名ってあったりしますでしょうか?
0328デフォルトの名無しさん
2005/06/17(金) 16:42:05http://perldoc.jp/docs/perl/5.6.1/perlvar.pod
http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod
大文字のみの識別子や小文字のみのパッケージ名は避けた方が無難。
0329デフォルトの名無しさん
2005/06/17(金) 21:23:02つ[Inline::Ruby]
0330デフォルトの名無しさん
2005/06/18(土) 02:48:02http://perltidy.sourceforge.net/
0331デフォルトの名無しさん
2005/06/18(土) 03:57:090332デフォルトの名無しさん
2005/06/18(土) 04:29:120333デフォルトの名無しさん
2005/06/18(土) 04:45:320334デフォルトの名無しさん
2005/06/18(土) 04:50:36doc読むのマンドクセーからねるぽ
0335デフォルトの名無しさん
2005/06/18(土) 12:51:350336デフォルトの名無しさん
2005/06/18(土) 13:41:590337デフォルトの名無しさん
2005/06/19(日) 10:22:440338デフォルトの名無しさん
2005/06/20(月) 10:57:16Perlで関数の配列を持たせるときに、返り血の値の種類によって異なった宣言が必要ですか?
0339デフォルトの名無しさん
2005/06/20(月) 13:08:46君はまず基本的な用語の意味を正しく理解し、話相手と意思の疎通が
できるようになるべきだと思う。>>4 や下記スレを参考に、まともな
入門書を一冊手に入れて読んでみてはどうか。
【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
0340デフォルトの名無しさん
2005/06/20(月) 16:59:20perlでcgiを作成しているのですが
URLでhoge.cgi?day=20050620
と指定しているのに
--------------------------------
use CGI;
my $cgi = new CGI;
my $gDay = $cgi->param('day');
--------------------------------
というように取得できません、、、
Ctrl+F5で更新すると取れるのですが
なんでなのでしょう?
ってスレ違いならすいません、、
0341デフォルトの名無しさん
2005/06/20(月) 17:08:50だから1嫁と。釣り?
0342340
2005/06/20(月) 17:49:06すいません。
WEBプログラミング板というのがあったのですね、、
ご迷惑をお掛けしました。
0343デフォルトの名無しさん
2005/06/20(月) 20:21:54誰か教えてください!
0344デフォルトの名無しさん
2005/06/20(月) 20:40:34perldoc -q trap
0345デフォルトの名無しさん
2005/06/20(月) 21:52:06高いレベルの実践書です2003/06/01
非常に高いレベルで perl について書かれてますが、じっくり読み進めると十分な知識とスキルを身に付けることができます。
参照(ポインタ)周りについて分かりにくそうなところは、絵で示してくれているので、理解を助けてくれます。
加えてしつこいくらいに、一つの式について、perl の色々な表現(書き方)を示してくれてます。
本書は何度も読み返し是非物にしてください。
他人の perl のスクリプトやハイレベルのPerlerの方のスクリプトを目にしても違和感なく理解できるでしょう。
逆にこの本が理解できないレベルでは、高度な柔軟性に富んだperlのモジュールやパッケージは書けないでしょう。
是非チャレンジしてみてください。
http://www.amazon.co.jp/exec/obidos/ASIN/4774108170/
技術書とは言えないですが2003/06/01
技術書とはとても言えないですが、”導入書”としてはいいかもしれません。
飽きも来ず、淡々と前から順にスクリプト書きながら読み進めていくと、仕事に役立つレベルには全然物足りませんが、ナンチャッテパーラーにはなれるでしょう。
業務で使うことを目的としている人は、別の本できっちりと「参照(ポインタ)」周りや、ハッシュや構造体等について"正しく"十分な知識経験を補ってから業務に臨んでください。
エンジニアでない方ならば、お勧めの一品です。
かく言う私も、全く perl を知らない状態で本書を一通り触り、「イロハ」は把握できました。繰り返しますが、業務レベルには到底達することができませんし、技術書レベルにも達してないと思います。
0346デフォルトの名無しさん
2005/06/20(月) 22:17:06間違ってないが意地悪かもしれない。
>>343
普通にsignalで調べろ
0347デフォルトの名無しさん
2005/06/21(火) 00:42:40たとえば、100行あるログの50行と51行の間に新しい行を追加するとか。
ネット検索したんですが、やり方を見つけることが出来ません。
誰か教えてください。
コレを使ったら簡単だという関数とか無いんでしょうか?
0348デフォルトの名無しさん
2005/06/21(火) 00:52:27$j=0;
while($line = <FILE>){
push(@log,$i);
$j++;
push(@log,$new) if($j==50);
}
テキトーに考えた。(Perl歴一ヶ月)
0349デフォルトの名無しさん
2005/06/21(火) 01:01:36ファイルを配列に読み込んでから、spliceで要素を挿入後
配列出力時の区切り文字を\nに変えてprint。
0350デフォルトの名無しさん
2005/06/21(火) 01:10:01oepn(IO, '+>file.txt') or die 'file error';
my @data = <IO>;
splice(@data, 50, 0, $add);
local $";
print IO "@data";
close(IO);
0351デフォルトの名無しさん
2005/06/21(火) 01:10:400352デフォルトの名無しさん
2005/06/21(火) 01:32:34perl -pi.orig -e 'print "hoge\n" if $. == 51' logfile
0353347(Perl歴二週間)
2005/06/21(火) 01:37:26>348
やっぱ順番に読むのが速いですかね。
>349〜351
なるほど、各行を配列の要素にするんですね。
頭が固いからそういう発想が出てこなかったですよ。
spliceは使ったこと無かったですが、調べたら、やりたかったことが出来そうです。
ありがとうございます。
どちらを使ったらいいか私には判断が難しいですが、
妄想していたものに近いのが後者なので、そちらを使うと思います。
splice以外の関数を使えば「途中に挿入」以外にも出来そうですし。
0354347
2005/06/21(火) 01:46:11うおっ。スゴイ。
一番スッキリしてますね。
hoge\nが新しく書き込むログで…
使いこなせるなら使いたいのですが、私にはちょっと勉強が必要かも。
いや、諦めず理解できるようにならねば。
0355デフォルトの名無しさん
2005/06/21(火) 06:39:49他のスクリプトbbb.plを指定して実行できる関数などありますか?
0356デフォルトの名無しさん
2005/06/21(火) 06:43:210357デフォルトの名無しさん
2005/06/21(火) 07:04:480358デフォルトの名無しさん
2005/06/21(火) 12:12:060359デフォルトの名無しさん
2005/06/21(火) 13:11:10こういう場合はこうするのがいい、みたいなガイドライン的なものってありますか?
my $hoge = new Hoge("foo", "bar");
my $hoge = new Hoge(Foo => "foo", Bar => "bar");
my $hoge = new Hoge({ Foo => "foo", Bar => "bar" });
my $hoge = new Hoge("foo", "bar", Baz => "baz", Qux => "qux");
my $hoge = new Hoge("foo", "bar", { Baz => "baz", Qux => "qux" });
0360デフォルトの名無しさん
2005/06/21(火) 13:11:560361デフォルトの名無しさん
2005/06/21(火) 13:27:55う〜む
0362デフォルトの名無しさん
2005/06/21(火) 13:55:45たしかにそこが謎だけど、 system("bbb.pl"); というようなことがやりたいのかねえ?
0363デフォルトの名無しさん
2005/06/21(火) 16:57:55>my $hoge = new Hoge({ Foo => "foo", Bar => "bar" });
書き捨てのコードじゃなければこれを選択するのが一番。
修正に強い。
メソッドの呼出も含めてね。
0364デフォルトの名無しさん
2005/06/21(火) 21:42:08実行したファイルの STDOUT の内容が欲しいなら `bbb.pl`だな。
0365デフォルトの名無しさん
2005/06/21(火) 21:46:07なるほど。継承したりしたときを考えるとそれが良さそうですね。
0366デフォルトの名無しさん
2005/06/22(水) 02:28:220367デフォルトの名無しさん
2005/06/22(水) 09:57:19引数の話だから関係ないか
0368デフォルトの名無しさん
2005/06/22(水) 11:03:35do aa.pl;
do bb.pl;
do cc.pl;
do dd.pl;
とやったところaaが終わってbb、bbが終わってcc
と処理されました。
そうではなく、aa,bb,cc,ddが同時にスタートして
処理する方法はありませんか?
0369デフォルトの名無しさん
2005/06/22(水) 11:33:18http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#How_do_I_start_a_process_in_the_
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlipc.html
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_fork
http://perldoc.jp/docs/perl/5.8.1/perlthrtut.pod
0370デフォルトの名無しさん
2005/06/22(水) 16:03:58リンク紹介ありがとうございます。
ところで、どれもこれもモジュールを使用するようですが
使用しない方法はありますか?
0371デフォルトの名無しさん
2005/06/22(水) 16:10:180372デフォルトの名無しさん
2005/06/22(水) 16:23:23それぞれのモジュールの機能を自分で書けばいいだけ。
0373デフォルトの名無しさん
2005/06/22(水) 18:47:33my $delete_url = sprintf ("%s?choice=delete;id=%d", url (), $row->{id});
print br (), br (),
"$row->{t} $row->{status}",
" [", a ({-href => $edit_url}, "Edit"), "]",
" [", a ({-href => $delete_url}, "Delete"), "]",
br (), "\n",
"$row->{content}\n";
1行目のsprintfで文字列を指定して、出力しているのはわかります。
しかし、括弧内の意味がわかりません。変数"id"について、URLを指定しているらしい
ですが、よくわかりません。
どっかに詳しく解説している、サイトとかありませんかね?
0374デフォルトの名無しさん
2005/06/22(水) 19:02:47と書いたときに、foo.mot, bar.mot, baz.mot のどれかが存在しなかった場合
エラー終了させたい (すなわち exit code 非0 を返させたい) のですが、1 行で済む書き方はないでしょうか。
とあるメイクファイルのコマンド行に書いて、依存ファイルが無かった場合メイクを止めることを意図しています。
上の書き方のままだと、例えば bar.mot が見つからなかったとしても、
Can't open bar.mot: No such file or directory at -e line 1, <> line 1479.
と出るだけでメイクが止まりません。
0375デフォルトの名無しさん
2005/06/22(水) 19:32:29漏れなら Makefile でこうする。
hoge.mot: foo.mot bar.mot baz.mot
perl -e "..." foo.mot bar.mot baz.mot > $@
0376374
2005/06/22(水) 19:34:45perl -e "foreach (@ARGV) { -e or die } while (<ARGV>) { $line = $_; if (!m/^S7/) { print } } print $line;" $(MOTS) > $@
もっと短くできないですかね _| ̄|○|||
0377374
2005/06/22(水) 19:55:32何か、それでは >374 のサンプルコードから本質的に代わってない希がします。
ひょっとして、依存関係行に依存ファイル foo.mot, bar.mot, baz.mot をきちんと書いておけば
bar.mot とかが見つからなかった (および生成もできなかった) 場合、make が勝手に止まるダロウ、
というご提案なのかもしれませんが、少なくとも今使ってる GNU Make 3.71 では
止まらないのでつ; (コマンド行が実行される。)
0378デフォルトの名無しさん
2005/06/22(水) 20:01:36マジで? Makefile の該当部分見せてみ。
0379374
2005/06/22(水) 20:14:26>>375 さんの回答は一応正しいですね。私の make の使い方 (というか makefile の配置) が変だったようです。
こんな makefile でした。(説明のため、規則は簡単にしてあります。)
MOTS = ../FOO/foo.mot ../BAR/bar.mot ../BAZ/baz.mot
hoge.mot: $(MOTS)
perl -e "while (<ARGV)) { $$line = $$_; if (!m/^S7/) { print; } } print $$line; }" $(MOTS) > hoge.mot
で、../FOO/ や ../BAR/ や ../BAZ/ にも Makefile が存在します。
このとき GNU Make は、../BAR/bar.mot が存在しなかった場合、"make.out -C ../BAR/" を実行し、その正常終了をもって
bar.mot ができたものとして、メイクを続行するようです。
bar.mot が本当に生成されたか否かは全く関知しない罠(汗
>>375 さん疑うような発言をしてすいませんでした orz
0380デフォルトの名無しさん
2005/06/22(水) 21:51:280381デフォルトの名無しさん
2005/06/23(木) 01:52:140382デフォルトの名無しさん
2005/06/23(木) 01:58:05お前が童貞である原因はお前自身なんだから、
お前が行動起こさないとどうしようも無いことぐらい分かってるだろ?
くだらない書き込みをするな。
0384デフォルトの名無しさん
2005/06/23(木) 02:01:250385デフォルトの名無しさん
2005/06/23(木) 02:02:43名前欄は何だ?
0386デフォルトの名無しさん
2005/06/23(木) 02:03:23なんでそこでageたんだ?
0387デフォルトの名無しさん
2005/06/23(木) 02:40:510388デフォルトの名無しさん
2005/06/23(木) 02:41:320389デフォルトの名無しさん
2005/06/23(木) 02:42:39なっ・・・・バカッ!勘違いしないでよ!!
0390デフォルトの名無しさん
2005/06/23(木) 02:44:510391デフォルトの名無しさん
2005/06/23(木) 02:51:34もっとくやしく
0392デフォルトの名無しさん
2005/06/23(木) 08:17:25もっとはじらいを込めて
0393これはどうなったんですか?
2005/06/23(木) 10:07:53466 名前: デフォルトの名無しさん 03/12/07 17:32
「Perlについての質問箱」シリーズもかなり息の長いスレになってきますた。
ここで勝手連的にこのスレのサポートページを作ろうと思っています。
いま考えているのは、
1. このシリーズの過去ログアーカイブ
2. スレッド専用ソースコードうpろだ
3. 過去ログのダイジェスト (Q&Aにまとめたもの)
4. リンク集
こんなところかな。
きながにまっててください。
0394デフォルトの名無しさん
2005/06/23(木) 14:21:29し・・・知らない! 放っといてよ!!
0395デフォルトの名無しさん
2005/06/23(木) 16:05:33わからないのはsprintfの構文か?
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
ttp://www.rfs.jp/sitebuilder/perl/05/func/printf.html
my $edit_url = sprintf ("%s?choice=edit;id=%d", url (), $row->{id});
をsprintfを使わずに書けば
my $edit_url = url () . "?choice=edit;id=" . $row->{id};
でほぼ同じ
0396デフォルトの名無しさん
2005/06/24(金) 15:52:46使って文字化け防止したのに 文字化けたorz
「構」とか「急」とかばけらった・・・どうしたらばけないっすか?
0397デフォルトの名無しさん
2005/06/24(金) 15:57:580398デフォルトの名無しさん
2005/06/24(金) 16:08:34諸般の事情から、imagemagik を使いたいのですが、実際のサンプル
コードが転がっていません。
どなたか親切な方、PerlとImagemagikが共存したサンプルコードの
在り処を教えてくれませんか?
ちなみに童貞ではありません。
0399デフォルトの名無しさん
2005/06/24(金) 16:11:14> perlでサムネイル画像とファイル名称の管理をしたいと考えています。
> 諸般の事情から、imagemagik を使いたいのですが、実際のサンプル
> コードが転がっていません。
そのimagemagikとかいう、なに? パッケージ? ファイル? 商品?
の供給先に質問してください。
0400login:Penguin
2005/06/24(金) 16:19:48ttp://www.google.co.jp/search?&num=ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja&q=PerlMagick
0401デフォルトの名無しさん
2005/06/24(金) 17:12:28という問題で作ってみたのですが500エラーが出てしまいます。
どこが間違っているのかご教授ください。
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print "<html><body>";
use CGI ':standard';
$q = new CGI;
$a = $q->param("answer");
if ($a eq "") {
print "<form action=toi4.cgi method=get>";
print "<input type=radio name=answer";
print " value=a>a";
print "<input type=radio name=answer";
print " value=b>b";
print "<input type=radio name=answer";
print " value=c>c";
print "<input type=submit value=push></form>";
} elsif {
if ($a eq "a") {
print "「正解」";
} elsif ($a eq "b") {
print "「おしい」";
} else {
print "「だいぶ違う」";
}
}
print "</body></html>\n";
0402デフォルトの名無しさん
2005/06/24(金) 17:34:28>>1
0403デフォルトの名無しさん
2005/06/24(金) 17:40:39} elsif {
0404デフォルトの名無しさん
2005/06/24(金) 21:22:30下から2行目の"}"
0405デフォルトの名無しさん
2005/06/25(土) 00:43:25良く見れ。
0406デフォルトの名無しさん
2005/06/25(土) 00:55:09君の質問を理解できるエスパーを一生待ってなさい
0407デフォルトの名無しさん
2005/06/25(土) 02:02:18スマソ
0408名無しさん@Vim%Chalice
2005/06/25(土) 02:29:240409デフォルトの名無しさん
2005/06/25(土) 08:40:550410デフォルトの名無しさん
2005/06/25(土) 10:52:44このスレの過去ログを読んでごらん。
0411名無しさん@Vim%Chalice
2005/06/25(土) 12:49:020412デフォルトの名無しさん
2005/06/25(土) 14:56:280413デフォルトの名無しさん
2005/06/27(月) 15:17:440414デフォルトの名無しさん
2005/06/27(月) 16:00:300415デフォルトの名無しさん
2005/06/27(月) 18:31:510416デフォルトの名無しさん
2005/06/27(月) 18:42:020417デフォルトの名無しさん
2005/06/27(月) 20:56:570418デフォルトの名無しさん
2005/06/27(月) 21:35:22みたいな配列 @abc を作りたいのですが、どうすればよいのでしょうか。
現在はとりあえず、
@abc_tmp = split(/\:/, $aaa);
foreach(@abc_tmp) {
if (/^(\w+)/) {
push(@abc,$1);
}
} としていますが、もっと良い方法があると思うのですが。
よろしく御示唆お願いします。
0419デフォルトの名無しさん
2005/06/27(月) 21:41:33日本語を表示するときに、文字化けしてしまう事が多々あるのですが、対処法などありませんでしょうか
0420デフォルトの名無しさん
2005/06/27(月) 21:47:13ヒント: splitについて詳しく調査せよ。
0421デフォルトの名無しさん
2005/06/27(月) 21:50:49ま、取りあえずプログラムの先頭に
use encoding 'shiftjis';
binmode STDERR, ':encoding(shiftjis)';
の2行を入れてみ?
あとは、ググって自分で調べるよろし。
0424デフォルトの名無しさん
2005/06/28(火) 00:49:25思考か経験が足りないだけだな。
君には簡単にできる。ガンガレ
0425デフォルトの名無しさん
2005/06/28(火) 01:23:13EUCやUTF-8に変換せずにフィールドから項目を抜き出すコードを教えて下さい。
改行,カンマ,ダブルクォートを含んだフィールドはダブルクォートでクォートされ
フィールドに含まれるダブルクォートは、バックスラッシュでなくダブるクォートの
二重化でエスケープされています。
さらに下位バイトにダブルクオートとおなじコードを含む漢字も混在しています。
0426デフォルトの名無しさん
2005/06/28(火) 03:59:19出力結果がsjisならいいんでしょ?
変換せずに、とか変な条件付けない方がいいんじゃないのかな。
0427デフォルトの名無しさん
2005/06/28(火) 04:48:49> さらに下位バイトにダブルクオートとおなじコードを含む漢字も混在しています
それは本当に Shift_JIS なのか?
Shift_JIS 以外に UCS2 も混在していますとか言い出さないでくれよ?
http://www.din.or.jp/~ohzaki/perl.htm#CSVwithCRLF
0428デフォルトの名無しさん
2005/06/28(火) 10:17:43禿同。eucかunicodeに変換して処理してからsjisに戻す方が
余計なこと考えるよりたいていは楽。
ただシフトJISの下位バイトは0x00〜0x3fは避けてあるので
427も指摘しているとおり「下位バイトにダブルクオートと
おなじコードを含む漢字も混在しています。」なんてことは
ありえないんじゃなかったっけ。エスケープに逆スラッシュ
使ってると面倒なんだけど今回はそうではないようだし、
何も気にせずやっても問題ないような気がする。
0429デフォルトの名無しさん
2005/06/28(火) 12:53:05助言ありがとうございます!
ダブルクォートは、バックスラッシュの書き間違いですすみません。
最初、PHP使っていて標準のCSV関数を使っていたら、
漢字コードのバックスラッシュを勝手に解釈されてわやくちゃになってしまいました。
Perlだと漢字変換せずにもっとすっきりした書き方ができるかなと思っていました。
>>427のPerlメモは参考にさせていただきます。助かりました。
0430デフォルトの名無しさん
2005/06/28(火) 18:30:56CGIで掲示板なら1から作れ、普段からちょっとしたテキスト処理にPerlを用い、OOPはできていないくらいのユーザです。
これからプログラミングPerlのvolume1と2を買おうと思いますが、他にお勧めはありませんか?
0431デフォルトの名無しさん
2005/06/28(火) 18:35:32【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
0432デフォルトの名無しさん
2005/06/28(火) 18:59:20> 本を買うのに悩んでいます。
本などに頼るな。
0433デフォルトの名無しさん
2005/06/28(火) 19:06:450434デフォルトの名無しさん
2005/06/28(火) 19:07:52と、簡単なサンプルスクリプトを書いて見ました。
がうまくいきません。
perlへのパスが不正だと怒られました。
(pcheck.cgiの出力です)
改行形式:LF (UNIX形式)
Perlのパス:・ソ#!/usr/bin/perl
サーバのPerlとのチェック :パスが不正のようです・ソ#!/usr/bin/perl
パーミッション:実行権あり
文法チェック:../kel/catalog.cgi syntax OK
EUC-JPやshift-jisでスクリプトを保存すると問題なく動いてくれるのですが
何か勘違いしてますか?
0435デフォルトの名無しさん
2005/06/28(火) 19:15:30UTF-8はUTF-8でも、BOMがついてると、shebangが読めなくなって動作しない。
テキストエディタは何使ってる?
0436デフォルトの名無しさん
2005/06/28(火) 19:25:14どなたかよければ教えてください。
2つファイルを使うのですが、
一つは
10011
23412
32221
12123
...
というようなファイルで、
もう一つは
10011
12632
23412
32221
44432
12123
43444
...
のような感じなのですが、これを、
12632
44432
43444
...
のように、一つ目のファイルにあるものを2つめのファイルから
なくして2つ目のファイルを出力するにはどうしたらよいのでしょうか?
0437デフォルトの名無しさん
2005/06/28(火) 19:25:58早速お返事ありがとうございます。
エディタは Peggy Pro とterapad を使って、両方試してみました。
0438デフォルトの名無しさん
2005/06/28(火) 19:34:20ぐぐってUTF-8NとUTF-8とBOMの件、探し当てました。
UTF-8N指定でうまくいきました。ありがとうございます。
BOMについてはまだ理解していませんが、勉強します。
0439430:本
2005/06/28(火) 19:40:30誘導ありがとうございます。
該当スレを読んでみます。
>>432
今まで改造やネットなどから学んでいたので基礎を固めようと思ったのです。
0440デフォルトの名無しさん
2005/06/28(火) 19:55:49@aa = (10011,23412,32221,12123);
@bb = (10011,12632,23412,32221,44432,12123,43444);
foreach $bb(@bb){
if (!grep{$bb == $_}@aa){
push @cc, $bb;
}
}
print "@aa \n";
print "@bb \n";
print "@cc \n";
0441デフォルトの名無しさん
2005/06/28(火) 19:59:24http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_tell_whether_an_list_o
0442418
2005/06/28(火) 20:50:41splitがヒントということで、まずはこんなものを書いてみました
@abc = split(/[^\w]/, $aaa);
完璧だと思ったのですが、結果は@abc=('aaa', 'bbbb', '', 'cc', '', 'ddd')、、、
ならば、と思って、
@abc = split(/\s*\:\s*/, $aaa); としたら、、うまく出来ました!
splitの中は , や : のような文字だけしか使えないと思っていました。
こんなことも出来るんですね。今後いろいろ使えそうです。
>>420さん、 >>424 さん、どうもありがとうございました。
0443デフォルトの名無しさん
2005/06/28(火) 22:23:12Text::CSV_XS or Text::CSV_PP あたりを使ったら?
0444デフォルトの名無しさん
2005/06/28(火) 22:27:05ロクに読まずにカキコ
@abc = split(/[^\w]+/, $aaa);
0445418
2005/06/29(水) 00:42:32うわ、できました。しかも、この方法だと
$aaa='aaa:bbbb : cc:dddd ';みたいに、末尾にスペースのみが
ある時でもちゃんと取れますね。
ありがとうございます。勉強します。
0446デフォルトの名無しさん
2005/06/29(水) 00:49:23あえて/[^\w]+/って書いたけど/\W+/でおk
0447デフォルトの名無しさん
2005/06/29(水) 01:37:57方法知りませんか?
0448デフォルトの名無しさん
2005/06/29(水) 02:49:34近所にできたセブンイレブンに自転車で行く方法を知りませんか?
と同じような質問だな。
0449デフォルトの名無しさん
2005/06/29(水) 04:05:23Inline::C++
0450デフォルトの名無しさん
2005/06/29(水) 06:44:24答えられないのにわざわざしゃしゃり出てきて書くほど
面白い比喩ではないですね ;-)
0451デフォルトの名無しさん
2005/06/29(水) 08:25:45しかし答えられないのは確かだ。
そのC++クライアントの実装方法を答えればいいのか、
だとしたらその仕様はどこでわかるのか。
それともそのC++クライアントの操作方法を答えればいいのか、
だとしたらその製品は何なのか。
などなど、答えるために必要な前提が揃っていない。
0452デフォルトの名無しさん
2005/06/29(水) 12:29:34っていうか「Perlで実装した」って部分は言う必要なし
要は、SOAPサーバにC++で実装したクライアントからアクセスしたいって話しになる
とするとスレ違い
0453デフォルトの名無しさん
2005/06/29(水) 16:24:37>>452
根本的に、SOAPとして実装したサーバ(CGIとかでも)は、異なるプログラム言語
からでもアクセスできるもの?
できるなら、C++でもC#にしても、実装方法を示したサンプルプログラム
みたいなのはないですかね?
0454デフォルトの名無しさん
2005/06/29(水) 16:35:41まぢで言ってるのか(@_@; 「プロトコル」って何のために決まっているのか理解してる?
0455デフォルトの名無しさん
2005/06/29(水) 16:39:19嘘コンサルがプレゼン資料か何か作ってるんか?
0456デフォルトの名無しさん
2005/06/29(水) 16:43:46Date: 2005/06/20(月) 21:33:35
http://www.amazon.co.jp/exec/obidos/ASIN/4781907954/
高いレベルの実践書です2003/06/01
非常に高いレベルで perl について書かれてますが、じっくり読み進めると十分な知識とスキルを身に付けることができます。
参照(ポインタ)周りについて分かりにくそうなところは、絵で示してくれているので、理解を助けてくれます。
加えてしつこいくらいに、一つの式について、perl の色々な表現(書き方)を示してくれてます。
本書は何度も読み返し是非物にしてください。
他人の perl のスクリプトやハイレベルのPerlerの方のスクリプトを目にしても違和感なく理解できるでしょう。
逆にこの本が理解できないレベルでは、高度な柔軟性に富んだperlのモジュールやパッケージは書けないでしょう。
是非チャレンジしてみてください。
_______________________________________
0457デフォルトの名無しさん
2005/06/29(水) 16:46:43From: [762] 名無しさん@お腹いっぱい。 <>
Date: 2005/06/20(月) 21:34:06
http://www.amazon.co.jp/exec/obidos/ASIN/4774108170/
技術書とは言えないですが2003/06/01
技術書とはとても言えないですが、”導入書”としてはいいかもしれません。
飽きも来ず、淡々と前から順にスクリプト書きながら読み進めていくと、仕事に役立つレベルには全然物足りませんが、ナンチャッテパーラーにはなれるでしょう。
業務で使うことを目的としている人は、別の本できっちりと「参照(ポインタ)」周りや、ハッシュや構造体等について"正しく"十分な知識経験を補ってから業務に臨んでください。
エンジニアでない方ならば、お勧めの一品です。
かく言う私も、全く perl を知らない状態で本書を一通り触り、「イロハ」は把握できました。繰り返しますが、業務レベルには到底達することができませんし、技術書レベルにも達してないと思います。
pixel
_______________________________________
0458デフォルトの名無しさん
2005/06/29(水) 16:47:390459デフォルトの名無しさん
2005/06/29(水) 18:00:51http://www.xmethods.org/ を穴が開くほど眺めたらあとはどっかいってくれ。
0460デフォルトの名無しさん
2005/06/29(水) 18:22:350461デフォルトの名無しさん
2005/06/29(水) 18:44:15これ、シングルクォートで囲んでるのに問題なく変数展開されるんですが、
普通の挙動ですか??
0462デフォルトの名無しさん
2005/06/29(水) 18:50:32それはシングルクォートで囲んでいるのではなく、(文字としての)
シングルクォートを含むダブルクォート文字列だ。
print '<input type="hidden" name="no" value="$no">';
君の理屈だと上のは $no が展開されなければいけないが
そうならないだろ?
0463デフォルトの名無しさん
2005/06/29(水) 21:56:030464デフォルトの名無しさん
2005/06/30(木) 06:15:440465デフォルトの名無しさん
2005/06/30(木) 12:15:36なるほど。よく
print "<input type='hidden' name='no' value=\"$no\">";
なんてエスケープしたダブルクォート使って書いてるの多いので、
ダブルクォート内でもシングルクォートで囲っちゃうと変数展開しないから
わざわざこんな面倒なことしてるのかと思いました。
いろいろ調べても
「ダブルクォート内は変数展開するけど、シングルクォート内はしない」
って説明しかないもので。
どうも
0466デフォルトの名無しさん
2005/06/30(木) 12:49:48ダブルクォート内のダブルクォートのエスケープは、
エスケープしないと、そこが文字列の終わりとみなされちゃうからだね。
↓これを比べればわかるかな?
print "foo\".\"bar";
print "foo"."bar";
0467デフォルトの名無しさん
2005/06/30(木) 16:46:34print qq[foo"."bar];
print qq!foobar!;
0468デフォルトの名無しさん
2005/06/30(木) 20:22:20<img src="../images/btn_db_locusview.gif" alt="Locus view" width="106" height="25" border="0" /></a></td>
<span class="locus_id"><font size="+3">HIT000036281</font></span>
<span class="locus_id"><font size="+2">Oshiete kudasai 6gatu(6-30niti).</font></span>
<td nowrap class="sub_title" colspan="2" width="20%">H-Inv cluster ID <a href=
"pub_Locus.pl?locus_id=HIX0010495"><img src="btn_locusview.gif" width="85" height="16"
border="0" title="Locus view" alt="Locus view" /></a></td>
<span class="locus_id"><font size="+2">を正規表現にして、
Oshiete kudasai 6gatu(6-30niti)を取り出すことはできるのでしょうか?
複雑すぎてよくわかりません。どなたかおしえてください。
0469デフォルトの名無しさん
2005/06/30(木) 20:23:14できますでしょうか?
0470デフォルトの名無しさん
2005/06/30(木) 20:23:36.......
<td height="25" width="108"><a href="../soup/pub_Locus.pl?locus_id=HIX0010495" target="_self">
<img src="../images/btn_db_locusview.gif" alt="Locus view" width="106" height="25" border="0" /></a></td>
<span class="locus_id"><font size="+3">HIT000036281</font></span>
<span class="locus_id"><font size="+2">Oshiete kudasai 6gatu(6-30niti).</font></span>
<td nowrap class="sub_title" colspan="2" width="20%">H-Inv cluster ID <a href=
"pub_Locus.pl?locus_id=HIX0010495"><img src="btn_locusview.gif" width="85" height="16"
border="0" title="Locus view" alt="Locus view" /></a></td>
.....
というようなファイルがあるのですが、
<span class="locus_id"><font size="+2">を正規表現にして、
Oshiete kudasai 6gatu(6-30niti)を取り出すことはできるのでしょうか?
複雑すぎてよくわかりません。どなたかおしえてください。
0471デフォルトの名無しさん
2005/06/30(木) 20:27:23上のコードだけならこれでとれるのでは? コード as-is でパタンマッチ。
/\<span class\=\"locus_id\"\>\<font size\=\"\+2\"\>(.*)\<\/font\>\<\/span\>
0472デフォルトの名無しさん
2005/06/30(木) 21:20:080473デフォルトの名無しさん
2005/06/30(木) 21:21:240474デフォルトの名無しさん
2005/06/30(木) 21:32:430475デフォルトの名無しさん
2005/06/30(木) 21:38:48できない。
0476デフォルトの名無しさん
2005/06/30(木) 23:05:40\.ワラタ
0477わから〜ん
2005/06/30(木) 23:13:372行目 my $delete_url = sprintf ("%s?choice=delete;id=%d", url (), $row->{id});
3行目 print br (), br (),
4行目 "$row->{t} $row->{status}",
5行目 " [", a ({-href => $edit_url}, "Edit"), "]",
6行目 " [", a ({-href => $delete_url}, "Delete"), "]",
7行目 br (), "\n",
8行目 "$row->{content}\n";
1行目の sprinfで整形された文字列 my $edit_url変数に代入される。
2行目も同じ要領で、my $delet_url変数に代入される。
3行目は HTML表示
4行目 意味不明
5行目 1行目の変数が"edit"としてURL表示される。
6行目 2行目の変数が"delete"としてURL表示される。
7行目 HTML表示
8行目 意味不明
ご質問いたします。
(1)4行目の意味がわからない
(2)5行目と6行目がなぜ、editとdeleteのURL表示となるのか?
(3)8行目の意味がわからない
特に、(2)の質問を詳しく解説してください。(2)の用法について
ラクダ本に記述がありますか?
よろしくお願いいたします。
0478デフォルトの名無しさん
2005/06/30(木) 23:16:56とかいう文字列があったとして、wmv 以降を空白に置換するにはどのように
記述すればよいのでしょうか?
while ( <> ) {
if ( $_ =~ /wmv/ ) {
$_ =~ //
}
}
こんな感じで、ファイルから読み込んで、置換したいのです。
0479デフォルトの名無しさん
2005/06/30(木) 23:20:19そういうのはindexとsubstr使ったほうが速い。
0480デフォルトの名無しさん
2005/06/30(木) 23:39:04レスありがとうございます。さっそく調べてみました。
substr($_, 0, 21);
index $_, "/test/hoge/fuga.wmv\">";
とかとすれば良いのでしょうか・・・
けれど、今回取り出したいのは、/test/hoge/fuga.wmv"> だけでなく、
/test/hoge/fugaaaa.wmv">gaeafaefewfwefwe
/test/hoge/fugabbbbbbb.wmv">faefaefefa
/test/hoge/fugaccccccccccc.wmv"><faefaefaefaef
と、長さもマチマチなのです。それをこのように綺麗に
/test/hoge/fugaaaa.wmv">
/test/hoge/fugabbbbbbb.wmv">
/test/hoge/fugaccccccccccc.wmv">
したいのですが、もう少しヒントをいただけないでしょうか?
0481デフォルトの名無しさん
2005/06/30(木) 23:46:40$_ =~ /^.*\.wmv/;
$wmv = $1;
これで $wmv に「/test/hoge/fugaaaa.wmv」がはいる。
はず。確認してないけど。
0482デフォルトの名無しさん
2005/06/30(木) 23:53:25確認しましょうね♪
0484デフォルトの名無しさん
2005/06/30(木) 23:55:54while( <> ) {
$_ =~ /^.*\.wmv/;
$wmv = $1;
print $wmv;
print "\n";
}
すみません。でやってみたのですが、どうしてか、何も表示されません。
後方参照ですか。ググって見ましたが、難しそうで、すぐに理解できそう
もないっす
0485デフォルトの名無しさん
2005/06/30(木) 23:58:28index で wmv の位置調べて substr で切り取る。
$position = index($_, "wmv");
# wmv の長さが 3 だから +3 してる。本当は length 使って長さ取ったほうがいい。
$str = substr($_, 0, $position + 3);
こんな感じ。
0486481
2005/07/01(金) 00:03:44(^ω^)ごめww正規表現の書き方わすれちゃった♪
while ( <STDIN> ) {
if ( $_ =~ /^(.*)\.wmv/ ) {
print $1;
}
}
これでできるだろ!ちっきしょー
0487デフォルトの名無しさん
2005/07/01(金) 00:06:16おぉ、いけました!
index の戻り値としてその長さが返って来るのでしたか。
length も一応調べたりしました。のちのちの参項にさせていただきたいっす。
ありがざいます
# >>481 の方も、レスありがとうでした
0488481
2005/07/01(金) 00:06:18while ( <STDIN> ) {
if ( $_ =~ /^(.*\.wmv)/ ) {
print $1,"\n";
}
}
つか、本当に↓みたいなファイルしか考慮してないお(^ω^)
/test/hoge/fugaaaa.wmv">gaeafaefewfwefwe
/test/hoge/fugabbbbbbb.wmv">faefaefefa
/test/hoge/fugaccccccccccc.wmv"><faefaefaefaef
0489481
2005/07/01(金) 00:06:540490デフォルトの名無しさん
2005/07/01(金) 00:08:57$str = '/test/hoge/fuga.wmv"><mfaoeaifjeofaejfoaeigaho';
$exp = '.wmv">';
substr( $str, index($str, $exp) + length $exp ) = '';
print $str;
0491デフォルトの名無しさん
2005/07/01(金) 00:11:550492デフォルトの名無しさん
2005/07/01(金) 00:16:17ちゃんと試してみました。完璧です。
インデントで、全角スペースもちゃんとこちらで削除してるんで、
問題ないっす。
>>490 そんな使い方もしりませんでした。空文字列を結合してるのですね。
本当にお勉強になりました。
0493デフォルトの名無しさん
2005/07/01(金) 08:03:10という部分で、print if の部分を省略する方法はありますか?
たしかあったと思うのですが、どういう風にやるのか忘れてしまいました。
0494デフォルトの名無しさん
2005/07/01(金) 09:02:49そこは省略できない。
perl -pe "s/foo/bar/"
と混同しているのでは。
0495デフォルトの名無しさん
2005/07/01(金) 09:32:12なるほど。おっしゃる通りです。ありがとうございました。
0496デフォルトの名無しさん
2005/07/01(金) 10:50:420497デフォルトの名無しさん
2005/07/01(金) 11:13:32スレ違いというか板違いというか、とりあえずPerlの質問ですらないな。
WebProg にでもいきなされ。
http://pc8.2ch.net/php/
0498デフォルトの名無しさん
2005/07/01(金) 11:46:46サーバサイドではないのです。詳しく言うと
http://192.168.1.1/cgi-bin/main.cgi?mbg_webname=adslreconnect
に
<form action="/cgi-bin/main.cgi" method="POST">
<input type="hidden" name="mbg_webname" value="adslreconnect">
<input type="hidden" name="adsl_reconnect" value="">
<input type="submit" name="mbg_set" value="再接続">
</form>
という記述があって、「再接続」をクリックするとルータが再起動されるのです。
それを一日一回してるのですが、手動では面倒くさいので、Perlさんに自動でやってもらいたいのです。
しかし、CGIに自動で、POSTメソッドで、値を渡す方法が分からないので、無理なのです。
0499デフォルトの名無しさん
2005/07/01(金) 11:55:10個人的にはJavaScriptで勝手に送信させたほうが楽だと思う。
0500デフォルトの名無しさん
2005/07/01(金) 12:09:54そうです。Perlがいいんです。
0501デフォルトの名無しさん
2005/07/01(金) 12:14:51perldoc LWP
perldoc LWP::UserAgent
0502デフォルトの名無しさん
2005/07/01(金) 12:16:20ところで Perl にこだわる理由はなに?
0503デフォルトの名無しさん
2005/07/01(金) 12:17:48ソケットつないでどうのこうのぐらいしか思いつかない。
分かる人にバトンタッチ
0504デフォルトの名無しさん
2005/07/01(金) 12:19:55http://www.unix.org.ua/orelly/perl/cookbook/ch20_03.htm
0505501
2005/07/01(金) 12:24:59最近はそーゆー低水準なところから組み上げる必要は滅多になくて、使いたいプロトコルに対応したライブラリを利用するだけで大抵のことは何とかなりまつ。
0506503
2005/07/01(金) 12:40:56まぁ、関数一つ一つ追っていくのが楽しいので見逃してくらはい。
0507デフォルトの名無しさん
2005/07/01(金) 12:44:41> 低水準なんすか・・
> まぁ、関数一つ一つ追っていくのが楽しいので見逃してくらはい。
中途半端。サブルーチンを一つ一つ追っていくのが
楽しいのなら、socketから突っ込むべき。
0508デフォルトの名無しさん
2005/07/01(金) 12:51:240509501
2005/07/01(金) 13:22:04何か誤解されてるよーな気がしますが、ここで言う「低水準」は、よりプリミティブに近いもの、とゆー意味でつ。
言語で言うところの、高級(より人間に理解しやすい)⇔低級(より機械語に近い)のよーなもの。
0510デフォルトの名無しさん
2005/07/01(金) 14:16:08use LWP::UserAgent;
$ua = LWP::UserAgent->new();
my $req = POST 'http://192.168.1.1/cgi-bin/main.cgi',
[ mbg_webname => 'adslreconnect', adsl_reconnect => '' ];
$content = $ua->request($req)->as_string;
これで駄目だった
はじめたばかりだからよぐわがんね
0511デフォルトの名無しさん
2005/07/01(金) 14:16:30最近Perlはじめたからです
0512デフォルトの名無しさん
2005/07/01(金) 14:55:29CPANでどうやるんでしたっけ?
0513デフォルトの名無しさん
2005/07/01(金) 17:37:40>>485 にはバグがある。入力が、例題そのままの
/test/hoge/fuga.wmv"><mfaoeaifjeofaejfoaeigaho
ならいいが、
/test/wmv/fuga.wmv"><mfaoeaifjeofaejfoaeigahowmv
とかだったらどうするつもりなのだろうか・・・
0514513
2005/07/01(金) 17:55:02いやま、どこまでも厳密な結果を求めようとすれば
いずれ正規表現 (FSM による構文解析器と同等) の
手に余ることになるのは承知で言うのだけど。
0515デフォルトの名無しさん
2005/07/02(土) 00:10:23for($aaa=0;$aaa<1000;$aaa++)
だと、aaaは0 1 2 ・・・・ 999ってなりますよね。
000 001 002 ・・・・ 999 ってするには?
0516デフォルトの名無しさん
2005/07/02(土) 00:15:290517デフォルトの名無しさん
2005/07/02(土) 00:26:16for my $aaa ('000'..'999') { ... }
0518デフォルトの名無しさん
2005/07/02(土) 00:32:41mod_perlを導入する場合、何らかの条件分けでmod_perlを用いるかどうかスクリプトごとに分けるものでしょうか?
それとも導入と共にスクリプトを修正して、今後のコーディングをmod_perl仕様にするといった感じでしょうか?
0519デフォルトの名無しさん
2005/07/02(土) 01:01:10use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my $ua = LWP::UserAgent->new;
$request = POST('http://192.168.1.1/cgi-bin/main.cgi' , [ mbg_webname => 'adslreconnect', adsl_reconnect => '' ]);
$res = $res = $ua->request($request);
$_ = $res->content;
これは?
随分前に作ったプログラムをサルベージしたものだから、
もしかしたらうまく動かんかも知れんけど。
0520デフォルトの名無しさん
2005/07/02(土) 01:02:50use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
$ua = LWP::UserAgent->new;
$request = POST('http://192.168.1.1/cgi-bin/main.cgi' , [ mbg_webname => 'adslreconnect', adsl_reconnect => '' ]);
$res = $ua->request($request);
$_ = $res->content;
0521デフォルトの名無しさん
2005/07/02(土) 01:12:39つーかルータ買い換えたほうがいいんじゃね?
一日一回、再起動が必要なんてヒドス
0522デフォルトの名無しさん
2005/07/02(土) 01:13:580523デフォルトの名無しさん
2005/07/02(土) 02:21:05ttp://mm.apache.jp/pipermail/apache-users/2005-June/005518.html
0524デフォルトの名無しさん
2005/07/02(土) 04:50:59sprintf 使うなら、%3d じゃなく %03d
0525デフォルトの名無しさん
2005/07/02(土) 06:05:52. を見落としてる。
%03d だと 3 「文字」に満たない場合は 0 でパディング。
%.3d だと 3 「桁」 に満たない場合は 0 でパディング。
少なくとも 0 〜 999 では同じ結果になる。
printf '%03d, ' x 4 . '%.3d, ' x 4, (1, 1234, -1, -1234) x 2;
0526515
2005/07/02(土) 09:44:49結構あっさりなもんですね
0527デフォルトの名無しさん
2005/07/02(土) 11:12:50両方試してみたけどうまくいけね。自分でがんばってみるお。
>>521
何かISPが何かしてるからか知らないけど、12時になったら繋がらなくなる。
んで再起動したらなぜか繋がる。
0528デフォルトの名無しさん
2005/07/02(土) 11:44:21192.168.1.1
にアクセスするには
http://aploda.org/dat1/upload43321.gif
↑こんなんでログインしないといけないようです。
だから無理だったようです。
自分だけでがんばってもどうにもならないようです。
0529デフォルトの名無しさん
2005/07/02(土) 11:56:510531デフォルトの名無しさん
2005/07/02(土) 17:23:15よぐわがんね。
0532デフォルトの名無しさん
2005/07/02(土) 17:23:17ルータの設定で 192.168.1.100 とか 192.168.100.1 にしてみれとなんとなく言ってみるテスツ
0533デフォルトの名無しさん
2005/07/02(土) 17:30:43ていうか、Perlでどう送るんですか。
よぐわがんね。
0534T女の竹田
2005/07/02(土) 17:34:47PerlさんよりWSHのほうがいいと思うよ。
スレ違いだけど、JScriptなら
var ie = WScript.CreateObject("InternetExplorer.Application");
ie.Navigate("...");
WScript.Sleep(3000);
ie.document.forms[0].submit();
こんな感じかな?
0535デフォルトの名無しさん
2005/07/02(土) 17:36:56JSとかわがんね。
0536デフォルトの名無しさん
2005/07/02(土) 17:39:28見落としてたけど、言ってることよくわがんね。
0537デフォルトの名無しさん
2005/07/02(土) 19:15:300538デフォルトの名無しさん
2005/07/02(土) 19:15:540539デフォルトの名無しさん
2005/07/02(土) 19:19:49if ( $_ =~ /test/ ) {
;
}
else {
print $_, "\n"
}
}
読み込んだファイルに、testが含まれている行は出力しないって処理が
したいんですけど、もっとスマートにならんものでしょか?
0540デフォルトの名無しさん
2005/07/02(土) 19:20:31モジュール名だけでも結構ですので、どなたか教えてください。宜しくお願いします。
0541デフォルトの名無しさん
2005/07/02(土) 19:25:070542デフォルトの名無しさん
2005/07/02(土) 19:30:23これじゃだめでしょうか>>539
0543デフォルトの名無しさん
2005/07/02(土) 19:43:45誰か頼む。
0544デフォルトの名無しさん
2005/07/02(土) 20:03:16http://search.cpan.org/search?query=tar
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_system_LIST
>>543
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_extract_just_the_uniqu
0545デフォルトの名無しさん
2005/07/02(土) 20:13:16ソートしていいならperl使うまでもない常套句:
cat hoge | sort | uniq > fuga
があるが…
0546デフォルトの名無しさん
2005/07/02(土) 21:00:13スゴすぎ・・・orz
そんな書き方があったのですか。正直初心者のわたくし驚きました
ありがとうございました。and レスちょっと遅れちゃったみたいで申し訳ないっす
0548デフォルトの名無しさん
2005/07/02(土) 21:04:57@test = <IN>;
$a = @test;
$s = 0;
TEST:for($i=0 ; $a>$i ; $i++) {
for($i2=0 ; $a>$i2 ; $i2++) {
if($i!=$i2){
if(index($test[$i],$test[$i2]) == -1) { goto TEST;}
}
}
$hon[$s]=$test[$i];$s++;
}
print @hon;
<>;
なんでこれじゃ駄目なんだ。。。
0549デフォルトの名無しさん
2005/07/02(土) 21:08:29Windows(DOS)で動くcat/sort/uniqなんて、腐るほど存在するが…
0550デフォルトの名無しさん
2005/07/02(土) 21:15:130551デフォルトの名無しさん
2005/07/02(土) 21:22:11うまくいかない
cat a.txt | sort | uniq > b.txt
>>549
ほんとだ。ありがとう。
>>550
入力ファイルが 2 度指定されました。
0552デフォルトの名無しさん
2005/07/02(土) 21:33:420553デフォルトの名無しさん
2005/07/02(土) 21:35:42:英語だけど ウェブからも読める Cookbook 初版から
http://www.sarinaga.com/progtoy/perlcookbooklink.html
の、レシピ 4.6 が詳しい。(内容は 544 と同じだけど)
0554デフォルトの名無しさん
2005/07/02(土) 22:37:300555510
2005/07/03(日) 03:38:29他所で聞いてきます
0557デフォルトの名無しさん
2005/07/03(日) 07:17:480558デフォルトの名無しさん
2005/07/03(日) 07:47:28PAR とか?
0559デフォルトの名無しさん
2005/07/03(日) 07:48:14perl(1)
http://perldoc.jp/docs/modules/PAR-0.75/lib/PAR/Intro.pod
0560デフォルトの名無しさん
2005/07/03(日) 07:55:27PerlApp
perlbin ( perlbin.sf.net )
0561デフォルトの名無しさん
2005/07/03(日) 08:20:29まあnkfは手軽でいいんだけど。
0563デフォルトの名無しさん
2005/07/03(日) 10:58:59$ref = \&TEST::test;
$ref->test();
このような形で取れますが、関数ではなくパッケージ自体(上の例だとTEST)のリファレンスを
取得して、そこから関数を実行するにはどのように行えばよいのでしょうか?
0564デフォルトの名無しさん
2005/07/03(日) 12:44:42それどころかpiconvなるコマンドが添付されてる。
単純なことならNKFでいいけどね。
0565デフォルトの名無しさん
2005/07/03(日) 12:50:40TESTパッケージのシンボルテーブルは%{TEST::}
0566デフォルトの名無しさん
2005/07/03(日) 13:18:09おお、ほんとだ。知らなかった。
0567デフォルトの名無しさん
2005/07/03(日) 13:18:26#!/usr/bin/perl
no strict;
no warnings;
package TEST;
$global_var = 0;
sub func {
print "fuck\n";
}
package main;
# 関数だけ抽出
foreach (keys %{TEST::}) {
if (ref *{${TEST::}{$_}}{CODE} eq 'CODE') {
push @func, *{${TEST::}{$_}}{CODE};
}
}
# 実行
foreach $code (@func) {
$code->();
}
0568デフォルトの名無しさん
2005/07/03(日) 13:50:55単純に TEST:: でリファレンスは取れるんですね。
ありがとう御座います。助かりました。
0569デフォルトの名無しさん
2005/07/03(日) 16:50:12第4引数に何か渡すと100%失敗するんだけど。
0570デフォルトの名無しさん
2005/07/03(日) 16:50:47まったく同じソースコードでも動かなくなった。
0571デフォルトの名無しさん
2005/07/03(日) 16:55:13半年たっても Unconfirmed のまま。
奴等、真面目にやる気あんのか!(-_-メ)
0572デフォルトの名無しさん
2005/07/03(日) 18:30:51何でこんなことしなきゃならんのだ…
0573デフォルトの名無しさん
2005/07/03(日) 18:39:59よく分からないけど乙。
そのうち報われるさ。
0574デフォルトの名無しさん
2005/07/03(日) 18:42:08賛成の方も反対の方も、このスレで自分は賛成か反対かをお書きください。
プログラム技術板に強制ID制を導入すべきか否か
http://etc4.2ch.net/test/read.cgi/vote/1118144381/
理由などの記入は別に構いません。
<<賛成>>か<<反対>>かだけ御記入頂ければ結構です。
ちなみに、当たり前ですが運営の方にIPが見えているので、1日ごとにIDが変わるからといって多重投稿しないでください。
あちこちにマルチポストしないでね。@現在20件
0576デフォルトの名無しさん
2005/07/03(日) 19:51:480577デフォルトの名無しさん
2005/07/03(日) 19:54:13Encode::from_to($mojiretu, 'utf8', 'iso-2022-jp');
0578デフォルトの名無しさん
2005/07/03(日) 20:22:27ActivePerlじゃなくてEncodeの問題?
なら、Jcodeメーリングリストに報告したら修正してくれるよ。
0579デフォルトの名無しさん
2005/07/03(日) 22:24:400580デフォルトの名無しさん
2005/07/03(日) 22:40:440581デフォルトの名無しさん
2005/07/03(日) 23:33:23うまくいきました。どうもありがとうございます。
0582デフォルトの名無しさん
2005/07/03(日) 23:41:26http://www6.wind.ne.jp/mode/downPage/Random.htm
の物を拾いました。
saltが固定(既知)だったら、どこを書き換えれば宜しいですか?
0583デフォルトの名無しさん
2005/07/04(月) 00:11:35cryptについてちょっとくらい自分で調べろ。
0584デフォルトの名無しさん
2005/07/04(月) 06:48:310585デフォルトの名無しさん
2005/07/04(月) 13:04:54Net::FTPモジュールを使い外部サーバーにFTP転送しようと思いこんな感じで書きました。
抜粋ですが
$ftp = Net::FTP->new("ftp_host", Debug => 0);
$ftp->login("user","pass");
$ftp->cwd("/public_html");
$ftp->binary;
$ftp->put("hogehoge.tar.gz");
$ftp->quit;
転送は問題なく出来るのですが、アーカイブが壊れてしまいます。
送り側サーバーで生成したアーカイブを確認すると正常でした。
送ると壊れます。
何か対策はありますでしょうか。。
御存じの方いらっしゃいましたら教えてください。
宜しくお願いいたします。
0586デフォルトの名無しさん
2005/07/04(月) 15:08:02レスが無いので、モジュールを知らないけど書いてみる。
とりあえずローカルとリモートのファイルサイズが同じかどうか見てみる。
空ファイルとかテキストファイルを送っても壊れるかどうかもみてみる。
0587デフォルトの名無しさん
2005/07/04(月) 15:26:04ヒント: asciiモード/binaryモード
0588デフォルトの名無しさん
2005/07/04(月) 15:27:19> ヒント: asciiモード/binaryモード
あ、ごめん。それはやったのね。マヌケだった。
0589デフォルトの名無しさん
2005/07/04(月) 16:01:27ちゃんとバイナリモードにしてるしそうめったなことはないと
思うのだがな。むしろ書いてないところに問題があるとか壊れている
という認識自体間違ってるとかそういうところを疑ったほうが
いいかもしれない。
示されたコードは抜粋だとあるが、そのコードで現象は再現しているか?
壊れていると判断した根拠は? そもそもサイズが違うとかmd5等のチェック
サムが違うとかなら本当に壊れてそうだが、単に解凍できなかったとかなら
解凍方法や環境の問題かもしれない。
0590デフォルトの名無しさん
2005/07/04(月) 20:45:24>>589の言う通りやね。
送り元のtarは、gnu tarでアーカイブしていて
受け取り側は一般のtarコマンドしかないとかの話じゃないの。
0591デフォルトの名無しさん
2005/07/04(月) 22:00:230592デフォルトの名無しさん
NGNGエスパーさんあとをよろしくなのです。。
0593デフォルトの名無しさん
2005/07/04(月) 23:19:34my $mo = "ABC";
use $mo;
とした場合、"syntax error" と怒られてしまいます。
動的にこのような形で use したいのですが、どのようにしたらできるのでしょうか?
0594デフォルトの名無しさん
2005/07/04(月) 23:35:56どっかにできあいのモジュールがありそーな気もしますが……。
my $class = "File::Copy";
my $pm = $class;
$pm =~ s@::@/@g;
$pm .= ".pm";
require $pm;
$class->import;
copy($0, "test");
0595デフォルトの名無しさん
2005/07/04(月) 23:43:56my $mo = "ABC";
eval "use '$mo'";
もアリ。
0596デフォルトの名無しさん
2005/07/04(月) 23:44:410597585
2005/07/05(火) 08:44:56レスありがとうございます。
昨日の夜に試して見たところ正常に出来ました。
が、先ほどためしてみるとまたダメでした。
「壊れる」という表現は適切ではないかもしれません。「一部壊れる」に訂正します。
あとLinux側で解凍すると解凍の終わりかけ位に以下のエラーがでます。(Win ではエラーはでませんが一部解凍不能)
gzip: stdin: unexpected end of file
tar: 書庫中に予期せぬ EOF があります
tar: 書庫中に予期せぬ EOF があります
tar: エラーを回復できません: 直ちに終了します
tarは壊れてしまうとファイルを復活させる事が出来ないのである意味別の手段を考えた方がいいのかもしれませんね。。ファイルサイズがどうも増えたり減ったりしている様な。。
http://vartmp.net/blog/archives/cat_webtech.html の記事とかもしかしたらとか思っていますが Debug=>1 で様子を見ることも出来ないヘタレなので。。
0598デフォルトの名無しさん
2005/07/05(火) 10:07:33お前が引用した記事にあるように手元に用意したファイルがおかしいか
(この例ではファイルをcloseしてなかったので最後まで書かれてなかった)
といったことが考えられる。
うまく転送できてなければputがエラー(undef)返してるかもしれないので
確認した方がいいだろう。警告メッセージも出てるかもしれない。
0599デフォルトの名無しさん
2005/07/05(火) 10:10:41tarのアーカイブ作るときにtarアーカイブの作成場所とアーカイブ対象のディレクトリが被ってるんじゃないの?
“tar cvf hoge.tar *”とか“tar cvf /hogehoge/hoge.tar /hogehoge”とかすると
アーカイブ対象に現在作成中のアーカイブファイル(自分自身)も含めるからわやくちゃになるよ。
てPerl関係ないし。
0600デフォルトの名無しさん
2005/07/05(火) 10:13:38ありがとう御座います。そのようなやり方で出来るのですね。
>>594のやり方は試してませんが、evalの方法が簡単でよかったのでそれで行います。
ありがとう御座いました。
0601デフォルトの名無しさん
2005/07/05(火) 13:23:02これってuse出来るか出来ないかをスクリプトに判断させるときのやり方だと思う。
useはコンパイル時にrequireしろってのと同じだから動的にやるなら
require "$mo.pm";
このとき、文字列の場合.pmが必要で、
名前空間はフォルダに置き換えてスラッシュにしないといけない。
つまり、
$mo = "One::Of::Module";
の場合は
$mo = "./One/Of/Module.pm";
require $mo;
とか。
ひとつのディレクトリに各モジュールが入っているなら
require "./One/Of/$mo.pm";
かな?
>>594にあるようなimportは必要なきゃしなくてイイと思われ。
0602デフォルトの名無しさん
2005/07/05(火) 14:10:00require Module;
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_use_Module
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_require_EXPR
0603デフォルトの名無しさん
2005/07/05(火) 14:58:45入力する方法がわからん
配列変数を使わなければ
$A=<>;
chomp $A;
って感じで気力の続く限り打ち続ければいいけど
データ数が決まってなければ使えないじゃん
@AAA(10,20,30,40・・・・)
とデータ数が予想できない場合はどうすりゃいいの?
0604デフォルトの名無しさん
2005/07/05(火) 15:22:590605デフォルトの名無しさん
2005/07/05(火) 15:26:31my @array;
push @array, $_ while <STDIN>;
chomp @array;
0606デフォルトの名無しさん
2005/07/05(火) 16:10:35push @array, while <STDIN>;
chomp @array;
でも、OKだったけど。
>>605のソースを走らせても$_の中に何も文字列は入っていなかった。
0607デフォルトの名無しさん
2005/07/05(火) 16:35:22君の飼っている駱駝は病気のようだ。
$_ については
http://perldoc.jp/docs/perl/5.6.1/perlop.pod
の「I/O Operators」でも読んでくれ。
0608デフォルトの名無しさん
2005/07/05(火) 16:46:58じゃだめなの?
0609デフォルトの名無しさん
2005/07/05(火) 20:30:220610デフォルトの名無しさん
2005/07/05(火) 20:58:460611デフォルトの名無しさん
2005/07/05(火) 22:35:240612デフォルトの名無しさん
2005/07/05(火) 23:45:10AAA="hoge"
とやる所をタイプミスで
AA="hoge"
とやってしまい、後の方では、
$AAAを(未定義のまま)使ってしまった場合
何事もなく動いてしまう事があります。(バグに気づかない)
この手の未定義変数のチェックをうまくできないでしょうか?
0613デフォルトの名無しさん
2005/07/05(火) 23:46:42use strict
0615デフォルトの名無しさん
2005/07/06(水) 00:43:01どうやって perl おぼえたの?
0616デフォルトの名無しさん
2005/07/06(水) 00:56:35これの説明が載ってない入門書は捨てた方がいい
0617デフォルトの名無しさん
2005/07/06(水) 01:29:220618デフォルトの名無しさん
2005/07/06(水) 01:56:390619デフォルトの名無しさん
2005/07/06(水) 02:24:28まともなPerl5コードが書けるようになるまで一年かかった俺ガイル
まあ変な癖つけたく無ければ良いソースを読むかちゃんとした本買えって事だな…
0620デフォルトの名無しさん
2005/07/06(水) 02:54:34> 何処のとは言わないがCGIの改造で入門して、本買わずにWebだけで独学で学んだら、
> まともなPerl5コードが書けるようになるまで一年かかった俺ガイル
なぜ最高のクオリティを誇る添付ドキュメントを見ない?
0621デフォルトの名無しさん
2005/07/06(水) 03:10:010622デフォルトの名無しさん
2005/07/06(水) 05:27:18ヘッダとボディは空行で区切られています。ボディの行数を計算して、ヘッダ
の最後に Lines: ボディの行数と書き込むにはどうすればよいでしょうか?
0623デフォルトの名無しさん
2005/07/06(水) 06:29:160624デフォルトの名無しさん
2005/07/06(水) 06:29:380625デフォルトの名無しさん
2005/07/06(水) 06:40:23ボディの行数をカウントして、ヘッダの最後に"Lines: "フィールドを追加すれば
いいよ。
0626デフォルトの名無しさん
2005/07/06(水) 06:42:49怒ってる人もいるようだからあとは自分でなんとかしてくれ。
open IO, "+< hoge";
$lines = @in = <IO>;
foreach (@in) {
$lines--;
$_ = "Lines: $lines\n\n" if (/^$/);
}
seek IO, 0, 0;
print @in;
close IN;
0627デフォルトの名無しさん
2005/07/06(水) 06:44:32まあ問題になったら自分でなんとかしてくれ。
0628デフォルトの名無しさん
2005/07/06(水) 07:50:10空行は一回以上ある場合もあります。複数の空行がある場合、最初のものが区
切になります。
>>624
すみません。馬鹿にするつもりはありませんでした。
どの部分が気にさわられのでしょうか。
以後気を付けますので、おしえていただけませんでしょうか。
>>625
行入力演算子を while でまわして、body の行数を数えることができたんです
が、その後でつまっています。
>>626
ありがとうございます。参考にして、ちょっと考えてみます。
0629デフォルトの名無しさん
2005/07/06(水) 07:56:16参考とかそういうレベルではないだろう。
0630デフォルトの名無しさん
2005/07/06(水) 12:25:17>>624は妄想基地外だから、気にする必要はなし。
あんたの書き方で、何の問題もない。
0631デフォルトの名無しさん
2005/07/06(水) 18:00:16モジュールの読み込みってrequire でも出来るんですね。
evalではなく、requireでする方法に変更しました。
そうなってくると分からなくなるのですが、use と require の違いって
何なのでしょうか?
0632デフォルトの名無しさん
2005/07/06(水) 18:25:23こんなんでどう?
open IO, "+< hoge";
read IO, $buf, -s IO;
seek IO, 0, 0;
($head, $body) = split /\n\n/, $buf, 2;
print IO $head, sprintf("\nLines: %d\n\n", $body =~ tr/\n//), $body;
close IO;
0633632
2005/07/06(水) 18:27:54printf IO "$head\nLines: %d\n\n$body", $body =~ tr/\n//;
0634デフォルトの名無しさん
2005/07/06(水) 18:54:20マニュアルにuseはModuleにbarewordしか許されないことを
除けば
BEGIN { require Module; import Module LIST; }
と同じとあるので、違いは
実行されるタイミング
import
Moduleの指定のしかた
ということになるだろうな
0635デフォルトの名無しさん
2005/07/06(水) 20:03:14そうなんだ。ほとんど同じ、っていうか全く同じですね。
初めて知りました。有難う御座いました。
0636601
2005/07/06(水) 20:12:04そうなのよ。
モジュールのimportなんて作り方によっては必要ない。
だいたいの場合は単純にrequireでいいはず。
該当モジュールがuse Exporterしていて、
かつ関数を呼び出し元の名前空間にimportしたい場合のみ等価なコードを書けばよい。
0637デフォルトの名無しさん
2005/07/06(水) 20:43:57どうやったらプログラム書けるようになりますか?
C、Perlとか「プログラミング言語」そのものは、市販されてる本よんで
サンプルプログラムとか打ち込んで、練習問題を解答できます。
しかし、Cで簡単なゲームとかPerlで掲示板とかチャットとか、1から
自作しようとなると、さっぱりわからん。
プログラミング言語を学ぶ以外に、どんなこと勉強すればよいのでしょうか?
絶対にPerlで掲示板とかチャットとか、人が書いたソースコードが読める
ようになりたい。
0638デフォルトの名無しさん
2005/07/06(水) 20:58:370639デフォルトの名無しさん
2005/07/06(水) 21:13:09まず大文字の英数字を気持ち悪いと思う感覚を育もう。
個人的には口語中の一桁数字なら大文字でもいいけど。
とりあえず経験積めば誰だってある程度できるようになるんでは。
0640デフォルトの名無しさん
2005/07/06(水) 21:21:29大文字と全角文字の区別をつけるところから始めよう。
0641デフォルトの名無しさん
2005/07/06(水) 21:29:13たぶん自分ツッコミですね。乙です。
0642デフォルトの名無しさん
2005/07/06(水) 22:06:20諦めなさい。君には才能が皆無。
0643637
2005/07/06(水) 22:17:24お前エスパーかよ。どうして才能が皆無なんて、ソースコードも見てないのに
言えるんだ? ばっかジャネェの?
諦めなさい。君には才能が皆無。
諦めなさい。君には才能が皆無。
諦めなさい。君には才能が皆無。
プログラムが組めないどころか、
練習問題もこなせそうにないヤツに言われたよ〜。・゚・(ノД‘)・゚・。
ちょっと下手に出て質問したら、すぐこれだからな(汗
バグ出してエラー出して、苦労して自力で修正して・・・
頭で思い描いた通りに、プログラム組めるようになれば一人前ダヨネ!がんばろ
これ以上、アホに構ってられないや じゃね! もう見ないから
0644デフォルトの名無しさん
2005/07/06(水) 22:24:390645デフォルトの名無しさん
2005/07/06(水) 22:26:230646637
2005/07/06(水) 23:05:44あなたは誰ですか?
0647デフォルトの名無しさん
2005/07/06(水) 23:26:31構成する能力が皆無っていう人なのかな。
いるんだよね、こういう人。
ある程度以上の複雑さのものを構築することがまったくできないの。
0648デフォルトの名無しさん
2005/07/06(水) 23:45:59データフロー図を描いて、データがどういう風に流れて、どういう風に処理されるかとか、
UMLのユースケース図を描いて、どんな機能があるのかとか、
もう少し大きな視点で考えてる訓練をする
ある程度の機能をもったアプリケーション(掲示板とか)の作りかた
を解説してある本を読んで見るとか
情報処理技術者試験のソフ開とか勉強してみるのもいいんじゃない?
0649デフォルトの名無しさん
2005/07/07(木) 00:01:08スマン、マジで。
0650デフォルトの名無しさん
2005/07/07(木) 00:58:50小生、Perlに入れ込んでいる理由は、単純にとっつき易いからです。
プログラム経験はまったくありません。
プログラムといっても所詮、定型処理だから、どんな機能があるのか
フロー図を描いて整理して、それをプログラムすればよく(構造化
プログラミングというらしい)サブルーチンを繰り返すような構造に
なっている。
しかし
世間一般のプロレベル>>中間レベル>>小生の下手の横好きレベル
中間レベルに成長するための方法がわからない。
やはり、KENTさん(嫌悪感を持っている人も居るようですが…)とかの
解説本を読むとか、Web上のオープンプログラムを読んで、改造してみる
とか、地道な努力が必要なのでしょうか?
0651デフォルトの名無しさん
2005/07/07(木) 01:03:47この前もセキュリティホール見つけたし、汚いソースだし。
0652デフォルトの名無しさん
2005/07/07(木) 01:09:07プログラム言語も自然言語も同じ言語。
あんたの質問は、
英語の入門文法書はわかる。
でも英作文はできない。どうしたら作文ができるようになるのか?
とほぼ同義。
0653デフォルトの名無しさん
2005/07/07(木) 01:16:140654デフォルトの名無しさん
2005/07/07(木) 01:16:32掲示板は結構多くのプログラミングエッセンスが入っていて
学習には最適だ。
変に他人のコードなんか読んだり演習問題なんかやってないで
100行ぐらいの規模の掲示板でもイチから組んでみると良い。
で、出きなかったら、行き詰まったら、ここに質問に来い。
まじめに取り組んでで、手前勝手な解釈の上に立った質問でなく
実際のコード晒すような奴なら、まあ誰かが導いてくれるだろう。
厳しい指摘や罵倒も受けるだろうがそれも勉強だわな。
現場で戦力になる早道は他人のプログラム修正だが、プログラミングを
覚える早道はなんでもいいからフルスクラッチのプログラムを書いて見る
ことだと、俺は思う。
0655デフォルトの名無しさん
2005/07/07(木) 01:19:45>>654の言う通り。
ただしKENTはやめておけ。
嫌悪感とかそういうくだらない理由ではなくて、本当に技術向上の妨げになってしまうから初心者には尚更お勧めできない。
ある程度Perlが身についてから反面教師として見るなら良し。
0656デフォルトの名無しさん
2005/07/07(木) 01:21:440657デフォルトの名無しさん
2005/07/07(木) 01:22:17タバコ
0658デフォルトの名無しさん
2005/07/07(木) 01:25:050660デフォルトの名無しさん
2005/07/07(木) 01:36:410661デフォルトの名無しさん
2005/07/07(木) 01:43:22文法が分かるならやりたいことを表現するだけ。
実装方法を分解的に考えて規定の文法で文章化して行くというのがプログラミングだと思うぞ。
>>660
Acme::MorningMusume
http://cpan.uwinnipeg.ca/dist/Acme-MorningMusume
0662デフォルトの名無しさん
2005/07/07(木) 01:48:16> Acme::MorningMusume
何だこれ
テラワロスwww
0663デフォルトの名無しさん
2005/07/07(木) 05:25:340664デフォルトの名無しさん
2005/07/07(木) 05:39:55できるとすればどうやればいいのでしょうか。
0665デフォルトの名無しさん
2005/07/07(木) 06:07:090666661
2005/07/07(木) 07:35:38AcmeでCPAN探すと使えないモジュール一覧出てくるよ。
おまいらも検索しる
ちなみにAcme::MorningMusumeはメンバー分のサブクラスがあるぞ
Acme::MorningMusume::YoshizawaHitomi
http://cpan.uwinnipeg.ca/htdocs/Acme-MorningMusume/Acme/MorningMusume/YoshizawaHitomi.pm.html
0667デフォルトの名無しさん
2005/07/07(木) 11:42:560668デフォルトの名無しさん
2005/07/07(木) 15:13:59これはこれで、Perlのモジュールの規則に則り
真面目にclass化されているので読む価値はある!
…とかいって見る。
0669デフォルトの名無しさん
2005/07/07(木) 15:58:360670デフォルトの名無しさん
2005/07/07(木) 16:00:15Author : KENTARO
ってなってるけどもしかして噂のKENT?
いや奴がOOPを理解してるとは思えない。
0671デフォルトの名無しさん
2005/07/07(木) 18:15:46学校の勉強はできるからテストの点も取れて自分で賢いと思ってるけど
頭の切れが悪くて自分からはなにも生み出せない典型的なアホの図
0672デフォルトの名無しさん
2005/07/07(木) 18:52:170673デフォルトの名無しさん
2005/07/07(木) 21:55:53いや、わりと真面目にそう思った。PerlでOOPはどうやるのがセオリー?って人には
参考になりそう。
0674デフォルトの名無しさん
2005/07/07(木) 22:24:17参考になりそうもないようなモジュールが CPAN にはそんなに多いものなの?
0675デフォルトの名無しさん
2005/07/07(木) 22:47:490676デフォルトの名無しさん
2005/07/08(金) 04:14:271 3
1 9
1 10
2 1
3 1
3 7
3 8
というファイルがあるときに左側を基準として
1が参照しているのは3と9と10
2が参照しているのは1
3が参照しているのは1と7と8
このように表示させるにはどうすればいいでしょうか
0677デフォルトの名無しさん
2005/07/08(金) 04:31:06自分ではどこまでできた?
0678デフォルトの名無しさん
2005/07/08(金) 04:54:40open LIST,"list.txt";
push(@{$hash{(split)[0]}},(split)[1]) while <LIST>;
print "$_が参照しているのは",join('と',@{$hash{$_}}),"\n" for sort keys %hash;
0679デフォルトの名無しさん
2005/07/08(金) 05:15:590680デフォルトの名無しさん
2005/07/08(金) 09:00:51他に込み入った処理が無いのであれば、自分の場合はファイルの行番号で処理させるかな。ソートとか無駄な処理だし。
[link.txt]
0行目:
1行目:3,9,10
2行目:1
3行目:1,7,8
直接行番号から値をもってきて、区切り文字で分割して〜、でダメ?
0681デフォルトの名無しさん
2005/07/08(金) 10:45:47いや、そういうことではなくて、
Acme::MorningMusume はとても読み易いんだよ。
落としてみたかい?
コードだけでなく埋め込みPODやMANIFESTもまるでお手本のよう。
0682デフォルトの名無しさん
2005/07/08(金) 11:05:45これサブクラスだけutf8なんだけど何で?
0683デフォルトの名無しさん
2005/07/08(金) 11:17:48Perlの魅力を叩きつけてくれる者はおらぬか?
0684デフォルトの名無しさん
2005/07/08(金) 11:18:520685デフォルトの名無しさん
2005/07/08(金) 15:55:12syscallの引数にポインタを渡さなきゃならない時とか。
0686デフォルトの名無しさん
2005/07/08(金) 16:54:27-----------------------
#!/usr/bin/perl -w
use Time::HiRes;
use strict;
my $str;
my $time = Time::HiRes::time;
for(my $i=0; $i<99999; $i++){
$str = q{&"'<>\n_test_&"'<>\n};
$str =~ s/&/&/g;
$str =~ s/"/"/g;
$str =~ s/'/'/g;
$str =~ s/</</g;
$str =~ s/>/>/g;
$str =~ s/\n/<br>/g;
# print $str, "\n";
}
printf("%f \n", Time::HiRes::time - $time);
-----------------------
私の環境で大体これで2秒ジャストぐらいです。
「その速さで必要十分じゃないのか」と一瞬 自問してしまいましたが、
なにかスピードアップの方法はありますでしょうか?
0687デフォルトの名無しさん
2005/07/08(金) 17:01:290688デフォルトの名無しさん
2005/07/08(金) 17:09:20..... );
s/[&"'<>\n]/$hash"\1"/;
0689デフォルトの名無しさん
2005/07/08(金) 17:09:56..... );
s/([&"'<>\n])/$hash"\1"/g;
適当に読み変えて、
0690デフォルトの名無しさん
2005/07/08(金) 17:17:31カウントのプログラムをくっつけてみましたが動きません。
返信プログラムも、カウントプログラムもそれぞれ単品だと動きます。
何か根本的に間違っているのでしょうか?教えてください。
ちなみにperl初心者です。
$sendmail="/usr/sbin/sendmail";
$info="/usr/home/ml/info.txt";
while(<>) {
if (/^From: *(.+) */i) {
$to = $1;
if (/<(.+)>/) {
$adrs = $1;
}
elsif (/([a-z0-9\.]+@[a-z0-9\.]+)/i) {
$adrs = $1;
}
else {
exit(1);
}
system("(echo \"To: $to\" ; cat $info) | $sendmail $adrs");
}
}
open(IN,"count.txt");
$count = <IN>;
close(IN);
$count++;
open(OUT,">count.txt");
print OUT $count;
close(OUT);
0691デフォルトの名無しさん
2005/07/08(金) 17:22:17リャマ本読んだようがいいと思うよ。
0692デフォルトの名無しさん
2005/07/08(金) 17:23:35リャマ本・・めっちゃ避けてました。
よみまふ。。
0693デフォルトの名無しさん
2005/07/08(金) 17:27:52%map = ('<' => '<', ...);
$str =~ s/([&\"\'<>\n])/$map{$1}/egos;
などとやってみましたが、6〜7%しか速度向上しませんでした……。
ちなみに変換しない空ループ, オリジナル, 上記でこんなとこ。
noconv: 0.044489
origin: 2.727860
new: 2.533643
new/origin = 92.880244%
0694デフォルトの名無しさん
2005/07/08(金) 17:48:45http://search.cpan.org/~nwclark/perl-5.8.7/lib/Benchmark.pm
色々な長さの $str に対し思いつく限り多様な処理方法を試した
ベンチを取って統計してくれ。その過程が Perl への理解を深める
いい勉強になるし、結果が多くの人の役に立つだろう。
0695デフォルトの名無しさん
2005/07/08(金) 18:40:37tr/&/&/;
s/\n/<br>/go;
などで速くなると聞いているがベンチマークしたことはないな。
0696686
2005/07/08(金) 20:00:10ありがとうございます。
一度配列に入れてやる方法も /go も試してみましたが、ほとんど変わりません。
単純な置換の場合は、なかなか速くする方法というのは無いんですね。
0697デフォルトの名無しさん
2005/07/08(金) 21:00:19初心者がこのまま続けたらものすごくセキュリティ
ホールを作り込みそうなコードだな
0698デフォルトの名無しさん
2005/07/08(金) 21:27:130699デフォルトの名無しさん
2005/07/08(金) 21:34:10print $test[1];
で i が表示されるかと思ったんですが、駄目でした。
perlには i を表示させる手段はないのですか?
0700デフォルトの名無しさん
2005/07/08(金) 21:55:370701デフォルトの名無しさん
2005/07/08(金) 21:57:02PHPやCじゃないんだから、こうやってくれ。
$test = "aiueo";
print +(split//,$test)[1];
または
$test = "aiueo";
print substr $test,1,1;
0702デフォルトの名無しさん
2005/07/08(金) 21:57:06>700 のように split して配列にしてしまうか、substr を使え。
0703デフォルトの名無しさん
2005/07/08(金) 22:17:09レスありがとうございます。スルーされたかと思って四苦八苦してました。
$test = "aiueo";
$result = substr( $test,0,1 );
print " mae:", $test, " ato:", $result;
こうしてたんですが、() も無くせるんですね。勉強になりますた
0704デフォルトの名無しさん
2005/07/08(金) 22:28:20>print +(split//,$test)[1];
のような表記、僕の教科書でみた覚えがありません。
配列を直す裏技みたいな split のやり方も、今知りました・・・
print + の + は戻り値が配列だった場合、スカラー変数に直してくれる
やり方であってますでしょうか?
print (split//,$test)+[1]; とかやってみたけど、
正常に動いてくれます。と・・・ちょっと頭がこんがらがってきました・・・
0705デフォルトの名無しさん
2005/07/08(金) 22:40:410707デフォルトの名無しさん
2005/07/08(金) 22:57:57print ((split//,$test)[1]);
でよさげですかね。いくらググっても出てきませんので諦めますた
0708デフォルトの名無しさん
2005/07/08(金) 23:18:30+は次にくるものが「式である」ということを示す演算子。スカラー/リストは無関係。
スカラー扱いにするのはそのものズバリscalar()。
まぁ、カッコをつければいいわけだが、+のほうが一文字だから入力しやすいだろ?だからだよ。
0709デフォルトの名無しさん
2005/07/08(金) 23:30:03PERLOP(1) の Named Unary Operators の所を熟読すべきだな。
0710デフォルトの名無しさん
2005/07/08(金) 23:32:05そう。
mapの時とか便利っすよ。
0711デフォルトの名無しさん
2005/07/09(土) 00:31:530712デフォルトの名無しさん
2005/07/09(土) 00:47:07http://search.cpan.org/~randym/pod2texinfo-1.0/
man (perldoc) や HTML や plaintext では駄目な理由がよく分からんけど。
0713デフォルトの名無しさん
2005/07/09(土) 01:15:49Emacs の M-x info-lookup-symbol で使えるものが欲しかったんです。でも、
これはフィルターなので、単純に perl 付属の pod を変換すると複数のファイ
ルにわかれちゃいますね。どうしたもんだか。
0714706
2005/07/09(土) 02:14:28printの括弧は一度ハマッた経験があるので注意深くなってた。
そのときの解決方法は print "", (split//,$test)[1]; とか空文字出力してた。
そっか+か。すごいの思いつくなぁ。
0715デフォルトの名無しさん
2005/07/09(土) 04:19:040716デフォルトの名無しさん
2005/07/09(土) 09:23:41その問題を解決するために+という演算子を用意しようと思いつくのは
たしかにすごいかも。
0717デフォルトの名無しさん
2005/07/09(土) 12:17:29左辺値がシンボルを構成する文字列の場合、文字列と解釈するってやつ。
print time,'s';
ってやるとその時のシステム時間と "s" が表示されるけど
print time=>'s';
ってやれば "time" と "s" が表示されるもんね。
0718デフォルトの名無しさん
2005/07/09(土) 12:49:15ba1
これの訳を教えてください
聞く前にいろいろと調べてみなよな。って気持ちでいます。
$perl -e'(print "a",print "b")[0]'
とか、
$perl -e'print "a",print "b"'
とか、
$perl -e'(print "a",print "b", 10,9,8,7,6,5,4,3,2,1,0)'
とかとか。。。
0720デフォルトの名無しさん
2005/07/09(土) 13:27:13shでperl実行。
perl実行時のオプションスイッチは-e。
-e のオプションは、引き数の文字列をPerlスクリプトコードと解釈して実行する。
渡された引き数は、'(print "a",print "b")'。
最初のカッコは優先順を示すためのものであるが、この場合なくてもいい。
一番左のprint の右辺値は、"a",print "b"の結果になる。
この場合、printの右辺値は右辺リストと解釈されるため、printの評価は一番最後となる。
"a"が評価されて"a"がリストの最初の値にある。
次に2番目のprint "b"が評価されるが、これも右辺リストを持っているので先にそれが評価される。
"b"が評価されて"b"がリストの最初の値として、2番目のprintに渡される。
2番目のprintは、"b"を標準出力に出力する。
最後にprintが評価されると出力が成功した場合は1、失敗した場合はヌル文字列を戻値として返すので
1番目のリストの2番目の値が,"1"になる。
1番目のprintは"a"と"1"を受取って標準出力に受取った順番で出力する。
1番目のprintの評価結果は"1"になるが、どこにも渡されていないので捨てられる。
0721デフォルトの名無しさん
2005/07/09(土) 14:24:14こう書いてあれば分かるんでない?
0722デフォルトの名無しさん
2005/07/09(土) 15:29:19サンクスです。
'(print("a"), print("b"))'
こういう風に評価されるものだと思ってました。
>>720分りやすい解説サンクスコ
0723デフォルトの名無しさん
2005/07/09(土) 23:34:12requireとかuseでもベアワードが使えるし。
不要なクォートを入力しなくて良いのは、さすが不精な人向け言語だと思ったよ。
0724デフォルトの名無しさん
2005/07/09(土) 23:49:28Perlで整数を使うと、内部的には何ビットで処理されるのでしょうか?
自分のWindows上の環境では、符号付き64ビットで扱われる(または内部で自動的に拡張される)ようなのですが、
正式な仕様としてはどうなっているんでしょうか?
0725デフォルトの名無しさん
2005/07/09(土) 23:59:05perl -V とするとでてくるよ。
0726デフォルトの名無しさん
2005/07/10(日) 00:05:45http://search.cpan.org/~nwclark/perl-5.8.7/INSTALL
0727デフォルトの名無しさん
2005/07/10(日) 01:14:09ほんとかよ?
>自分のWindows上の環境では、符号付き64ビットで扱われる
どうやって確認したん?
0728デフォルトの名無しさん
2005/07/10(日) 09:47:48ビルド済みPerlの整数の型を知りたいなら
perl "-V:iv.*" で見れる。
0729デフォルトの名無しさん
2005/07/11(月) 07:24:01以下のコードだとBOMがついてくれません。
use Encode;
$data = "123";
Encode::from_to($data, "iso-8859-1", "utf16le");
open(F, "> aaa");
print F $data;
close(F);
どうやってBOMをつければよいのでしょうか?
Win2000+cygwin+perl5,8.6です。
おねがいします。
0730デフォルトの名無しさん
2005/07/11(月) 08:06:350731デフォルトの名無しさん
2005/07/11(月) 08:09:340732デフォルトの名無しさん
2005/07/11(月) 09:03:49ありがとう。できました。
0733デフォルトの名無しさん
2005/07/11(月) 16:04:45配列(@array)の最大の添字は
$#array
で取れますが、これが配列のリファレンス(@$array)の場合はどう記述すればいいでしょうか?
0734デフォルトの名無しさん
2005/07/11(月) 16:05:56>配列のリファレンス(@$array)
すいません、配列のリファレンス($array)でした。
0735デフォルトの名無しさん
2005/07/11(月) 16:10:430736デフォルトの名無しさん
2005/07/11(月) 17:02:24取れました!!ありがとうございます
0737デフォルトの名無しさん
2005/07/11(月) 21:35:53知らなかった・・・
0738デフォルトの名無しさん
2005/07/11(月) 21:45:51> 知らなかった・・・
これは知っていたり知らなかったりするものではない。
思いつくものだ。
0739デフォルトの名無しさん
2005/07/12(火) 01:19:45リファレンスカウンタループを警告してくれれば良いのに。
と思う。
最近全くPerl触ってないから、今の実装知らないんだけどムズイの?
0740デフォルトの名無しさん
2005/07/12(火) 02:09:56>入力「<>」を while(<>) のように使うと、特殊変数 $_ に読み込んだ行が入るようになっています。
某講座サイトからの転載なのですが
open( DAT, "test.dat" );
while ( <DAT> ) {
print $_, "\n"; # ←ここのライン
}
close( DAT );
$_のところで必ずエラーが起こります。
手打ちのミスではありません。
複数の講座サイトから同様の内容のサンプルをコピペしてもエラーになります。
#!C:/perl/bin/perlやprint "Content-type: text/html\n\n";
の打ち忘れでもありません。他の文ならきちんと動きます。
全く原因がわからず本当に困っているのでどなたか回答をお願いします。
Apacheでの出来事です。
0741デフォルトの名無しさん
2005/07/12(火) 02:15:13, は何を意味するの?
0742デフォルトの名無しさん
2005/07/12(火) 02:22:33おそらく
print $_, "\n"; # ←ここのライン
↑の’,’を指しておられるのでしょうが
転載記事なので手を加えない方がよいとおもっただけで
print $_; #
と打ち直してもエラーになるのを確認してます。
0743デフォルトの名無しさん
2005/07/12(火) 02:37:130744デフォルトの名無しさん
2005/07/12(火) 02:51:110745デフォルトの名無しさん
2005/07/12(火) 02:56:53エラーログはこちらです。
0746デフォルトの名無しさん
2005/07/12(火) 03:01:460747デフォルトの名無しさん
2005/07/12(火) 03:10:520748デフォルトの名無しさん
2005/07/12(火) 03:10:55どうもありがとうございました。起動しました。
何時間も検索したり本を読んだりした結果、ごくつまらないミスだったというのは経験済みですが、
何度やってもなれないです。吐き気がしてきた。
0749デフォルトの名無しさん
2005/07/12(火) 03:38:440750デフォルトの名無しさん
2005/07/12(火) 03:40:070751デフォルトの名無しさん
2005/07/12(火) 03:49:170752デフォルトの名無しさん
2005/07/12(火) 04:04:56Unrecognized characterを考えないのはどういう理由なのか説明してほしい。
0753デフォルトの名無しさん
2005/07/12(火) 04:29:450754デフォルトの名無しさん
2005/07/12(火) 04:45:35非常に示唆に富んだ反応に見えるはず。
0755デフォルトの名無しさん
2005/07/12(火) 08:23:49ない場合は、Yとして続行するコードを書こうと思った
んですが、私の知識じゃどうにもならないです。
ヒントを教えてください。
0756デフォルトの名無しさん
2005/07/12(火) 08:45:25たしかそれを調べるモジュールがあるよ。
CPANで調べてみそ。
>>755
$SIG{ALRM}使えば?
0757デフォルトの名無しさん
2005/07/12(火) 09:04:36ありがとうございます。
SIG{ALRM}とevalでできました。イイ!!
0758デフォルトの名無しさん
2005/07/12(火) 09:38:56単にUnrecognized characterという英文字列の並びが何を意味するか
理解できなかっただけだろ。
0759デフォルトの名無しさん
2005/07/12(火) 10:37:24「ごくつまらないミス」は誰でもやってしまうもの。
問題はミスをすることではなくて、>>750のような工夫をおそらくしていないことや
Unrecognized characterというごく簡単な英語も理解できない知能であり
プログラム以前の問題。
0760739
2005/07/12(火) 11:04:28おぉ、サンクス。CPANちょっと見てみた。
Devel-LeakTrace
これかな?
Perl News Letter
ttp://books-support.softbank.co.jp/pn/special05-1.html
によると、Perl5.6以降で、
reference counter loop が起こる事が分かっているなら
Devel-WeakRef なんかも使えそうだけど、全然モジュール更新されてないのね。
以前、Compositeパターン書いた時にこの問題でハマッたので
ずっと気になってた。
0761デフォルトの名無しさん
2005/07/12(火) 12:27:05日本語に変えたら喜ばれる?
0762デフォルトの名無しさん
2005/07/12(火) 12:36:050763デフォルトの名無しさん
2005/07/12(火) 12:39:45おまいさんプログラマには向いてないな。
発生するバグの99%はつまらないミスだぞ。
# if文の真偽を逆にするとか境界条件をしくるとか演算子の優先順位を勘違いするとか。
0764デフォルトの名無しさん
2005/07/12(火) 13:45:47> Unrecognized characterというごく簡単な英語も理解できない知能であり
> プログラム以前の問題。
理解できないし、理解しようともしなかったし、
質問で真っ先に提示しようともしなかった。
この心理っていったいなんなんかを知りたいわけだよ。
0765デフォルトの名無しさん
2005/07/12(火) 14:31:000766デフォルトの名無しさん
2005/07/12(火) 14:43:370767デフォルトの名無しさん
2005/07/12(火) 14:48:43Are you Kusakabe-san?
0768デフォルトの名無しさん
2005/07/12(火) 14:57:29心理も何もない。
ただ考える道筋すらわからないほどの初心者というだけだろ。
そんなもんが流せない君の心理のほうが不思議だよ。
この手が嫌なら質問スレなんかこなきゃいいと思うんだが。
0769デフォルトの名無しさん
2005/07/12(火) 15:03:40>>764-768
0770デフォルトの名無しさん
2005/07/12(火) 15:04:362chに質問なんか書かないだろ、そういう時はフツー
0771デフォルトの名無しさん
2005/07/12(火) 15:06:19知能だけの問題じゃなくて、傲慢、あるいは自己中心性の
結果だと思う。
0772デフォルトの名無しさん
2005/07/12(火) 15:15:39細かいミスなんてのは自分の知識になって今後注意深くなるからいいじゃねーの?
くだらないミスほど、自分の知識となって蓄積されていく。
細かいミスはいっぱいしてるだろうけど、同じミスを繰り返したこたぁ、あまりないだろ。
気づけばくだらない問題だったなんてことは、誰でもいっぱい経験することだよ。
0773デフォルトの名無しさん
2005/07/12(火) 15:21:52>>769
0774デフォルトの名無しさん
2005/07/12(火) 15:29:29> 知能だけの問題じゃなくて、傲慢、あるいは自己中心性の
> 結果だと思う。
はいはい。
たしかにああいう輩は、知的な面で問題があり、自己中心性が強く、
自分と他人の違いが分かってないことが多いね。
でもスレ違いだから、ほか行ってね。
0775デフォルトの名無しさん
2005/07/12(火) 15:30:21Perlについての質問箱 17箱目
Perlについての質問箱 17箱目
Perlについての質問箱 17箱目
Perlについての質問箱 17箱目
0776デフォルトの名無しさん
2005/07/12(火) 17:55:030777デフォルトの名無しさん
2005/07/12(火) 19:20:00my $self;
$self = {
value => $_[0],
length => sub{length $self->{value}},
substr => sub{substr $self->{value}, $_[0], $_[1]},
concat => sub{$self->{value}.join'',@_},
join => sub{join$_[0],$self->{value},@_[1..$#_]},
replace => sub{(my $str = $self->{value})=~s/$_[0]/$_[1]/g;$str},
match => sub{scalar($self->{value}=~/$_[0]/)},
cmp => sub{$self->{value} cmp $_[0]},
index => sub{index $self->{value}, $_[0]},
rindex => sub{rindex $self->{value}, $_[0]},
reverse => sub{reverse $self->{value}},
repeet => sub{$self->{value} x $_[0]},
split => sub{split/$_[0]/,$self->{value}},
exstrac => sub{@{[$self->{value}=~/$_[0]/]}},
};
}
0778デフォルトの名無しさん
2005/07/12(火) 19:23:34$x = String_new("abcdefg");
$y = String_new("cdefg");
$z = $x->{replace}('c.','xyz');
$w = $y->{concat}('xyz');
これはどういう仕組みなのか説明できる方お願いいたします。
0779デフォルトの名無しさん
2005/07/12(火) 19:31:51sub String_new{
my $self;
$self = {
の部分を
sub String_new{
my $self = {
としたり
sub String_new{
return {
としたりすると動かなくなります。
0780デフォルトの名無しさん
2005/07/12(火) 19:51:13> sub String_new{
> my $self = {
>
> としたり
返り値がmyの評価結果になるからな。
> sub String_new{
> return {
意味不明。
0781デフォルトの名無しさん
2005/07/12(火) 20:00:44サブルーチンに文字列を渡すと、ハッシュのリファレンスが得られる。
デリファレンスされたハッシュにキーを渡すと関数が得られる。
その関数に変数を与えると目的の結果が得られる。
0782デフォルトの名無しさん
2005/07/12(火) 20:29:33クラス定義せずに、文字列オブジェクト(ぽいもの)を実装したいだけでしょう。
Cで構造体に関数ポインタ持たせるのと同じ。
別言語と実装を合わせるために作ったんじゃないでしょうか。
クラスじゃないから、String_new() で作った文字列同士の演算はスマートに出来ないよね。
0783777-779
2005/07/12(火) 20:58:04レスありがとうございます。
>>780
> 返り値がmyの評価結果になるからな。
myの評価結果は、myされた変数の代入結果と同じになるじゃないですか。
てことは、後でmyしようがその場でmyしようが関数の戻り値は同じハッシュリファレンスですよね。
>意味不明。
無名のハッシュリファレンスを変数を介在せずに直接戻り値にしているだけです。
>>781
はい、その通りですね。ちょっと説明不足で申し訳ございませんでした。
自分が聞きたかったのは、$xと$yが独立した情報を個別に操作しているように見えるのですが
Perlのどういう仕組みよる振る舞いなのでしょうということです。
>>777-778を実際試していただけると分かると思います。
>>782
なるほど!
ちなみに、"my $self;" と "$self = {"を別けなければならないか分かります?
0784デフォルトの名無しさん
2005/07/12(火) 21:14:47どういう動作をする代物なのかは既に理解しているようなので、
何故my $self = { やreturn {ではダメなのか、だけ。
#わかりやすくするため、簡略化する
my $var;
my $self = 'global self';
{
my $self = sub{ return \$self }
$var = $self;
}
print ${$var->()};
# => レキシカル変数$selfの値、無名サブルーチン"CODE(...)"が印字される
{
my $self = sub{ return \$self }
$var = $self;
}
print ${$var->()};
# => my .. ; の時点では、その変数のスコープは存在しない。
# よって*グローバル変数* $selfの値 "global self"が印字される
{
$var = sub{ return \$self };
}
print ${$var->()};
# 上と同じく、"global self"が印字される
0785783
2005/07/12(火) 21:15:54{
my $self;
$self = sub{ return \$self };
$var = $self;
}
だった。
0786782
2005/07/12(火) 21:28:16ええとだから、780さんが言っている通りです。
sub hoge {
return my $foo = 3;
}
と書けるかどうか。
それと、無名ハッシュリファレンスをそのままreturnしても、
無名ハッシュの中で $self 使ってるから動きません。
無名サブルーチンを定義した際、$selfは各無名サブルーチン内でグローバルスコープを持ちます。
$x, $y が独立した値を扱えるようにする為にも、
String_new() 内では、$selfを毎回新規作成する必要があります。
だから、my $self; してから、$self = { (略) };
こんなんで合ってるかな。
まぁ、あんまり効率的でもないし、あまりオススメもできないコードです。
無名サブルーチン定義時のスコープについてよく分からなければ「黒豹本(Advanced Perl Programming, 日本語名忘れた…)」を読んでください。
0787デフォルトの名無しさん
2005/07/12(火) 21:33:46おまいら偉いわ
0788デフォルトの名無しさん
2005/07/12(火) 21:46:16my $self = {
と書いても問題は無いわけだが、777はもうこの辺理解できたかな。
0789デフォルトの名無しさん
2005/07/12(火) 22:13:37weakrefはいちおう動くよ。
イマイチ使いにくいけど。
0790777-779
2005/07/12(火) 22:28:28うひゃー、みなさんレスありがとうございます。
ちょっと頭を整理しながらみなさんのレスを理解している最中です。
>>784-785,>>786
スコープの問題があるということですね。
>my $self = sub{ return \$self }
だと、左辺がmyされた$selfと、右辺の$selfは変数名が同じでもスコープが違うので
別の変数とみなされるという理解でよろしいですか?
だから
>my $self;
>$self = sub{ return \$self };
こうすると左辺と右辺の$selfが同じスコープになると理解しました。
なので、>>779で
>sub String_new{
>my $self = {
とやると、無名サブルーチンの中で使われている$selfがグローバル変数とみなされるわけですね。
>>788
>>784-786のレスを上記のように解釈すると最後にreturn $self;を付けると大丈夫ということが
理解できなくなりました。もう少し考えてみます。
0791782
2005/07/12(火) 22:30:22>>786
sub hoge { return my $foo = 3; }
て書けるわ。
>>788
無名サブルーチン内に $self 書いてあるから、
my $self = { ... };
return $self;
じゃなくて、一度、ローカルなスコープに入れるためにも
my $self;
$self = { ... };
の順じゃないとマズイという事はない?
>>789
なるほど。
5.8.x からは参照カウンタのリークってフィックスされたとか
なんとかっていう情報をどこかで見たような気がする。
0792デフォルトの名無しさん
2005/07/12(火) 22:55:08いや、駄目だって。
myと同じ場所に書いたら、右辺値を評価してる時の$selfと左辺値を評価する時の$selfが
別の実体を参照しちまう。
{my $a=$a;...} と {my $a;$a=$a;...}が違うのと同じ。
0793デフォルトの名無しさん
2005/07/13(水) 00:34:21my @list = $nc ->alllist();
print @list;
これを実行すると
test::test=HASH(0x89dbd58)test::test=HASH(0x89dbf38)test::test=HASH(0x89deb74)test::test=HASH(0x89dfa08)test::test=HASH(0x89e3528)test::test=HASH(0x89e3690)
実際にはこの値が入っているはずなのですが
ただしい取り出し方がわかりません。
どなたかご教授いただけないでしょうか。
0794793
2005/07/13(水) 00:35:12実際にはこの値ではない値が入っているはずなのですが
の間違いです。すみません。
0795デフォルトの名無しさん
2005/07/13(水) 00:36:04>クラスじゃないから、String_new() で作った文字列同士の演算はスマートに出来ないよね。
こんなん作ってみました。
$x = String("abcdefg");
$y = String($x);
$z = String("");
print $x->{replace}('c.',String('xxxxx')),"\n";
print $y->{concat}("xyz\n");
print $z->{concat}($x,"uvw",$y,"\n");
0796デフォルトの名無しさん
2005/07/13(水) 00:36:32my $class = (caller(0))[3];
my $self;
$self = bless {
length => sub{length $self->{value}},
substr => sub{substr $self->{value}, $_[0], $_[1]},
concat => sub{$self->{value}.join'',map{$self->{string}($_)}@_},
join => sub{join$self->{string}($_[0]),$self->{value},map{$self->{string}($_)}@_[1..$#_]},
replace => sub{(my $str = $self->{value})=~s/${\$self->{string}($_[0])}/${\$self->{string}($_[1])}/g;$str},
match => sub{scalar($self->{value}=~/$\{$self->{string}($_[0])}/)},
cmp => sub{$self->{value} cmp $self->{string}($_[0])},
index => sub{index $self->{value}, $self->{string}($_[0])},
rindex => sub{rindex $self->{value}, $self->{string}($_[0])},
reverse => sub{reverse $self->{value}},
repeet => sub{$self->{value} x $self->{string}($_[0])},
split => sub{split/${\$self->{string}($_[0])}/,$self->{value}},
exstrac => sub{@{[$self->{value}=~/${\$self->{string}($_[0])}/]}},
string => sub{ref $_[0] eq $class ? $_[0]->{value} : ref $_[0] eq '' ? $_[0] : ''},
}, $class;
$self->{value} = $self->{string}($_[0]);
$self;
}
0797デフォルトの名無しさん
2005/07/13(水) 00:38:210798795
2005/07/13(水) 00:48:070799デフォルトの名無しさん
2005/07/13(水) 00:59:18演算子オーバーライドできるし、いちいちハッシュ引かなくても良い。
というか、Perlの文字列をわざわざ文字列オブジェクトにする必要が無い。
普通のスカラー変数で、すでに十分ラッパがかかってる状態なんだから。
どうしても文字列オブジェクトにしたいなら、他言語に行った方が…。
0800795
2005/07/13(水) 01:07:24>>777のコード見て思い付いただけだから。
こんな風に自分で継承構造とか作れるから面白いなと思っただけ。
てか逆にpackageを使わなくてもクラスっぽいものを実装できちゃうPerlの奥深さを認識したわけだが。
sub StringX{
my $class = (caller(0))[3];
my $self;
$self = bless {
%{String($_[0])},
print => sub{print $self->{$_[0]}(@_[1..$#_])},
substr => sub{substr $self->{value}, $_[0]-1, $_[1]},
}, $class;
$self->{value} = $self->{string}($_[0]);
$self;
}
$x = StringX("xyz");
$x->{print}("substr",1,2);
0801デフォルトの名無しさん
2005/07/13(水) 01:53:15print map{%$_}@list;
0802デフォルトの名無しさん
2005/07/13(水) 13:40:35--------------------------
#!/usr/bin/perl
use warnings;
use diagnostics;
use strict;
my $hash;
# $hash = {}; ※ これをしなくて何も言われない。
$$hash{"test"} = "aiueo";
--------------------------
こういった場合でも警告などを出させる方法は無いでしょうか?
(perl v5.8.3)
0803デフォルトの名無しさん
2005/07/13(水) 14:01:48リファレンスの自動生成はPerlの仕様だったと思う
0804デフォルトの名無しさん
2005/07/13(水) 14:27:58値が未定義値のスカラー変数に対するリファレンスの自動生成はPerlの仕様だからエラーや警告はでません。
use strictしているから、間違って$hashに配列リファレンスや文字列を代入してしまえば
ハッシュのデリファレンス構文や間接参照構文(%$hash,$hash->{})でエラーになります。
逆に質問なんですが未定義値のスカラー変数にリファレンスの自動生成が適用されて困る場面ってどんなときでしょう?
0805デフォルトの名無しさん
2005/07/13(水) 16:25:53変数名を取り違えたときはそこでエラーなり警告なり出てくれれば
早いうちに間違いを発見できるかもしれんのでautovivificationが
適用されない方がありがたい。
0806802
2005/07/13(水) 17:02:39有難う御座います。エラーや警告は出ないのですね。
> リファレンスの自動生成が適用されて困る場面ってどんなときでしょう
これは>>805の方と同じ意見ですが、use warnings; や use strict; と同じよう
に、バグを未然に防ぎたくチェックをしたい場合にはあったほうが良いのではな
いかと思います。
リファレンスはよく利用しますから、最初のスカラ変数だけは自動生成のチェックが
あったほうがありがたいですね。
0807804
2005/07/13(水) 17:25:56ありがとうがざいます。
このような場合、バグが見つけにくいわけですね。
use warnings;
use diagnostics;
use strict;
my $str; #文字列を代入したい。
my $hstr; #ハッシュリファレンス
$$str{key} = "value1"; #本当は $$hstr{key}
$$hstr{key} .= "value2"; #"value1value2"としたかった。
print $$hstr{key}; #"value2"しか表示されない。エラーも警告もでない。
0808デフォルトの名無しさん
2005/07/14(木) 00:14:02CPAN探してみそ。
0809デフォルトの名無しさん
2005/07/14(木) 00:30:17my $s;
$s->{foo} = 'bar';
これは、実質的にこう解釈される
my $s;
$s = {};
$s->{foo} = 'bar';
だから、例えばtieで監視しようとしても、$s = {}と区別できない。
0810デフォルトの名無しさん
2005/07/14(木) 01:06:50$s->{foo} の段階で「あ、ハッシュリファレンスですか」となって SvRV に。
無名ハッシュが作られて初期化。
であってる?
PerlのXSとか、5.005以降見てないんで動作も忘れちゃってるけど。
懐かしいなぁ。
0811デフォルトの名無しさん
2005/07/14(木) 10:26:35split関数の事で質問があります。
my $str="auaua\t\t\t\t\t\tsyobo-n";
とある場合に
my @data = split(/\t/,$str);
とやって
$data[0]にauaua
$data[1]にsyobo-n
と入れたいのですが
\tがいくつあるか不定の時はどのように
表記すればよいのでしょうか?
0812デフォルトの名無しさん
2005/07/14(木) 10:29:010813811
2005/07/14(木) 10:56:39こんな素人の質問に答えていただき
ありがとうございますっ
0815804
2005/07/14(木) 11:15:36substrみたいに自分で作成した関数をlvalueにして、代入した内容で振る舞いを返る方法はないでしょうか?
現在実装されているlvalueは、関数の最後に指定した代入可能な変数に代入できるだけですよね。
0816804
2005/07/14(木) 11:22:21関数の引き数で受取ればすむだけというのは分っています。
substrみたいな動きを自分で定義できるか知りたいだけです。
0817デフォルトの名無しさん
2005/07/14(木) 11:25:53lvalue+tieで実質なんでもできる
sub set($) : lvalue{}なんてすると、
set $var = 1; # set($var) = 1
などとして、特定のsetステートメントのときのみ特定の値の代入を認める、
などという構文を拡張できたりする。
0818804
2005/07/14(木) 11:45:44ありがとうがざいます。
ちなみに>>817のコードでは、set関数に1を代入して$varに1が代入されますよね。
代入した値に+1して$varに代入させるようにそのset関数を改良するには
具体的にはどうのように記述したらいいですか?
0819デフォルトの名無しさん
2005/07/14(木) 16:48:24print "$obj->prop";
↑というようなことがしたいのですが…。
0820デフォルトの名無しさん
2005/07/14(木) 16:59:09perlをバックグランドで走らせるにはどうすればいいのですか?
0821デフォルトの名無しさん
2005/07/14(木) 17:15:20関数へのパラメータを渡す際、以下の様に
�@
第1引数を配列
第2引数をスカラ変数
とする場合、呼ばれる関数側で@listの内容を見ると、
"12345678test"といった具合にスカラ変数も代入されてしまいます。
第1引数を配列
第2引数をスカラ変数
といったI/Fは,perlでは不可能なのでしょうか?
以下、サンプル
-------------------------------------------------
sub func(\@\$)
{
( @list , $data ) = @_;
}
$data = "test";
@arr = ("1234" , "5678");
func( @arr , $data );
-------------------------------------------------
0822デフォルトの名無しさん
2005/07/14(木) 18:04:30"@{[$obj->prop]}" または "${\($obj->prop)}"
オレはクックブックで知ったが、その場でリファレンス作って
デリファレンスするというかなり強引な技です。
あらかじめ$obj->propを適当な変数に突っ込んどいた方が
見やすいといわれているがお好みで。
0823デフォルトの名無しさん
2005/07/14(木) 18:10:28配列のリファレンスを受け取るなら可能。
sub func(\@$) {
my($list, $data) = @_;
print "list=@$list\n";
print "data=$data\n";
}
$data = "test";
@arr = ("1234", "5678");
func(@arr, $data);
0824デフォルトの名無しさん
2005/07/14(木) 20:09:41なぜ・・。
0825820
2005/07/14(木) 21:11:420826デフォルトの名無しさん
2005/07/14(木) 21:23:34たぶん、requireでソースを取り込んでいますよね。
以下、BEGINブロックで囲まれていないrequireを想定して説明します。
プロトタイプは、サブルーチンを使用する文がコンパイルされる前に
先行宣言されていなければ有効になりません。
requireは、実行段階で1回だけソースファイルを読み込みますので
プロトタイプ付サブルーチンの定義を別ファイルにすると
サブルーチンを使用する文がコンパイルされる段階では
まだプロトタイプが宣言されていないことになります。
その為、別ファイルで宣言しているfuncのプロトタイプが無効になってしまいます。
それを回避するためには、requireの文をBEGINブロックで囲んでください。
BEGINブロックで囲んだ範囲は、全てがコンパイルされる前に
先行してコンパイル及び実行が行われるので
別ファイルのプロトタイプ宣言が有効になります。
例:
BEGIN{require 'hoge.pl'}
$data = "test";
@arr = ("1234", "5678");
func(@arr, $data);
0827デフォルトの名無しさん
2005/07/14(木) 21:42:140828デフォルトの名無しさん
2005/07/14(木) 21:48:54#!perl -w
package Setter;
sub TIESCALAR{
my($class, $ref) = @_;
bless \$ref, $class;
}
sub FETCH{
my $self = shift;
$$$self;
}
sub STORE{
my($self, $value) = @_;
$$$self = $value;
# あとは煮るなり焼くなり
$$$self += 1;
}
0829デフォルトの名無しさん
2005/07/14(木) 21:49:59package main;
sub set($) : lvalue{
my $var;
tie $var, 'Setter', \$_[0];
$var;
}
set my $i = 10;
print $i, "\n";
__END__
set()の中でのみ$iをtieされた変数にバインドし、set()から戻ると$i自体には何の細工されていない。
とはいえ、値をチェックしたり変更したりしつつ代入したいなら
my $i = plus_one(10); # 10+1を代入
set_and_plus_one(my $i, 10); # $iに10を代入して+1
などとすればいいので、tieとlvalueを使ってわざわざこんなことをする意味は無い。
「こんな構文もできるぜイエイ」つーくらいなものだな。
0830804
2005/07/14(木) 22:03:29ありがとうございます!
まさしく、「こんな構文もできるぜイエイ」ってやりたいだけだったりします。
いやあ、質問する前に>>813にツッコミいれたんで
(>>813の「あう」にときめいた自分が許せなかったんです)
アラシと勘違いされてスルーされたかと一時は思ってしまいました。
本当にありがとうございます。
0831デフォルトの名無しさん
2005/07/14(木) 23:44:13変数に文字列とは限らない値が入っている場合でも
(ex. readでファイルから読んだデータをいくつかくっつけた)
このlengthで入っているデータのバイト数が確実に返されると考えていいのでしょうか。
偶然(?)にマルチバイト文字にあってしまってその文字数を返される可能性があるかもと
心配しています。
0832デフォルトの名無しさん
2005/07/14(木) 23:51:33ユニコード文字列でなければlengthは文字列のバイト数だから
余計な変換レイヤ入れたりしてなければ問題ないはず。
0833831
2005/07/15(金) 00:03:52過剰な心配かもしれませんが、万一、ユニコードにバッチリあってしまっててても
大丈夫な方法ってないんでしょうか?
あれば教えていただけるとうれしいです。
0834デフォルトの名無しさん
2005/07/15(金) 00:12:43use bytes;
# ここに length の処理など
no bytes;
かな。
0835831
2005/07/15(金) 00:18:44まだまだ修行が足りないことを実感しています。
精進せねば。
0836デフォルトの名無しさん
2005/07/15(金) 00:45:16ユニコード文字列っていうのはUTF-8 flagが立った文字列
のことを言っているのだと思いますが、勝手に立つことは
ありません。たまたまutf8として解釈できそうなバイト列で
あっても、decodeなり入力レイヤなりで変換しなければ
ただのバイト列です。
834の言うようにbytesプラグマ下ならそれが何であれ
バイト数返しますが、そもそも外から取り込んだものが
ユニコード文字列になっていたらそれはどこかで変換
された結果なので、その変換で長さが保存されている
ことは期待できません。
この辺ややこしいので気になるのなら
ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
あたり参考にして勉強しましょう。
0837デフォルトの名無しさん
2005/07/15(金) 06:42:54で質問したブロックの使いかたがわかりません。
このスレのだれか教えてください。
0838837
2005/07/15(金) 06:44:42お騒がせしました。
0839デフォルトの名無しさん
2005/07/15(金) 14:36:26perlでファイルハンドルを引数とするにはどうすれば良いのでしょうか?
----------------
main();
sub main{
open(FILE,">$gOutputHtml");
writeFile(FILE);
close(FILE);
}
sub writeFile{
my $filehandle = shift;
print $filehandle "test\n";
}
----------------
以上のようにしたいのですが
# perl test.pl
Bareword "FILE" not allowed while "strict subs" in use at test.pl line 7.
Execution of test.pl aborted due to compilation errors.
とエラーがでてしまいます。
解決方法等 何か情報がありましたら
お教え頂けますとありがたいです。
0840デフォルトの名無しさん
2005/07/15(金) 14:47:08http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
0841デフォルトの名無しさん
2005/07/15(金) 15:33:09use FileHandle;
sub main {
$fh = new FileHanle($gOutputHtml, 'w') or die "Can't open $gOutputHtml ($!)";
writeFile($fh);
$fh->close;
}
sub writeFile {
my $fh = shift;
$fh->print("test\n");
}
0842839
2005/07/15(金) 15:38:54RESありがとうございます。
:
writeFile(*FILE);
:
でやってみました。
どうもですっ
0843デフォルトの名無しさん
2005/07/15(金) 16:47:54いまどきFileHandleなんて勧めるなよ。
IO::Fileにしとけ。
0844デフォルトの名無しさん
2005/07/15(金) 17:02:49main();
sub main{
open my $file,">$gOutputHtml";
writeFile($file);
close $file;
}
sub writeFile{
my $filehandle = shift;
print $filehandle "test\n";
}
0845デフォルトの名無しさん
2005/07/15(金) 18:12:04もう他の方ので解決してますが、
質問の書き方だとエラーの通り bareword に引っかかります。
perlが、関数に渡されたbareword をファイルハンドルと仮定して使用するのは、
内部的にちょっと無理があって、C側で書いててもチョット不安です。
「渡されてきたこれ、文字列にも見えるよなぁ。
まぁ、ファイルハンドルなんだろうけど、良いのか?」という感じ
(perlインタプリタの気持ちを代弁)。
なのでエラーになるんだと思います。
グロブ渡しもアリですが、ちょっと古いし、直接的すぎるかも。
グロブ使うなら、local() を忘れずに。
0846デフォルトの名無しさん
2005/07/15(金) 21:58:29直接変数に入れて平気だから。
0847デフォルトの名無しさん
2005/07/16(土) 00:03:400848デフォルトの名無しさん
2005/07/16(土) 00:32:440849デフォルトの名無しさん
2005/07/16(土) 01:36:39> perlって金になるの?
僕が書いたPerlのプログラムを、見も知らずの人が金にしていたことは
ありました。
0850デフォルトの名無しさん
2005/07/16(土) 02:13:080851デフォルトの名無しさん
2005/07/16(土) 03:09:23給料の一部になってると言えなくもない。
0852デフォルトの名無しさん
2005/07/16(土) 04:39:530853デフォルトの名無しさん
2005/07/16(土) 04:55:270854デフォルトの名無しさん
2005/07/16(土) 05:12:01Webに限ればPHPかJavaしか仕事無いよ。
いやいやPHP覚えたら副産物でOOPとデザパタ覚えてスキルアップしちゃった。
0855デフォルトの名無しさん
2005/07/16(土) 06:10:42pearlなゴハンとか言わないよね…
>>854
そうでもないと思うけど。
0856デフォルトの名無しさん
2005/07/16(土) 06:18:02ちょっとだけ悩んでしまった。
0857デフォルトの名無しさん
2005/07/16(土) 09:45:51まあそれはそれとしてPerlで稼ぐのは問題なしですよ。
10年近くそれで食べてますし、今後も特に不安はないです。
ウェブ系だとmod_perlで動くコードが書けないと問題かもしれませんが。
CGI/Perlをやってた素人に毛が生えた連中はPHPに流れたみたいですけどね。
0858デフォルトの名無しさん
2005/07/16(土) 14:34:13これは何が間違っているんでしょうか?
0859デフォルトの名無しさん
2005/07/16(土) 14:37:520860デフォルトの名無しさん
2005/07/16(土) 14:38:160861デフォルトの名無しさん
2005/07/16(土) 14:45:001==2 ? print"a" : print"b";
これはちゃんと動くんですよね。なんでexitはだめなのか。
0862デフォルトの名無しさん
2005/07/16(土) 14:46:050863デフォルトの名無しさん
2005/07/16(土) 14:54:49($arrayref != undef) ? return $arrayref : exit;
これなら動くんですよね。なんでカッコがないとダメなんでしょうか?
エラーメッセージはこうです。
”Use of "undef" without parentheses is ambiguous”
undef ? というのがいけないみたいですね。なんででしょうか?
0864デフォルトの名無しさん
2005/07/16(土) 15:01:190865デフォルトの名無しさん
2005/07/16(土) 15:04:25何も言えないなら、何も言う気がないなら
何も言わなくていいですよ^^;
0866デフォルトの名無しさん
2005/07/16(土) 15:05:04書いてある通りだ。もし英語が読めないのなら
なぜそのメッセージをExciteテキスト翻訳(http://www.excite.co.jp/world/english/)
などにつっこんでみようと思わないのか。
0867デフォルトの名無しさん
2005/07/16(土) 15:07:45私の言いたいのは、なんで構文解析があいまいな結果になってしまうのか
その原因を分る人に聞いてるわけです。
ところで?は三項演算子以外に何に使われてましたっけ?
0868デフォルトの名無しさん
2005/07/16(土) 15:25:35パターンマッチングの最短一致
0869デフォルトの名無しさん
2005/07/16(土) 15:40:16> 私の言いたいのは、なんで構文解析があいまいな結果になってしまうのか
そんなわけないだろ。演算子の優先順位とか勉強しなおしてこいよ。
0870デフォルトの名無しさん
2005/07/16(土) 15:41:150871デフォルトの名無しさん
2005/07/16(土) 15:43:450872デフォルトの名無しさん
2005/07/16(土) 16:08:00エキサイトにつっこんでみたよww
「Use of "undef" without parentheses is ambiguous」
↓
「括弧のない"undef"の使用はあいまいです。」
だって。文面通り謙虚に受け取ればよかったものを余計な知識が邪魔して
「構文解析があいまいな結果になってしまう」と脳内変換してしまった
に300undef。
0873デフォルトの名無しさん
2005/07/16(土) 16:23:26なるほど、確かにそのとおりです。
カッコとは三項演算子の条件式のことだと思ってました。
undef()こうしろってことですね。なるほど。
引数を取らない他の関数でも同様のメッセージが出ました。
ところで三項演算子の優先順位は低いし、undef ? これがなんで
問題になるんでしょうか?
>>868
正規表現ですか?正規表現はスラッシュで囲ったものだけじゃないんですか?
0874デフォルトの名無しさん
2005/07/16(土) 16:31:55?PATTERN?
0875デフォルトの名無しさん
2005/07/16(土) 16:35:31なるほどこんなのあったんですね。
0876デフォルトの名無しさん
2005/07/16(土) 16:36:480877デフォルトの名無しさん
2005/07/16(土) 17:39:53うむ、その通り。
$arrayref != undef()
の書き方は、undef()により undef値を生成した後、$arrayrefと比較する。
defined $arrayref
は、単に$arrayrefが undef値かどうか調べるだけ。
後者のほうが良い。
0878デフォルトの名無しさん
2005/07/16(土) 17:48:380879デフォルトの名無しさん
2005/07/16(土) 18:03:30$arrayref ? return $arrayref : exit;
で良くない?
しかし、何故いきなり exit() なのかは気になるところ。まぁ良いか。
0880デフォルトの名無しさん
2005/07/16(土) 19:09:30ラリーがPerlコミュニティが「病的にやさしい」というだけはあるね。
なんかぐだぐだ続いてるからテストしてみた。
>>873
>undef ? これがなんで問題になるんでしょうか?
エラーは全部報告しようぜー。そもそも元々のスクリプトで
Warning: Use of "undef" without parentheses is ambiguous at line XXX.
Search pattern not terminated at line XXX.
って怒られると思う。上だけ問題にしてるべ?
前者は
・$arrayrefをundef()と比較
・$arrayrefを(undef EXPR)と比較
のどっちにしたいんだかよく解んね〜ぞと言って警告してる。
下のがundef ? に対する回答だ。
・よくわからんとか文句垂れながらもパーサはコンテキストからundef(EXPR)に打ってでた。
・だもんで?以降をundefの引数と判断して解析しようとした。
・?なんちゃらだからマッチングだろうな。
・あれ??PATTERN?が閉じてないぞ
・んじゃエラーだな
って流れかと。
俺はperlの実装をCのコードレベルで見てはいないがエラーメッセージからは
そう読みとれる。(違ったらツッコんでエロい人)
0881880
2005/07/16(土) 19:11:34テストコードと結果ね。
$ cat test.pl
use strict;
test();
exit;
sub test{
my $a = \(1,2,3);
# undef $a;
$a != undef ? return $arrayref : exit;
}
$ perl test.pl
Warning: Use of "undef" without parentheses is ambiguous at test.pl line 9.
Search pattern not terminated at test.pl line 9.
0882デフォルトの名無しさん
2005/07/16(土) 19:31:08多分、それで合ってる。
別にCで読まなくても良いよ。昔、追ってみたけど頭おかしくなりそうだった。
読んだ感想は「これ書いたりメンテしてる奴らは尋常じゃねぇ」。
なんというかカオス。
その後、rubyの中身読んで「助かった」と思った。
まぁ、perlの場合は逐次実行がコードを難しくしてるんだろうけど。
0883デフォルトの名無しさん
2005/07/16(土) 19:56:43クラスの色んな属性を順番に取り出していく方法ってどうやるんでしょうか?
ハッシュにforeach関数を使う時みたいな感じです。
よろしくお願いします。
0884デフォルトの名無しさん
2005/07/16(土) 20:44:27> クラスの色んな属性を順番に取り出していく方法ってどうやるんでしょうか?
属性を入れているハッシュにforeachを(関数じゃないぞ)使えばいいです。
0885デフォルトの名無しさん
2005/07/16(土) 20:55:39ありがとうございます。
具体的にどう書けばいいんでしょうか?
すみません;;
0886デフォルトの名無しさん
2005/07/16(土) 21:00:120887デフォルトの名無しさん
2005/07/16(土) 21:08:28Perl のクラスはそのオブジェクトの属性をどのように実装するかまでは
言語レベルで取り決めていない。よってオブジェクトの全属性を順番に
読み出す一般的な方法は無い。
とは言え、多くの場合はハッシュリファレンスとして実装されているので、
この辺全部読め。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlref.html
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlobj.html
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perllol.html
0888デフォルトの名無しさん
2005/07/16(土) 21:25:09887の言うように、まずはチュートリアルも読みましょう。
# $obj にオブジェクトが入っているとすれば、
use Data::Dumper;
print Dumper($obj);
ハッシュリファレンスと分っているなら、Data::Dumper使わずにハッシュの時と同様に書いても良い。
while (my($attr, $val) = %$obj) {
print $attr, " => ", $val, "\n";
}
5.005なのね('・c_・` )
0890デフォルトの名無しさん
2005/07/16(土) 21:41:26逝ってきます。。
0891デフォルトの名無しさん
2005/07/17(日) 00:31:29ここで紹介されてる解決策も
バージョンによって動いたり警告でたりエラーになったりするはず。
妥当な所って5.6くらい?
それとも5.8系まで行って良いのかな
仕事でperl使う場合には入ってるのが5.005だったりするだろうし
(安定動作してる、ちょっと古い鯖のプログラム修整・追加とか)。
0892デフォルトの名無しさん
2005/07/17(日) 00:56:05都合でそれ以外の場合は最初に明記ってのが無難じゃないかな?
0893デフォルトの名無しさん
2005/07/17(日) 07:34:09なにこの流れ
式全体が値を返す場合以外は三項演算子を使うべきじゃないだろ
ifを使えよ…
0894デフォルトの名無しさん
2005/07/17(日) 08:40:58>使うべきじゃないだろ
ソス-キボンヌ
0895デフォルトの名無しさん
2005/07/17(日) 09:06:15>使うべきじゃないだろ
Perlで三項演算子を制御構造として使うのは、人の好きずきだからみんなあえてスルーしてるんだよ。
&&(論理積演算子)や ||(論理和演算子) を制御構造に使ったりするでしょ。
ただ、undef(名前付単行演算子)や !=(比較演算子)の使い方については、ツッコミどころ満載なので
みんな一言いいたいんだけど、順を追って説明すると>>880-881みたいになっちゃうから
そんなの面倒なのでだれかが返答したら不足分をフォローしちゃえばいいかと思っていたのかと。
んで、新しい質問もないことなので、ここを覗いている人が一言づつ小出しに突っ込み&フォローをして
>>858-881の流れになったのだと思う。
結局、>>880でまとめが入って、>>883で新しい質問が来たので流れ終了。
てか、自分も流れに参加したかった。 ちっ!
0896デフォルトの名無しさん
2005/07/17(日) 12:40:10これを使うにはまず
> perl Configure.pl
を実行する必要がある、みたいなことが書いているようですが
必要でしょうか?
これを実行するためにperl.exeを実行するために
今cygwinをフルインストールしているところです。
それとも、もっと簡単な方法でPerl6を試すことができるでしょうか?
0897896
2005/07/17(日) 13:48:22早速、Parrotがインストールされているディレクトリで以下を実行してみました。
C:\usr\local\apps\perl\6-parrot\parrot-0.2.2>C:\usr\local\cygwin\bin\perl Config
ure.pl
Parrot Version 0.2.2 Configure 2.0
Copyright (C) 2001-2005 The Perl Foundation. All Rights Reserved.
Hello, I'm Configure. My job is to poke and prod your system to figure out
how to build Parrot. The process is completely automated, unless you passed in
the `--ask' flag on the command line, in which case it'll prompt you for a few
pieces of info.
Since you're running this script, you obviously have Perl 5--I'll be pulling
some defaults from its configuration.
Checking MANIFEST.....................................................done.
Setting up Configure's data structures................................done.
Tweaking settings for miniparrot......................................done.
Loading platform and local hints files................................done.
Determining nongenerated header files.................................done.
Determining what C compiler and linker to use.........................done.
Determining if your C compiler is actually gcc......C compiler failed (see test.
cco) at lib/Parrot/Configure/Step.pm line 346
Parrot::Configure::Step::cc_build() called at config/auto/gcc.pl line 30
Configure::Step::runstep('undef', 'undef') called at lib/Parrot/Configur
e/RunSteps.pm line 121
Parrot::Configure::RunSteps::runsteps('Parrot::Configure::RunSteps', 'de
bugging', 1) called at Configure.pl line 397
ところが、Cコンパイラエラー? ? ? CPANから該当する何かをダウンロードしてからでないといけないという意味でしょうか・・・・。
0898デフォルトの名無しさん
2005/07/17(日) 14:09:11Perl6はまだリリースされていませんよ?
0899デフォルトの名無しさん
2005/07/17(日) 14:44:24試すことができると思いまして
どんなものか実際に動かしてみたいんです。
0900デフォルトの名無しさん
2005/07/17(日) 15:39:290901デフォルトの名無しさん
2005/07/17(日) 23:02:530902デフォルトの名無しさん
2005/07/17(日) 23:49:25strict以外に何かありますか?
0903デフォルトの名無しさん
2005/07/18(月) 00:37:19warnings
0904デフォルトの名無しさん
2005/07/18(月) 05:52:49って打つと、コマンドプロンプトで実行すると一瞬で文字が表示されるけど
これをゆっくりなめらかに表示させる方法ないですかね?
0905デフォルトの名無しさん
2005/07/18(月) 05:57:58> って打つと、コマンドプロンプトで実行すると一瞬で文字が表示されるけど
> これをゆっくりなめらかに表示させる方法ないですかね?
1文字ごとにwait入れろよ。
0906デフォルトの名無しさん
2005/07/18(月) 06:45:05$|=1; も必要だ、と書いてやれよ。
0907デフォルトの名無しさん
2005/07/18(月) 07:17:290908デフォルトの名無しさん
2005/07/18(月) 07:28:05あります。
0909デフォルトの名無しさん
2005/07/18(月) 14:26:19それ以前にwait()は用途が違うわけだが。
>>904
sub print_slow{
local $| = 1;
local $\ = "";
local $_;
foreach (@_){
foreach (split ''){
select undef, undef, undef, 0.1;
print;
}
}
}
print_slow 'abcdefghijklmnopqrstuvwxyz', "\n";
0910デフォルトの名無しさん
2005/07/18(月) 15:16:06Class::DBI を利用する場合、皆さんはどうされてますかい?
私はいつもIma::DBI経由で直接 select文を叩いているので、
何か他にいい方法あるのかなと・・・。(´・ω・`)
0911デフォルトの名無しさん
2005/07/18(月) 15:19:43ω ←これやめれ
0912デフォルトの名無しさん
2005/07/18(月) 16:45:52あまりに遅すぎる。
Filter::Simpleでプリプロセスかましてるからしょうがないか。
複数行コメント「/*〜*/」が使えるようになるAcme::Comment
というモジュールも同じ理由で激遅で使いものにならなかった。
ちなみに上の方で話題になったAcme::MorningMusumeと同じ
カテゴリなのが笑った。>Acme::Comment
0913デフォルトの名無しさん
2005/07/18(月) 16:56:01INNER JOINでは使ったことはないが単なるテーブルの要素だけ
じゃないものを返すSELECTのときはClass::DBI::Viewが使える
かも?
0914デフォルトの名無しさん
2005/07/18(月) 16:57:34誰か分かりやすい解説キボンヌ!
0915デフォルトの名無しさん
2005/07/18(月) 17:00:12あざーっす!
じゃあ、strictとwarningsを記述するくせをつければ
とりあえずOKってことでよろしいですね?
0916デフォルトの名無しさん
2005/07/18(月) 17:01:24build-hplooであらかじめ変換しといても遅い?
変換が遅いのか変換されたコードが遅いのか
どっちなんだろ。
0917デフォルトの名無しさん
2005/07/18(月) 17:06:36例外的なのを除けばExporterモジュールを使ってることが多いので、よく理解して
おくべし。ただし何をexportしてるかはモジュールごとに当然違うし、Exporterを
使わず勝手なことをやってるものもよくあるので、結局はモジュール毎に
ドキュメントなりなんなり読むしかないだろうな。
0918910
2005/07/18(月) 18:17:12Class::DBI::View ですか、、1回調べてみます。
どうもありがとう!
0919デフォルトの名無しさん
2005/07/18(月) 18:58:02build-hplooって予めソースをコンバートしておくものですよね。
それだと多分速度は低下は無いんでしょうが、俺の場合は
「use Class::HPLOO」って記述しただけで体感で2〜3倍の時間が
かかりました。
なので実用的じゃないかなとあきらめました。(残念!)
0920デフォルトの名無しさん
2005/07/18(月) 19:56:34http://cpan.uwinnipeg.ca/search?query=date&mode=dist
いっぱいありすぎてわからん。どれかお勧めある?
0921デフォルトの名無しさん
2005/07/18(月) 21:47:42モジュールの名前みて自分の用途に合ったものを選びましょう。
まぁ、最終手段は qx(date)
0922デフォルトの名無しさん
2005/07/18(月) 22:21:03Can't use string ("1") as a HASH ref while "strict refs"(以下略
ところがこのエラーの原因がなんなのか皆目検討もつきません。このエラーが
でている箇所の前後のコードを晒します。
my %data = ();
#ファイル名を取得
foreach(0..length(scalar(@diff))-1){
my $index = $_;
if(@diff[$_] =~ /^Index:\s(.*)$/){
my $name = $1;
$data{$name} = 1; ←エラーが出た行。
$data{$name}{start} = $index;
このようなエラーがでた場合のありうる原因ってなにか心当たりのある
方おられましたらお教えください。よろしくお願いします。
0923デフォルトの名無しさん
2005/07/18(月) 22:25:55エラーが出たのはその下の行。
$data{$name}{start} = $index;
$data{$name}は"1"なのにハッシュリファレンスとして使ってますよ!ってエラーだよ。
0924デフォルトの名無しさん
2005/07/18(月) 22:36:37エラー吐いててその意味が分からない場合は、
エラーメッセージの特徴的な部分をググると良いよ。
>>922
で言うと
[as a HASH ref while "strict refs"]
の部分とか。
でなければ perldiag マニュアルページを参照。
ttp://www.att.or.jp/perl/man/perldiag.1.html
0925デフォルトの名無しさん
2005/07/18(月) 22:44:48%dataの$nameに該当する値を1に設定するつもりで書いたのですが、
結果的にそういうコードにはなっていないんですかね。
0926デフォルトの名無しさん
2005/07/18(月) 22:56:04だから923さんが言っているように、その次の行がエラーになってます。
$data{$name} = 1; # この行はOK。
$data{$name}{start} = $index; # この行がエラー。
下の行は、
1{start} = $index;
とやっているのと同じになります。"1"はハッシュではないので、
Can't use string ("1") as a HASH ref while "strict refs"
のエラーが出ます。
他の部分にも突っ込み所がたくさんあります。
エラーを吐いているかだけでなく、
プログラムが意図した通りに動作しているかをチェックしましょう。
まずは自分のコードを、エラーメッセージと照らし合わせて読み直すことです。
0927デフォルトの名無しさん
2005/07/18(月) 23:05:250928デフォルトの名無しさん
2005/07/18(月) 23:08:342週間後にまたどうぞ。
0929デフォルトの名無しさん
2005/07/18(月) 23:09:39がんばりましょう。
0930デフォルトの名無しさん
2005/07/18(月) 23:10:50つ『プログラミングPerl』
0932927
2005/07/18(月) 23:19:43$hoge{foo} = aaa;
$hoge{foo}{bar} = bbb;
みたいなコードが書けないなんて。
こうしたいときだけno strict 'refs'でもするしかないのかな・・・
0933デフォルトの名無しさん
2005/07/18(月) 23:22:060934デフォルトの名無しさん
2005/07/18(月) 23:24:23六十の手習いの類?
0935デフォルトの名無しさん
2005/07/18(月) 23:25:51何がしたいのかさっぱりわからないのだが。
文章でなにがしたいのか書いてみ?
0936927
2005/07/18(月) 23:33:24{foo}{bar}ってのは多次元ハッシュのつもりです。
最初にみたperlのコードにはこんな感じでがりがりデータぶち込んで
あって、へーこんなんできるんだって思って関心したもんですけどw
0937デフォルトの名無しさん
2005/07/18(月) 23:38:160939デフォルトの名無しさん
2005/07/18(月) 23:43:48それはな。俺の記憶が確かならば古い技でなんとかできる。
いつまで互換性があるのかとか、もうPerl追ってないから分からないが。
my %hash;
$hash{"aaa"} = 1;
$hash{"aaa", "bbb"} = 2; # <-- (*)
こんな感じで書くと多分意図したものになる。
(*) 印つけた下の行は、多次元のkeyを与えているように見える。
実際には、与えたkeyの文字列を(確か)ヌル文字で連結したものをkeyとして使う。
ので、keyが普通の文字列である限りはこれで動くはず。
多次元キーのエミュレーション。
0941デフォルトの名無しさん
2005/07/18(月) 23:51:26多次元って
@hoge = (
['a', 'b'];
['c', 'd'];
);
みたいなのなかった?
0943938
2005/07/18(月) 23:58:48でも同義ならこっちが便利だなーとおもってつかってましたよ。
要は同じだとおもってたものがまったく別物だったということで、、、
0944デフォルトの名無しさん
2005/07/19(火) 00:03:06あー、きっと1はダミーなんだよ。
$data{$name} = {};
ってしたいんだよ、たぶん。
当たったら俺エスパー?
0946デフォルトの名無しさん
2005/07/19(火) 00:18:32俺が代わりにエスパー認定してやろう。
ただそれだと、
>>932
$hoge{foo} = aaa;
$hoge{foo}{bar} = bbb;
これはできないぞ。
0947デフォルトの名無しさん
2005/07/19(火) 00:19:480949デフォルトの名無しさん
2005/07/19(火) 00:22:440950デフォルトの名無しさん
2005/07/19(火) 00:26:53use strict でない場合
$hash{aaa} = 1;
$hash{aaa}{bbb} = 2;
1行目:%hash の キー'aaa'に値 1 が代入される。
2行目:$hash{aaa}には'1'が代入されているのでシンボリックリファレンと解釈され
%{'1'}というグローバル変数が生成され キー 'bbb' に 2 が代入される。
$hash{'aaa'} に代入されているものは '1'。
${'1'}{'bbb'} に代入されているものは '2'。
$hash{'aaa'}{'bbb'} はシンボリックリファレンスによる${'1'}{'bbb'} の参照。
よって、以下の場合
$hoge{foo} = aaa;
$hoge{foo}{bar} = bbb;
$hoge{'foo'} に代入されているものは 'aaa'。
$aaa{'bar'} に代入されているものは 'bbb'。
$hoge{'foo'}{'bar'} はシンボリックリファレンスによる$aaa{'bar'} の参照。
0951939
2005/07/19(火) 00:32:36>>932
みたいのが本当にやりたければ、
$hoge{"foo"} = "aaa";
$hoge{"foo", "bar"} = "bbb";
でどうぞ。
良いかどうかは別として、キーの連結コストぐらいしか食わない平坦なハッシュなのでお手軽です。
最近見ないけど昔(リファレンス導入前?)は強力だった。
0952デフォルトの名無しさん
2005/07/19(火) 00:52:03メモリも少なくてすむし、早い。
0953デフォルトの名無しさん
2005/07/19(火) 01:00:15今、うんざりするくらい時間がかかるscriptを毎日回してるんで。
0954デフォルトの名無しさん
2005/07/19(火) 01:44:24"\0"で連結するとkeysをsplitし易いんで便利だったり。(cgi-lib.plが似たようなことやってる)
"\t"とか","で連結しとくとシリアライズしてファイルに落とし込むとき楽だったり。
今はメモリもマシンパワーもperl4のころに比べて桁が違うんで
普通に
$hoge{'foo'}->{'bar'}とか
$hoge->{'foo'}->{'bar'}とかやるがな。
perlのリスト、ハッシュ、リファレンスの考え方はエレガント。
(慣れないと糞仕様にしか見えないんだがね)
$hoge{'foo'}{'bar'}ってのはCから来た人がそのほうが解りやすそうだ、
perl糞、と考えてハマりやすい罠。俺がそうだったorz…
0955デフォルトの名無しさん
2005/07/19(火) 02:13:29perl 5.8.0にてモジュールNET::POP3を使い、メールサーバからメールを受信し、受信したメールを
JISからEUCに変換してCSVファイルを作成する処理があるのですが、
携帯から空という文字をうって、サーバに送信してperlで受信すると
文字化けしてしまいます。色々試して、たいていの漢字のメールは正しくCSV化されていました。
しかしたまに、このような文字化けします。
受信したメールをPERLプロフラムを通す前に見てみると、JISコードで空の3675というコードがちゃんとはいって
いました。原因がさっぱりわからないのですが、分かる方教えて下さい。
0956デフォルトの名無しさん
2005/07/19(火) 02:15:410957デフォルトの名無しさん
2005/07/19(火) 03:27:10君の日本語が問題。
0958デフォルトの名無しさん
2005/07/19(火) 13:10:52単純に考えれば変換のモジュール・ライブラリがクソじゃないのか?
まず、JISの「空」をEUCに文字化けさせずに変換するプログラムを作ってみれ。
0959デフォルトの名無しさん
2005/07/19(火) 13:40:22レスサンクス
変換モジュールは
jcode.plで最新のを使っています。最初はそれが悪いと思って疑ったのですが、
その変換モジュールを通す前に、すでにJISコードがおかしくなっていました。。
POP3モジュールで受信した時点ですでに文字化けです。。
0960デフォルトの名無しさん
2005/07/19(火) 13:41:530961デフォルトの名無しさん
2005/07/19(火) 14:53:10use varsとどう使い分けるの?
0962デフォルトの名無しさん
2005/07/19(火) 15:35:58vars は obsolete なので our 使っとけ
0963デフォルトの名無しさん
2005/07/19(火) 16:53:18-hoge-fugafuga-
という文字列を
if(/-.*-fugafuga-/){
}で見つけた後hogeという文字列を取得したいのですがどうすればよいのでしょうか?
$1ぐらいに入っていたような気がするのですが、、、
何か情報をお持ちな方はお教え頂けますと幸いです。
0964デフォルトの名無しさん
2005/07/19(火) 16:55:420965デフォルトの名無しさん
2005/07/19(火) 17:40:14Perlで書き込みランキングを作成しています。
ハッシュを使ってソートして一番書き込み数が多い人から順に
20位まで表示させたいのですが、書き込み数が同じ人は同じ順位にしたいのです。
例えば、
1位 Aさん 5pt
1位 Bさん 5pt
3位 Cさん 3pt
といった感じです。
さんざんしらべたんですが、どういったキーワードで
調べたらいいのかすらわからず困り果てています。
アドバイス宜しくお願いします。
0966デフォルトの名無しさん
2005/07/19(火) 17:41:15すいません。
0967デフォルトの名無しさん
2005/07/19(火) 18:01:56力技で、ソートされたリストをループさせながら順位の変数を変えていくのでいいんじゃないかな。
ポイントが直前と同じなら順位も直前のままにして、
ポイントが変わったならば順位=リストのインデックス+1にする、という感じ。
0968963
2005/07/19(火) 18:04:15おおっ 解決しました。
ありがとうございます。
0969デフォルトの名無しさん
2005/07/19(火) 20:36:17探すよりも考えましょう。
my %data = ('A' => 5, 'B' => 5, 'C' => 3); # (名前 => ポイント)のデータ
my $rank = 1; # 順位
my $last_pt = 0; # 直前のポイント
# %dataのvalue(書き込み数)で降順ソートしてforeachで回す
foreach my $name (sort { $data{$b} <=> $data{$a}} keys %data) {
my $pt = $data{$name}; # 今回のポイントへのショートカット
$rank++ if ($last_pt > $pt); # 順位の更新
print $rank, "\t", $name, "\t", $pt, "\n"; # ランキング表示
$last_pt = $pt; # 直前のポイント更新
}
0970デフォルトの名無しさん
2005/07/19(火) 22:09:46すごく助かります!!!
ありがとうございます。
>>967
直前との比較方法がいまいちわからないんです。。。
>>969
すごっ!!!かしこいですね!!!
うわ感動しました。
あ〜まだまだですね、本当にありがとうございます!
早速試してみます!!!!
0971デフォルトの名無しさん
2005/07/19(火) 22:20:20今試して見たら、完璧でした!!!!
感動です!!!
本当にありがとうございました。
0972デフォルトの名無しさん
2005/07/19(火) 23:48:06Perlでフォーマット機能を使って文字を整形してるのですが、
これってMSゴシックなどの等幅フォント等などでしか綺麗に表示されませんよね?
MSPゴシックなどのプロモーションフォントで綺麗に(揃えて)出力したいのですが、
何か方法をご存じでしたらご教授して頂けると幸いです。
0973デフォルトの名無しさん
2005/07/20(水) 00:55:49無理。例えば
\11,111,111
\88,888,888
なんかは頭と尻の双方を揃えられない。
それがプロポーショナル。
頭や尻を揃えるだけなら、HTMLとかTeXでどうにか。
0974972
2005/07/20(水) 01:04:36返信ありがとうございます。すいません。片方だけです。
順位 コード 銘柄名 現在値 前日比 前日比率 レス
1 5237 (株)ノザワ 461 +85 +22.61% >347
2 6811 (株)クオンツ 248 +35 +16.43% >370
3 4841 ダブルクリック(株) 92,500 +10,000 +12.12% >519
今Perlでフォーマット機能を使いこんなのを出力してるんですが(等幅フォントで見ると何をしたいのか分かりやすいと思います。)、
これをプロモーションフォントの時に等幅フォントで見えるように出力したいんです。それも、プレーンテキストで(2chへの書き込みに使用するので)。
色々と試してはみたのですが、万策尽きてしまったので質問させて頂いた次第です。。orz
0975デフォルトの名無しさん
2005/07/20(水) 01:20:260976デフォルトの名無しさん
2005/07/20(水) 01:24:54そか、2chのカキコに使うんじゃHTMLもTeXも使えん罠。
いっ半角全角変換してしまうのが近道かも試練。多少読みにくいが。
MS Pゴシックは全角文字の幅は一定だからね。
0977デフォルトの名無しさん
2005/07/20(水) 01:30:352chでの表示に特化していいんであれば、内部にMSPゴシック12pt文字毎の幅を
テーブルで持っときゃなんとかなるな。
AAサロンの練習スレに参考になるツールがあるよ。
0978デフォルトの名無しさん
2005/07/20(水) 04:15:210979デフォルトの名無しさん
2005/07/20(水) 05:16:21http://pc8.2ch.net/test/read.cgi/tech/1121804136/
0980デフォルトの名無しさん
2005/07/20(水) 05:23:5411 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 http://pc8.2ch.net/test/read.cgi/tech/1117870308/
0981デフォルトの名無しさん
2005/07/20(水) 05:25:250982デフォルトの名無しさん
2005/07/20(水) 12:24:32ネットや本で調べた限りでは見つからないのですが。
もし存在しない場合、どのような手法で実現すればよいか分かりません。
ヒント、アドバイスでも結構ですのでご教授下さい。
0983デフォルトの名無しさん
2005/07/20(水) 13:01:20http://search.cpan.org/~kwilliams/PathTools-3.09/lib/File/Spec.pm
use File::Spec;
my $abs_path = File::Spec->rel2abs($rel_path);
0984デフォルトの名無しさん
2005/07/20(水) 15:05:020985デフォルトの名無しさん
2005/07/20(水) 18:54:01>jcode.plで最新の
十分古い。Jcode.pm使え。
それでわかんなかったらもっかい来い。
http://openlab.ring.gr.jp/Jcode/index-j.html
0986デフォルトの名無しさん
2005/07/20(水) 19:31:33いやいや、Jcode.pm すらもう過去の遺物なわけだが。
http://digit.que.ne.jp/work/index.cgi?Encode
0987デフォルトの名無しさん
2005/07/20(水) 19:49:070988デフォルトの名無しさん
2005/07/20(水) 20:00:10分かってて言ってるのが分からない?
それともそっちの情報古い?
Jcode2.0からJcodeはEncodeへの移行をスムーズにするモジュールになった。
>>959のようにメールの内容を加工するには
MIME::Base64も使うことになるので最適モジュールはEncodeでもjcode.plでもなくJcode.pm
0989デフォルトの名無しさん
2005/07/20(水) 20:50:19そんな嫌味ったらしい言い方するなよ
0990デフォルトの名無しさん
2005/07/20(水) 20:57:49Encode でも一応こういう事ができるけどな。
http://search.cpan.org/~dankogai/Encode-2.10/lib/Encode/MIME/Header.pm
Jcode は↑や MIME::Base64 のラッパーでもある。
わざわざ非標準のラッパーモジュールを生き残らせ続けて Encode を
直接扱う機会を奪うのは、「移行をスムーズに」どころか阻害してるだけ
に思える。まぁそういうもののニーズが高いのは Encode / encoding の
インターフェイスや機能がそれだけ不便だという証左だけどな。
0991デフォルトの名無しさん
2005/07/20(水) 21:27:140992デフォルトの名無しさん
2005/07/20(水) 22:01:56実際、俺の借りてる鯖も5.005だし。
0993デフォルトの名無しさん
2005/07/20(水) 22:27:24それを一度だけrequireして使いたいのですが、
useの有効期限がファイルの終わりまでなので、
requireする側のファイルでは無効になってしまいます。
ファイル間を越えてグローバルに定数を扱うにはどうしたら
良いでしょうか?識者のご意見をお聞かせください!
0994デフォルトの名無しさん
2005/07/20(水) 22:56:32ちょっと手元で試せる環境にないけど、Expoterモジュール使って全部持ち込むことになるんじゃないのか?
>>990
EncodeでもそのままMIME使えるのか。それは知らんかった。
でも結局EncodeはPerl5.8.1以上を要求するので>>992の指摘通り、
Jcodeが今のところの堅い選択。
てか>>955は5.8.0でjcode.plだと書いてるので
Encodeは挙げず、かつ以降の簡単なJcodeを勧めた。
0995デフォルトの名無しさん
2005/07/20(水) 23:47:48コード決めうちで変換するのには使える感じではあるのだが。
0996デフォルトの名無しさん
2005/07/21(木) 04:02:170997デフォルトの名無しさん
2005/07/21(木) 04:02:340998デフォルトの名無しさん
2005/07/21(木) 08:37:54その鯖皿仕上げれ。ヘタレ管理者皿仕上げれ。
0999デフォルトの名無しさん
2005/07/21(木) 08:38:451000デフォルトの名無しさん
2005/07/21(木) 09:00:0310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。