トップページ⇒php
1001コメント371KB

Perlコーディング初心者質問スレ Part 43

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/08/12(金) 01:26:47ID:mHnZWvqz
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0352nobodyさん2005/09/09(金) 08:09:10ID:???
さらに混ぜっ返しつつ warnings clean に。

print map "$_\n",
  sort {
    return $b =~ /^\d+$/ ? $a <=> $b : -1 if $a =~ /^\d+$/;
    return $b !~ /^\d+$/ ? $a cmp $b : 1;
  } keys %test;

>>348 のケースだと四行目は単に $a cmp $b; でもヨシだけれど、1 と -1 を交換すると逆のニーズにも対応できるという噂。
0353nobodyさん2005/09/09(金) 11:49:05ID:???
>>341
半日っていうともう猶予は過ぎてるかも知れないけど、>>338は
Perl始めたばかりのド素人のようだから無視するように。

mod_perlを使っていないのなら下の案はwgetを子プロセスとして起動する分、
サーバー負荷は無条件に高い。
単純計算で1アクセスにつき無条件にperlとwgetで計2プロセスが起動される
ことになる。wgetの中で上のコードと同じようなことをやっているのだから、
上の案のほうが負荷は半分になると考えていいだろう。

しかしそんなにアクセス数が見込まれるサイトがHTTP経由でデータ取得を行う
なんていうアホな設計になっているところが信じられん。
03543482005/09/09(金) 11:50:39ID:???
皆様、私にはレベルが高すぎです。
本当に有難うございます。

とりあえず一旦

foreach my $key (sort k::sort_rule keys %$refs) {
print $key;
}

sub sort_rule{
return $b =~ /^\d+$/ ? $a <=> $b : -1 if $a =~ /^\d+$/;
return $b !~ /^\d+$/ ? $a cmp $b : 1;
}

こんな感じで後で試してみようかと思います。
結果は追ってご連絡いたします。
0355nobodyさん2005/09/09(金) 12:06:18ID:???
>>353
有難うございます。
あれから実はソケット通信をやってみたのですが、エラーが出てしまったんです。

Object not found!
The requested URL was not found on this server.

If you entered the URL manually please check your
spelling and try again.

If you think this is a server error, please contact
the <a href="mailto:webmaster@localhost">webmaster</a>.

Error 404

localhost.localdomain

それで偉い人に聞いてみたら、「uname -nで分かるノード名を使って通信して、
2台のサーバのファイルの同期を取れ」とか言われたのですが、これがさっぱり
わからず、もうどうにでもなれといった感じでオープンが近づいております。。

ノードを名取った後どのような処理をすればよいのか、もしもご存知のようでしたら
ご教示いただきたく思っております。
0356nobodyさん2005/09/09(金) 15:06:48ID:???
>>355
なんか予想の斜め上をいく展開だな。

とりあえずその偉い人に
同一セグメントのサーバ同士のファイルの同期をとるのが目的なら
いっそのことNFSかsambaかWebDAVでディレクトリを共有したらどうですか?
と進言してみたら?

リアルタイム性を要求されないのならrsyncとかも使える。
0357nobodyさん2005/09/09(金) 17:24:02ID:???
>>352
>>351だが、351のコードで warnings 出るっけ?
それとも他のコードのことかな。
0358nobodyさん2005/09/09(金) 17:56:17ID:???
>>357
数じゃない文字列を <=> で比較すると use warnings 下では

Argument 〜 isn't numeric in numeric comparison (<=>) at 〜

が出ることをいってるんじゃないだろうか。

0359nobodyさん2005/09/09(金) 18:18:45ID:???
>>356
NFS等の導入は一番初めに提案させていただきましたが、
上から許可がおりないとか何とかであっさり却下されました。。

もうどうしたらよいのやら。。
0360nobodyさん2005/09/09(金) 19:22:09ID:???
>>358
なるほど。サンクス。勉強になりました。
たしかに暗黙の型変換を利用してるなぁ。
0361nobodyさん2005/09/09(金) 20:40:27ID:???
>>359
プロジェクト全体が腐ってるっぽいな。
404になる件はノード名を/etc/hostsに登録すれば
なんとかなるだろうが…

