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

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

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

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

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

http://www.perl.org/get.html
● 2005/03/17現在の最新版: 5.8.7
● 2005/03/17現在の開発版: 5.9.2
0002デフォルトの名無しさん2005/06/04(土) 16:33:04
● 過去ログ

1 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
0003デフォルトの名無しさん2005/06/04(土) 16:33:32
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
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:00
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: 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:00

Perl信者がキリスト教徒みたいに必死に宣伝しマンセーするので、非常に迷惑しています。



早く死んで欲しいですね。

0007 ◆TWARamEjuA NGNG
>>6
どいつもこいつもほっときゃいずれ死ぬよん♪
漏れもなー
0008デフォルトの名無しさん2005/06/05(日) 13:06:51
>>7
ああ、「早」という漢字が読めなかったんですね ;-)
0009デフォルトの名無しさん2005/06/05(日) 14:52:37
乙
0010デフォルトの名無しさん2005/06/05(日) 16:04:55
枯
0011デフォルトの名無しさん2005/06/06(月) 00:40:03
http://bulknews.net/lib/doc-ja/etoys.ja.html
で、Error.pmの弊害、以下のようなクロージャがメモリリークを起こすと書いてありました。

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

よーわからんのですが、myを指定してもクロージャブロックは勝手に変数のコピーを持ちつづけるからってことでしょうか?
そしてそれを回避するには?クロージャの中でundefしたら後でクロージャを実行できなくなるだろうし、わからん。
0012デフォルトの名無しさん2005/06/06(月) 01:18:22
>>11
私も良くわからない。

for (;;) {
my $foo;
$subref1 = sub {
$subref2 = sub {
$foo++;
};
}
}

みたいにしてみたがいくら待ってもperlのプロセス太らなかった。
こういう意味ではないのだろうか?