0362nobodyさん2005/09/10(土) 10:54:03ID:???
>>359
ヘッポコ上司に連座させられたくなかったら、
ちゃんとしたプロマネつれてこないとポシャルと、
上司を飛び越してその上の上司に進言しなさい。

>>361
> 404になる件はノード名を/etc/hostsに登録すれば
> なんとかなるだろうが…
ならない。
0363nobodyさん2005/09/10(土) 11:15:29ID:???
$count=0;
open(LOG,"$logfile");
$count += tr/\n// while(read LOG, $_, 1024);
close(LOG);

どうしてこれで$logfileの長さをカウントできるのか教えてください。
3行目のtr/\n// while(read LOG, $_, 1024);がよく分かりません。
0364nobodyさん2005/09/10(土) 11:15:52ID:???
404というエラーが正常に返ってきているのだから、接続はできているのだ。
0365nobodyさん2005/09/10(土) 11:19:09ID:???
>>363
ファイルのサイズではなく、行数をカウントしてるのでは。

ちなみに
open(LOG, $logfile);
の方が良いと思います。余計な変数展開がなくなります。
03663632005/09/10(土) 11:22:57ID:???
>>365
行数でした。
C言語しか知らないもので、while(条件){実行する内容}
という形式は理解できるのですが、perlではwhile文はどのように展開されるのでしょうか?
0367nobodyさん2005/09/10(土) 11:34:44ID:???
>>366
while を後置しているだけです。スクリプティング言語では多く見られます。

以下と同じ意味です。
while (read(LOG, $_, 1024)) {
$count+= tr/\n//; # trは置換に成功した数を返す。
}
0368nobodyさん2005/09/10(土) 11:34:57ID:???
>>366
perlのシンタックスの勉強なら本を買え。
0369nobodyさん2005/09/10(土) 11:47:10ID:???
>>367
>スクリプティング言語では多く見られます。
これ本当なの
Perl独自の変態仕様じゃないの
0370nobodyさん2005/09/10(土) 11:49:30ID:???
>>369
Perlから広まっていった…と記憶してる
0371nobodyさん2005/09/10(土) 15:15:07ID:???
trをやめてchompで。
0372名無しさん@そうだ選挙に行こう2005/09/11(日) 16:20:19ID:yhvSpEP/
モジュールを使わずにSHA-1ハッシュ関数を生成しようと思い以下のサブルーチンを拾ってきて以下の2つのサーバーでprint &SHA("a");を試したんですがサーバー1の方で正しいハッシュ関数が生成されてないみたいです。
サーバー1: Fedora Core release 3, Kernel 2.6.9-1.667, Perl version 5.8.5
サーバー2: FreeBSD 5.4-STABLE, Perl v5.8.2
どうすればよろしいでしょうか?
sub SHA {
### &SHA("squeamish ossifrage\n");
### Should return 82055066 4cf29679 2b38d164 7a4d8c0e 1966af57
  local ($temp, $m, @A, @K, $x, $n);
  local ($b, $c, $d, $e, $S, $r, @W, $t, $v);
  my ($msg, $p, $l) = @_; #$p=0; $l=0
  my $inputp=$_[0];
  local $_;
  $temp = 'D9T4C`>_-JXF8NMS^$#)4=L/2X?!:@GF9;MGKH8\;O-S*8L\'6';
  $m = 4294967296;
###$m=1+~0;
  @A=unpack"N*",unpack "u",$temp;
  @K=splice@A,5,4;
sub M{($x=pop)-($m)*int$x/$m};
sub L{$n=pop;($x=pop)<<$n|2**$n-1&$x>>32-$n}
@F=(sub{$b&($c^$d)^$d},$S=sub{$b^$c^$d},sub{($b|$c)&$d|$b&$c},$S);
do{
  $msg=~s/.{0,64}//s;$_=$&;
  $l+=$r=length;
  $r++,$_.="\x80"if$r<64&&!$p++;@W=unpack N16,$_."\0"x7;$W[15]=$l*8
if$r<57; for(16..79){push@W,L$W[$_
-3]^$W[$_-8]^$W[$_-14]^$W[$_-16],1}($a,$b,$c,$d,$e)=@A;
  for(0..79){$t=M&{$F[$_/ 20]}+$e+$W[$_]+$K[$_/20]+L$a,5; $e=$d; $d=$c;
   $c=L$b,30; $b=$a; $a=$t}$v='a'; @A=map{ M$_+${$v++}}@A
}while$r>56;
return sprintf'%8x'x4 . '%8x',@A;
}
03733482005/09/11(日) 16:54:25ID:???
遅ればせながら、ご報告させていただきます。