0013デフォルトの名無しさん2005/06/06(月) 04:31:03
mod_perl上ではリークするって事じゃね?
0014デフォルトの名無しさん2005/06/06(月) 15:28:30
だれがリークしやがったんだ!ちくしょう!
0015デフォルトの名無しさん2005/06/06(月) 17:21:09
そんなことするのはきっと mod_env の野郎に違いない!
0016デフォルトの名無しさん2005/06/06(月) 19:05:50
use strict 下で、サブルーチン foo() に参照渡しされた配列に、別名 x を与えて、
(いちいち ${$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
mkdir -p 相当 (必要に応じて途中のディレクトリを作成する) を
やってくれるモジュールがあれば教えてください。
0018デフォルトの名無しさん2005/06/06(月) 19:19:08
>>17
use File::Path;
mkpath("./h/e/l/l/o/w/o/r/l/d", 0, 0777);
0019デフォルトの名無しさん2005/06/06(月) 19:44:47
>>16
$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
>>18
ありがとうございます。 File::Path を使ってうまくいきました。
0021デフォルトの名無しさん2005/06/06(月) 21:10:49
>>13
そんな気もするけど>>11の文書って結構古いよね。
今に至るまでのperlかmod_perlのバージョンアップで解消されてるってことはないの?
0022162005/06/06(月) 22:06:39
>>19
ありがとうございます。
Cygwin 環境で Lexical::Alias をインストールしてうまくいきましたv
ただ、Win32 環境の方だとちょっと・・・
(nmake install までは正常終了してるっぽいのに、スクリプトを走らせるとうにゃうにゃエラーメッセージが出てきます orz

大袈裟なきもしてきましたので、foo() { } の先頭で no strict 'vars' として逃げてみます。
(すげー問題あったりして(汗
0023デフォルトの名無しさん2005/06/06(月) 22:24:12
>>22
ん?
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:43
UTF-8で書いたコードから、
SQL 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;
0025222005/06/07(火) 11:13:32
>>23
ガビーソ! (゚Д゚;)
そうか、our 宣言って、local 宣言と組み合わせた場合は安全なんですね(汗
@Hoge::x (への|からの) 値の変更が筒抜けになる危険なものだとばかり思い込んでました。
それで逝きます。重ね重ねすいません on_
0026デフォルトの名無しさん2005/06/07(火) 12:37:27
>>25
ourってuse strict "vars"で怒られなくするという以上の意味は
ないよ。

筒抜けとかなんとかって考えがどこから出てきたのかはわからんが
なんか激しく誤解しているようなので、いい機会だからきちんと
理解しといた方がいいんじゃないかな。
0027222005/06/07(火) 12:55:39
>>26
> 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:55
質問です。

my $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
古い $value への参照が @hoge に保持されている限り、古い $value の実体 (参照先) も保持される
・・・と思う。
もちろんループ回数分の個数 (この場合 10 個) が、別々の実体として。
処理系のソース見たわけではないけど、
普通ガベージコレクタの仕事とはそういうものだよね・・・
0030292005/06/07(火) 13:27:21
 受け答えになってなかった・・・_| ̄|○
 仮にループ内で push( @hoge, \$value ); をやらなかった場合、レキシカル変数
$value がスコープから外れた瞬間 (つまりループ 1 回回る毎に) $value の実体は
削除される。
 上の例のような単純変数の $value だと確かめようがないが、bless されたオブジェクトなら
そのタイミングで DESTROY メソッドが呼ばれる・・・はず (未確認)。
0031デフォルトの名無しさん2005/06/07(火) 13:39:26
>>28
ソースをしっかり読むのがいちばんなんだろうが、とりあえずおおざっぱに
知りたいのならばオライリーの「実用Perlプログラミング」の20章「Perlの
内部構造」を読むといい。
0032デフォルトの名無しさん2005/06/07(火) 13:42:15
>>27
パッケージ変数はパッケージ名明示すればどこからでもいじれるので、
いやならレキシカル変数を使うしかない。ourに文句をいうのは筋違い。
そのためのmyだろ?

localは変数自体はそのままで、単に値の退避と復旧を自動的にやるだけ
のものだしな。
0033222005/06/07(火) 14:20:20
>>32
> すればどこからでもいじれるので、いやならレキシカル変数を使うしかない。
これは正論だと思いますが、最初の質問 >16 のような、変数の別名を作る場合はそうはいかないのです。
(パッケージ変数 (ていうかシンボル) の型グロブは '*' で参照できて、名前とは独立に付け替えができるのに対し、
レキシカル変数への参照は名前と一体であって書き換えられない。)

まあ、our $x; のあと local*x = \$z; とすることによって $x が $z の別名になって (配列のときも同様)、
しかも「筒抜け」の危険も生じないことがわかったので私めは満足でございますv
0034282005/06/07(火) 17:02:34
削除されているのですね。
DESTROYについて次の様に試しましたら毎回実行されました。
#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
>>34
あの〜、、、
for ループの最後で明示的に undef $hoge; するから $hoge の DESTROY が呼ばれてる、
と思うのは勘繰りすぎでしょうか
0036342005/06/07(火) 18:49:59
>>35
試しに「undef $hoge;」を外して実行しましたが同じ結果でした。
0037デフォルトの名無しさん2005/06/07(火) 19:12:20
オレの手元のperlでは

ループ開始
newしました。
DESTROYが呼ばれました。
ループ終端

の順番になり、undefをやめると

ループ開始
newしました。
ループ終端
DESTROYが呼ばれました。

になる。どっちにしても

ループ開始
DESTROYが呼ばれました。
newしました。
ループ終端

にはならんがなぁ。
0038362005/06/07(火) 23:49:57
>>37
hoge.plを電源きると消える場所に置いていたので
再度打ち直して実行したら…ループ開始〜ループ終端で
同じくDESTROYが呼ばれましたorz

DESTROYのタイミングがおかしかったのはnewの中身が次のようになってました(汗
sub new
{
$this = shift;
$self = {};
print "newしました。\n";
bless $self, $this;
}

#再宣言時(ループ2回目以降突入後)に消される仕様なのかと
#そんなわけなのに変な納得の仕方をしてました(汗
0039デフォルトの名無しさん2005/06/07(火) 23:54:23
>>38
$selfがグローバルになってるので、次にnewが呼ばれて
上書きされるまではこっちからの参照が残ってるので
DESTROYされなかったわけですな。それならばあの結果
になるだろう。納得。
0040デフォルトの名無しさん2005/06/08(水) 01:18:24
>>31

へぇ、あの本、そんな面白そうなことが載ってるんだ。
「実用」というタイトルで何となく敬遠してた本だけど・・・
0041デフォルトの名無しさん2005/06/08(水) 01:57:31
>>40
そうやって決めつけて見聞の範囲を制限するから、お前はいつまで
も負け組なんだ。
0042デフォルトの名無しさん2005/06/08(水) 03:53:25
>>41
そんな絡むことか? ちなみに、英語版(原書)はAdvanced Perl Programming。
中身も、「実用」よりPerlの内部構造を意識した発展的内容。

Perlはもう役目を終えるべき言語なので、真面目に勉強すべきではないと思うが。。
0043デフォルトの名無しさん2005/06/08(水) 04:04:52
つ〜か、何の脈絡もなくあちこちに出現してる罵倒師に構うなよ。
0044デフォルトの名無しさん2005/06/08(水) 14:57:29
>>42
Perlは終わっちゃうのん?
0045デフォルトの名無しさん2005/06/08(水) 15:06:02
なんでPerlすぐ死んでしまうん?
0046デフォルトの名無しさん2005/06/08(水) 15:08:23
>>44
>>43

ちょっとしたツールとしては
使いたい人間は使い続けるだろうから死滅はしないだろ。
0047デフォルトの名無しさん2005/06/08(水) 15:31:32
>>42
> Perlはもう役目を終えるべき言語なので、真面目に勉強すべきではないと思うが。。

何に移るべきだと思う?
0048デフォルトの名無しさん2005/06/08(水) 16:04:33
そう思って考えるとなんかこれだっていうのがないんだよな...
なので今日もperlを使いつづけているのだった。
0049デフォルトの名無しさん2005/06/08(水) 16:15:28
UNIXやx86(IA32)、生C、COBOLなんかも死んだ死んだ言われて今でも元気だ。

基盤業務のスクリプトなんかまだまだsh系とかだし。
sedまでで、awkはもうだめとかざらだし。

枯れてるってことはそれはそれで強いんだよね。
perl5も誕生10年、これからこれから。
0050デフォルトの名無しさん2005/06/08(水) 16:50:23
>>49
それら被死亡宣告事象は、使ってない人、第三者が死亡宣告したもの。

Perlにとっとと氏ねと言っている連中は、中毒級のコテコテのすご腕のPerlian
だったりする。

要するに、転したいんだよね、Perlを。だけどもっと良いものが作れなかったり、
なかったり、あるいはなかなか移れなかったりして七転八倒してる。

しして、この進化の袋小路で転げまわってるんだ。いつまでもいつまでも(哀)。
0051デフォルトの名無しさん2005/06/08(水) 17:33:50
キチガイの多いスレですね
0052デフォルトの名無しさん2005/06/08(水) 18:06:41
>>51
お前も含めてというのなら禿同
0053デフォルトの名無しさん2005/06/08(水) 20:47:02
俺も含めろ!
0054デフォルトの名無しさん2005/06/08(水) 20:50:51
ノ
0055デフォルトの名無しさん2005/06/08(水) 21:15:57
>>50
> それら被死亡宣告事象は、使ってない人、第三者が死亡宣告したもの。
それでいざ自分たちが当事者になるとMac板の祭りのような
面白すぎることになるわけですね
0056デフォルトの名無しさん2005/06/08(水) 21:53:47
ruby
0057デフォルトの名無しさん2005/06/08(水) 22:10:50
rubyはドキュメントシステムが整備されていないのがフラストレーションたまる所。
0058デフォルトの名無しさん2005/06/08(水) 22:34:18
そういやようやくモジュールをネットワークからインストールできるようになったらしいね>ruby
なんで最初から作ってなかったんだろ?
言語仕様は嫌いじゃなかったんだけど、ライブラリの未整備でrubyは速攻で捨てたんだよなぁ。。。

CPANやppmがなければ速攻で捨ててたのに>Perl

0059デフォルトの名無しさん2005/06/08(水) 22:47:06
最近Perl始めた人はそんなもんかね?
Perlは基本機能だけで十分便利なんだがね。awkやsedに比べて
0060デフォルトの名無しさん2005/06/08(水) 23:30:42
最近何故かawkの仕事が増えた
0061デフォルトの名無しさん2005/06/09(木) 00:08:58
Perlは使わせてくれないの? awkでヤル程度なら、Perlを使った方が良いと
思うけど。 で、Perlで30行以上になるなら、Javaとか真面目に設計された
言語を使うべきだな。
0062デフォルトの名無しさん2005/06/09(木) 03:24:49
「Perlクックブックソースコードリンク集」
http://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
・awkってなんかUNIXごとに別々に実装してて動いたり動かなかったりしそうで嫌。
・Perlの正規表現がデファクトスタンダードになって、その他のものが微妙に使いにくく
感じること多い。
・なんだかんだ言いつつも、Cライクなシンタックスをベースにしてるので、
SHやPython,Ruby,Lispより馴染みやすい(これは本当に大きい)。
・なんだかんだ言いつつもUNIX的なアイディアが素直に実装されている。
(そのせいでWindowsプログラマが馴染み難く感じるという不利な点もあるかも)
0064デフォルトの名無しさん2005/06/09(木) 09:34:34
たとえばshなら
マン頁をgroff -man -t psで
man 1 sh(FreeBSDのがいい)
をいんさつしても10頁ぐらいなので

カンのいい人なら半日
筋の悪い人でも1週間ぐらい
でたぶん覚えられるけど

ちゃんとしたPerlの教科書は500頁超とかだし、
それに加えてライブラリのつかいかたとかあるし、

あと
優先順位が、低い
C++とかJavaなどのほうが先にくる
0065デフォルトの名無しさん2005/06/09(木) 10:04:53
>>63

>・なんだかんだ言いつつも、Cライクなシンタックスをベースにしてるので、
>SHやPython,Ruby,Lispより馴染みやすい(これは本当に大きい)。

大嘘こくなやボケ
0066デフォルトの名無しさん2005/06/09(木) 10:09:56
オレはPythonのインデントとRubyのendは嫌いだがLispのカッコは好きだな。
0067デフォルトの名無しさん2005/06/09(木) 10:45:56
折れはPerlのsub, shift, my, blessを見ると、オツムガおかしくなりそうになる。

Perlは関数の実装で既に道を踏み外した。
0068デフォルトの名無しさん2005/06/09(木) 11:59:19
>>67
その程度でおかしくなるなよ
0069デフォルトの名無しさん2005/06/09(木) 12:13:30
どういうオツムやねん

っと煽り抜きに思うよな
0070デフォルトの名無しさん2005/06/09(木) 12:14:55
>>61
perlで30行で出来ることはJavaへ持っていくと300行ぐらいになることがザラ。
単機能物ならshやperlが強いな。すぐ作れるし。
で、手順書(スクリプト)なのがshで、プログラムなのがperlってところか。

多機能でコアと機能ごとにソース分割して実装し、多人数でメンテする
ようなものこそJavaは強い。コーダの実力を言語仕様がカバーしてくれる。
Java人気の秘密はまさにそこだと思う。
0071デフォルトの名無しさん2005/06/09(木) 12:30:37
5.8になって頭がおかしくなったことはある
0072デフォルトの名無しさん2005/06/09(木) 13:11:07
>>67
> 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:55

Perlの言語仕様は


      腐    っ    て    る


0079デフォルトの名無しさん2005/06/09(木) 18:20:16
4.主観で決め付ける
0080デフォルトの名無しさん2005/06/09(木) 18:49:57
>>78
その腐り具合がちょうど良いから、みんな鼻をつまみなが
らスプーンを突っ込んでるんですよ。
0081デフォルトの名無しさん2005/06/09(木) 18:53:31
納豆みたいなもんか。。
0082デフォルトの名無しさん2005/06/09(木) 19:34:07
生みの親がアニヲタらしいからな
0083デフォルトの名無しさん2005/06/09(木) 19:34:12
なにこの流れ?

面白いからいいけど。
0084デフォルトの名無しさん2005/06/09(木) 19:57:07
>>82
> 生みの親がアニヲタらしいからな

生みの親は「指輪物語」ヲタでつ。
0085デフォルトの名無しさん2005/06/09(木) 20:11:31
でも、ドット・コムブームが弾けて会社首になって、奥さんにも捨てられたんでしょ。
今、何しているのかな?
0086デフォルトの名無しさん2005/06/09(木) 20:36:43
CPANでモジュールインスコでなやんどります。

testは内部コマンド、または
perl -MCPAN -e shell

外部コマンド、操作可能な
プログラムまたはバッチファイルとして認識されておりません

と出ます。どんなもんすかね?win2000です
0087デフォルトの名無しさん2005/06/09(木) 20:39:17
漏れも確かに Perl はアレな言語だと思うのだが・・・
 1. 変数の先頭に $, @, %, \ とかいちいちつけねばならず、タイピングがわずらわしい (いつも 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
PerlのPathはちゃんと設定しているの?

そのエラーが出るのは、Pathの設定以外考えられないけど。

echo %PATH%

ってやってみれば。
0089デフォルトの名無しさん2005/06/09(木) 20:42:56
>>88
多分してない。
サンクスコ。やってみる。
0090デフォルトの名無しさん2005/06/09(木) 20:49:50
やってみた。

C:\PROGRA~1\JUSTSY~1\JSLIB32;
C:\Perl\bin\;C:\WINNT\system32;
C:\WINNT;C:\WINNT\System32\Wbem
0091デフォルトの名無しさん2005/06/09(木) 20:53:50
>>87
>  5. 変な約束事が多い ($_ とか $a, $b と sort の関係とか、いろんな特殊変数とか、イテレータと keys とか <FH> とかシンボルのエクスポートが Exporter.pm だったり継承が @ISA だったり ',' とは微妙に違う '=>' とか etc.)

っていうか、ありゃインチキだろ、sort関数は。

> 9. ぬんでファイルハンドルだけが Bare Word っぽい書き方なのか説明できる人は世界に 3 人ぐらいしかいない。

この手抜きっていうか、手作り感が最高にイカシてるぜ。

> だいたい Perl が腐ってるとかなんだとかいう香具師らは、腐ってない何かを生み出したことがあるんかい?

なんでそんなつまらないことしなきゃなんないのサ?
0092デフォルトの名無しさん2005/06/09(木) 20:56:18
perlの本質語るとか、他の言語と比べてとか、みんなすげーよな。
オイラモジュールインスコだけで手一杯だ(´・ω・`)。
0093デフォルトの名無しさん2005/06/09(木) 21:01:49
>>86
Active Perlだよね?
ならばcpanよりもppmの方が良いと思う

まあ、その前に起動しないと話しにならんか・・・
とりあえず、DOSプロンプト開いて、
C:\hoge> cpan
とやってみたらどうなる?
0094デフォルトの名無しさん2005/06/09(木) 21:03:38
>>93
アリガト。やってみる。
0095デフォルトの名無しさん2005/06/09(木) 21:07:59
'CPAN' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

(´・ω・`)。ス万。。悪いから一人でやってみるよ。アリガトね
0096932005/06/09(木) 21:11:43
>>95
あれ・・・おかしいねぇ
>>88-90からしてちゃんとパス通ってるのに・・・
ちょっと再起動して見れ。これでも駄目なら私にはわからん・・
0097デフォルトの名無しさん2005/06/09(木) 21:15:16
>>96
色々アリガト。ほいじゃー
0098デフォルトの名無しさん2005/06/09(木) 21:21:06
>>87
1, 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
Perlから入ったんで、理屈で納得できる箇所は幾つかあるけど
感覚的にはどれも大した問題ではないというのが俺の本音。
0100デフォルトの名無しさん2005/06/09(木) 21:51:25
折れもPerlから入ったクチだが、確かにファイルハンドル関係の設計だけは
どうしようもないほどイカレてると思うね。

最近(5.6.0から)は無名のファイルハンドルを作れるようになったのでまだマシだが…。

$aと$bやl、構造体がないためocaltime()/stat()がリストを返すというのも、まあ気になるっちゃ気になる。
他は大して気にならないね。
0101デフォルトの名無しさん2005/06/09(木) 22:20:36
おまいらみんなPerl愛しすぎ。
0102デフォルトの名無しさん2005/06/09(木) 22:20:42
『Perl脳の恐怖』
0103デフォルトの名無しさん2005/06/09(木) 22:24:10
質問です。
Perl6 はどこに行ってしまったのでしょうか。
また、テンプレートは今度こそ実装されますか
0104デフォルトの名無しさん2005/06/09(木) 22:38:22
Perlが生み出した有益な何かがあると言う人もいるが、
それはPerlなしでも実現可能なことばかりだと、僕自身は
思っている。むしろ、Perlに自由を奪われていると僕は思う。
Perlなしではプログラムが書けないなんて・・・あまりにも悲しい。
0105デフォルトの名無しさん2005/06/09(木) 23:00:56
>>104
今現在のこの宇宙よりあちらの並行宇宙の方が良かった、なんて感想を述べられても困る。
0106デフォルトの名無しさん2005/06/09(木) 23:01:10
今時書けない言語がある奴なんてお前ぐらいだよ(ガハハ
0107デフォルトの名無しさん2005/06/09(木) 23:19:00
>>103
> Perl6 はどこに行ってしまったのでしょうか。
ていうか来てません
0108デフォルトの名無しさん2005/06/10(金) 00:05:35
Perl詩のネタになりそうな流れだな
0109デフォルトの名無しさん2005/06/10(金) 00:10:16
                          全・
                        て・

                      計・
                      画・
                      通・
                        り・
                     だ・
                      :
                      :
0110デフォルトの名無しさん2005/06/10(金) 00:26:39
http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2F%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB(CPAN)

このページを参考にしながら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
>>110
理由はもう書いてある。
0113デフォルトの名無しさん2005/06/10(金) 00:36:44
ppmにしとけ
0114デフォルトの名無しさん2005/06/10(金) 01:47:38
構造体なんて所詮配列ですよ?
Perlがリストで表現することがおかしいと思う人は、
構造体を誤って認識してる人です。
0115デフォルトの名無しさん2005/06/10(金) 02:00:40
>>114
やれやれ。あなたにとってはファイルシステムも木構造である必要はなくて、「所詮配列」 なのでしょうね。
0116デフォルトの名無しさん2005/06/10(金) 02:15:12
関連の強いメンバ同士を一まとまりにして扱う、というのが構造体のポリシーなはずだが、
仮に 「構造体 A と構造体 B をメンバとする構造体 C」 をプレーンな配列で表現するとそれが破綻してしまう。
0117デフォルトの名無しさん2005/06/10(金) 02:30:37
>>115
そうですよ。配列ですよ?
0118デフォルトの名無しさん2005/06/10(金) 02:32:20
>>116
奇数と偶数をメンバとする自然数は破綻していますか?
0119デフォルトの名無しさん2005/06/10(金) 03:28:21
すいません、perlでアプリケーションを起動する時は、
system ('C:\Program Files\hoge.exe');
とかで出来ると思うんですが、逆に終了させたいときはどのように書けばいいんでしょうか。
なんか引数にどうにかして終了を表すコマンドをくっつければいいのかと思ったんですが、
よくわかりませんでした…。

どなたかアドバイスのほど、よろしくおねがいします。
0120デフォルトの名無しさん2005/06/10(金) 04:10:36
Win32::Process
0121デフォルトの名無しさん2005/06/10(金) 04:18:23
forkとexecを使って説明しようと思ったけどうまくいかね
0122デフォルトの名無しさん2005/06/10(金) 05:12:03
>>119
別プロセスが立ち上がってるわけで、
強引なコトしないと終了させれないってのはちゃんと頭にあってか?
もしhoge.exeが自作のもんならプロセス間通信でもしてて下さい。
0123デフォルトの名無しさん2005/06/10(金) 08:50:17
>>103

perl6は古い。すでにperl6.5まで進んでいるよ。
http://page7.auctions.yahoo.co.jp/jp/auction/g30089957
0124デフォルトの名無しさん2005/06/10(金) 09:17:07
>>122
> 強引なコトしないと終了させれないってのはちゃんと頭にあってか?

頭になかったです。
なんか起動は出来るから終了も簡単に出来るものと思ってました…
もちろん自作のもんでもなんでもないです。
すいません…。
0125デフォルトの名無しさん2005/06/10(金) 09:19:15
ああ、なんか必要以上に卑屈になってしまた…
0126デフォルトの名無しさん2005/06/10(金) 12:25:14
せっかくEncodeに乗り換えたのにJcode2.0ってなによ
便利じゃないのかぁ!
0127デフォルトの名無しさん2005/06/10(金) 12:26:51
まあ落ち着け
0128デフォルトの名無しさん2005/06/10(金) 14:30:09
>>126
そうか?
Encodeは環境。Jcodeは変換メソッドのあるオブジェクト、jcode.plは変換関数の集合体。
比較するもんじゃないと思うし、Encodeに"苦労して"乗り換えてJcodeのほうが便利に
みえるなら、Encodeの理解が足りないと思われ。
0129デフォルトの名無しさん2005/06/10(金) 15:18:04
>>128
知ったかすんな。嘘つき野郎
0130デフォルトの名無しさん2005/06/10(金) 15:22:14
Jcodeの方が速い
0131デフォルトの名無しさん2005/06/10(金) 15:28:30
>>130
Jcode 2.0はEncodeのラッパー。しかも多くの場合、Encodeのほうが旧Jcodeより早い。

速度だけで言うならUnicode::Japaneseが最速だが。
0132デフォルトの名無しさん2005/06/10(金) 16:20:42
なんで旧Jcodeと比べてるんだ?
0133デフォルトの名無しさん2005/06/10(金) 17:27:39
>>132
ラッパーの意味がわからんのか池沼。
0134デフォルトの名無しさん2005/06/10(金) 19:23:02
>>132
「ラッパーでもない旧 Jcode ですら Encode より遅い。
 だから (速度をとるなら) Encode 使え。」
という文脈なのでは?
0135デフォルトの名無しさん2005/06/10(金) 21:08:37
でEncode2.10になって何が変わったの?
0136デフォルトの名無しさん2005/06/10(金) 22:11:59
>>123
びっくりした! 5.6 の typo やんけ ヽ(`Д´)ノ-3
0137デフォルトの名無しさん2005/06/10(金) 22:33:36
perl で行入力演算子で読みこんでいるとき現在の行が何行目か知る方法はあ
りますか?
0138デフォルトの名無しさん2005/06/10(金) 22:47:10
>>137
http://perldoc.jp/docs/perl/5.6.1/perlvar.pod#item__NR
0139デフォルトの名無しさん2005/06/10(金) 22:48:39
>>137
特殊変数 $. を使う。
0140デフォルトの名無しさん2005/06/10(金) 23:47:39
>>118
Perl 詩になりそうな問いかけだぬ。

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
>>141
> あるファイルの中身を変数につっこむ方法はありますか?

あるよ。
0143デフォルトの名無しさん2005/06/11(土) 01:04:43
>>141
open FH, "<hoge" or die; $var = <FH>; close FH;

、、、って無理やり一行にしただけやん ヽ(`Д´)ノ-3

なんか質問者にスゲー試されてる気がする・・・
0144デフォルトの名無しさん2005/06/11(土) 01:16:02
>>143
一行しか取れてない時点で負けっぽいが。
{ local undef $/; open FH, "<hoge" or die; $var = <FH>; close FH }
0145デフォルトの名無しさん2005/06/11(土) 01:20:42
>>143
行入力演算子だと一行しか読みこめませんよ。
>>144
なるほど、そんな変数があるのですね。
$/ The input record separator, newline by default.
この場合 local は my におきかえちゃだめなんでしょうか?
0146デフォルトの名無しさん2005/06/11(土) 01:27:59
>>145
今のところダメ
0147デフォルトの名無しさん2005/06/11(土) 01:28:30
$var = do { open my $fh, '< test.pl'; join '', <$fh> };
01481432005/06/11(土) 01:37:30
ガーソ!
> 一行しか取れてない時点で負
死にたい・・・_| ̄|○|||
0149デフォルトの名無しさん2005/06/11(土) 02:00:19
File::Slurpは便利。
0150デフォルトの名無しさん2005/06/11(土) 02:28:49
>>141
open FH, '<' . './hoge' or die $!;
read FH, my $var, -s FH;
print $var;
0151デフォルトの名無しさん2005/06/11(土) 05:46:58
>>147
これの場合、 my $fh がブロックのスコープを抜けたときに暗黙に $fh は close されるの?
0152デフォルトの名無しさん2005/06/11(土) 08:43:47
ラリーっていまどうしてるの?
0153デフォルトの名無しさん2005/06/11(土) 10:39:39
>>151
される。
0154デフォルトの名無しさん2005/06/11(土) 10:45:17
>>145
これは?
@nullpo = <GATT>;
0155デフォルトの名無しさん2005/06/11(土) 11:03:54
>>152
折れも尻たーい。 バブルが弾けて、会社クビになって、奥さんに捨てられて。。ってとこまで
知ってるけど、彼程度の腕なら再就職先を見つけるのは困難ではないし。。

でも、Perl 6は5年くらい出る出ると言われていた気がするけど、未だ出る気配すらないね。
0156デフォルトの名無しさん2005/06/11(土) 13:26:41
>>153
なるほど。これは close し忘れにくくなって良いっすね。
0157デフォルトの名無しさん2005/06/11(土) 14:15:58
WindowsXPでActivePerl5.8.4を使っています。5.8.7が出たので更新しようと思ったのですが、
XSを使ったモジュール(Cコンパイラを使うやつ)は再インストールしないといけないでしょうか。
0158デフォルトの名無しさん2005/06/11(土) 16:24:13
>>147
>>151
>>153
>>156
そこで Ruby ですよ
0159デフォルトの名無しさん2005/06/11(土) 17:41:13
まあ、Perl のプロセスが終了すれば全ハンドルは閉じられるわけだが。
全然関係ないけど。
0160デフォルトの名無しさん2005/06/11(土) 19:10:03
ああ、確かに関係ないな
0161デフォルトの名無しさん2005/06/11(土) 20:40:43
( ´_ゝ`)フーン
0162デフォルトの名無しさん2005/06/12(日) 02:19:11
rubyやpythonが仕事で使えない(言語能力ではなく嫌がられるってこと)ので
しぶしぶperlに戻ってきました。っつても以前はperl4の機能しか使ってなかったんで
もう一度お勉強しなおしたらスゲー面白くて最近ハマってきた。
いい言語かどーかは置いといて、オモレーよperl
0163デフォルトの名無しさん2005/06/12(日) 02:32:04
おもしろくねーよ。

おもりろりんな言語って言うのは、C++やLispのことを言うのだ。
0164デフォルトの名無しさん2005/06/12(日) 04:01:44
perlでへんな癖付くと他の言語に戻ったときにそれを取り除くのが大変
0165デフォルトの名無しさん2005/06/12(日) 04:56:48
あなたのeval使ったバリバリの変態コードを見せてください
0166デフォルトの名無しさん2005/06/12(日) 08:00:03
s??
                ,-、 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:33
暇人
0168デフォルトの名無しさん2005/06/12(日) 10:56:49
Shift_jisにおいて半角全角の数字を正規表現マッチさせるにはどうすればいいでしょうか?
[\d(\x82[\x4f-\x58])]
というクラス内においてクラスを使おうとするとエラーになります。
何か上手い方法ってありますか?
0169デフォルトの名無しさん2005/06/12(日) 11:05:42
変換すれば
0170デフォルトの名無しさん2005/06/12(日) 11:08:43
>>168
/((?:\d|\x82[\x4f-\x58])+)/
0171デフォルトの名無しさん2005/06/12(日) 11:09:24
[\d(\x82\x4f)(\x82\x50)(\x82\x51)(\x82\x52)(\x82\x53)(\x82\x54)(\x82\x55)(\x82\x56)(\x82\x57)(\x82\x5\
8)]{10}
やっぱりこうするしかないのかな。カッコ悪いけど。
0172デフォルトの名無しさん2005/06/12(日) 11:13:10
>>170
ありがとうございます。カッコがなぜ二重に必要なのか分りませんが、それ使わせてもらいます。
0173デフォルトの名無しさん2005/06/12(日) 11:20:09
あ、っていうか普通にこれでいいんすね。
(\d|\x82[\x4f-\x58]){10}
{}←これってクラスにしか使えないのかと勝手に思い込んでました。すみません。
0174デフォルトの名無しさん2005/06/12(日) 12:12:09
>>172
いや、matchした連続した数字部分を参照したいかな、と思ったから。
0175デフォルトの名無しさん2005/06/12(日) 12:27:52
>>174
どもです、OKです。
/((?:\d|\x82[\x4f-\x58]){10})/
(?:.....)というのはマッチした部分的文字列をを
$1というのに保存しないでしないという意味っすね。

こうすることで全体の10文字が手に入ると。"+"なら一文字以上の
任意の長さの結果が手に入ると。うーん、Perl素晴らしい。
0176デフォルトの名無しさん2005/06/12(日) 16:13:31
(゚Д゚) 宇宙語だ!宇宙からの交信が届いた!!
01771622005/06/12(日) 17:49:31
>>163
Lisp。クロージャ、遅延評価、ストリームなどキーワードはオモロそうだなーと思うが
lisp自体が アホなのでさっぱりわからん。
perl使いに分かるように lispの面白さを広告してみてくれ。
01781622005/06/12(日) 17:51:10
>>177
まぁ、自分で書かないとわからんとか言われるんだろうな・・・。
0179デフォルトの名無しさん2005/06/12(日) 18:22:48
>>178
> まぁ、自分で書かないとわからんとか言われるんだろうな・・・。

大学でやらされましたよ。人間インタープリタ。
0180デフォルトの名無しさん2005/06/12(日) 22:56:49
UTF-8なら2バイト文字のマッチングも大丈夫?
それともEUCにするべき?
0181デフォルトの名無しさん2005/06/13(月) 00:13:59
use encoding
0182デフォルトの名無しさん2005/06/13(月) 00:39:06
>>180
UTF-8 なのに 2バイト文字とはこれいかに!?
0183デフォルトの名無しさん2005/06/13(月) 00:41:00
質問箱じゃなくて雑談スレみたいなのないの?
01841802005/06/13(月) 01:00:29
>>181
それは怖いから許して

>>182
それもそうね。日本語という意味です。
0185デフォルトの名無しさん2005/06/13(月) 01:32:14
>>183
伝統的に「質問箱」となっているだけで、雑談もかまわないとおも
雑談スレは過去何度か経ったが、雑談だけじゃ話が続かないからな

WebProg板に行けばPerl6スレ等もう少し雑談よりのスレも沢山あるがな
0186デフォルトの名無しさん2005/06/13(月) 02:16:40
Perl6なんてもう消えたも同然だろ
0187デフォルトの名無しさん2005/06/13(月) 10:13:13
use encodingの何が怖いのかわからない
0188デフォルトの名無しさん2005/06/13(月) 10:20:05
こわがりすぎー
0189デフォルトの名無しさん2005/06/13(月) 10:31:04
怖がり杉
0190デフォルトの名無しさん2005/06/13(月) 10:38:45
動いてたコードにuse encoding "...";
って入れただけで動かなくなった。
0191デフォルトの名無しさん2005/06/13(月) 11:06:26
DBMにしまってるデータをhtmlに一覧表示(例;アドレス一覧)したいんですが、
上手く1データ(日付・名前・アドで1行)ずつでんのです。
プログラム初心者でよくわからんのです。
拾い方教えてください。
0192デフォルトの名無しさん2005/06/13(月) 11:35:42
>>191
>>4
0193デフォルトの名無しさん2005/06/13(月) 18:53:50
現在Perl勉強中の初心者です。

TKモジュールを使って日本語混じりデータの処理をしているのですが、
使えそうな、デバッカーを教えてください。

しばらく前に perl -d:?????? perl.pl でデバッカが使える
とあるWebで目にしました。しかしそのページをブックマーク
し忘れてしまいました。

OSはWindows XP で、Perlは 5.8.6 です
0194デフォルトの名無しさん2005/06/13(月) 18:59:06
>>193
デバッカって何?
0195デフォルトの名無しさん2005/06/13(月) 19:00:03
>>193
perldoc perldebug

perl -d script.pl # CUIデバッガ 標準添付
perl -d:ptkdb script.pl # GUIデバッガ CPANからインストールする必要あり
0196デフォルトの名無しさん2005/06/13(月) 19:09:19
>>195
ありがとうございました。ptkdb ですね。たしかに簡単にInstallできて
さくっと動きました。便利です。たすかりました。

>>194
知らないなら黙って居ろよ ボケェ
0197デフォルトの名無しさん2005/06/13(月) 19:18:12
>>194
> デバッカって何?

意地悪い
0198デフォルトの名無しさん2005/06/13(月) 19:19:25
>>193
> デバッカーを教えてください。

>>194
> >>193
> デバッカって何?

>>195
> # CUIデバッガ 標準添付
         ^^


>>196よ、見てるこっちの方が恥ずかしいので勘弁してください。(*ノノ)
0199デフォルトの名無しさん2005/06/13(月) 19:26:37
>>194
> デバッカって何?

デバック、デバッカ ――
能力に欠けるプログラマを検出する上で重要なキーワード/概念。
もちろんこれは、デバッグ/デバッガの読み間違いであるが、その読み間違
いを長期間に渡って続けている者は、プログラミングの現場から速やかに
排除されるべきである。
頻繁に「デバッグ」「debug」などの文字列を目にしているはずの現場
において、それでも「デバック」と言い続けているということは、認知
能力に極めて重大な欠陥がある可能性が高いからである。
読んだものをそのまま認識し、タイプすることが何よりも求められるプ
ログラミングという作業に、これほど不適切な人間はいない。
0200デフォルトの名無しさん2005/06/13(月) 19:28:22
>>197
いや、「デバッカ」でググって、ろくな情報が無いと
ブーたれてるバカがいるから、これは大事だよ。
0201デフォルトの名無しさん2005/06/13(月) 19:30:26
>>200
まあ、「>193 デバックでなくてデバッグな」ぐらいの優しさは標準装備しておこうぜ。
02022012005/06/13(月) 19:35:09
>>196
しかし、この態度はいくらなんでもいかんですな。
やーいデバッカデバッカデバッカデーイ。
0203デフォルトの名無しさん2005/06/13(月) 19:38:28
デバッカ野郎はバグメーカー。

あの野郎、iとjの識別ができないわ、Oと0をごたまぜにするわ、
テキスト書かせりゃ 「メーカ―」とか平気で書いて、チェック
させても気づかないわで、川に突き落としてやりたいと本気で思った。
0204デフォルトの名無しさん2005/06/13(月) 19:52:59
ここはおばかなインタネツですね

De-Bug という言葉の意味も発音も知らないんだ

In-Bug してろよ
0205デフォルトの名無しさん2005/06/13(月) 19:55:32
ノハヽ   DE BACK! BACK IN!
   (*´∀`)   
   (  つ ☆ノハヽヽ
    ) ,ィ⌒|G|*‘ o‘リ
   (_(__人__,つ 、つ
0206デフォルトの名無しさん2005/06/13(月) 19:59:57
ソースのメーカーで「ブルドック」なんてのもあるからな。
ラベルには、英語で Bulldog って書いてあるんだが。
栃木の「ツインリンクもてぎ」もそう。英語では TWIN RING となってる。
まぁ、一種の社会現象ってことか。
0207デフォルトの名無しさん2005/06/13(月) 21:12:50
頭!頭!
0208デフォルトの名無しさん2005/06/13(月) 22:20:50
逆に、「ビックカメラ」を「ビッグカメラ」と呼んで、「どう? おれ賢い?」と
悦に入っている痛いやつもときどきいるよな。

まあ、あれは恐るべき罠と評価してもいいかもしんないが。
0209デフォルトの名無しさん2005/06/13(月) 22:34:25
プロバイダー -> プロバイザー
ウォーニング -> ワーニング
ナルポ -> ヌルポ
0210デフォルトの名無しさん2005/06/13(月) 23:05:35
はいはい。ほら、ペールの話に戻って。
0211デフォルトの名無しさん2005/06/13(月) 23:21:49
Perl5でOOPができたら最高なのになぁ。
0212デフォルトの名無しさん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
>>205
りしゃこに変なことするのやめてください
0214デフォルトの名無しさん2005/06/14(火) 00:16:29
-eのあとの?が?:演算子の?ともパターンマッチの?...?の
開始の?ともとれるわけだが、どちらにもとれる場合は
項になるほう(この場合はパターンマッチの?...?)優先
になる。よくひっかかるのでwarning対象になっていて
カッコで明示しろといわれているわけだ。で、?...?の
最後の?が見つからないので検索パターンがどうこうと
いうエラーもついでに出る。

Warning: Use of "-e" without parentheses is ambiguous at 〜
Search pattern not terminated at 〜

なおエラーについて質問するときは勝手に翻訳しないで
エラーメッセージをありのまま写すのが基本なので以後
注意されたい。


02152122005/06/14(火) 00:42:14
>>214
ん? おお!!
?PATTERN?なんて初めて知ったよ。便利そうですね。ありがとうです。
だけど
$file_is_exist = -e ? 'exist' : 'not exist' ?;
とやっても同じ警告はでてしまうだよ。(-e ?abc? でも -e /abc/でもでる)
?..?の結合度よりも -e ? の結合の方が強いのかな? (-e ? は -e $_ より強い?)
0216デフォルトの名無しさん2005/06/14(火) 01:28:40
>>215
どちらの場合もカッコで明示することを推奨しているので
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
スマートというよりトリッキーだがPerlらしいやり方
$a = 'abc123'; $b = 'abc456';
chop $a until $b =~ /\A\Q$a/;
print $a;
0220デフォルトの名無しさん2005/06/14(火) 04:05:19
>>219
おぉ、感激しますた!
先頭一致に捕らわれて、後ろから削る発想がなかったです。
エスケープされてる部分の意味が分からないのでまた調べてみます。

newbieなもんでいろいろな書き方ができるperlに戸惑ったり面白がったりです。
ありがとうございます。
0221デフォルトの名無しさん2005/06/14(火) 07:25:23
先頭からの一致ならindex使ったほうが速いんじゃないかな。
$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
ActivePerl 5.8.7 Build 813 で、次のコードをデバッガ(-d オプション)で
実行しようとすると、クラッシュするんだけど…(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:19
>>223
Win98SEか・・・
まずOSのアップグレードからしてみよか。
02252232005/06/14(火) 09:24:35
>>224
ダメです。WinXP でも、全く同じように落ちました。
http://49uper.com:8080/html/img-s/62461.gif
02262232005/06/14(火) 09:33:43
頭にきたので、Linux(TL10D)でもやってみました。
Shift-JIS / EUC-JP の両方で。
こっちは、全然問題なし。
ActivePerl のバグってことですかね?
0227デフォルトの名無しさん2005/06/14(火) 09:48:52
>>226
報告乙。
うちはまだbuild810のまんまだ。
02282272005/06/14(火) 09:59:15
ちなみにmsvcrt.dllの古いのを放り込んだらどうなる?
02292232005/06/14(火) 10:17:50
>>228
98SEで、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では試してないけど、どうせ同じでしょうな。
02302272005/06/14(火) 10:53:09
そういや810でも、デバッガ使うと何かの標準モジュールで転けてたなあ。
0231デフォルトの名無しさん2005/06/14(火) 11:01:19
既にBUG DBにあるね。日付からいってここ見てる人かな。登録乙でした。

ttp://bugs.activestate.com/show_bug.cgi?id=39261
0232デフォルトの名無しさん2005/06/14(火) 12:52:29
詳しい人に質問!パスワード入室管理付のBBS借りてるんだけど、
このパスワードって簡単に破れたり、BBSの中身見れたりするの?

教えて!
0233デフォルトの名無しさん2005/06/14(火) 13:21:27
>>232
激しく板違い。
0234デフォルトの名無しさん2005/06/14(火) 13:24:58
>>232
WebProg板へGo!
あと具体的にどの BBS かわからないと答えようがない。
0235デフォルトの名無しさん2005/06/14(火) 15:58:09
232=ミスターデバッカ
0236デフォルトの名無しさん2005/06/14(火) 17:55:26
Perlってインラインアセンブラあるんですか?
0237デフォルトの名無しさん2005/06/14(火) 19:34:29
>>221-222
今ごろサンクスコ!!
結局こうしてみました→chop $a while index $b, $a;
嗚呼もうなんだかこの一行に惚れました気持ちえぇですたまらんです。

>>236
いろんなプラットフォームの上で走ってるから難しくないですかね?
インラインAppleScriptとかあるからあってもヘンってことはないのかな。
0238デフォルトの名無しさん2005/06/14(火) 19:46:07
ある
0239デフォルトの名無しさん2005/06/14(火) 19:53:32
>>237
その気持ちよさ加減がPerlの魔力。
0240デフォルトの名無しさん2005/06/14(火) 20:05:46
>>236
無い事も無い
ttp://search.cpan.org/~neilw/Inline-ASM-0.03/ASM.pod

Inline系のモジュールにはCとかTkとかBefungeなんてのまであるから、
調べてみると結構楽しいよ
02412402005/06/14(火) 20:08:44
Tkじゃ無いorz
Tclの間違い
0242デフォルトの名無しさん2005/06/14(火) 20:56:45
2chのdatを読み込むにはどうしたらいいの?
0243デフォルトの名無しさん2005/06/14(火) 21:08:20
lwp::simpleでgetしてforeachとspliteでお好きなように処理。
0244デフォルトの名無しさん2005/06/14(火) 22:19:32
>>243
激しくありがとう。
0245デフォルトの名無しさん2005/06/14(火) 22:26:30
すいません、今までutf8で保存していたperlのスクリプトがあるんですが、
それに、「shift-jisのテキストファイルに日本語の文字列を追記する」処理をほどこすことになりました。

で、そのまま
open(OUT, ">> $file");
 binmode(OUT,"shift-jis");
 print OUT "$_\n";
close(OUT);

みたいにshift-jisへのエンコードを追加したりしたんですが、
うまくいきません…。

どなたかアドバイスのほどよろしくおねがいします。
0246デフォルトの名無しさん2005/06/14(火) 22:57:40
外してるかもしれませんが。

binmode(OUT,":encoding(shiftjis)");
0247デフォルトの名無しさん2005/06/14(火) 23:32:31
>>246
直りました!ありがとうございます
0248デフォルトの名無しさん2005/06/15(水) 05:26:09
配列をforeachでループさせたとき、順番は必ず
番号順になりますか?例外はありますか?
ちなみにハッシュは規則性はないと聞いております。
0249デフォルトの名無しさん2005/06/15(水) 08:08:51
順番どおりです。仕様で決まってます。
0250デフォルトの名無しさん2005/06/15(水) 16:28:29
あるディレクトリにファイルいっぱいあって、それらのファイルのおしりの空
行を取り除くにはどうすればいいですか?空行は一行とは限りません 。
0251デフォルトの名無しさん2005/06/15(水) 16:42:24
>>250
成功する限り chomp しまくって失敗したら抜けるループ
0252デフォルトの名無しさん2005/06/15(水) 17:17:05
>>251
ループを抜けた時、最終行の改行コードが無くなってるので、
書き出す前に復活させる必要があるね。
それなら、$data =~ s/\n+$/\n/; の方が速そうな気がするが…
もちろん $/ = ""; での話。
0253デフォルトの名無しさん2005/06/15(水) 19:19:07
$/ = undef と勘違いしてないか?
0254デフォルトの名無しさん2005/06/15(水) 19:26:06
>>253
どっちでも効果は同じ。
ラクダ本(第2版)のp149を見ればわかるように、$/ = ""; が本来の書き方。
それに、undef なら「undef $/;」だろ?
0255デフォルトの名無しさん2005/06/15(水) 19:38:02
>>254
まー、$/ = undef; でも undef $/; でも同じなんだが、
プログラム書法の観点で言えば、後者に軍配が上がる。
0256デフォルトの名無しさん2005/06/15(水) 19:45:28
つ [それには何通りもやり方があるのだ。]
この辺が Perl の魅力であり、場合によっては弱点にもなり得るんだが…
0257デフォルトの名無しさん2005/06/15(水) 19:46:01
>>254
>どっちでも効果は同じ。

第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
>>255
オレはなんとなく他に影響でないか不安なので
{ local $/; 〜 } 派だな。
0259デフォルトの名無しさん2005/06/15(水) 19:51:26
>>257
> その情報は古いな。
最新の 5.8.7 でも、どっちでも全く同じに動きましたが。
0260デフォルトの名無しさん2005/06/15(水) 20:01:40
>>259
え?マジで?

>"" を設定した場合には、複数の空行も 1 つの空行であるかのように扱います。

とあるように、パラグラフモードになるハズなんだけど……。
俺の Perl 5.8.6 はなったんだけどなぁ。
0261デフォルトの名無しさん2005/06/15(水) 20:07:36
ActivePerl 5.8.7 Build 813 を使ってる方限定の質問です。

デバッガ(-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
perl -pi.orig -e 'BEGIN {undef $/;} s/\n+$/\n/s' *

-iオプションは便利だ。

ただしメモリに読み込めないくらい巨大なファイルだとこのやり方では
まずい。それほどでかいとお尻から読んでtruncateしたいとこだがかなり
めんどくさくなるだろうなぁ。

0263デフォルトの名無しさん2005/06/15(水) 20:17:59
$/ = ""; だと
1文字単位でバラバラにされるんじゃないんですか?
0264デフォルトの名無しさん2005/06/15(水) 20:22:01
>>262
undef $/; を 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:57
本日のクルクルパー大賞は、>>254で決まりですか?

0266デフォルトの名無しさん2005/06/15(水) 20:50:31
ぐだぐだだな。
0267デフォルトの名無しさん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:34
どうもしてなさそうだ。
0269デフォルトの名無しさん2005/06/15(水) 22:44:45
>267
せめてコード晒すか、どこまで出来て何が出来ないのか、うまくいかないとはどうなるのかぐらい書いてから質問しろ、ぼけが。

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:04
>>267
my($name, @points) = split / /, $line;
$data->{$name} = [];
push @{$data->{$name}}, @points;

0271デフォルトの名無しさん2005/06/16(木) 00:08:33
>>269-270
そうやって答え出すからそいつらが付け上がるんだろうがヴォケ
0272デフォルトの名無しさん2005/06/16(木) 00:13:06
無能になろうが恥かこうが知ったこっちゃないしー
0273デフォルトの名無しさん2005/06/16(木) 00:14:14
解く問題があればあとはどうでもいいわけで。
0274デフォルトの名無しさん2005/06/16(木) 03:00:33
困っている人がいるんだから、プログラムが書ける人は
代わりに書いてあげる義務があると思います。
0275デフォルトの名無しさん2005/06/16(木) 05:12:11
困ってる人がいるんだから、プログラムの質問をする人は
少しは努力してまともな説明をする義務があると思います。
0276デフォルトの名無しさん2005/06/16(木) 08:32:11
Perl is a write-only language.
0277デフォルトの名無しさん2005/06/16(木) 09:36:06
>>274
困
代

>>275
困
少

>>277
困っている人がいたなら
心を開いて接してあげればいいと思います。
0278デフォルトの名無しさん2005/06/16(木) 09:41:28
困っている人がいたなら
一緒に困ってあげましょう
0279デフォルトの名無しさん2005/06/16(木) 09:42:46
>>273
暇なら何かモジュール作っておくれ
0280デフォルトの名無しさん2005/06/16(木) 10:10:35
>>264
BEGIN:
これを使わないと$/をundefにするのが-pによって最初の行を読み込んだ
後になるので間に合わない。

$:
/m修飾子が指定されていないから文中にマッチする心配はない。
また\n+は最長マッチなので結果的には末尾の改行もこちらで食われて
残ることもないが、意味的には\zの方がわかりやすいか?
(最短マッチだと違いが出る。s/\n+?$/\n/とs/\n+?\z/\n/を比べてみよ)
0281デフォルトの名無しさん2005/06/16(木) 11:04:18
>>273
> 解く問題があればあとはどうでもいいわけで。

仕事、ないの?
0282デフォルトの名無しさん2005/06/16(木) 14:20:25
お前NEETって知らないのか
0283デフォルトの名無しさん2005/06/16(木) 14:25:05
DBに格納した過去の日にち達(ただの数字16桁)を 
引っ張りだして、yyyy/mm/MM/dd hh:mm:ss と表示してあげたいんですが、
どうしたらよい?
0284デフォルトの名無しさん2005/06/16(木) 15:50:40
>>283
質問に偽装した嫌がらせが来ましたよ。
0285デフォルトの名無しさん2005/06/16(木) 16:30:14
やばい「困」がゲシュタルト崩壊してきたorz
0286デフォルトの名無しさん2005/06/16(木) 16:57:51
>>283
16桁というのがよく解らんが
$str = getDate(); #16桁の数字取得
$str = s/(....)(..)(..)(..)(..)(..)(..)/$1\/$2\/$3\/$4 $5:$6:$7/;

とか。取得するSQLで工夫したほうが話は早そうだがナー。
0287デフォルトの名無しさん2005/06/16(木) 19:20:56
どうせなら区切り文字替えようぜ。
0288デフォルトの名無しさん2005/06/16(木) 22:27:31
>>286
個人的にはunpackをおすすめ。
0289デフォルトの名無しさん2005/06/16(木) 23:55:33
値は分割だけしておいてテンプレ側で区切ろうよぅ
02902422005/06/17(金) 02:43:47
use LWP::Simple;
foreach $b(split(/\n/, get($daturl))){
$i ++;
my($name[$i]) = split(/<>/, $b);
}

こんな風にしてLWP::Simpleを使って読み込んでいたのですが、
iswebにアップロードしたら動かなくなりました。多分iswebじゃ使えないみたいです。

なので何か別の代わりになる方法を探してるんですが、ありますか?
0291デフォルトの名無しさん2005/06/17(金) 02:48:44
>>290
キチガイ!!
0292デフォルトの名無しさん2005/06/17(金) 03:04:37
$a $b 使うなよ……
0293デフォルトの名無しさん2005/06/17(金) 03:40:09
>>283
SQLのDATE_FORMAT系の関数を使え。
なければDate::Format。
0294デフォルトの名無しさん2005/06/17(金) 03:40:58
>>290
> なので何か別の代わりになる方法を探してるんですが、ありますか?
LWPの機能部分を全部自分で書く。
0295デフォルトの名無しさん2005/06/17(金) 03:42:23
Date::Format
http://search.cpan.org/~gbarr/TimeDate-1.16/lib/Date/Format.pm
0296デフォルトの名無しさん2005/06/17(金) 05:19:51
Perlのスキーマ認識プロセッサってあります?
スキーマを読み込んで、文法が正しいか判定するやつ。
0297デフォルトの名無しさん2005/06/17(金) 08:00:50
>>296
スキーマってなんだよ
0298デフォルトの名無しさん2005/06/17(金) 08:16:16
>>296 素直に「構文チェッカ」って書けよ…。



噂では、Perlをパースできるのはperlだけ、らしいぞ。
0299デフォルトの名無しさん2005/06/17(金) 09:08:04
>>296
スキーマって、なんのスキーマだよ。
0300デフォルトの名無しさん2005/06/17(金) 09:33:13
童貞なんですけど質問させてください。

ファイルを分割する関数ってありますか?
例えば40MBのファイルを15MB、15MB、10MBみたいに。
コマンドの split -b 15m hoge みたいなの。
0301デフォルトの名無しさん2005/06/17(金) 09:34:58
童貞には無理
0302デフォルトの名無しさん2005/06/17(金) 09:47:43
ヽ(`Д´)ノおしえてくれよ
0303デフォルトの名無しさん2005/06/17(金) 10:03:14
>>300
ないよ。
0304デフォルトの名無しさん2005/06/17(金) 10:20:04
すいません。質問があります。

20AB年C月は何日あるか
って調べる関数とかないのでしょうか?
0305デフォルトの名無しさん2005/06/17(金) 10:20:21
>>304
ないよ。
0306デフォルトの名無しさん2005/06/17(金) 10:20:37
>>303
ないの?

もしやるとするなら何か方法ある?
0307デフォルトの名無しさん2005/06/17(金) 10:24:45
>>306
閏年の計算は確立されてるやん・・・
0308デフォルトの名無しさん2005/06/17(金) 10:25:07
>>305さん
ないんですか?

もし●年×月が何日あるか調べたい時は何か方法がありますでしょうか?

>>306さん
system 'split -b 15m hoge';
で出来るのでは?
0309デフォルトの名無しさん2005/06/17(金) 10:26:45
>>306
> もしやるとするなら何か方法ある?

……もちろんある。
0310デフォルトの名無しさん2005/06/17(金) 10:27:22
>>307
ミス

>>304へのレスです。
0311デフォルトの名無しさん2005/06/17(金) 10:30:36
>>310さん
えーっと手間をお掛けしまして申し訳ないのですが
その計算方法をお教えいただけますでしょうか?
0312デフォルトの名無しさん2005/06/17(金) 10:31:33
>>311
ググれって、お前が手間を掛けろ。

あとは「西向く士」だ。
0313デフォルトの名無しさん2005/06/17(金) 10:32:28
>>308
> もし●年×月が何日あるか調べたい時は何か方法がありますでしょうか?

Date::Calcでできるかも。
0314デフォルトの名無しさん2005/06/17(金) 10:34:17
つまんねーやつらしかいねーな。
0315デフォルトの名無しさん2005/06/17(金) 10:34:41
>>313
これだな。
$days = Days_in_Month($year,$month);
0316デフォルトの名無しさん2005/06/17(金) 10:43:17
>>308
>system 'split -b 15m hoge';
>で出来るのでは?
これだとプラットホームに依存しちゃう気がして。

もうちょっと調べてまた夜来ます。
0317デフォルトの名無しさん2005/06/17(金) 11:00:24
>>316
File::Splitだな。
0318デフォルトの名無しさん2005/06/17(金) 12:56:19
>>292
なんで?
0319デフォルトの名無しさん2005/06/17(金) 12:58:21
なんででもだ
0320デフォルトの名無しさん2005/06/17(金) 13:22:13
>>316
sysreadで一発。
$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
>>319
なんで?
0322デフォルトの名無しさん2005/06/17(金) 13:45:54
それがなんででもということだ
0323デフォルトの名無しさん2005/06/17(金) 13:55:46
じゃあ使い続けるね。
0324デフォルトの名無しさん2005/06/17(金) 14:08:55
Ruby で言うところの irb みたいなものがあれば教えてください。
0325デフォルトの名無しさん2005/06/17(金) 14:53:27
>>324
Ruby使えよ
0326デフォルトの名無しさん2005/06/17(金) 14:54:32
>>318
$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
>>326
なるほど。ありがとうございます。やっと納得できました。

$a, $b のほかにはトラップになりそうな変数名ってあったりしますでしょうか?
0328デフォルトの名無しさん2005/06/17(金) 16:42:05
>>327
http://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
>>324
つ[Inline::Ruby]
0330デフォルトの名無しさん2005/06/18(土) 02:48:02
おまえらこれ使え。便利だぞ
http://perltidy.sourceforge.net/
0331デフォルトの名無しさん2005/06/18(土) 03:57:09
英語も読めない、Perlも読めない、ちんこも剥けない俺はどうしたらいいですか?
0332デフォルトの名無しさん2005/06/18(土) 04:29:12
4ね
0333デフォルトの名無しさん2005/06/18(土) 04:45:32
こいつあ便利だ!
0334デフォルトの名無しさん2005/06/18(土) 04:50:36
あれ?タブインデントできないのこれ?駄目じゃん
doc読むのマンドクセーからねるぽ
0335デフォルトの名無しさん2005/06/18(土) 12:51:35
perl版indentか。いいね。
0336デフォルトの名無しさん2005/06/18(土) 13:41:59
C-x h C-M-\
0337デフォルトの名無しさん2005/06/19(日) 10:22:44
コメントが揃うところいいね
0338デフォルトの名無しさん2005/06/20(月) 10:57:16
道程ですが質問があります
Perlで関数の配列を持たせるときに、返り血の値の種類によって異なった宣言が必要ですか?
0339デフォルトの名無しさん2005/06/20(月) 13:08:46
>>338
君はまず基本的な用語の意味を正しく理解し、話相手と意思の疎通が
できるようになるべきだと思う。>>4 や下記スレを参考に、まともな
入門書を一冊手に入れて読んでみてはどうか。

【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
0340デフォルトの名無しさん2005/06/20(月) 16:59:20
お世話になっております。

perlで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
>>340
だから1嫁と。釣り?
03423402005/06/20(月) 17:49:06
>341さん
すいません。
WEBプログラミング板というのがあったのですね、、
ご迷惑をお掛けしました。
0343デフォルトの名無しさん2005/06/20(月) 20:21:54
perl で trap って使えないのでしょうか?
誰か教えてください!
0344デフォルトの名無しさん2005/06/20(月) 20:40:34
>>343
perldoc -q trap
0345デフォルトの名無しさん2005/06/20(月) 21:52:06
http://www.amazon.co.jp/exec/obidos/ASIN/4781907954/
高いレベルの実践書です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
>>344
間違ってないが意地悪かもしれない。
>>343
普通にsignalで調べろ
0347デフォルトの名無しさん2005/06/21(火) 00:42:40
任意の行にログを追加したいのです。
たとえば、100行あるログの50行と51行の間に新しい行を追加するとか。
ネット検索したんですが、やり方を見つけることが出来ません。
誰か教えてください。
コレを使ったら簡単だという関数とか無いんでしょうか?
0348デフォルトの名無しさん2005/06/21(火) 00:52:27
oepn(FILE,"file.txt");
$j=0;
while($line = <FILE>){
push(@log,$i);
$j++;
push(@log,$new) if($j==50);
}

テキトーに考えた。(Perl歴一ヶ月)
0349デフォルトの名無しさん2005/06/21(火) 01:01:36
>>347
ファイルを配列に読み込んでから、spliceで要素を挿入後
配列出力時の区切り文字を\nに変えてprint。
0350デフォルトの名無しさん2005/06/21(火) 01:10:01
区切り文字は空文字だった。。以下source。

oepn(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:40
連投スマソ。もち、$addの末尾には改行文字付けてね。
0352デフォルトの名無しさん2005/06/21(火) 01:32:34
>>347
perl -pi.orig -e 'print "hoge\n" if $. == 51' logfile
0353347(Perl歴二週間) 2005/06/21(火) 01:37:26
早っ。
>348
やっぱ順番に読むのが速いですかね。
>349〜351
なるほど、各行を配列の要素にするんですね。
頭が固いからそういう発想が出てこなかったですよ。
spliceは使ったこと無かったですが、調べたら、やりたかったことが出来そうです。

ありがとうございます。
どちらを使ったらいいか私には判断が難しいですが、
妄想していたものに近いのが後者なので、そちらを使うと思います。
splice以外の関数を使えば「途中に挿入」以外にも出来そうですし。
03543472005/06/21(火) 01:46:11
>352
うおっ。スゴイ。
一番スッキリしてますね。
hoge\nが新しく書き込むログで…
使いこなせるなら使いたいのですが、私にはちょっと勉強が必要かも。
いや、諦めず理解できるようにならねば。
0355デフォルトの名無しさん2005/06/21(火) 06:39:49
例えばaaa.plというスクリプトを実行中、aaa.plのスクリプトの中で
他のスクリプトbbb.plを指定して実行できる関数などありますか?
0356デフォルトの名無しさん2005/06/21(火) 06:43:21
do "bbb.pl";
0357デフォルトの名無しさん2005/06/21(火) 07:04:48
evalで囲め
0358デフォルトの名無しさん2005/06/21(火) 12:12:06
なぜeval?
0359デフォルトの名無しさん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:56
変なことがおきないように
0361デフォルトの名無しさん2005/06/21(火) 13:27:55
「指定して実行」

う〜む
0362デフォルトの名無しさん2005/06/21(火) 13:55:45
>>361
たしかにそこが謎だけど、 system("bbb.pl"); というようなことがやりたいのかねえ?
0363デフォルトの名無しさん2005/06/21(火) 16:57:55
>>359
>my $hoge = new Hoge({ Foo => "foo", Bar => "bar" });
書き捨てのコードじゃなければこれを選択するのが一番。
修正に強い。
メソッドの呼出も含めてね。
0364デフォルトの名無しさん2005/06/21(火) 21:42:08
>>362
実行したファイルの STDOUT の内容が欲しいなら `bbb.pl`だな。
0365デフォルトの名無しさん2005/06/21(火) 21:46:07
>>363
なるほど。継承したりしたときを考えるとそれが良さそうですね。
0366デフォルトの名無しさん2005/06/22(水) 02:28:22
いや、普通はnew Hoge(Foo => "foo", Bar => "bar")だろ。
0367デフォルトの名無しさん2005/06/22(水) 09:57:19
おれはnew Hoge(...)じゃなくてHoge->new(...)派なんだが
引数の話だから関係ないか

0368デフォルトの名無しさん2005/06/22(水) 11:03:35
do関数で

do 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:18
>>368
http://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
>>369
リンク紹介ありがとうございます。
ところで、どれもこれもモジュールを使用するようですが
使用しない方法はありますか?
0371デフォルトの名無しさん2005/06/22(水) 16:10:18
俺ならML使うんだけどね
0372デフォルトの名無しさん2005/06/22(水) 16:23:23
>>370
それぞれのモジュールの機能を自分で書けばいいだけ。
0373デフォルトの名無しさん2005/06/22(水) 18:47:33
my $edit_url = sprintf ("%s?choice=edit;id=%d", url (), $row->{id});
my $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
perl -e "while (<ARGV)) { $line = $_; if (!m/^S7/) { print; } } print $line; }" foo.mot bar.mot baz.mot > hoge.mot
と書いたときに、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
>>374
漏れなら Makefile でこうする。

hoge.mot: foo.mot bar.mot baz.mot
    perl -e "..." foo.mot bar.mot baz.mot > $@
03763742005/06/22(水) 19:34:45
すいません、一応自己解決したんですが、なんかダサい。
perl -e "foreach (@ARGV) { -e or die } while (<ARGV>) { $line = $_; if (!m/^S7/) { print } } print $line;" $(MOTS) > $@
もっと短くできないですかね _| ̄|○|||
03773742005/06/22(水) 19:55:32
>>375
何か、それでは >374 のサンプルコードから本質的に代わってない希がします。
ひょっとして、依存関係行に依存ファイル foo.mot, bar.mot, baz.mot をきちんと書いておけば
bar.mot とかが見つからなかった (および生成もできなかった) 場合、make が勝手に止まるダロウ、
というご提案なのかもしれませんが、少なくとも今使ってる GNU Make 3.71 では
止まらないのでつ; (コマンド行が実行される。)
0378デフォルトの名無しさん2005/06/22(水) 20:01:36
>>377
マジで? Makefile の該当部分見せてみ。
03793742005/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:28
warningをつかまえてなんかしたいのなら$SIG{__WARN__}使え
0381デフォルトの名無しさん2005/06/23(木) 01:52:14
質問者に童貞が多いのは気のせい?
0382デフォルトの名無しさん2005/06/23(木) 01:58:05
>>381 は童貞か?何のためにそんな書き込みをするんだ?恥ずかしくないのか?
お前が童貞である原因はお前自身なんだから、
お前が行動起こさないとどうしようも無いことぐらい分かってるだろ?
くだらない書き込みをするな。
03832422005/06/23(木) 02:01:08
>>381も質問してるから
>>381は自分で自分が童貞だと認めたわけだ。
0384デフォルトの名無しさん2005/06/23(木) 02:01:25
>>382が童貞であることはわかった
0385デフォルトの名無しさん2005/06/23(木) 02:02:43
>>383
名前欄は何だ?
0386デフォルトの名無しさん2005/06/23(木) 02:03:23
>>384
なんでそこでageたんだ?
0387デフォルトの名無しさん2005/06/23(木) 02:40:51
勝ちたい時にはFカップ
0388デフォルトの名無しさん2005/06/23(木) 02:41:32
なんで顔が真っ赤なんだ?
0389デフォルトの名無しさん2005/06/23(木) 02:42:39
>>388
なっ・・・・バカッ!勘違いしないでよ!!
0390デフォルトの名無しさん2005/06/23(木) 02:44:51
切り返しにワロタ
0391デフォルトの名無しさん2005/06/23(木) 02:51:34
>>389
もっとくやしく
0392デフォルトの名無しさん2005/06/23(木) 08:17:25
>>389
もっとはじらいを込めて
0393これはどうなったんですか?2005/06/23(木) 10:07:53

466 名前: デフォルトの名無しさん 03/12/07 17:32
「Perlについての質問箱」シリーズもかなり息の長いスレになってきますた。
ここで勝手連的にこのスレのサポートページを作ろうと思っています。
いま考えているのは、
1. このシリーズの過去ログアーカイブ
2. スレッド専用ソースコードうpろだ
3. 過去ログのダイジェスト (Q&Aにまとめたもの)
4. リンク集
こんなところかな。
きながにまっててください。
0394デフォルトの名無しさん2005/06/23(木) 14:21:29
>>391-392

し・・・知らない! 放っといてよ!!
0395デフォルトの名無しさん2005/06/23(木) 16:05:33
>>373
わからないのは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
require 'jcode.pl';
使って文字化け防止したのに 文字化けたorz
「構」とか「急」とかばけらった・・・どうしたらばけないっすか?
0397デフォルトの名無しさん2005/06/24(金) 15:57:58
エスパーキボンヌですか?
0398デフォルトの名無しさん2005/06/24(金) 16:08:34
perlでサムネイル画像とファイル名称の管理をしたいと考えています。
諸般の事情から、imagemagik を使いたいのですが、実際のサンプル
コードが転がっていません。

どなたか親切な方、PerlとImagemagikが共存したサンプルコードの
在り処を教えてくれませんか?

ちなみに童貞ではありません。
0399デフォルトの名無しさん2005/06/24(金) 16:11:14
>>398
> perlでサムネイル画像とファイル名称の管理をしたいと考えています。
> 諸般の事情から、imagemagik を使いたいのですが、実際のサンプル
> コードが転がっていません。

そのimagemagikとかいう、なに? パッケージ? ファイル? 商品?
の供給先に質問してください。
0400login:Penguin2005/06/24(金) 16:19:48
>>398
ttp://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
3つの中から1つを選んで、「正解」「おしい」「だいぶ違う」のどれかを表示sるうCGIを作ってください。
という問題で作ってみたのですが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
>>401
>>1
0403デフォルトの名無しさん2005/06/24(金) 17:40:39
>>401
} elsif {
0404デフォルトの名無しさん2005/06/24(金) 21:22:30
>>401
下から2行目の"}"
0405デフォルトの名無しさん2005/06/25(土) 00:43:25
>>404
良く見れ。
0406デフォルトの名無しさん2005/06/25(土) 00:55:09
>>396
君の質問を理解できるエスパーを一生待ってなさい
0407デフォルトの名無しさん2005/06/25(土) 02:02:18
>>405
スマソ
0408名無しさん@Vim%Chalice2005/06/25(土) 02:29:24
あるファイルの先頭とEOFの空行を取りのぞく常套手段ってどんなかんじ?
0409デフォルトの名無しさん2005/06/25(土) 08:40:55
そのハンドル名は伊達ですか?
0410デフォルトの名無しさん2005/06/25(土) 10:52:44
>>408
このスレの過去ログを読んでごらん。
0411名無しさん@Vim%Chalice2005/06/25(土) 12:49:02
全員氏ねボケッ
0412デフォルトの名無しさん2005/06/25(土) 14:56:28
(笑)
0413デフォルトの名無しさん2005/06/27(月) 15:17:44
今年の暮れくらいにはPerl6のスレが乱立するのだろうか。
0414デフォルトの名無しさん2005/06/27(月) 16:00:30
perl6ってcvsとかでとれる?
0415デフォルトの名無しさん2005/06/27(月) 18:31:51
まだ出てないワイ。
0416デフォルトの名無しさん2005/06/27(月) 18:42:02
ベータテストっていつはじまりんぐ?
0417デフォルトの名無しさん2005/06/27(月) 20:56:57
Perl6なぁ。頼むから早く出してくれよって感じ。
0418デフォルトの名無しさん2005/06/27(月) 21:35:22
$aaa = 'aaa:bbbb :cc :ddd';から、@abc = ('aaa','bbbb','cc','ddd')
みたいな配列 @abc を作りたいのですが、どうすればよいのでしょうか。
現在はとりあえず、
@abc_tmp = split(/\:/, $aaa);
foreach(@abc_tmp) {
if (/^(\w+)/) {
push(@abc,$1);
}
} としていますが、もっと良い方法があると思うのですが。
よろしく御示唆お願いします。
0419デフォルトの名無しさん2005/06/27(月) 21:41:33
Perl5.8〜を使っているのですが、
日本語を表示するときに、文字化けしてしまう事が多々あるのですが、対処法などありませんでしょうか
0420デフォルトの名無しさん2005/06/27(月) 21:47:13
>>418
ヒント: splitについて詳しく調査せよ。
0421デフォルトの名無しさん2005/06/27(月) 21:50:49
>>419
ま、取りあえずプログラムの先頭に
use encoding 'shiftjis';
binmode STDERR, ':encoding(shiftjis)';
の2行を入れてみ?
あとは、ググって自分で調べるよろし。
04224212005/06/27(月) 21:56:02
>>421は、Windows/DOS系の場合な。
Unix系なら euc-jp
04234192005/06/27(月) 22:23:20
>>421-422
ありがとうございます。助かりました。
もっと自分で調べてみないと駄目ですね・・・
0424デフォルトの名無しさん2005/06/28(火) 00:49:25
>>418
思考か経験が足りないだけだな。
君には簡単にできる。ガンガレ
0425デフォルトの名無しさん2005/06/28(火) 01:23:13
Shift_JISコードを含んだcsvファイルからperlで
EUCやUTF-8に変換せずにフィールドから項目を抜き出すコードを教えて下さい。
改行,カンマ,ダブルクォートを含んだフィールドはダブルクォートでクォートされ
フィールドに含まれるダブルクォートは、バックスラッシュでなくダブるクォートの
二重化でエスケープされています。
さらに下位バイトにダブルクオートとおなじコードを含む漢字も混在しています。
0426デフォルトの名無しさん2005/06/28(火) 03:59:19
>>425
出力結果がsjisならいいんでしょ?
変換せずに、とか変な条件付けない方がいいんじゃないのかな。
0427デフォルトの名無しさん2005/06/28(火) 04:48:49
>>425
> さらに下位バイトにダブルクオートとおなじコードを含む漢字も混在しています
それは本当に Shift_JIS なのか?
Shift_JIS 以外に UCS2 も混在していますとか言い出さないでくれよ?

http://www.din.or.jp/~ohzaki/perl.htm#CSVwithCRLF
0428デフォルトの名無しさん2005/06/28(火) 10:17:43
>>426
禿同。eucかunicodeに変換して処理してからsjisに戻す方が
余計なこと考えるよりたいていは楽。

ただシフトJISの下位バイトは0x00〜0x3fは避けてあるので
427も指摘しているとおり「下位バイトにダブルクオートと
おなじコードを含む漢字も混在しています。」なんてことは
ありえないんじゃなかったっけ。エスケープに逆スラッシュ
使ってると面倒なんだけど今回はそうではないようだし、
何も気にせずやっても問題ないような気がする。

0429デフォルトの名無しさん2005/06/28(火) 12:53:05
>>426-428
助言ありがとうございます!
ダブルクォートは、バックスラッシュの書き間違いですすみません。
最初、PHP使っていて標準のCSV関数を使っていたら、
漢字コードのバックスラッシュを勝手に解釈されてわやくちゃになってしまいました。

Perlだと漢字変換せずにもっとすっきりした書き方ができるかなと思っていました。
>>427のPerlメモは参考にさせていただきます。助かりました。
0430デフォルトの名無しさん2005/06/28(火) 18:30:56
本を買うのに悩んでいます。
CGIで掲示板なら1から作れ、普段からちょっとしたテキスト処理にPerlを用い、OOPはできていないくらいのユーザです。
これからプログラミングPerlのvolume1と2を買おうと思いますが、他にお勧めはありませんか?
0431デフォルトの名無しさん2005/06/28(火) 18:35:32
>>430
【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
0432デフォルトの名無しさん2005/06/28(火) 18:59:20
>>430
> 本を買うのに悩んでいます。

本などに頼るな。
0433デフォルトの名無しさん2005/06/28(火) 19:06:45
本を頼ることにしか使えないのはお前だけ
0434デフォルトの名無しさん2005/06/28(火) 19:07:52
中国語、日本語混在で扱わなければならないので、初めてUTF-8なperl/CGIにしよう
と、簡単なサンプルスクリプトを書いて見ました。
がうまくいきません。
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:30
>>434
UTF-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
>>435
早速お返事ありがとうございます。

エディタは Peggy Pro とterapad を使って、両方試してみました。
0438デフォルトの名無しさん2005/06/28(火) 19:34:20
>>437
ぐぐってUTF-8NとUTF-8とBOMの件、探し当てました。
UTF-8N指定でうまくいきました。ありがとうございます。
BOMについてはまだ理解していませんが、勉強します。
0439430:本2005/06/28(火) 19:40:30
>>431
誘導ありがとうございます。
該当スレを読んでみます。

>>432
今まで改造やネットなどから学んでいたので基礎を固めようと思ったのです。
0440デフォルトの名無しさん2005/06/28(火) 19:55:49
>>436
@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:24
>>436 >>440
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_tell_whether_an_list_o
04424182005/06/28(火) 20:50:41
できました!
splitがヒントということで、まずはこんなものを書いてみました
@abc = split(/[^\w]/, $aaa);
完璧だと思ったのですが、結果は@abc=('aaa', 'bbbb', '', 'cc', '', 'ddd')、、、

ならば、と思って、
@abc = split(/\s*\:\s*/, $aaa); としたら、、うまく出来ました!
splitの中は , や : のような文字だけしか使えないと思っていました。
こんなことも出来るんですね。今後いろいろ使えそうです。
>>420さん、 >>424 さん、どうもありがとうございました。
0443デフォルトの名無しさん2005/06/28(火) 22:23:12
>>429
Text::CSV_XS or Text::CSV_PP あたりを使ったら?
0444デフォルトの名無しさん2005/06/28(火) 22:27:05
>>442
ロクに読まずにカキコ
@abc = split(/[^\w]+/, $aaa);
04454182005/06/29(水) 00:42:32
>>444
うわ、できました。しかも、この方法だと
$aaa='aaa:bbbb : cc:dddd ';みたいに、末尾にスペースのみが
ある時でもちゃんと取れますね。
ありがとうございます。勉強します。
0446デフォルトの名無しさん2005/06/29(水) 00:49:23
>>445
あえて/[^\w]+/って書いたけど/\W+/でおk
0447デフォルトの名無しさん2005/06/29(水) 01:37:57
Perlで実装したSOAPサーバに、C++で実装したクライアントでアクセスする
方法知りませんか?
0448デフォルトの名無しさん2005/06/29(水) 02:49:34
>>447
近所にできたセブンイレブンに自転車で行く方法を知りませんか?

と同じような質問だな。
0449デフォルトの名無しさん2005/06/29(水) 04:05:23
>>447
Inline::C++
0450デフォルトの名無しさん2005/06/29(水) 06:44:24
>>448
答えられないのにわざわざしゃしゃり出てきて書くほど
面白い比喩ではないですね ;-)
0451デフォルトの名無しさん2005/06/29(水) 08:25:45
>450
しかし答えられないのは確かだ。
そのC++クライアントの実装方法を答えればいいのか、
だとしたらその仕様はどこでわかるのか。
それともそのC++クライアントの操作方法を答えればいいのか、
だとしたらその製品は何なのか。
などなど、答えるために必要な前提が揃っていない。
0452デフォルトの名無しさん2005/06/29(水) 12:29:34
>>447
っていうか「Perlで実装した」って部分は言う必要なし
要は、SOAPサーバにC++で実装したクライアントからアクセスしたいって話しになる
とするとスレ違い
0453デフォルトの名無しさん2005/06/29(水) 16:24:37
>>451
>>452

根本的に、SOAPとして実装したサーバ(CGIとかでも)は、異なるプログラム言語
からでもアクセスできるもの?

できるなら、C++でもC#にしても、実装方法を示したサンプルプログラム
みたいなのはないですかね?
0454デフォルトの名無しさん2005/06/29(水) 16:35:41
>>453
まぢで言ってるのか(@_@; 「プロトコル」って何のために決まっているのか理解してる?
0455デフォルトの名無しさん2005/06/29(水) 16:39:19
こんな質問をする人間がいったいどういう人間なのか知りたい。
嘘コンサルがプレゼン資料か何か作ってるんか?
0456デフォルトの名無しさん2005/06/29(水) 16:43:46
From: [761] 名無しさん@お腹いっぱい。 <>
Date: 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:43

From: [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:39
自己紹介: ITコンサルタントです。ただの技術コンサルから、脱皮を目指してます。
0459デフォルトの名無しさん2005/06/29(水) 18:00:51
>>453
http://www.xmethods.org/ を穴が開くほど眺めたらあとはどっかいってくれ。
0460デフォルトの名無しさん2005/06/29(水) 18:22:35
perlスレでC++だのC#の質問をされてもなぁ...
0461デフォルトの名無しさん2005/06/29(水) 18:44:15
print "<input type='hidden' name='no' value='$no'>";

これ、シングルクォートで囲んでるのに問題なく変数展開されるんですが、
普通の挙動ですか??
0462デフォルトの名無しさん2005/06/29(水) 18:50:32
>>461
それはシングルクォートで囲んでいるのではなく、(文字としての)
シングルクォートを含むダブルクォート文字列だ。

print '<input type="hidden" name="no" value="$no">';

君の理屈だと上のは $no が展開されなければいけないが
そうならないだろ?
0463デフォルトの名無しさん2005/06/29(水) 21:56:03
HTML文法エラー
0464デフォルトの名無しさん2005/06/30(木) 06:15:44
何が?
0465デフォルトの名無しさん2005/06/30(木) 12:15:36
>>462
なるほど。よく
print "<input type='hidden' name='no' value=\"$no\">";
なんてエスケープしたダブルクォート使って書いてるの多いので、
ダブルクォート内でもシングルクォートで囲っちゃうと変数展開しないから
わざわざこんな面倒なことしてるのかと思いました。

いろいろ調べても
「ダブルクォート内は変数展開するけど、シングルクォート内はしない」
って説明しかないもので。

どうも
0466デフォルトの名無しさん2005/06/30(木) 12:49:48
>>465
ダブルクォート内のダブルクォートのエスケープは、
エスケープしないと、そこが文字列の終わりとみなされちゃうからだね。

↓これを比べればわかるかな?

print "foo\".\"bar";
print "foo"."bar";
0467デフォルトの名無しさん2005/06/30(木) 16:46:34
↑と同じ効果

print qq[foo"."bar];
print qq!foobar!;
0468デフォルトの名無しさん2005/06/30(木) 20:22:20
<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)を取り出すことはできるのでしょうか?
複雑すぎてよくわかりません。どなたかおしえてください。
0469デフォルトの名無しさん2005/06/30(木) 20:23:14
require してロードしたパッケージがあるとしますが、これをアンロードすることは
できますでしょうか?
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
>468
上のコードだけならこれでとれるのでは? コード as-is でパタンマッチ。
/\<span class\=\"locus_id\"\>\<font size\=\"\+2\"\>(.*)\<\/font\>\<\/span\>
0472デフォルトの名無しさん2005/06/30(木) 21:20:08
その変なエスケープは何なんだ
0473デフォルトの名無しさん2005/06/30(木) 21:21:24
エスケープだらけワラタw
0474デフォルトの名無しさん2005/06/30(木) 21:32:43
m|<span class="locus_id"><font size="\+2">(.+?)\.</font></span>|;
0475デフォルトの名無しさん2005/06/30(木) 21:38:48
>>469
できない。
0476デフォルトの名無しさん2005/06/30(木) 23:05:40
>>474
\.ワラタ
0477わから〜ん2005/06/30(木) 23:13:37
1行目 my $edit_url = sprintf ("%s?choice=edit;id=%d", url (), $row->{id});
2行目 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
/test/hoge/fuga.wmv"><mfaoeaifjeofaejfoaeigaho
とかいう文字列があったとして、wmv 以降を空白に置換するにはどのように
記述すればよいのでしょうか?

while ( <> ) {
if ( $_ =~ /wmv/ ) {
$_ =~ //
}
}

こんな感じで、ファイルから読み込んで、置換したいのです。
0479デフォルトの名無しさん2005/06/30(木) 23:20:19
>>478
そういうのはindexとsubstr使ったほうが速い。
0480デフォルトの名無しさん2005/06/30(木) 23:39:04
>>479
レスありがとうございます。さっそく調べてみました。
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
置換じゃなくて後方参照($1)じゃだめなの?

$_ =~ /^.*\.wmv/;
$wmv = $1;

これで $wmv に「/test/hoge/fugaaaa.wmv」がはいる。
はず。確認してないけど。
0482デフォルトの名無しさん2005/06/30(木) 23:53:25
入らねーよ
0483 ◆TWARamEjuA NGNG
>>481
確認しましょうね♪
0484デフォルトの名無しさん2005/06/30(木) 23:55:54
>>481
while( <> ) {
$_ =~ /^.*\.wmv/;
$wmv = $1;
print $wmv;
print "\n";
}

すみません。でやってみたのですが、どうしてか、何も表示されません。
後方参照ですか。ググって見ましたが、難しそうで、すぐに理解できそう
もないっす
0485デフォルトの名無しさん2005/06/30(木) 23:58:28
>>479
index で wmv の位置調べて substr で切り取る。

$position = index($_, "wmv");
# wmv の長さが 3 だから +3 してる。本当は length 使って長さ取ったほうがいい。
$str = substr($_, 0, $position + 3);

こんな感じ。
04864812005/07/01(金) 00:03:44
>>482-484
(^ω^)ごめww正規表現の書き方わすれちゃった♪
while ( <STDIN> ) {
  if ( $_ =~ /^(.*)\.wmv/ ) {
    print $1;
  }
}

これでできるだろ!ちっきしょー
0487デフォルトの名無しさん2005/07/01(金) 00:06:16
>>485
おぉ、いけました!
index の戻り値としてその長さが返って来るのでしたか。
length も一応調べたりしました。のちのちの参項にさせていただきたいっす。
ありがざいます

# >>481 の方も、レスありがとうでした
04884812005/07/01(金) 00:06:18
ごめん。.wmvが抜けてた。改行もしてみた。また書き直さして。

while ( <STDIN> ) {
  if ( $_ =~ /^(.*\.wmv)/ ) {
    print $1,"\n";
  }
}

つか、本当に↓みたいなファイルしか考慮してないお(^ω^)
/test/hoge/fugaaaa.wmv">gaeafaefewfwefwe
/test/hoge/fugabbbbbbb.wmv">faefaefefa
/test/hoge/fugaccccccccccc.wmv"><faefaefaefaef
04894812005/07/01(金) 00:06:54
解決してる・・・(^ω^;)カナシス
0490デフォルトの名無しさん2005/07/01(金) 00:08:57
ちなみにsubstrはlvalueとしても使えるらすい。

$str = '/test/hoge/fuga.wmv"><mfaoeaifjeofaejfoaeigaho';
$exp = '.wmv">';

substr( $str, index($str, $exp) + length $exp ) = '';

print $str;
0491デフォルトの名無しさん2005/07/01(金) 00:11:55
ユニットテストする習慣くらいつけようや。
0492デフォルトの名無しさん2005/07/01(金) 00:16:17
>>488
ちゃんと試してみました。完璧です。
インデントで、全角スペースもちゃんとこちらで削除してるんで、
問題ないっす。
>>490 そんな使い方もしりませんでした。空文字列を結合してるのですね。

本当にお勉強になりました。
0493デフォルトの名無しさん2005/07/01(金) 08:03:10
$cat file.txt | perl -ne 'print if /abc/'

という部分で、print if の部分を省略する方法はありますか?
たしかあったと思うのですが、どういう風にやるのか忘れてしまいました。
0494デフォルトの名無しさん2005/07/01(金) 09:02:49
>>493
そこは省略できない。

perl -pe "s/foo/bar/"

と混同しているのでは。
0495デフォルトの名無しさん2005/07/01(金) 09:32:12
>>494
なるほど。おっしゃる通りです。ありがとうございました。
0496デフォルトの名無しさん2005/07/01(金) 10:50:42
あるCGIに自動で、POSTメソッドで、値を渡すにはどうすればいいんでしょうか?
0497デフォルトの名無しさん2005/07/01(金) 11:13:32
>>496
スレ違いというか板違いというか、とりあえずPerlの質問ですらないな。

WebProg にでもいきなされ。
http://pc8.2ch.net/php/
0498デフォルトの名無しさん2005/07/01(金) 11:46:46
>>497
サーバサイドではないのです。詳しく言うと
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
perlでmain.cgiにPOSTさせたいって事?
個人的にはJavaScriptで勝手に送信させたほうが楽だと思う。
0500デフォルトの名無しさん2005/07/01(金) 12:09:54
>>499
そうです。Perlがいいんです。
0501デフォルトの名無しさん2005/07/01(金) 12:14:51
>>500
perldoc LWP
perldoc LWP::UserAgent
0502デフォルトの名無しさん2005/07/01(金) 12:16:20
ヒント:Socket

ところで Perl にこだわる理由はなに?
0503デフォルトの名無しさん2005/07/01(金) 12:17:48
ネットワーク関数はあんまり分からなくて、
ソケットつないでどうのこうのぐらいしか思いつかない。
分かる人にバトンタッチ
0504デフォルトの名無しさん2005/07/01(金) 12:19:55
>>500
http://www.unix.org.ua/orelly/perl/cookbook/ch20_03.htm
05055012005/07/01(金) 12:24:59
>>502-503
最近はそーゆー低水準なところから組み上げる必要は滅多になくて、使いたいプロトコルに対応したライブラリを利用するだけで大抵のことは何とかなりまつ。
05065032005/07/01(金) 12:40:56
低水準なんすか・・
まぁ、関数一つ一つ追っていくのが楽しいので見逃してくらはい。
0507デフォルトの名無しさん2005/07/01(金) 12:44:41
>>506
> 低水準なんすか・・
> まぁ、関数一つ一つ追っていくのが楽しいので見逃してくらはい。

中途半端。サブルーチンを一つ一つ追っていくのが
楽しいのなら、socketから突っ込むべき。
0508デフォルトの名無しさん2005/07/01(金) 12:51:24
おっと、ソケットもモジュールだった・・
05095012005/07/01(金) 13:22:04
>>506
何か誤解されてるよーな気がしますが、ここで言う「低水準」は、よりプリミティブに近いもの、とゆー意味でつ。
言語で言うところの、高級(より人間に理解しやすい)⇔低級(より機械語に近い)のよーなもの。
0510デフォルトの名無しさん2005/07/01(金) 14:16:08
use HTTP::Request::Common qw(POST);
use 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
>>499
最近Perlはじめたからです
0512デフォルトの名無しさん2005/07/01(金) 14:55:29
インストールしてるモジュールをまとめてアップデートするの、
CPANでどうやるんでしたっけ?
0513デフォルトの名無しさん2005/07/01(金) 17:37:40
遅れレスですまんが。
>>485 にはバグがある。入力が、例題そのままの
/test/hoge/fuga.wmv"><mfaoeaifjeofaejfoaeigaho
ならいいが、
/test/wmv/fuga.wmv"><mfaoeaifjeofaejfoaeigahowmv
とかだったらどうするつもりなのだろうか・・・
05145132005/07/01(金) 17:55:02
せめて . や、"> という区切り部分文字列までマッチングに含めるべきじゃまいか。

いやま、どこまでも厳密な結果を求めようとすれば
いずれ正規表現 (FSM による構文解析器と同等) の
手に余ることになるのは承知で言うのだけど。
0515デフォルトの名無しさん2005/07/02(土) 00:10:23
超初心者なんですが。。

for($aaa=0;$aaa<1000;$aaa++)

だと、aaaは0 1 2 ・・・・ 999ってなりますよね。
000 001 002 ・・・・ 999 ってするには?
0516デフォルトの名無しさん2005/07/02(土) 00:15:29
sprintf("%.3d", $aaa);
0517デフォルトの名無しさん2005/07/02(土) 00:26:16
>>515
for my $aaa ('000'..'999') { ... }
0518デフォルトの名無しさん2005/07/02(土) 00:32:41
見当違いな質問かも知れません。
mod_perlを導入する場合、何らかの条件分けでmod_perlを用いるかどうかスクリプトごとに分けるものでしょうか?
それとも導入と共にスクリプトを修正して、今後のコーディングをmod_perl仕様にするといった感じでしょうか?
0519デフォルトの名無しさん2005/07/02(土) 01:01:10
>>510

use 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:50
すまん、コピペミスったのでちょっち修正。

use 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
>>498
つーかルータ買い換えたほうがいいんじゃね?
一日一回、再起動が必要なんてヒドス
0522デフォルトの名無しさん2005/07/02(土) 01:13:58
ID変えたいだけじゃね?
0523デフォルトの名無しさん2005/07/02(土) 02:21:05
>>518
ttp://mm.apache.jp/pipermail/apache-users/2005-June/005518.html
0524デフォルトの名無しさん2005/07/02(土) 04:50:59
>>516
sprintf 使うなら、%3d じゃなく %03d
0525デフォルトの名無しさん2005/07/02(土) 06:05:52
>>524
. を見落としてる。
%03d だと 3 「文字」に満たない場合は 0 でパディング。
%.3d だと 3 「桁」 に満たない場合は 0 でパディング。
少なくとも 0 〜 999 では同じ結果になる。

printf '%03d, ' x 4 . '%.3d, ' x 4, (1, 1234, -1, -1234) x 2;
05265152005/07/02(土) 09:44:49
解決しました。
結構あっさりなもんですね
0527デフォルトの名無しさん2005/07/02(土) 11:12:50
>>519,520
両方試してみたけどうまくいけね。自分でがんばってみるお。
>>521
何かISPが何かしてるからか知らないけど、12時になったら繋がらなくなる。
んで再起動したらなぜか繋がる。
0528デフォルトの名無しさん2005/07/02(土) 11:44:21
あ、すいません。
192.168.1.1
にアクセスするには
http://aploda.org/dat1/upload43321.gif
↑こんなんでログインしないといけないようです。
だから無理だったようです。
自分だけでがんばってもどうにもならないようです。
0529デフォルトの名無しさん2005/07/02(土) 11:56:51
ヒント: Authorizationヘッダ
05305182005/07/02(土) 16:32:48
色々調べてみたのですがFastCGIとも一長一短あって悩みますね。
>>523
どうもありがとうございました。
0531デフォルトの名無しさん2005/07/02(土) 17:23:15
>>529
よぐわがんね。
0532デフォルトの名無しさん2005/07/02(土) 17:23:17
おそらく 192.168.1.1 がISPの何かとバッティングしてルータの挙動がおかしくなるといってみるテスツ
ルータの設定で 192.168.1.100 とか 192.168.100.1 にしてみれとなんとなく言ってみるテスツ
0533デフォルトの名無しさん2005/07/02(土) 17:30:43
Authorizationヘッダをどう送ったら許可されるですか。
ていうか、Perlでどう送るんですか。

よぐわがんね。
0534T女の竹田2005/07/02(土) 17:34:47
>>498
PerlさんよりWSHのほうがいいと思うよ。
スレ違いだけど、JScriptなら
var ie = WScript.CreateObject("InternetExplorer.Application");
ie.Navigate("...");
WScript.Sleep(3000);
ie.document.forms[0].submit();
こんな感じかな?
0535デフォルトの名無しさん2005/07/02(土) 17:36:56
>>534
JSとかわがんね。
0536デフォルトの名無しさん2005/07/02(土) 17:39:28
>>532
見落としてたけど、言ってることよくわがんね。
0537デフォルトの名無しさん2005/07/02(土) 19:15:30
もう帰れ
0538デフォルトの名無しさん2005/07/02(土) 19:15:54
お断りだ
0539デフォルトの名無しさん2005/07/02(土) 19:19:49
while ( <> ) {
if ( $_ =~ /test/ ) {
;
}
else {
print $_, "\n"
}
}

読み込んだファイルに、testが含まれている行は出力しないって処理が
したいんですけど、もっとスマートにならんものでしょか?
0540デフォルトの名無しさん2005/07/02(土) 19:20:31
すいません、Perl で tar 圧縮したいんですが方法をググりましたが情報が探せませんでした。

モジュール名だけでも結構ですので、どなたか教えてください。宜しくお願いします。
0541デフォルトの名無しさん2005/07/02(土) 19:25:07
>>537-538
0542デフォルトの名無しさん2005/07/02(土) 19:30:23
while(<>){print unless /test/}
これじゃだめでしょうか>>539
0543デフォルトの名無しさん2005/07/02(土) 19:43:45
内容が重なってる行を削除したいんですけど、久しぶりだった所為か挫折した。
誰か頼む。
0544デフォルトの名無しさん2005/07/02(土) 20:03:16
>>540
http://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
>>543
ソートしていいならperl使うまでもない常套句:
cat hoge | sort | uniq > fuga
があるが…
0546デフォルトの名無しさん2005/07/02(土) 21:00:13
>>542
スゴすぎ・・・orz
そんな書き方があったのですか。正直初心者のわたくし驚きました
ありがとうございました。and レスちょっと遅れちゃったみたいで申し訳ないっす
0547デフォルトの名無しさん2005/07/02(土) 21:00:45
>>544
これさえ出来ればプログラムは2年以上使わない予定なんだ。
>>545
Windowだから無理
0548デフォルトの名無しさん2005/07/02(土) 21:04:57
open (IN,'a.txt');
@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:29
>>547
Windows(DOS)で動くcat/sort/uniqなんて、腐るほど存在するが…
0550デフォルトの名無しさん2005/07/02(土) 21:15:13
sort -u ファイル名
0551デフォルトの名無しさん2005/07/02(土) 21:22:11
>>545
うまくいかない
cat a.txt | sort | uniq > b.txt
>>549
ほんとだ。ありがとう。
>>550
入力ファイルが 2 度指定されました。
0552デフォルトの名無しさん2005/07/02(土) 21:33:42
もういいお!お前ら!
0553デフォルトの名無しさん2005/07/02(土) 21:35:42
>543
:英語だけど ウェブからも読める Cookbook 初版から
http://www.sarinaga.com/progtoy/perlcookbooklink.html
の、レシピ 4.6 が詳しい。(内容は 544 と同じだけど)
0554デフォルトの名無しさん2005/07/02(土) 22:37:30
もういいお^^
05555102005/07/03(日) 03:38:29
皆さんありがとうございました。
他所で聞いてきます
05565402005/07/03(日) 03:53:59
>>544
ありがとうございます。
すごく参考になります♪
0557デフォルトの名無しさん2005/07/03(日) 07:17:48
Perlスクリプトをコンパイルするのにperlccとperl2exe以外にないの?
0558デフォルトの名無しさん2005/07/03(日) 07:47:28
>557
PAR とか?
0559デフォルトの名無しさん2005/07/03(日) 07:48:14
>>557
perl(1)
http://perldoc.jp/docs/modules/PAR-0.75/lib/PAR/Intro.pod
0560デフォルトの名無しさん2005/07/03(日) 07:55:27
>>577
PerlApp
perlbin ( perlbin.sf.net )
0561デフォルトの名無しさん2005/07/03(日) 08:20:29
Perl5.8でnkfって完全に不要になる?
まあnkfは手軽でいいんだけど。
0562 ◆TWARamEjuA NGNG
Perl Bone on Xcode

は、ちょと趣が違うか(苦笑)
0563デフォルトの名無しさん2005/07/03(日) 10:58:59
パッケージ内の関数のリファレンスを取る場合は、

$ref = \&TEST::test;
$ref->test();

このような形で取れますが、関数ではなくパッケージ自体(上の例だとTEST)のリファレンスを
取得して、そこから関数を実行するにはどのように行えばよいのでしょうか?
0564デフォルトの名無しさん2005/07/03(日) 12:44:42
>>561
それどころかpiconvなるコマンドが添付されてる。
単純なことならNKFでいいけどね。
0565デフォルトの名無しさん2005/07/03(日) 12:50:40
>>563
TESTパッケージのシンボルテーブルは%{TEST::}
0566デフォルトの名無しさん2005/07/03(日) 13:18:09
>>564
おお、ほんとだ。知らなかった。
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
>>565,567
単純に TEST:: でリファレンスは取れるんですね。
ありがとう御座います。助かりました。
0569デフォルトの名無しさん2005/07/03(日) 16:50:12
ActivePerl 5.8.7.813のEncode::from_toってバグってない?
第4引数に何か渡すと100%失敗するんだけど。
0570デフォルトの名無しさん2005/07/03(日) 16:50:47
ちなみに5.8.4では動いてたのに5.8.7にバージョンアップしたら
まったく同じソースコードでも動かなくなった。
0571デフォルトの名無しさん2005/07/03(日) 16:55:13
ActiveState の Bug Database に3件ほど投稿してやったのに、
半年たっても Unconfirmed のまま。
奴等、真面目にやる気あんのか!(-_-メ)
0572デフォルトの名無しさん2005/07/03(日) 18:30:51
仕方ないからEncode::from_toのソース見てバグってる部分を自前で書き直して回避。
何でこんなことしなきゃならんのだ…
0573デフォルトの名無しさん2005/07/03(日) 18:39:59
>>569-572
よく分からないけど乙。
そのうち報われるさ。
0574デフォルトの名無しさん2005/07/03(日) 18:42:08
プログラム板が荒れているため、IDを導入するか検討中です。
賛成の方も反対の方も、このスレで自分は賛成か反対かをお書きください。

プログラム技術板に強制ID制を導入すべきか否か
http://etc4.2ch.net/test/read.cgi/vote/1118144381/

理由などの記入は別に構いません。
<<賛成>>か<<反対>>かだけ御記入頂ければ結構です。
ちなみに、当たり前ですが運営の方にIPが見えているので、1日ごとにIDが変わるからといって多重投稿しないでください。
0575 ◆TWARamEjuA NGNG
>>574
あちこちにマルチポストしないでね。@現在20件
0576デフォルトの名無しさん2005/07/03(日) 19:51:48
文字列をUTF-8から7bitのJISに変換したいのですがどうしたらいいでしょうか?
0577デフォルトの名無しさん2005/07/03(日) 19:54:13
use Encode;
Encode::from_to($mojiretu, 'utf8', 'iso-2022-jp');
0578デフォルトの名無しさん2005/07/03(日) 20:22:27
>>571-572
ActivePerlじゃなくてEncodeの問題?
なら、Jcodeメーリングリストに報告したら修正してくれるよ。

0579デフォルトの名無しさん2005/07/03(日) 22:24:40
floatの4バイトのバイナリデータ(リトルエンディアン)をマックで正しく読み込むには、どうしたら良いでしょうか?
0580デフォルトの名無しさん2005/07/03(日) 22:40:44
バイトオーダー以外が共通なら unpack('f',pack('N',unpack('V',$float))) とか。
0581デフォルトの名無しさん2005/07/03(日) 23:33:23
>>580
うまくいきました。どうもありがとうございます。
0582デフォルトの名無しさん2005/07/03(日) 23:41:26
cryptで暗号化された文字を解読出来ないかと思い
http://www6.wind.ne.jp/mode/downPage/Random.htm
の物を拾いました。
saltが固定(既知)だったら、どこを書き換えれば宜しいですか?
0583デフォルトの名無しさん2005/07/04(月) 00:11:35
>>582
cryptについてちょっとくらい自分で調べろ。
0584デフォルトの名無しさん2005/07/04(月) 06:48:31
packのpとかPってどんなときに使うんですか?
0585デフォルトの名無しさん2005/07/04(月) 13:04:54

Net::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
>>585
レスが無いので、モジュールを知らないけど書いてみる。
とりあえずローカルとリモートのファイルサイズが同じかどうか見てみる。
空ファイルとかテキストファイルを送っても壊れるかどうかもみてみる。
0587デフォルトの名無しさん2005/07/04(月) 15:26:04
>>585
ヒント: asciiモード/binaryモード
0588デフォルトの名無しさん2005/07/04(月) 15:27:19
>>587
> ヒント: asciiモード/binaryモード

あ、ごめん。それはやったのね。マヌケだった。
0589デフォルトの名無しさん2005/07/04(月) 16:01:27
>>585
ちゃんとバイナリモードにしてるしそうめったなことはないと
思うのだがな。むしろ書いてないところに問題があるとか壊れている
という認識自体間違ってるとかそういうところを疑ったほうが
いいかもしれない。

示されたコードは抜粋だとあるが、そのコードで現象は再現しているか?

壊れていると判断した根拠は? そもそもサイズが違うとかmd5等のチェック
サムが違うとかなら本当に壊れてそうだが、単に解凍できなかったとかなら
解凍方法や環境の問題かもしれない。


0590デフォルトの名無しさん2005/07/04(月) 20:45:24
>>585
>>589の言う通りやね。
送り元のtarは、gnu tarでアーカイブしていて
受け取り側は一般のtarコマンドしかないとかの話じゃないの。
0591デフォルトの名無しさん2005/07/04(月) 22:00:23
何か重大で意外な見落としをしている気がする
0592デフォルトの名無しさんNGNG
>>591
エスパーさんあとをよろしくなのです。。
0593デフォルトの名無しさん2005/07/04(月) 23:19:34
モジュールを use するのを、

my $mo = "ABC";
use $mo;

とした場合、"syntax error" と怒られてしまいます。
動的にこのような形で use したいのですが、どのようにしたらできるのでしょうか?
0594デフォルトの名無しさん2005/07/04(月) 23:35:56
>>593
どっかにできあいのモジュールがありそーな気もしますが……。
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:56
>>593
my $mo = "ABC";
eval "use '$mo'";
もアリ。
0596デフォルトの名無しさん2005/07/04(月) 23:44:41
eval "use $mo"
05975852005/07/05(火) 08:44:56
>>586-592
レスありがとうございます。
昨日の夜に試して見たところ正常に出来ました。
が、先ほどためしてみるとまたダメでした。
「壊れる」という表現は適切ではないかもしれません。「一部壊れる」に訂正します。
あと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:41
>>597
tarのアーカイブ作るときにtarアーカイブの作成場所とアーカイブ対象のディレクトリが被ってるんじゃないの?

“tar cvf hoge.tar *”とか“tar cvf /hogehoge/hoge.tar /hogehoge”とかすると
アーカイブ対象に現在作成中のアーカイブファイル(自分自身)も含めるからわやくちゃになるよ。

てPerl関係ないし。
0600デフォルトの名無しさん2005/07/05(火) 10:13:38
>>594-596
ありがとう御座います。そのようなやり方で出来るのですね。
>>594のやり方は試してませんが、evalの方法が簡単でよかったのでそれで行います。

ありがとう御座いました。
0601デフォルトの名無しさん2005/07/05(火) 13:23:02
eval "use $mo"は美しくないなぁ。
これって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:00
>>601
require 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:59
……
0605デフォルトの名無しさん2005/07/05(火) 15:26:31
>>603
my @array;
push @array, $_ while <STDIN>;
chomp @array;
0606デフォルトの名無しさん2005/07/05(火) 16:10:35
↑ そのpushの中の$_はどんな働きをするの?

push @array, while <STDIN>;
chomp @array;

でも、OKだったけど。
>>605のソースを走らせても$_の中に何も文字列は入っていなかった。
0607デフォルトの名無しさん2005/07/05(火) 16:35:22
>>606
君の飼っている駱駝は病気のようだ。

$_ については
http://perldoc.jp/docs/perl/5.6.1/perlop.pod
の「I/O Operators」でも読んでくれ。
0608デフォルトの名無しさん2005/07/05(火) 16:46:58
chomp(my @array = <STDIN>);
じゃだめなの?
0609デフォルトの名無しさん2005/07/05(火) 20:30:22
TMTOWTDI
0610デフォルトの名無しさん2005/07/05(火) 20:58:46
宗教論争
0611デフォルトの名無しさん2005/07/05(火) 22:35:24
てほどでもないさ
0612デフォルトの名無しさん2005/07/05(火) 23:45:10

AAA="hoge"

とやる所をタイプミスで

AA="hoge"

とやってしまい、後の方では、
$AAAを(未定義のまま)使ってしまった場合
何事もなく動いてしまう事があります。(バグに気づかない)

この手の未定義変数のチェックをうまくできないでしょうか?
0613デフォルトの名無しさん2005/07/05(火) 23:46:42
>>612
use strict
06146122005/07/06(水) 00:05:58
>>613
こんなのがあったとは… ありがとうございました。
0615デフォルトの名無しさん2005/07/06(水) 00:43:01
>>614
どうやって perl おぼえたの?
0616デフォルトの名無しさん2005/07/06(水) 00:56:35
use strictなんて基本中の基本だろうが
これの説明が載ってない入門書は捨てた方がいい
0617デフォルトの名無しさん2005/07/06(水) 01:29:22
perl4の時代の本とか...
0618デフォルトの名無しさん2005/07/06(水) 01:56:39
ネットだけで独学とか
0619デフォルトの名無しさん2005/07/06(水) 02:24:28
何処のとは言わないがCGIの改造で入門して、本買わずにWebだけで独学で学んだら、
まともなPerl5コードが書けるようになるまで一年かかった俺ガイル

まあ変な癖つけたく無ければ良いソースを読むかちゃんとした本買えって事だな…
0620デフォルトの名無しさん2005/07/06(水) 02:54:34
>>619
> 何処のとは言わないがCGIの改造で入門して、本買わずにWebだけで独学で学んだら、
> まともなPerl5コードが書けるようになるまで一年かかった俺ガイル

なぜ最高のクオリティを誇る添付ドキュメントを見ない?
0621デフォルトの名無しさん2005/07/06(水) 03:10:01
どんな書き方でも動くのがいいところではないか。
0622デフォルトの名無しさん2005/07/06(水) 05:27:18
あるファイルがあります。そのファイルはヘッダとボディからなっています。
ヘッダとボディは空行で区切られています。ボディの行数を計算して、ヘッダ
の最後に Lines: ボディの行数と書き込むにはどうすればよいでしょうか?
0623デフォルトの名無しさん2005/07/06(水) 06:29:16
空行は1回限りか?
0624デフォルトの名無しさん2005/07/06(水) 06:29:38
人をバカにした書き方だな
0625デフォルトの名無しさん2005/07/06(水) 06:40:23
>>622
ボディの行数をカウントして、ヘッダの最後に"Lines: "フィールドを追加すれば
いいよ。

0626デフォルトの名無しさん2005/07/06(水) 06:42:49
んじゃ空行は1回限りの場合ってことで。
怒ってる人もいるようだからあとは自分でなんとかしてくれ。

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
>>623
空行は一回以上ある場合もあります。複数の空行がある場合、最初のものが区
切になります。
>>624
すみません。馬鹿にするつもりはありませんでした。
どの部分が気にさわられのでしょうか。
以後気を付けますので、おしえていただけませんでしょうか。
>>625
行入力演算子を while でまわして、body の行数を数えることができたんです
が、その後でつまっています。
>>626
ありがとうございます。参考にして、ちょっと考えてみます。
0629デフォルトの名無しさん2005/07/06(水) 07:56:16
空行が複数でも>>626をチョチョイといじれば完成だ。
参考とかそういうレベルではないだろう。
0630デフォルトの名無しさん2005/07/06(水) 12:25:17
>>628
>>624は妄想基地外だから、気にする必要はなし。
あんたの書き方で、何の問題もない。
0631デフォルトの名無しさん2005/07/06(水) 18:00:16
>>601
モジュールの読み込みってrequire でも出来るんですね。
evalではなく、requireでする方法に変更しました。

そうなってくると分からなくなるのですが、use と require の違いって
何なのでしょうか?
0632デフォルトの名無しさん2005/07/06(水) 18:25:23
>>628=622
こんなんでどう?

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;
06336322005/07/06(水) 18:27:54
printのとこ、ちと無駄だったんで差し替え
printf IO "$head\nLines: %d\n\n$body", $body =~ tr/\n//;
0634デフォルトの名無しさん2005/07/06(水) 18:54:20
>>631
マニュアルにuseはModuleにbarewordしか許されないことを
除けば

BEGIN { require Module; import Module LIST; }

と同じとあるので、違いは

実行されるタイミング
import
Moduleの指定のしかた

ということになるだろうな
0635デフォルトの名無しさん2005/07/06(水) 20:03:14
>>634
そうなんだ。ほとんど同じ、っていうか全く同じですね。
初めて知りました。有難う御座いました。
06366012005/07/06(水) 20:12:04
>>634
そうなのよ。
モジュールのimportなんて作り方によっては必要ない。
だいたいの場合は単純にrequireでいいはず。

該当モジュールがuse Exporterしていて、
かつ関数を呼び出し元の名前空間にimportしたい場合のみ等価なコードを書けばよい。
0637デフォルトの名無しさん2005/07/06(水) 20:43:57
まじめに質問!
どうやったらプログラム書けるようになりますか?
C、Perlとか「プログラミング言語」そのものは、市販されてる本よんで
サンプルプログラムとか打ち込んで、練習問題を解答できます。

しかし、Cで簡単なゲームとかPerlで掲示板とかチャットとか、1から
自作しようとなると、さっぱりわからん。

プログラミング言語を学ぶ以外に、どんなこと勉強すればよいのでしょうか?

絶対にPerlで掲示板とかチャットとか、人が書いたソースコードが読める
ようになりたい。
0638デフォルトの名無しさん2005/07/06(水) 20:58:37
英語を辞書無しで読めるようになればあとは楽勝
0639デフォルトの名無しさん2005/07/06(水) 21:13:09
>>637
まず大文字の英数字を気持ち悪いと思う感覚を育もう。
個人的には口語中の一桁数字なら大文字でもいいけど。
とりあえず経験積めば誰だってある程度できるようになるんでは。
0640デフォルトの名無しさん2005/07/06(水) 21:21:29
>>639
大文字と全角文字の区別をつけるところから始めよう。
0641デフォルトの名無しさん2005/07/06(水) 21:29:13
>>640
たぶん自分ツッコミですね。乙です。
0642デフォルトの名無しさん2005/07/06(水) 22:06:20
>>637
諦めなさい。君には才能が皆無。
06436372005/07/06(水) 22:17:24
>>642
お前エスパーかよ。どうして才能が皆無なんて、ソースコードも見てないのに
言えるんだ? ばっかジャネェの?

諦めなさい。君には才能が皆無。
諦めなさい。君には才能が皆無。
諦めなさい。君には才能が皆無。

プログラムが組めないどころか、
練習問題もこなせそうにないヤツに言われたよ〜。・゚・(ノД‘)・゚・。
ちょっと下手に出て質問したら、すぐこれだからな(汗

バグ出してエラー出して、苦労して自力で修正して・・・
頭で思い描いた通りに、プログラム組めるようになれば一人前ダヨネ!がんばろ
これ以上、アホに構ってられないや じゃね! もう見ないから
0644デフォルトの名無しさん2005/07/06(水) 22:24:39
そんなに悔しかったのかww
0645デフォルトの名無しさん2005/07/06(水) 22:26:23
おーデブが喜ぶ喜ぶ
06466372005/07/06(水) 23:05:44
>>643
あなたは誰ですか?
0647デフォルトの名無しさん2005/07/06(水) 23:26:31
>>637
構成する能力が皆無っていう人なのかな。
いるんだよね、こういう人。
ある程度以上の複雑さのものを構築することがまったくできないの。
0648デフォルトの名無しさん2005/07/06(水) 23:45:59
>>637

データフロー図を描いて、データがどういう風に流れて、どういう風に処理されるかとか、
UMLのユースケース図を描いて、どんな機能があるのかとか、
もう少し大きな視点で考えてる訓練をする

ある程度の機能をもったアプリケーション(掲示板とか)の作りかた
を解説してある本を読んで見るとか

情報処理技術者試験のソフ開とか勉強してみるのもいいんじゃない?
0649デフォルトの名無しさん2005/07/07(木) 00:01:08
>>640
スマン、マジで。
0650デフォルトの名無しさん2005/07/07(木) 00:58:50
>>648
小生、Perlに入れ込んでいる理由は、単純にとっつき易いからです。
プログラム経験はまったくありません。

プログラムといっても所詮、定型処理だから、どんな機能があるのか
フロー図を描いて整理して、それをプログラムすればよく(構造化
プログラミングというらしい)サブルーチンを繰り返すような構造に
なっている。

しかし
世間一般のプロレベル>>中間レベル>>小生の下手の横好きレベル

中間レベルに成長するための方法がわからない。

やはり、KENTさん(嫌悪感を持っている人も居るようですが…)とかの
解説本を読むとか、Web上のオープンプログラムを読んで、改造してみる
とか、地道な努力が必要なのでしょうか?
0651デフォルトの名無しさん2005/07/07(木) 01:03:47
KENTのは絶対やめた方が良い。
この前もセキュリティホール見つけたし、汚いソースだし。
0652デフォルトの名無しさん2005/07/07(木) 01:09:07
>>650
プログラム言語も自然言語も同じ言語。

あんたの質問は、
英語の入門文法書はわかる。
でも英作文はできない。どうしたら作文ができるようになるのか?
とほぼ同義。

0653デフォルトの名無しさん2005/07/07(木) 01:16:14
すっかり厨が居ついてしまったな
0654デフォルトの名無しさん2005/07/07(木) 01:16:32
>>650
掲示板は結構多くのプログラミングエッセンスが入っていて
学習には最適だ。

変に他人のコードなんか読んだり演習問題なんかやってないで
100行ぐらいの規模の掲示板でもイチから組んでみると良い。

で、出きなかったら、行き詰まったら、ここに質問に来い。
まじめに取り組んでで、手前勝手な解釈の上に立った質問でなく
実際のコード晒すような奴なら、まあ誰かが導いてくれるだろう。

厳しい指摘や罵倒も受けるだろうがそれも勉強だわな。

現場で戦力になる早道は他人のプログラム修正だが、プログラミングを
覚える早道はなんでもいいからフルスクラッチのプログラムを書いて見る
ことだと、俺は思う。
0655デフォルトの名無しさん2005/07/07(木) 01:19:45
>>650
>>654の言う通り。
ただしKENTはやめておけ。
嫌悪感とかそういうくだらない理由ではなくて、本当に技術向上の妨げになってしまうから初心者には尚更お勧めできない。
ある程度Perlが身についてから反面教師として見るなら良し。
0656デフォルトの名無しさん2005/07/07(木) 01:21:44
KENTってなんだい?
0657デフォルトの名無しさん2005/07/07(木) 01:22:17
>>656
タバコ
0658デフォルトの名無しさん2005/07/07(木) 01:25:05
確かにKENTのコードは健康を害するな。
0659 ◆TWARamEjuA NGNG
肺気腫になる恐れもある。。。

・・・のか(滂沱)@小粋(刻みタバコ)
0660デフォルトの名無しさん2005/07/07(木) 01:36:41
逆に、このソースは読んどけってのはある?
0661デフォルトの名無しさん2005/07/07(木) 01:43:22
>>650
文法が分かるならやりたいことを表現するだけ。
実装方法を分解的に考えて規定の文法で文章化して行くというのがプログラミングだと思うぞ。

>>660
Acme::MorningMusume
http://cpan.uwinnipeg.ca/dist/Acme-MorningMusume
0662デフォルトの名無しさん2005/07/07(木) 01:48:16
>>661
> Acme::MorningMusume

何だこれ
テラワロスwww
0663デフォルトの名無しさん2005/07/07(木) 05:25:34
使い道ナサスwwww
0664デフォルトの名無しさん2005/07/07(木) 05:39:55
perlでWMPやwordファイルを起動させることはできますか?
できるとすればどうやればいいのでしょうか。
0665デフォルトの名無しさん2005/07/07(木) 06:07:09
CPANで検索すれ
06666612005/07/07(木) 07:35:38
気に入って貰えた?
AcmeでCPAN探すと使えないモジュール一覧出てくるよ。
おまいらも検索しる

ちなみにAcme::MorningMusumeはメンバー分のサブクラスがあるぞ
Acme::MorningMusume::YoshizawaHitomi
http://cpan.uwinnipeg.ca/htdocs/Acme-MorningMusume/Acme/MorningMusume/YoshizawaHitomi.pm.html
0667デフォルトの名無しさん2005/07/07(木) 11:42:56
おお、こんこんもあるのか素晴らしい
0668デフォルトの名無しさん2005/07/07(木) 15:13:59
>>Acme::MorningMusume
これはこれで、Perlのモジュールの規則に則り
真面目にclass化されているので読む価値はある!


…とかいって見る。
0669デフォルトの名無しさん2005/07/07(木) 15:58:36
アクメ・モーニング・ミユージューム・モジュール?
0670デフォルトの名無しさん2005/07/07(木) 16:00:15
>>661
Author : KENTARO
ってなってるけどもしかして噂のKENT?
いや奴がOOPを理解してるとは思えない。
0671デフォルトの名無しさん2005/07/07(木) 18:15:46
>>637
学校の勉強はできるからテストの点も取れて自分で賢いと思ってるけど
頭の切れが悪くて自分からはなにも生み出せない典型的なアホの図
0672デフォルトの名無しさん2005/07/07(木) 18:52:17
受け流してよそへ飛ばしちゃうことおぼえようよ。
0673デフォルトの名無しさん2005/07/07(木) 21:55:53
>>668
いや、わりと真面目にそう思った。PerlでOOPはどうやるのがセオリー?って人には
参考になりそう。
0674デフォルトの名無しさん2005/07/07(木) 22:24:17
Perl のモジュールの規則を破り、真面目に class 化されず、OOP のセオリー無視で、
参考になりそうもないようなモジュールが CPAN にはそんなに多いものなの?
0675デフォルトの名無しさん2005/07/07(木) 22:47:49
別にプログラミング==OOPじゃないわけだが…
0676デフォルトの名無しさん2005/07/08(金) 04:14:27
[link.txt]
1 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:40
>>676
open 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:59
むむむ
0680デフォルトの名無しさん2005/07/08(金) 09:00:51
>>676
他に込み入った処理が無いのであれば、自分の場合はファイルの行番号で処理させるかな。ソートとか無駄な処理だし。

[link.txt]
0行目:
1行目:3,9,10
2行目:1
3行目:1,7,8

直接行番号から値をもってきて、区切り文字で分割して〜、でダメ?
0681デフォルトの名無しさん2005/07/08(金) 10:45:47
>>674
いや、そういうことではなくて、
Acme::MorningMusume はとても読み易いんだよ。
落としてみたかい?
コードだけでなく埋め込みPODやMANIFESTもまるでお手本のよう。
0682デフォルトの名無しさん2005/07/08(金) 11:05:45
Acme::MorningMusume
これサブクラスだけutf8なんだけど何で?
0683デフォルトの名無しさん2005/07/08(金) 11:17:48
RubyやScheme(Gauche)に食指が動いているオレに、
Perlの魅力を叩きつけてくれる者はおらぬか?
0684デフォルトの名無しさん2005/07/08(金) 11:18:52
Schemeやっておきなよ。Rubyはどうでもいいけど。
0685デフォルトの名無しさん2005/07/08(金) 15:55:12
>>584
syscallの引数にポインタを渡さなきゃならない時とか。
0686デフォルトの名無しさん2005/07/08(金) 16:54:27
毎度おなじみのhtml用の文字列の変換なのですが、スピードを早くする方法はないでしょうか?

-----------------------
#!/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:29
ん..。エスケープシーケンスが変換されてしまってますね。適時読み替えて頂いて..
0688デフォルトの名無しさん2005/07/08(金) 17:09:20
%hash = ( "&" => "&"
..... );
s/[&"'<>\n]/$hash"\1"/;
0689デフォルトの名無しさん2005/07/08(金) 17:09:56
%hash = ( "&" => "&"
..... );
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
>>690
リャマ本読んだようがいいと思うよ。
0692デフォルトの名無しさん2005/07/08(金) 17:23:35
>>691
リャマ本・・めっちゃ避けてました。
よみまふ。。
0693デフォルトの名無しさん2005/07/08(金) 17:27:52
>>686
%map = ('<' => '&lt;', ...);
$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:45
>>686
http://search.cpan.org/~nwclark/perl-5.8.7/lib/Benchmark.pm

色々な長さの $str に対し思いつく限り多様な処理方法を試した
ベンチを取って統計してくれ。その過程が Perl への理解を深める
いい勉強になるし、結果が多くの人の役に立つだろう。
0695デフォルトの名無しさん2005/07/08(金) 18:40:37
>>684
tr/&amp;/&/;
s/\n/<br>/go;
などで速くなると聞いているがベンチマークしたことはないな。

06966862005/07/08(金) 20:00:10
>>688-689, 693-695

ありがとうございます。
一度配列に入れてやる方法も /go も試してみましたが、ほとんど変わりません。
単純な置換の場合は、なかなか速くする方法というのは無いんですね。
0697デフォルトの名無しさん2005/07/08(金) 21:00:19
>>690
初心者がこのまま続けたらものすごくセキュリティ
ホールを作り込みそうなコードだな
0698デフォルトの名無しさん2005/07/08(金) 21:27:13
おまけにアドレス(宛先)の判定はダメダメだな。
0699デフォルトの名無しさん2005/07/08(金) 21:34:10
$test = "aiueo";
print $test[1];

で i が表示されるかと思ったんですが、駄目でした。
perlには i を表示させる手段はないのですか?
0700デフォルトの名無しさん2005/07/08(金) 21:55:37
@test = split //, $test;
0701デフォルトの名無しさん2005/07/08(金) 21:57:02
>>699
PHPやCじゃないんだから、こうやってくれ。

$test = "aiueo";
print +(split//,$test)[1];

または

$test = "aiueo";
print substr $test,1,1;
0702デフォルトの名無しさん2005/07/08(金) 21:57:06
>699
>700 のように split して配列にしてしまうか、substr を使え。
0703デフォルトの名無しさん2005/07/08(金) 22:17:09
>>700-702
レスありがとうございます。スルーされたかと思って四苦八苦してました。
$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:41
違う
0706通りすがり2005/07/08(金) 22:43:39
>>701
たしかにこの+はなんだ(・∀・)?
print(〜)だとprintの関数としての括弧になってしまうから+をつけたとか?
0707デフォルトの名無しさん2005/07/08(金) 22:57:57
なるほど、じゃ
print ((split//,$test)[1]);
でよさげですかね。いくらググっても出てきませんので諦めますた
0708デフォルトの名無しさん2005/07/08(金) 23:18:30
>>707
+は次にくるものが「式である」ということを示す演算子。スカラー/リストは無関係。
スカラー扱いにするのはそのものズバリscalar()。

まぁ、カッコをつければいいわけだが、+のほうが一文字だから入力しやすいだろ?だからだよ。
0709デフォルトの名無しさん2005/07/08(金) 23:30:03
+ ってナニ?って言ってる奴らは、
PERLOP(1) の Named Unary Operators の所を熟読すべきだな。
0710デフォルトの名無しさん2005/07/08(金) 23:32:05
>>706
そう。
mapの時とか便利っすよ。
0711デフォルトの名無しさん2005/07/09(土) 00:31:53
perl-5.8.7 の info(texinfo) ってありませんか?
0712デフォルトの名無しさん2005/07/09(土) 00:47:07
>>711
http://search.cpan.org/~randym/pod2texinfo-1.0/
man (perldoc) や HTML や plaintext では駄目な理由がよく分からんけど。
0713デフォルトの名無しさん2005/07/09(土) 01:15:49
>>712
Emacs の M-x info-lookup-symbol で使えるものが欲しかったんです。でも、
これはフィルターなので、単純に perl 付属の pod を変換すると複数のファイ
ルにわかれちゃいますね。どうしたもんだか。
07147062005/07/09(土) 02:14:28
>>710
printの括弧は一度ハマッた経験があるので注意深くなってた。
そのときの解決方法は print "", (split//,$test)[1]; とか空文字出力してた。
そっか+か。すごいの思いつくなぁ。
0715デフォルトの名無しさん2005/07/09(土) 04:19:04
これは思いつくもんじゃないと思うぞ
0716デフォルトの名無しさん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:15
$perl -e'(print "a",print "b")'
ba1
これの訳を教えてください
0719 ◆TWARamEjuA NGNG
>>718
聞く前にいろいろと調べてみなよな。って気持ちでいます。

$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:13
>>718
shで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
print ("a", print "b");

こう書いてあれば分かるんでない?
0722デフォルトの名無しさん2005/07/09(土) 15:29:19
>>719-721
サンクスです。
'(print("a"), print("b"))'
こういう風に評価されるものだと思ってました。
>>720分りやすい解説サンクスコ
0723デフォルトの名無しさん2005/07/09(土) 23:34:12
=>以外にも、qw()とかも便利。
requireとかuseでもベアワードが使えるし。

不要なクォートを入力しなくて良いのは、さすが不精な人向け言語だと思ったよ。
0724デフォルトの名無しさん2005/07/09(土) 23:49:28
質問です。

Perlで整数を使うと、内部的には何ビットで処理されるのでしょうか?

自分のWindows上の環境では、符号付き64ビットで扱われる(または内部で自動的に拡張される)ようなのですが、
正式な仕様としてはどうなっているんでしょうか?
0725デフォルトの名無しさん2005/07/09(土) 23:59:05
>>724
perl -V とするとでてくるよ。
0726デフォルトの名無しさん2005/07/10(日) 00:05:45
>>724
http://search.cpan.org/~nwclark/perl-5.8.7/INSTALL
0727デフォルトの名無しさん2005/07/10(日) 01:14:09
>>724
ほんとかよ?
>自分のWindows上の環境では、符号付き64ビットで扱われる
どうやって確認したん?
0728デフォルトの名無しさん2005/07/10(日) 09:47:48
>>724
ビルド済みPerlの整数の型を知りたいなら
perl "-V:iv.*" で見れる。
0729デフォルトの名無しさん2005/07/11(月) 07:24:01
文字列をUTF16LEでファイルに書きたいのですが、
以下のコードだと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:35
print "\xfe\xff" すれば?
0731デフォルトの名無しさん2005/07/11(月) 08:09:34
utf16を指定すればBOM は 憑く
0732デフォルトの名無しさん2005/07/11(月) 09:03:49
>>731
ありがとう。できました。
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:43
$#$array
0736デフォルトの名無しさん2005/07/11(月) 17:02:24
>>735
取れました!!ありがとうございます
0737デフォルトの名無しさん2005/07/11(月) 21:35:53
>>735
知らなかった・・・
0738デフォルトの名無しさん2005/07/11(月) 21:45:51
>>737
> 知らなかった・・・

これは知っていたり知らなかったりするものではない。
思いつくものだ。
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
>>740
, は何を意味するの?
0742デフォルトの名無しさん2005/07/12(火) 02:22:33
>>740
おそらく
print $_, "\n";   # ←ここのライン
    ↑の’,’を指しておられるのでしょうが
転載記事なので手を加えない方がよいとおもっただけで
print $_;   #
と打ち直してもエラーになるのを確認してます。
0743デフォルトの名無しさん2005/07/12(火) 02:37:13
エラーログみれ
0744デフォルトの名無しさん2005/07/12(火) 02:51:11
つか、直接コマンドラインから叩いたときはどういうメッセージが出るのよ?
0745デフォルトの名無しさん2005/07/12(火) 02:56:53
Unrecognized character \x81 at C:\Program Files\Apache Group\Apache\copal271[1]\copal.tmp line 9.
エラーログはこちらです。
0746デフォルトの名無しさん2005/07/12(火) 03:01:46
つ[全角スペース]
0747デフォルトの名無しさん2005/07/12(火) 03:10:52
今日は全角厨をよく見る
0748デフォルトの名無しさん2005/07/12(火) 03:10:55
>>746
どうもありがとうございました。起動しました。
何時間も検索したり本を読んだりした結果、ごくつまらないミスだったというのは経験済みですが、
何度やってもなれないです。吐き気がしてきた。
0749デフォルトの名無しさん2005/07/12(火) 03:38:44
頭悪いと大変だな。
0750デフォルトの名無しさん2005/07/12(火) 03:40:07
全角スペースと半角スペースが判別出来るテキストエディタは必須
0751デフォルトの名無しさん2005/07/12(火) 03:49:17
メモ帳でやってたんだろ
0752デフォルトの名無しさん2005/07/12(火) 04:04:56
Unrecognized characterがあるとエラーが出ているのに、
Unrecognized characterを考えないのはどういう理由なのか説明してほしい。
0753デフォルトの名無しさん2005/07/12(火) 04:29:45
おまえらそこまで言うなよ
0754デフォルトの名無しさん2005/07/12(火) 04:45:35
学ぶ意志さえあれば
非常に示唆に富んだ反応に見えるはず。
0755デフォルトの名無しさん2005/07/12(火) 08:23:49
ユーザにYかNかを問い合わせて、10秒間反応が
ない場合は、Yとして続行するコードを書こうと思った
んですが、私の知識じゃどうにもならないです。

ヒントを教えてください。
0756デフォルトの名無しさん2005/07/12(火) 08:45:25
>>739
たしかそれを調べるモジュールがあるよ。
CPANで調べてみそ。

>>755
$SIG{ALRM}使えば?
0757デフォルトの名無しさん2005/07/12(火) 09:04:36
>>756
ありがとうございます。

SIG{ALRM}とevalでできました。イイ!!
0758デフォルトの名無しさん2005/07/12(火) 09:38:56
>>752
単にUnrecognized characterという英文字列の並びが何を意味するか
理解できなかっただけだろ。
0759デフォルトの名無しさん2005/07/12(火) 10:37:24
>>748
「ごくつまらないミス」は誰でもやってしまうもの。
問題はミスをすることではなくて、>>750のような工夫をおそらくしていないことや
Unrecognized characterというごく簡単な英語も理解できない知能であり
プログラム以前の問題。
07607392005/07/12(火) 11:04:28
>>756
おぉ、サンクス。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:05
文字化けして云々とか言い出しそう。
0763デフォルトの名無しさん2005/07/12(火) 12:39:45
>>748
おまいさんプログラマには向いてないな。
発生するバグの99%はつまらないミスだぞ。
# if文の真偽を逆にするとか境界条件をしくるとか演算子の優先順位を勘違いするとか。
0764デフォルトの名無しさん2005/07/12(火) 13:45:47
>>759
> Unrecognized characterというごく簡単な英語も理解できない知能であり
> プログラム以前の問題。

理解できないし、理解しようともしなかったし、
質問で真っ先に提示しようともしなかった。
この心理っていったいなんなんかを知りたいわけだよ。
0765デフォルトの名無しさん2005/07/12(火) 14:31:00
とかなんとか書いてるやつらでも、自分がハマったときは同じ行動をすることが多い。
0766デフォルトの名無しさん2005/07/12(火) 14:43:37
脳味噌腐ってるな
0767デフォルトの名無しさん2005/07/12(火) 14:48:43
>>765
Are you Kusakabe-san?
0768デフォルトの名無しさん2005/07/12(火) 14:57:29
>>764
心理も何もない。
ただ考える道筋すらわからないほどの初心者というだけだろ。
そんなもんが流せない君の心理のほうが不思議だよ。
この手が嫌なら質問スレなんかこなきゃいいと思うんだが。
0769デフォルトの名無しさん2005/07/12(火) 15:03:40
言葉尻を論って流れも読まずに独り言するのはカンベンして欲しいんだがなぁ
>>764-768
0770デフォルトの名無しさん2005/07/12(火) 15:04:36
>>765
2chに質問なんか書かないだろ、そういう時はフツー
0771デフォルトの名無しさん2005/07/12(火) 15:06:19
>>764
知能だけの問題じゃなくて、傲慢、あるいは自己中心性の
結果だと思う。
0772デフォルトの名無しさん2005/07/12(火) 15:15:39
>>764
細かいミスなんてのは自分の知識になって今後注意深くなるからいいじゃねーの?
くだらないミスほど、自分の知識となって蓄積されていく。
細かいミスはいっぱいしてるだろうけど、同じミスを繰り返したこたぁ、あまりないだろ。

気づけばくだらない問題だったなんてことは、誰でもいっぱい経験することだよ。
0773デフォルトの名無しさん2005/07/12(火) 15:21:52
>>772
>>769
0774デフォルトの名無しさん2005/07/12(火) 15:29:29
>>771
> 知能だけの問題じゃなくて、傲慢、あるいは自己中心性の
> 結果だと思う。

はいはい。

たしかにああいう輩は、知的な面で問題があり、自己中心性が強く、
自分と他人の違いが分かってないことが多いね。

でもスレ違いだから、ほか行ってね。
0775デフォルトの名無しさん2005/07/12(火) 15:30:21
Perlについての質問箱 17箱目
Perlについての質問箱 17箱目
Perlについての質問箱 17箱目
Perlについての質問箱 17箱目
Perlについての質問箱 17箱目
0776デフォルトの名無しさん2005/07/12(火) 17:55:03
↓はい、次の質問のひとどうぞー
0777デフォルトの名無しさん2005/07/12(火) 19:20:00
sub String_new{
my $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
>>777の使用方法はこんなかんじみたいです。

$x = String_new("abcdefg");
$y = String_new("cdefg");

$z = $x->{replace}('c.','xyz');
$w = $y->{concat}('xyz');

これはどういう仕組みなのか説明できる方お願いいたします。
0779デフォルトの名無しさん2005/07/12(火) 19:31:51
ちなみに

sub String_new{
my $self;
$self = {

の部分を

sub String_new{
my $self = {

としたり

sub String_new{
return {

としたりすると動かなくなります。
0780デフォルトの名無しさん2005/07/12(火) 19:51:13
>>779
> sub String_new{
> my $self = {
>
> としたり
返り値がmyの評価結果になるからな。

> sub String_new{
> return {

意味不明。
0781デフォルトの名無しさん2005/07/12(火) 20:00:44
>>778
サブルーチンに文字列を渡すと、ハッシュのリファレンスが得られる。
デリファレンスされたハッシュにキーを渡すと関数が得られる。
その関数に変数を与えると目的の結果が得られる。
0782デフォルトの名無しさん2005/07/12(火) 20:29:33
>>777
クラス定義せずに、文字列オブジェクト(ぽいもの)を実装したいだけでしょう。
Cで構造体に関数ポインタ持たせるのと同じ。
別言語と実装を合わせるために作ったんじゃないでしょうか。

クラスじゃないから、String_new() で作った文字列同士の演算はスマートに出来ないよね。
0783777-7792005/07/12(火) 20:58:04
>>780-781
レスありがとうございます。

>>780
> 返り値がmyの評価結果になるからな。
myの評価結果は、myされた変数の代入結果と同じになるじゃないですか。
てことは、後でmyしようがその場でmyしようが関数の戻り値は同じハッシュリファレンスですよね。

>意味不明。
無名のハッシュリファレンスを変数を介在せずに直接戻り値にしているだけです。

>>781
はい、その通りですね。ちょっと説明不足で申し訳ございませんでした。
自分が聞きたかったのは、$xと$yが独立した情報を個別に操作しているように見えるのですが
Perlのどういう仕組みよる振る舞いなのでしょうということです。
>>777-778を実際試していただけると分かると思います。

>>782
なるほど!
ちなみに、"my $self;" と "$self = {"を別けなければならないか分かります?
0784デフォルトの名無しさん2005/07/12(火) 21:14:47
>>783
どういう動作をする代物なのかは既に理解しているようなので、
何故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"が印字される
07857832005/07/12(火) 21:15:54
>>784の一番上の例間違えた
{
my $self;
$self = sub{ return \$self };
$var = $self;
}
だった。
07867822005/07/12(火) 21:28:16
>>783
ええとだから、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:16
言うまでもなく、最後に return $self; を追加するなら
my $self = {
と書いても問題は無いわけだが、777はもうこの辺理解できたかな。
0789デフォルトの名無しさん2005/07/12(火) 22:13:37
>>760
weakrefはいちおう動くよ。
イマイチ使いにくいけど。
0790777-7792005/07/12(火) 22:28:28
>>784-788
うひゃー、みなさんレスありがとうございます。
ちょっと頭を整理しながらみなさんのレスを理解している最中です。

>>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;を付けると大丈夫ということが
理解できなくなりました。もう少し考えてみます。
07917822005/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
>>788
いや、駄目だって。
myと同じ場所に書いたら、右辺値を評価してる時の$selfと左辺値を評価する時の$selfが
別の実体を参照しちまう。
{my $a=$a;...} と {my $a;$a=$a;...}が違うのと同じ。
0793デフォルトの名無しさん2005/07/13(水) 00:34:21
my $n = new test::test();
my @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)

実際にはこの値が入っているはずなのですが
ただしい取り出し方がわかりません。
どなたかご教授いただけないでしょうか。
07947932005/07/13(水) 00:35:12
>実際にはこの値が入っているはずなのですが
実際にはこの値ではない値が入っているはずなのですが

の間違いです。すみません。
0795デフォルトの名無しさん2005/07/13(水) 00:36:04
>>782
>クラスじゃないから、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:32
sub String{
my $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:21
Perlでクロージャやって何が楽しいのやら
07987952005/07/13(水) 00:48:07
ただのクロージャじゃないよ、クラスもどきだよ。
0799デフォルトの名無しさん2005/07/13(水) 00:59:18
素直にクラス作ってメソッドにしようよ。
演算子オーバーライドできるし、いちいちハッシュ引かなくても良い。

というか、Perlの文字列をわざわざ文字列オブジェクトにする必要が無い。
普通のスカラー変数で、すでに十分ラッパがかかってる状態なんだから。
どうしても文字列オブジェクトにしたいなら、他言語に行った方が…。
08007952005/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:15
>>793
print map{%$_}@list;
0802デフォルトの名無しさん2005/07/13(水) 13:40:35
宣言だけした $hash を以下のようにしてもwarningすら出ません。
--------------------------
#!/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
>802
リファレンスの自動生成はPerlの仕様だったと思う
0804デフォルトの名無しさん2005/07/13(水) 14:27:58
>>802
値が未定義値のスカラー変数に対するリファレンスの自動生成はPerlの仕様だからエラーや警告はでません。

use strictしているから、間違って$hashに配列リファレンスや文字列を代入してしまえば
ハッシュのデリファレンス構文や間接参照構文(%$hash,$hash->{})でエラーになります。

逆に質問なんですが未定義値のスカラー変数にリファレンスの自動生成が適用されて困る場面ってどんなときでしょう?
0805デフォルトの名無しさん2005/07/13(水) 16:25:53
>>804
変数名を取り違えたときはそこでエラーなり警告なり出てくれれば
早いうちに間違いを発見できるかもしれんのでautovivificationが
適用されない方がありがたい。
08068022005/07/13(水) 17:02:39
>>803,804
有難う御座います。エラーや警告は出ないのですね。

> リファレンスの自動生成が適用されて困る場面ってどんなときでしょう

これは>>805の方と同じ意見ですが、use warnings; や use strict; と同じよう
に、バグを未然に防ぎたくチェックをしたい場合にはあったほうが良いのではな
いかと思います。

リファレンスはよく利用しますから、最初のスカラ変数だけは自動生成のチェックが
あったほうがありがたいですね。
08078042005/07/13(水) 17:25:56
>>805-806
ありがとうがざいます。
このような場合、バグが見つけにくいわけですね。

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:02
そゆときのためのモジュールがあったような気がするなぁ。
CPAN探してみそ。
0809デフォルトの名無しさん2005/07/14(木) 00:30:17
そういうためのモジュールは無いみたいだな。作るのも難しそう。

my $s;
$s->{foo} = 'bar';

これは、実質的にこう解釈される

my $s;
$s = {};
$s->{foo} = 'bar';

だから、例えばtieで監視しようとしても、$s = {}と区別できない。
0810デフォルトの名無しさん2005/07/14(木) 01:06:50
最初の my $s; で、SVの頭だけが出来る。
$s->{foo} の段階で「あ、ハッシュリファレンスですか」となって SvRV に。
無名ハッシュが作られて初期化。

であってる?
PerlのXSとか、5.005以降見てないんで動作も忘れちゃってるけど。
懐かしいなぁ。
0811デフォルトの名無しさん2005/07/14(木) 10:26:35
う、、、すいません
split関数の事で質問があります。

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:01
my @data = split(/\t+/,$str);
08138112005/07/14(木) 10:56:39
あう
こんな素人の質問に答えていただき
ありがとうございますっ
08148042005/07/14(木) 11:09:57
>>813
あう、いうな!萌えるじゃねえか!
08158042005/07/14(木) 11:15:36
自分もまた質問です。

substrみたいに自分で作成した関数をlvalueにして、代入した内容で振る舞いを返る方法はないでしょうか?
現在実装されているlvalueは、関数の最後に指定した代入可能な変数に代入できるだけですよね。
08168042005/07/14(木) 11:22:21
あっ、普通に変数のリファレンスと振る舞いを変えさせたい値を
関数の引き数で受取ればすむだけというのは分っています。
substrみたいな動きを自分で定義できるか知りたいだけです。
0817デフォルトの名無しさん2005/07/14(木) 11:25:53
>>816
lvalue+tieで実質なんでもできる

sub set($) : lvalue{}なんてすると、

set $var = 1; # set($var) = 1

などとして、特定のsetステートメントのときのみ特定の値の代入を認める、
などという構文を拡張できたりする。
08188042005/07/14(木) 11:45:44
>>817
ありがとうがざいます。

ちなみに>>817のコードでは、set関数に1を代入して$varに1が代入されますよね。
代入した値に+1して$varに代入させるようにそのset関数を改良するには
具体的にはどうのように記述したらいいですか?
0819デフォルトの名無しさん2005/07/14(木) 16:48:24
ダブルクォーテーション内でリファレンスの変数展開ってどうしたらいいんでしょうか?

print "$obj->prop";

↑というようなことがしたいのですが…。
0820デフォルトの名無しさん2005/07/14(木) 16:59:09
Windows xpです。
perlをバックグランドで走らせるにはどうすればいいのですか?
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
>>819
"@{[$obj->prop]}" または "${\($obj->prop)}"

オレはクックブックで知ったが、その場でリファレンス作って
デリファレンスするというかなり強引な技です。

あらかじめ$obj->propを適当な変数に突っ込んどいた方が
見やすいといわれているがお好みで。
0823デフォルトの名無しさん2005/07/14(木) 18:10:28
>>821
配列のリファレンスを受け取るなら可能。

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
↑sub funcを違うファイルに置くと出来ないんですが・・。
なぜ・・。
08258202005/07/14(木) 21:11:42
他所で聞いてきます
0826デフォルトの名無しさん2005/07/14(木) 21:23:34
>>824
たぶん、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:14
つかuseを使え
0828デフォルトの名無しさん2005/07/14(木) 21:48:54
>>818
#!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:59
# 続き
package 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を使ってわざわざこんなことをする意味は無い。
「こんな構文もできるぜイエイ」つーくらいなものだな。
08308042005/07/14(木) 22:03:29
>>828-829
ありがとうございます!

まさしく、「こんな構文もできるぜイエイ」ってやりたいだけだったりします。

いやあ、質問する前に>>813にツッコミいれたんで
(>>813の「あう」にときめいた自分が許せなかったんです)
アラシと勘違いされてスルーされたかと一時は思ってしまいました。

本当にありがとうございます。
0831デフォルトの名無しさん2005/07/14(木) 23:44:13
変数に入っている文字列の長さを返すlengthがありますが、
変数に文字列とは限らない値が入っている場合でも
(ex. readでファイルから読んだデータをいくつかくっつけた)
このlengthで入っているデータのバイト数が確実に返されると考えていいのでしょうか。
偶然(?)にマルチバイト文字にあってしまってその文字数を返される可能性があるかもと
心配しています。
0832デフォルトの名無しさん2005/07/14(木) 23:51:33
>>831
ユニコード文字列でなければlengthは文字列のバイト数だから
余計な変換レイヤ入れたりしてなければ問題ないはず。
08338312005/07/15(金) 00:03:52
変数内のデータが「偶然すべて」ユニコードにあわない限り大丈夫ってことでしょうか。

過剰な心配かもしれませんが、万一、ユニコードにバッチリあってしまっててても
大丈夫な方法ってないんでしょうか?
あれば教えていただけるとうれしいです。
0834デフォルトの名無しさん2005/07/15(金) 00:12:43
>>833
use bytes;
# ここに length の処理など
no bytes;
かな。
08358312005/07/15(金) 00:18:44
あぁ、ありがとうございます。
まだまだ修行が足りないことを実感しています。
精進せねば。
0836デフォルトの名無しさん2005/07/15(金) 00:45:16
>>833
ユニコード文字列っていうのはUTF-8 flagが立った文字列
のことを言っているのだと思いますが、勝手に立つことは
ありません。たまたまutf8として解釈できそうなバイト列で
あっても、decodeなり入力レイヤなりで変換しなければ
ただのバイト列です。

834の言うようにbytesプラグマ下ならそれが何であれ
バイト数返しますが、そもそも外から取り込んだものが
ユニコード文字列になっていたらそれはどこかで変換
された結果なので、その変換で長さが保存されている
ことは期待できません。

この辺ややこしいので気になるのなら

ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html

あたり参考にして勉強しましょう。

0837デフォルトの名無しさん2005/07/15(金) 06:42:54
http://pc8.2ch.net/test/read.cgi/tech/1120720976/120
で質問したブロックの使いかたがわかりません。
このスレのだれか教えてください。
08388372005/07/15(金) 06:44:42
http://pc8.2ch.net/test/read.cgi/tech/1120720976/160 の方が解答してくれてました。
お騒がせしました。
0839デフォルトの名無しさん2005/07/15(金) 14:36:26
お世話になっております。
perlでファイルハンドルを引数とするにはどうすれば良いのでしょうか?

----------------
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:08
>>839
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca
0841デフォルトの名無しさん2005/07/15(金) 15:33:09
>>839
use 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");
}
08428392005/07/15(金) 15:38:54
>840さん 841さん
RESありがとうございます。
:
writeFile(*FILE);
:
でやってみました。
どうもですっ
0843デフォルトの名無しさん2005/07/15(金) 16:47:54
>>841
いまどきFileHandleなんて勧めるなよ。
IO::Fileにしとけ。
0844デフォルトの名無しさん2005/07/15(金) 17:02:49
Perl5.6以上であれば、これがいいかもよ。

main();

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
>>839
もう他の方ので解決してますが、
質問の書き方だとエラーの通り bareword に引っかかります。

perlが、関数に渡されたbareword をファイルハンドルと仮定して使用するのは、
内部的にちょっと無理があって、C側で書いててもチョット不安です。
「渡されてきたこれ、文字列にも見えるよなぁ。
 まぁ、ファイルハンドルなんだろうけど、良いのか?」という感じ
(perlインタプリタの気持ちを代弁)。

なのでエラーになるんだと思います。

グロブ渡しもアリですが、ちょっと古いし、直接的すぎるかも。
グロブ使うなら、local() を忘れずに。
0846デフォルトの名無しさん2005/07/15(金) 21:58:29
いや、グロブでもlocal()とか必要ないから。
直接変数に入れて平気だから。
0847デフォルトの名無しさん2005/07/16(土) 00:03:40
perlって金になるの?
0848デフォルトの名無しさん2005/07/16(土) 00:32:44
金取りづらい
0849デフォルトの名無しさん2005/07/16(土) 01:36:39
>>847
> perlって金になるの?

僕が書いたPerlのプログラムを、見も知らずの人が金にしていたことは
ありました。
0850デフォルトの名無しさん2005/07/16(土) 02:13:08
報告人だか削除人だか案内人だかのために書き捨てたことがあったなぁ
0851デフォルトの名無しさん2005/07/16(土) 03:09:23
自分の仕事のちょっとした自動処理スクリプトとして使ってるから、
給料の一部になってると言えなくもない。
0852デフォルトの名無しさん2005/07/16(土) 04:39:53
つーか金になるかどうかは営業の腕次第だな。
0853デフォルトの名無しさん2005/07/16(土) 04:55:27
ここ6年ほど、perlでご飯食べてまつ。
0854デフォルトの名無しさん2005/07/16(土) 05:12:01
3年前ならPerl/CGIで飯食えたけど今は無理っぽくない?
Webに限ればPHPかJavaしか仕事無いよ。
いやいやPHP覚えたら副産物でOOPとデザパタ覚えてスキルアップしちゃった。
0855デフォルトの名無しさん2005/07/16(土) 06:10:42
>>853
pearlなゴハンとか言わないよね…

>>854
そうでもないと思うけど。
0856デフォルトの名無しさん2005/07/16(土) 06:18:02
>>855
ちょっとだけ悩んでしまった。
0857デフォルトの名無しさん2005/07/16(土) 09:45:51
PHPでOOPを覚えるのはPerlで覚えるより問題があると思うけど……。
まあそれはそれとしてPerlで稼ぐのは問題なしですよ。
10年近くそれで食べてますし、今後も特に不安はないです。
ウェブ系だとmod_perlで動くコードが書けないと問題かもしれませんが。

CGI/Perlをやってた素人に毛が生えた連中はPHPに流れたみたいですけどね。
0858デフォルトの名無しさん2005/07/16(土) 14:34:13
$arrayref != undef ? return $arrayref ? exit;

これは何が間違っているんでしょうか?
0859デフォルトの名無しさん2005/07/16(土) 14:37:52
3項演算子の使い方
0860デフォルトの名無しさん2005/07/16(土) 14:38:16
全て
0861デフォルトの名無しさん2005/07/16(土) 14:45:00
たしかに使い方はちょっとあれだけど、でも
1==2 ? print"a" : print"b";
これはちゃんと動くんですよね。なんでexitはだめなのか。
0862デフォルトの名無しさん2005/07/16(土) 14:46:05
exitのせいじゃないっつってんだろ。859が。
0863デフォルトの名無しさん2005/07/16(土) 14:54:49
858はタイプミスしました。あとexitは関係なかったです。

($arrayref != undef) ? return $arrayref : exit;

これなら動くんですよね。なんでカッコがないとダメなんでしょうか?
エラーメッセージはこうです。
”Use of "undef" without parentheses is ambiguous”

undef ? というのがいけないみたいですね。なんででしょうか?
0864デフォルトの名無しさん2005/07/16(土) 15:01:19
気の毒すぎて何も言えない…
0865デフォルトの名無しさん2005/07/16(土) 15:04:25
>>864
何も言えないなら、何も言う気がないなら
何も言わなくていいですよ^^;
0866デフォルトの名無しさん2005/07/16(土) 15:05:04
>>863
書いてある通りだ。もし英語が読めないのなら
なぜそのメッセージをExciteテキスト翻訳(http://www.excite.co.jp/world/english/)
などにつっこんでみようと思わないのか。
0867デフォルトの名無しさん2005/07/16(土) 15:07:45
>>866
私の言いたいのは、なんで構文解析があいまいな結果になってしまうのか
その原因を分る人に聞いてるわけです。
ところで?は三項演算子以外に何に使われてましたっけ?
0868デフォルトの名無しさん2005/07/16(土) 15:25:35
>>867
パターンマッチングの最短一致
0869デフォルトの名無しさん2005/07/16(土) 15:40:16
>>867
> 私の言いたいのは、なんで構文解析があいまいな結果になってしまうのか

そんなわけないだろ。演算子の優先順位とか勉強しなおしてこいよ。
0870デフォルトの名無しさん2005/07/16(土) 15:41:15
ってか、このスレ内に答え出てたし。
0871デフォルトの名無しさん2005/07/16(土) 15:43:45
HINT:結合性・優先順位・undefは引数を取る。
0872デフォルトの名無しさん2005/07/16(土) 16:08:00
>>869
エキサイトにつっこんでみたよww
「Use of "undef" without parentheses is ambiguous」
       ↓
「括弧のない"undef"の使用はあいまいです。」

だって。文面通り謙虚に受け取ればよかったものを余計な知識が邪魔して
「構文解析があいまいな結果になってしまう」と脳内変換してしまった

に300undef。
0873デフォルトの名無しさん2005/07/16(土) 16:23:26
>>872
なるほど、確かにそのとおりです。
カッコとは三項演算子の条件式のことだと思ってました。
undef()こうしろってことですね。なるほど。
引数を取らない他の関数でも同様のメッセージが出ました。

ところで三項演算子の優先順位は低いし、undef ? これがなんで
問題になるんでしょうか?

>>868
正規表現ですか?正規表現はスラッシュで囲ったものだけじゃないんですか?
0874デフォルトの名無しさん2005/07/16(土) 16:31:55
>>867
?PATTERN?
0875デフォルトの名無しさん2005/07/16(土) 16:35:31
>>874
なるほどこんなのあったんですね。
0876デフォルトの名無しさん2005/07/16(土) 16:36:48
まあ素直に defined $arrayref ? ... ってしとけってこった。
0877デフォルトの名無しさん2005/07/16(土) 17:39:53
>>876
うむ、その通り。

$arrayref != undef()
の書き方は、undef()により undef値を生成した後、$arrayrefと比較する。

defined $arrayref
は、単に$arrayrefが undef値かどうか調べるだけ。

後者のほうが良い。
0878デフォルトの名無しさん2005/07/16(土) 17:48:38
そもそも 0 == undef や 'foo' == undefは真だしな。
0879デフォルトの名無しさん2005/07/16(土) 18:03:30
$arrayref が、ほんとに配列リファレンスなら、
$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のコードレベルで見てはいないがエラーメッセージからは
そう読みとれる。(違ったらツッコんでエロい人)
08818802005/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
>>880
多分、それで合ってる。

別にCで読まなくても良いよ。昔、追ってみたけど頭おかしくなりそうだった。
読んだ感想は「これ書いたりメンテしてる奴らは尋常じゃねぇ」。
なんというかカオス。

その後、rubyの中身読んで「助かった」と思った。
まぁ、perlの場合は逐次実行がコードを難しくしてるんだろうけど。
0883デフォルトの名無しさん2005/07/16(土) 19:56:43
初心者でうまく説明できないんですけど、
クラスの色んな属性を順番に取り出していく方法ってどうやるんでしょうか?
ハッシュにforeach関数を使う時みたいな感じです。
よろしくお願いします。
0884デフォルトの名無しさん2005/07/16(土) 20:44:27
>>883
> クラスの色んな属性を順番に取り出していく方法ってどうやるんでしょうか?

属性を入れているハッシュにforeachを(関数じゃないぞ)使えばいいです。
0885デフォルトの名無しさん2005/07/16(土) 20:55:39
>>884
ありがとうございます。

具体的にどう書けばいいんでしょうか?
すみません;;
0886デフォルトの名無しさん2005/07/16(土) 21:00:12
いらいら
0887デフォルトの名無しさん2005/07/16(土) 21:08:28
>>883-885
Perl のクラスはそのオブジェクトの属性をどのように実装するかまでは
言語レベルで取り決めていない。よってオブジェクトの全属性を順番に
読み出す一般的な方法は無い。

とは言え、多くの場合はハッシュリファレンスとして実装されているので、
この辺全部読め。
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:09
>>883
887の言うように、まずはチュートリアルも読みましょう。

# $obj にオブジェクトが入っているとすれば、
use Data::Dumper;
print Dumper($obj);

ハッシュリファレンスと分っているなら、Data::Dumper使わずにハッシュの時と同様に書いても良い。
while (my($attr, $val) = %$obj) {
print $attr, " => ", $val, "\n";
}
0889 ◆TWARamEjuA NGNG
>>887
5.005なのね('・c_・` )
0890デフォルトの名無しさん2005/07/16(土) 21:41:26
皆様どうもありがとうございます。
逝ってきます。。
0891デフォルトの名無しさん2005/07/17(日) 00:31:29
ところで今はどのバージョンのPerlをメインに語ったら良いのかね。
ここで紹介されてる解決策も
バージョンによって動いたり警告でたりエラーになったりするはず。
妥当な所って5.6くらい?
それとも5.8系まで行って良いのかな

仕事でperl使う場合には入ってるのが5.005だったりするだろうし
(安定動作してる、ちょっと古い鯖のプログラム修整・追加とか)。
0892デフォルトの名無しさん2005/07/17(日) 00:56:05
とりあえず基本は最新の安定版5.8系で、仕事・借りてるサーバの
都合でそれ以外の場合は最初に明記ってのが無難じゃないかな?
0893デフォルトの名無しさん2005/07/17(日) 07:34:09
>>858-881
なにこの流れ

式全体が値を返す場合以外は三項演算子を使うべきじゃないだろ
ifを使えよ…
0894デフォルトの名無しさん2005/07/17(日) 08:40:58
>>893
>使うべきじゃないだろ
ソス-キボンヌ
0895デフォルトの名無しさん2005/07/17(日) 09:06:15
>>893
>使うべきじゃないだろ
Perlで三項演算子を制御構造として使うのは、人の好きずきだからみんなあえてスルーしてるんだよ。
&&(論理積演算子)や ||(論理和演算子) を制御構造に使ったりするでしょ。

ただ、undef(名前付単行演算子)や !=(比較演算子)の使い方については、ツッコミどころ満載なので
みんな一言いいたいんだけど、順を追って説明すると>>880-881みたいになっちゃうから
そんなの面倒なのでだれかが返答したら不足分をフォローしちゃえばいいかと思っていたのかと。

んで、新しい質問もないことなので、ここを覗いている人が一言づつ小出しに突っ込み&フォローをして
>>858-881の流れになったのだと思う。

結局、>>880でまとめが入って、>>883で新しい質問が来たので流れ終了。
てか、自分も流れに参加したかった。 ちっ!
0896デフォルトの名無しさん2005/07/17(日) 12:40:10
Perl6をWindowsで試そうと思ったのですが、
これを使うにはまず

> perl Configure.pl
を実行する必要がある、みたいなことが書いているようですが
必要でしょうか?

これを実行するためにperl.exeを実行するために
今cygwinをフルインストールしているところです。


それとも、もっと簡単な方法でPerl6を試すことができるでしょうか?
08978962005/07/17(日) 13:48:22
cygwinの(途中、dllがダウンロードできないなどのエラーがでましたが)インストールが完了したので
早速、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:11
>>896
Perl6はまだリリースされていませんよ?
0899デフォルトの名無しさん2005/07/17(日) 14:44:24
されていないみたいですが
試すことができると思いまして
どんなものか実際に動かしてみたいんです。
0900デフォルトの名無しさん2005/07/17(日) 15:39:29
perl6との違いを見抜けない人は(parrotを使うのは)難しい。
0901デフォルトの名無しさん2005/07/17(日) 23:02:53
んじゃ、Perl6::Pugs
0902デフォルトの名無しさん2005/07/17(日) 23:49:25
Perlでプログラミングする際につけるべきプラグマって
strict以外に何かありますか?

0903デフォルトの名無しさん2005/07/18(月) 00:37:19
>>902
warnings
0904デフォルトの名無しさん2005/07/18(月) 05:52:49
print "abc"

って打つと、コマンドプロンプトで実行すると一瞬で文字が表示されるけど
これをゆっくりなめらかに表示させる方法ないですかね?
0905デフォルトの名無しさん2005/07/18(月) 05:57:58
>>904
> って打つと、コマンドプロンプトで実行すると一瞬で文字が表示されるけど
> これをゆっくりなめらかに表示させる方法ないですかね?
1文字ごとにwait入れろよ。
0906デフォルトの名無しさん2005/07/18(月) 06:45:05
>>905
$|=1; も必要だ、と書いてやれよ。
0907デフォルトの名無しさん2005/07/18(月) 07:17:29
GNU dateコマンドみたいに、日付操作に関する万能モジュールってありますか?
0908デフォルトの名無しさん2005/07/18(月) 07:28:05
>>907
あります。
0909デフォルトの名無しさん2005/07/18(月) 14:26:19
>>906
それ以前に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:06
テーブルの結合 (INNER JOIN)をして select したいのですが、
Class::DBI を利用する場合、皆さんはどうされてますかい?
私はいつもIma::DBI経由で直接 select文を叩いているので、
何か他にいい方法あるのかなと・・・。(´・ω・`)
0911デフォルトの名無しさん2005/07/18(月) 15:19:43
>>910
ω ←これやめれ
0912デフォルトの名無しさん2005/07/18(月) 16:45:52
Class::HPLOO使ってみたけど駄目だ。
あまりに遅すぎる。
Filter::Simpleでプリプロセスかましてるからしょうがないか。
複数行コメント「/*〜*/」が使えるようになるAcme::Comment
というモジュールも同じ理由で激遅で使いものにならなかった。

ちなみに上の方で話題になったAcme::MorningMusumeと同じ
カテゴリなのが笑った。>Acme::Comment
0913デフォルトの名無しさん2005/07/18(月) 16:56:01
>>910
INNER JOINでは使ったことはないが単なるテーブルの要素だけ
じゃないものを返すSELECTのときはClass::DBI::Viewが使える
かも?

0914デフォルトの名無しさん2005/07/18(月) 16:57:34
use命令の第3引数の使い方がいまいちよく分からないんだけど
誰か分かりやすい解説キボンヌ!
0915デフォルトの名無しさん2005/07/18(月) 17:00:12
>>903
あざーっす!
じゃあ、strictとwarningsを記述するくせをつければ
とりあえずOKってことでよろしいですね?
0916デフォルトの名無しさん2005/07/18(月) 17:01:24
>>912
build-hplooであらかじめ変換しといても遅い?
変換が遅いのか変換されたコードが遅いのか
どっちなんだろ。
0917デフォルトの名無しさん2005/07/18(月) 17:06:36
>>914
例外的なのを除けばExporterモジュールを使ってることが多いので、よく理解して
おくべし。ただし何をexportしてるかはモジュールごとに当然違うし、Exporterを
使わず勝手なことをやってるものもよくあるので、結局はモジュール毎に
ドキュメントなりなんなり読むしかないだろうな。



09189102005/07/18(月) 18:17:12
>> 913
Class::DBI::View ですか、、1回調べてみます。
どうもありがとう!
0919デフォルトの名無しさん2005/07/18(月) 18:58:02
>>916
build-hplooって予めソースをコンバートしておくものですよね。
それだと多分速度は低下は無いんでしょうが、俺の場合は
「use Class::HPLOO」って記述しただけで体感で2〜3倍の時間が
かかりました。
なので実用的じゃないかなとあきらめました。(残念!)
0920デフォルトの名無しさん2005/07/18(月) 19:56:34
>>908
http://cpan.uwinnipeg.ca/search?query=date&mode=dist
いっぱいありすぎてわからん。どれかお勧めある?
0921デフォルトの名無しさん2005/07/18(月) 21:47:42
>>920
モジュールの名前みて自分の用途に合ったものを選びましょう。
まぁ、最終手段は qx(date)
0922デフォルトの名無しさん2005/07/18(月) 22:21:03
いまあるスクリプト書いてるんですが、以下のようなコンパイルエラーがでます。

Can'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
>>922
エラーが出たのはその下の行。
$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
>>923
%dataの$nameに該当する値を1に設定するつもりで書いたのですが、
結果的にそういうコードにはなっていないんですかね。
0926デフォルトの名無しさん2005/07/18(月) 22:56:04
>>925
だから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:25
うーん。このさい全部つっこんでもらえませんか?
0928デフォルトの名無しさん2005/07/18(月) 23:08:34
>>927
2週間後にまたどうぞ。
0929デフォルトの名無しさん2005/07/18(月) 23:09:39
そこを自分でやってかないとプログラムはいつまで経っても書けません。
がんばりましょう。
0930デフォルトの名無しさん2005/07/18(月) 23:10:50
>>927
つ『プログラミングPerl』
09319272005/07/18(月) 23:12:15
>>930
たまに読んでます。vol1しかないですけど。
09329272005/07/18(月) 23:19:43
しかしもったいないですね。use strictすると
$hoge{foo} = aaa;
$hoge{foo}{bar} = bbb;
みたいなコードが書けないなんて。

こうしたいときだけno strict 'refs'でもするしかないのかな・・・
0933デフォルトの名無しさん2005/07/18(月) 23:22:06
釣り?
0934デフォルトの名無しさん2005/07/18(月) 23:24:23
この調子じゃ何年かけても何にも身につかなそうだ。
六十の手習いの類?
0935デフォルトの名無しさん2005/07/18(月) 23:25:51
>>932
何がしたいのかさっぱりわからないのだが。

文章でなにがしたいのか書いてみ?
09369272005/07/18(月) 23:33:24
>>932はハッシュhogeのfooというキーにaaaが入っており、
{foo}{bar}ってのは多次元ハッシュのつもりです。

最初にみたperlのコードにはこんな感じでがりがりデータぶち込んで
あって、へーこんなんできるんだって思って関心したもんですけどw
0937デフォルトの名無しさん2005/07/18(月) 23:38:16
できるわけねぇ。意味不明すぎ
09389272005/07/18(月) 23:41:12
>>937
use strictしなければうまくいきますよ。
少なくともやりたいことは実現できます。
0939デフォルトの名無しさん2005/07/18(月) 23:43:48
>>936
それはな。俺の記憶が確かならば古い技でなんとかできる。
いつまで互換性があるのかとか、もうPerl追ってないから分からないが。

my %hash;
$hash{"aaa"} = 1;
$hash{"aaa", "bbb"} = 2; # <-- (*)

こんな感じで書くと多分意図したものになる。

(*) 印つけた下の行は、多次元のkeyを与えているように見える。
実際には、与えたkeyの文字列を(確か)ヌル文字で連結したものをkeyとして使う。
ので、keyが普通の文字列である限りはこれで動くはず。
多次元キーのエミュレーション。
09409392005/07/18(月) 23:45:27
>>938
それは動いているように見えるだけで、データは壊れてるんでない?
0941デフォルトの名無しさん2005/07/18(月) 23:51:26
つour (%hash);

多次元って
@hoge = (
['a', 'b'];
['c', 'd'];
);
みたいなのなかった?
09429382005/07/18(月) 23:56:54
>>939
検証してみましたけど、雰囲気、大丈夫でした。
09439382005/07/18(月) 23:58:48
なんどもみかけたことあります。
でも同義ならこっちが便利だなーとおもってつかってましたよ。

要は同じだとおもってたものがまったく別物だったということで、、、
0944デフォルトの名無しさん2005/07/19(火) 00:03:06
>>940
あー、きっと1はダミーなんだよ。

$data{$name} = {};

ってしたいんだよ、たぶん。
当たったら俺エスパー?

09459382005/07/19(火) 00:09:30
>>944
そのとおりですけど、あなたはエスパーではない!
0946デフォルトの名無しさん2005/07/19(火) 00:18:32
>>944
俺が代わりにエスパー認定してやろう。

ただそれだと、
>>932
$hoge{foo} = aaa;
$hoge{foo}{bar} = bbb;
これはできないぞ。
0947デフォルトの名無しさん2005/07/19(火) 00:19:48
最初っからその話してんだろバカ
09489382005/07/19(火) 00:22:04
>>946
926さんのレスとvol1をちょっと読んでみてすでに納得済みですよ。
もう別のコードに書き換えました。
0949デフォルトの名無しさん2005/07/19(火) 00:22:44
稀に見る良スレですね
0950デフォルトの名無しさん2005/07/19(火) 00:26:53
シンボリックリファレンスのマジックを久しぶりにみた。

use 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'} の参照。
09519392005/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
>>952
"\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:29
質問します
perl 5.8.0にてモジュールNET::POP3を使い、メールサーバからメールを受信し、受信したメールを
JISからEUCに変換してCSVファイルを作成する処理があるのですが、
携帯から空という文字をうって、サーバに送信してperlで受信すると
文字化けしてしまいます。色々試して、たいていの漢字のメールは正しくCSV化されていました。
しかしたまに、このような文字化けします。
受信したメールをPERLプロフラムを通す前に見てみると、JISコードで空の3675というコードがちゃんとはいって
いました。原因がさっぱりわからないのですが、分かる方教えて下さい。
0956デフォルトの名無しさん2005/07/19(火) 02:15:41
$hoge->{foo}{bar}にしようぜ。
0957デフォルトの名無しさん2005/07/19(火) 03:27:10
>>955
君の日本語が問題。
0958デフォルトの名無しさん2005/07/19(火) 13:10:52
>>955
単純に考えれば変換のモジュール・ライブラリがクソじゃないのか?
まず、JISの「空」をEUCに文字化けさせずに変換するプログラムを作ってみれ。
0959デフォルトの名無しさん2005/07/19(火) 13:40:22
>>958
レスサンクス

変換モジュールは
jcode.plで最新のを使っています。最初はそれが悪いと思って疑ったのですが、
その変換モジュールを通す前に、すでにJISコードがおかしくなっていました。。
POP3モジュールで受信した時点ですでに文字化けです。。
0960デフォルトの名無しさん2005/07/19(火) 13:41:53
http://hp00.mypoke.com/26/mackdaddy/
0961デフォルトの名無しさん2005/07/19(火) 14:53:10
ourの使い方がわからない…
use varsとどう使い分けるの?
0962デフォルトの名無しさん2005/07/19(火) 15:35:58
perldoc vars すりゃ書いてある。
vars は obsolete なので our 使っとけ
0963デフォルトの名無しさん2005/07/19(火) 16:53:18
すいません。質問があります。
-hoge-fugafuga-
という文字列を
if(/-.*-fugafuga-/){
}で見つけた後hogeという文字列を取得したいのですがどうすればよいのでしょうか?
$1ぐらいに入っていたような気がするのですが、、、

何か情報をお持ちな方はお教え頂けますと幸いです。
0964デフォルトの名無しさん2005/07/19(火) 16:55:42
抽出したいところを () で囲うと $1 に入る。
0965デフォルトの名無しさん2005/07/19(火) 17:40:14
激しく困っています。宜しくお願いします。
Perlで書き込みランキングを作成しています。
ハッシュを使ってソートして一番書き込み数が多い人から順に
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にする、という感じ。
09689632005/07/19(火) 18:04:15
>964さん
おおっ 解決しました。
ありがとうございます。
0969デフォルトの名無しさん2005/07/19(火) 20:36:17
>>965
探すよりも考えましょう。

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
>>969さん

今試して見たら、完璧でした!!!!
感動です!!!
本当にありがとうございました。
0972デフォルトの名無しさん2005/07/19(火) 23:48:06
質問いいでしょうか?
Perlでフォーマット機能を使って文字を整形してるのですが、
これってMSゴシックなどの等幅フォント等などでしか綺麗に表示されませんよね?
MSPゴシックなどのプロモーションフォントで綺麗に(揃えて)出力したいのですが、
何か方法をご存じでしたらご教授して頂けると幸いです。
0973デフォルトの名無しさん2005/07/20(水) 00:55:49
>>972
無理。例えば
        \11,111,111
       \88,888,888
なんかは頭と尻の双方を揃えられない。
それがプロポーショナル。
頭や尻を揃えるだけなら、HTMLとかTeXでどうにか。
09749722005/07/20(水) 01:04:36
>>973
返信ありがとうございます。すいません。片方だけです。
順位 コード 銘柄名          現在値  前日比  前日比率 レス
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:26
それがプロポーショナルクォリティ
0976デフォルトの名無しさん2005/07/20(水) 01:24:54
>>974
そか、2chのカキコに使うんじゃHTMLもTeXも使えん罠。
いっ半角全角変換してしまうのが近道かも試練。多少読みにくいが。
MS Pゴシックは全角文字の幅は一定だからね。
0977デフォルトの名無しさん2005/07/20(水) 01:30:35
2chで表示したいってことか…?

2chでの表示に特化していいんであれば、内部にMSPゴシック12pt文字毎の幅を
テーブルで持っときゃなんとかなるな。
AAサロンの練習スレに参考になるツールがあるよ。
0978デフォルトの名無しさん2005/07/20(水) 04:15:21
誰か次スレ頼む
0979デフォルトの名無しさん2005/07/20(水) 05:16:21
Perlについての質問箱 18箱目
http://pc8.2ch.net/test/read.cgi/tech/1121804136/
0980デフォルトの名無しさん2005/07/20(水) 05:23:54
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
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:25
ありゃ間違えた失礼
0982デフォルトの名無しさん2005/07/20(水) 12:24:32
phpのrealpathに代わる関数というのは存在するのでしょうか。
ネットや本で調べた限りでは見つからないのですが。

もし存在しない場合、どのような手法で実現すればよいか分かりません。
ヒント、アドバイスでも結構ですのでご教授下さい。
0983デフォルトの名無しさん2005/07/20(水) 13:01:20
>>982
http://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:02
Perlってなんでこんなにきもちいいの?
0985デフォルトの名無しさん2005/07/20(水) 18:54:01
>>959
>jcode.plで最新の
十分古い。Jcode.pm使え。
それでわかんなかったらもっかい来い。
http://openlab.ring.gr.jp/Jcode/index-j.html
0986デフォルトの名無しさん2005/07/20(水) 19:31:33
>>985
いやいや、Jcode.pm すらもう過去の遺物なわけだが。
http://digit.que.ne.jp/work/index.cgi?Encode
0987デフォルトの名無しさん2005/07/20(水) 19:49:07
For perl is 5.8.1 or later, Jcode acts as a wrapper to Encode.
0988デフォルトの名無しさん2005/07/20(水) 20:00:10
>>986
分かってて言ってるのが分からない?
それともそっちの情報古い?

Jcode2.0からJcodeはEncodeへの移行をスムーズにするモジュールになった。
>>959のようにメールの内容を加工するには
MIME::Base64も使うことになるので最適モジュールはEncodeでもjcode.plでもなくJcode.pm
0989デフォルトの名無しさん2005/07/20(水) 20:50:19
>>988
そんな嫌味ったらしい言い方するなよ
0990デフォルトの名無しさん2005/07/20(水) 20:57:49
>>988
Encode でも一応こういう事ができるけどな。
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:14
だんこがいですから。
0992デフォルトの名無しさん2005/07/20(水) 22:01:56
いや、単に5.8.xが隅々まで行き届いていないだけだと思うが。
実際、俺の借りてる鯖も5.005だし。
0993デフォルトの名無しさん2005/07/20(水) 22:27:24
use constantによる定数定義をまとめたファイルがあって
それを一度だけrequireして使いたいのですが、
useの有効期限がファイルの終わりまでなので、
requireする側のファイルでは無効になってしまいます。
ファイル間を越えてグローバルに定数を扱うにはどうしたら
良いでしょうか?識者のご意見をお聞かせください!
0994デフォルトの名無しさん2005/07/20(水) 22:56:32
>>993
ちょっと手元で試せる環境にないけど、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
Encodeのコード判定はなんか使いにくいのでJcode使ってるな。
コード決めうちで変換するのには使える感じではあるのだが。
0996デフォルトの名無しさん2005/07/21(木) 04:02:17
ume
0997デフォルトの名無しさん2005/07/21(木) 04:02:34
1000
0998デフォルトの名無しさん2005/07/21(木) 08:37:54
>>992
その鯖皿仕上げれ。ヘタレ管理者皿仕上げれ。
0999デフォルトの名無しさん2005/07/21(木) 08:38:45
多すぎて晒しようがないな
1000デフォルトの名無しさん2005/07/21(木) 09:00:03
まあPerlみたいな重要なパッケージはOSのバージョンと一心同体ということか
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。