foreach my $key (sort k::sort_rule keys %$refs) {
 print $key;
}

sub sort_rule{
 return $b =~ /^\d+$/ ? $a <=> $b : -1 if $a =~ /^\d+$/;
 return $b !~ /^\d+$/ ? $a cmp $b : 1;
}

これでいきました!本当に有難うございました!
まだまだ技術レベルが低いので意味がわかってないのですが、
これから勉強してこの構文を十分理解できるようになりたいと
思います。

ご教示、誠に有難うございました。
0374名無しさん@そうだ選挙に行こう2005/09/11(日) 23:02:31ID:moSzhZBr
$_が分かりません。
説明を読むと、デフォルトの変数として、省略されている場合も
自動的に代入や出力されている特殊変数とあるのですが、たとえば
if ($_[0] eq 'bye') {
いきなりこんなのが出てきた場合、一体何をしてるんでしょうか。
自動的に配列を作って、0に何かが代入されている?

うかがうのに妥当なスレがないようだったので、こちらで尋ねました
よろしくお願いします。
0375名無しさん@そうだ選挙に行こう2005/09/11(日) 23:05:32ID:???
スクリプトの第一パラメータとか
サブルーチンの第一引数とか
0376名無しさん@そうだ選挙に行こう2005/09/11(日) 23:07:43ID:???
> スクリプトの第一パラメータとか
0377名無しさん@そうだ選挙に行こう2005/09/11(日) 23:12:45ID:???
>>374

@hoge = (1 ,2, 3);
↓
$hoge[0] == 1

@_ = (1 ,2, 3);
↓
$_[0] == 1

ok?
03783742005/09/11(日) 23:22:07ID:???
>375,>376,>377
レスありがとうございます。
>377の例、わかりやすかったです
特に個別に名前はつけてないけどこーゆー配列(変数)だよ、っていう事なんでしょうか。

もしかしてすごくアホな事聞いてるかもしれないんですが、さっきの
if ($_[0] eq 'bye')
コレ、いきなり出てきたんです。>377で言う@_ = (1 ,2, 3); みたいなのがなくて。
@_ = (1 ,2, 3); がないのに、一体何と比較してるんだろう???となってしまったんですが…
0379名無しさん@そうだ選挙に行こう2005/09/11(日) 23:29:33ID:???
>>378
サブルーチンの引数は、勝手に @_ に入ります。
というか、基本なんだからマニュアルか、本を読もうよ…。
03803742005/09/11(日) 23:37:29ID:???
>379
すみません。実は本読んでもよくわかりませんでした。
もうちょいスクリプトいじってみて、悩んでみます…
0381名無しさん@そうだ選挙に行こう2005/09/11(日) 23:41:56ID:???
>>380
その本、巻末に索引付いてませんか?
そこで、$_ と @_ を探しましょう。
0382nobodyさん2005/09/12(月) 17:57:25ID:???
たとえば、
-----
$classname = 'bar'
return "foo::".$classname->new();
-----
みたいに、変数に入ってる値でクラスを呼び出すことはできないのでしょうか?
(この例だと、foo::barを呼び出したいです)
foo::??の??の部分を変数にして動的に変えたいですが、何かやり方はありますか?
0383nobodyさん2005/09/12(月) 18:25:32ID:???
eval
0384nobodyさん2005/09/12(月) 20:53:06ID:???
>>382
use strict; を使ってるなら

no strict 'refs';

使ってないなら

$a = 'aaa';
&{$a."::new"}();
0385nobodyさん2005/09/12(月) 20:54:01ID:???
あら、上手くかけてなかった。

use strict; を使ってるなら

no strict 'refs';
$a = 'aaa';
&{$a."::new"}();

使ってないなら

$a = 'aaa';
&{$a."::new"}();
0386nobodyさん2005/09/12(月) 20:56:53ID:???
strict使ってないなら
$obj = "foo::$classname"->new();
もできるんじゃないかな。
0387nobodyさん2005/09/12(月) 21:23:44ID:???
>>386
おお、ほんとだ。
strict 使ってても、no strict 'refs' でOKみたい。
0388nobodyさん2005/09/12(月) 22:46:32ID:Giee4nr4
CGI.pmでのテーブルタグの出力ってどうやればいいんですか?

print table(TR,(td("")));

この書き方だとエラーになるようなんですが
0389nobodyさん2005/09/13(火) 10:56:07ID:???
>>387
no strictで制限を緩めるときはブロックに閉じ込めて必要最小限の
範囲だけにした方がいいよ。
0390nobodyさん2005/09/13(火) 11:31:37ID:???
質問です。
ファイルを開いて処理する時に

open (FILE,"<$list");
while(<FILE>){
chomp;
my (undef,$addr,$svr,$uer,$pass) = split(/<>/,$_);
&get($addr,$svr,$usr,$pass);
}
close FILE;

と、

open (FILE,"<$list");
my @getlist = <FILE>;
close FILE;
foreach my $usrdata(@getlist){
chomp($usrdata);
my (undef,$addr,$svr,$uer,$pass) = split(/<>/,$usrdata);
&get($addr,$svr,$usr,$pass);
}

ってどちらが速いいですか?
会社の人は「whileよりforeachのほうが速い」って言うのですが、
何回ベンチ取ってもwhileのほうが1割近く速くなるんです。
私のベンチの取り方が問題?

読み込むファイルの大きさは1kb程度のものです。
0391nobodyさん2005/09/13(火) 12:15:30ID:???
>>390
その例ならwhileの方が普通は早そうでベンチとも一致する。

my @getlist = <FILE>;

でファイル全体を一行ずつにばらした配列を作るのが余計な
手間になるからね。

ただ一般的には往々にして直観はあてにならないのできちんと
ベンチをとって評価するのが正道。
0392nobodyさん2005/09/13(火) 12:28:09ID:???
なにこの初心者
0393nobodyさん2005/09/13(火) 14:15:39ID:???
ファイルが巨大だったらメモリも食うし一括読み込みはあかん
03943822005/09/13(火) 14:15:41ID:???
384さん
386さん
うまくいきました。ありがとうございました。
0395nobodyさん2005/09/13(火) 14:32:09ID:???
>>389
サンキュ。そこまで書いたほうが親切だったね。
0396nobodyさん2005/09/13(火) 20:13:08ID:???
便乗して質問させてください。
掲示板CGIなどで、特定の投稿を編集をするとき、一括読み込みをしないでデータを書き換える方法はありますか?
0397nobodyさん2005/09/13(火) 21:19:34ID:???
書き換え前後のサイズ(文字数)とかが同じなら可能。
0398nobodyさん2005/09/13(火) 23:40:10ID:???
>>392
お前にもそういう時期があったろう
03993902005/09/14(水) 00:52:53ID:???
>>391
>>393
ありがとうございます。

会社の人が言うように、whileよりforeachのほうが速いケースってあるんだろうか・・・
と思う今日この頃。
0400nobodyさん2005/09/14(水) 01:35:33ID:???
>>399
ファイルから逐一読み出す処理よりも、
変数から処理するほうが速いって意味だったとか。
0401nobodyさん2005/09/14(水) 23:20:56ID:???
標準入力された画像データをPerlMagickで直接加工したいのですが・・・
use CGI;
use Image::Magick;
$cgi = new CGI;
$fh = $cgi->param('picFile');

$i = new Image::Magick;
$i->Read($fh); #これができない

print "Content-type: image/jpeg¥n¥n";
$i->Write('jpeg:-'); #何も出力されない

フォームで選択されたファイルをどうにかしてファイルハンドルとして
PerlMagickに読み込ませたいのですが、うまく行きません。

現在は標準入力のデータを一旦ファイルに書き出し、
それを読み込んで加工する方法を取っておりますが、明らかに非効率だと思うのです。
いい方法はございませんでしょうか。
0402nobodyさん2005/09/14(水) 23:24:25ID:???
$fh = $cgi->param('picFile');
04034012005/09/14(水) 23:57:54ID:???
>$fh = $cgi->param('picFile');
$fhはファイルハンドルじゃないってことですか?
でも
read($fh, $buf, 1024);
という風にできるから・・・
0404nobodyさん2005/09/15(木) 01:10:00ID:???
>>403
PerlMagickと組み合わせて使ったことはないのでよくわからんが、
ファイルハンドルがほしいのなら

$fh = $cgi->upload('picFile');

を使う方がいいんじゃないかと。(ただしCGIモジュール2.47以降)

詳しくはCGIモジュールのPODの「CREATING A FILE UPLOAD FIELD」を
をよく読むといいだろう。
0405nobodyさん2005/09/15(木) 13:41:48ID:3HNHstci
ローマ字を平仮名になおしたいんですが
s/ba/ば/g;
s/bi/び/g;・・・・みたいに何十行もえんえん続けるようなのでなく、
もっと効率的に動いて効率的に書けるような方法ありますか?
0406nobodyさん2005/09/15(木) 14:12:50ID:???
>>405
そおんなもんとっくに誰かが作ってるだろうと思い検索したらあったよ
ttp://pitecan.com/OpenPOBox/romakana/
04074012005/09/15(木) 15:53:13ID:???
>>404
uploadとは盲点でした。が、状況は変わらず・・・。
ファイルハンドルを渡す時は
$i->Read(¥*fh);
とするとリファレンスあったので、これも試してみました。

PerlMagickにこだわるあまりCGIの方が疎かになっているようなので、
色々可能性を模索したいと思います。
0408nobodyさん2005/09/15(木) 16:33:46ID:???
>>407
ファイルハンドルのときは

$i->Read(file => $fh);

だと思うが。
04094012005/09/15(木) 17:18:27ID:???
>>408
あ、ほんとだ。リファレンスにも書いてあるし、何故見落としてたんだろう・・・orz
おかげさまでうまく行きました。ありがとうございました。
0410nobodyさん2005/09/16(金) 08:23:19ID:0dogEF/n
すみませんすみません。
本当に申し訳ないです

知らない方がいらっしゃるのであれば申し訳ないのですがネットゲーム「罪と罰」のようなCGIを利用し、
複数のプレーヤーの様々な数値(ステータスなど)を参加者全体で共有するどういった内容で行なわれているのでしょうか?


ついでにもう一つの質問を。スレ違いな感はありますがどうか答えてやってください。
PerlとPHPが多くのCGIで利用されているようですが二種類の言語が存在するということは各々に得手不得手があるということですよね?
その得手不得手及び私が制作しようとしているCGIゲームではどちらが向いているのか、初心者ではどちらが学びやすいか教えてもらえるとかなり光栄です。
よろしくお願いします。

自分の質問…あまりにも馬鹿なのか基本的すぎるのか検索にすらHitしないんです…orz
0411nobodyさん2005/09/16(金) 08:31:10ID:???
>>410
もう少しちゃんと調べような。
http://www24.big.or.jp/~obo/game/ore_/gild/
これはPerlで書かれてる模様。

2つ目の質問はスレ違いだが、これ以上他のスレに誤爆されても困るので答えておく。
まずCGIと言う形では向いていない。
罪と罰もそうだけど、このタイプの設置を禁止している鯖も多い。
そしてCGIにはRubyやPython、JAVAもあればCもある。
要約するとこうだ、半年ROMってろ。
0412nobodyさん2005/09/16(金) 08:32:08ID:???
直リンスマソ。
半日ROMってくる
0413nobodyさん2005/09/16(金) 09:32:49ID:???
>>412さん
う〜ん…
自分は船乗りなので海の上でできる趣味が無いかな?と思ったんですけどねぇ…。
本で勉強してからまた書き込みます。まずは罪と罰と同じPerlから購入してみようと思います。
オススメの書籍があるならばお教えください。
レス無くとも言われたとおりROMっているので気を悪くしないでください。
04144132005/09/16(金) 10:03:47ID:???
追記

私に出てきてほしい場合は(限りなくそんな場合無いとは思いますが…)乗船期間以外であれば「あの時のゲームCGI初心者」や「誤爆犯」など分かりやすく呼んでいただけると出てきます。
おそらく自分から出てくるのは仕事もあるので4ヵ月〜半年後になると思います。
0415nobodyさん2005/09/16(金) 11:06:01ID:???
以上、罪と罰スクリプトの宣伝でした。
次の質問ドゾー
0416nobodyさん2005/09/16(金) 11:44:27ID:???
php は perl ほどスクリプト書いてて楽しくないなー、て思った。

>>410
まあ初心者的には php のが楽かもね、と。
04174132005/09/16(金) 21:00:27ID:???
いきなり約束破ってすみません。お礼が言いたかったのと今日、本屋行って色々と探した時の疑問があったので見逃してください

>>416さん
レスありがとうございます。
PHPですか。HTMLと一緒に記述できる点が初心者向きということですか?

本屋でPerl関連の本を探してもあまり見つからない(一冊しか無かった…)のは何故でしょう?
素人調べで悪いのですがUNIXと記述方法が似ていると言う事なのでUNIXを学べば良いのでしょうか?
でもUNIXってかなりレベルが高いような…
0418nobodyさん2005/09/16(金) 21:05:55ID:???
>>417
>本屋でPerl関連の本を探してもあまり見つからない(一冊しか無かった…)のは何故でしょう?

これはありえないと思われます。事実ならその本屋・・・品揃え悪すぎだと・・・
0419nobodyさん2005/09/16(金) 21:06:32ID:???
>>417
それはお前んとこの本屋の品揃えが悪いだけ。
Amazonで検索汁。かなりたくさんある。
0420nobodyさん2005/09/16(金) 21:30:04ID:???
うざいなぁ。
0421nobodyさん2005/09/16(金) 21:49:41ID:???
>>417
Perl以外の言語についても聞きたいなら専用のスレに
行くといいよ。
0422nobodyさん2005/09/17(土) 00:01:30ID:???
まあまあ。

>>417
php は関数が最初から腐るほど用意されてあるから、
perl みたいに自分で書いたりモジュール用意したりする手間が省けることが多いのだよ。
そこが perl の楽しいところでもあるんだけど、初心者には荷が重いかもとか。

結構Web上でも初心者から学べる解説サイトがいくつかいくらでもあるので、そういうの見てもいいかもね。
まあ、ここは perl コーティングの質問スレだから、これ以上はここではきかないでね。
0423nobodyさん2005/09/17(土) 00:24:53ID:???
> php は関数が最初から腐るほど用意されてあるから、

そう?妄想なら日記に書いておいてよ。
0424nobodyさん2005/09/17(土) 01:50:33ID:???
>>423
>>423
>>423
>>423
>>423
>>423
>>423
0425nobodyさん2005/09/17(土) 04:40:43ID:???
<?php
$funcs = get_defined_functions();
print count($funcs["internal"]);
?>
このスクリプトで組み込み関数の数を調べられるわけだが

うちの環境(PHP4.4.0+mb_string)では
826という数字が出て来た。
0426nobodyさん2005/09/17(土) 07:33:55ID:???
Perlスレで書くのもなんだが>>423が何を言いたいのかわからないので>>425を実行
php5.1.0b2
1084
腐るほどかどうかは不明だが妄想とはいえないだろ
0427nobodyさん2005/09/17(土) 07:58:14ID:???
PHPマニュアルの関数一覧を見れば一発。

数えるのマンドクセ('A`)
0428nobodyさん2005/09/17(土) 08:32:46ID:???
get_defined_functions();
こんな関数がある時点ですでに腐っている。
0429nobodyさん2005/09/17(土) 09:10:30ID:???
よそ行ってやれよ
0430nobodyさん2005/09/17(土) 10:05:17ID:???
PHPやだ〜Perlがいい〜
0431nobodyさん2005/09/17(土) 11:31:11ID:???
>>428
ワロタw 確かにw
0432nobodyさん2005/09/17(土) 12:55:22ID:???
>>1-431
URL見てわかるとおり、ここはphp板ですよ?
0433nobodyさん2005/09/17(土) 15:15:36ID:???
ところで、perl には組み込み関数とやらはどのくらいあるの?

また、組み込み関数とやらにバグがあった場合、root 等の権限を
持たないユーザでは何も出来なくなるけど、そういう場合どうするの?
0434nobodyさん2005/09/17(土) 15:35:59ID:9NJ0Gho0
連想配列に値をセットしていき、セットした順で
キーを抜き出したいのですが、これは無理なんでしょうか?

%hoge = ('aaa', 3, 'ccc', 2, 'bbb', 1);
foreach(%hoge){
print "$_ ";
}

欲しい結果
aaa 3 ccc 2 bbb 1
0435nobodyさん2005/09/17(土) 15:43:14ID:ceziuPle
質問。
biglobeでMIME::BASE64使うにはどうしたらいいの?
0436nobodyさん2005/09/17(土) 16:07:42ID:Oc8EoCio
>>423
無理じゃない?キーの頭に値を入れてソートするとか
0437nobodyさん2005/09/17(土) 16:23:52ID:???
>>434
ふつーに無理ではないかと。
0438nobodyさん2005/09/17(土) 16:41:27ID:???
>>434
それができるモジュールがあったと思う。
モジュール名は失念。

>>435
MIME::BASE64 を cpan あたりからダウンロードして biglobe の自分の
ディレクトリに置き、

use lib qw(path/to/MIME::BASE64);

でOK。
0439nobodyさん2005/09/17(土) 16:44:02ID:???
>>434
use Tie::Hash::Array;

tie my %hoge, 'Tie::Hash::Array';
%hoge = ('aaa', 3, 'ccc', 2, 'bbb', 1);
foreach(%hoge){
print "$_ ";
}
0440nobodyさん2005/09/17(土) 16:44:52ID:???
>>438
> MIME::BASE64 を cpan あたりからダウンロードして biglobe の自分の

http://search.cpan.org/src/GAAS/MIME-Base64-3.05/
xs とかあるけど、どーやってコンパイルするんだろう。
04414392005/09/17(土) 16:45:43ID:???
ごめん、うまくいかない。
0442nobodyさん2005/09/17(土) 16:45:58ID:???
>>439
tie しないといけないとは、まぬけなもじゅーるでつね。
04434392005/09/17(土) 17:02:03ID:???
>>442
いや、私に言われても困るわけだけど。

でもtieを使わない方法ってあるの?
0444nobodyさん2005/09/17(土) 17:04:08ID:???
しらーん。

>>434 がどうして >>434 なような意味不明なことを考えたかだ。

@unko = ('aaa', 3, 'ccc', 2, 'bbb', 1);
foreach (@hoge){
print "$_ ";
}
0445nobodyさん2005/09/17(土) 17:08:38ID:???
>>440
pure perl 版はどうでしょう?
http://search.cpan.org/~gaas/MIME-Base64-Perl-1.00/lib/MIME/Base64/Perl.pm
0446nobodyさん2005/09/17(土) 17:10:31ID:???
>>440
あと、biglobe 鯖に入ってるコンパイラを使えれば
コンパイルできるかも。
0447nobodyさん2005/09/17(土) 17:14:41ID:???
>>445
へー。pure perl なのあったんでつね。

>>446
がんばってコンパイラの使い方を説明してあげてくれ。w
04484392005/09/17(土) 17:15:38ID:???
>>434
use Tie::Hash::Indexed;

tie my %hoge, 'Tie::Hash::Indexed';
%hoge = ('aaa', 3, 'ccc', 2, 'bbb', 1);
foreach(%hoge){
print "$_ ";
}

# 一応できたけど、このモジュールだったけか…。
0449nobodyさん2005/09/17(土) 17:19:12ID:???
こんなことして何の役に立つのかという件について。
0450nobodyさん2005/09/17(土) 17:45:46ID:???
>>448
知らなかったけど、調べて見たらそれっぽいね。
PHPは最初から順序付きハッシュなんだっけ?
0451nobodyさん2005/09/17(土) 17:55:00ID:9NJ0Gho0
>>436-439
どうもありがとうございます。
用途は、、確かに配列でも代用できそうなんですけど、
キー指定して、値を引っ張るて事をしたく、
たまに、決まった順番でまとめて出力したかったからです。
■ このスレッドは過去ログ倉庫に格納されています