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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/06/26(月) 00:46:38ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0266nobodyさん2006/07/05(水) 23:23:45ID:???
sysopenでO_EXCL使えば?
0267nobodyさん2006/07/05(水) 23:59:55ID:???
>>266
use Fcntl; しなくても動くならそうしたい (´・ω・`)
0268nobodyさん2006/07/06(木) 00:02:49ID:???
O_EXCLなんて&O_EXCL()なんだから環境依存のマジックナンバー化してしまえば(ry
0269nobodyさん2006/07/06(木) 00:32:42ID:???
>>268
そうか、君頭イイネ。
・・・
わかるか!ヽ( `Д´)ノ
0270nobodyさん2006/07/06(木) 00:44:34ID:???
'>>'で開けばなければ作るよ。

ファイルを作ったのが自分かどうかはわからないが。
0271nobodyさん2006/07/06(木) 00:59:56ID:FMcswvIH
perlどころかプログラム超初心者で困ってます。

バッチ処理(これはなんとか解決)を実行後に、元のHPでリンクされた
urlを新しいブラウザで開きたいのですが記述方法がわかりません。
どう記述すれば良いのでしょうか?

つまらない質問ですがよろしくお願い致します。m(__)m
0272nobodyさん2006/07/06(木) 01:26:41ID:???
日本語の初心者は
0273nobodyさん2006/07/06(木) 01:30:44ID:???
まず日本語を勉強してください^^
0274nobodyさん2006/07/06(木) 02:13:42ID:???
perl初心者です。
perlって、サーバで動きますよね。
自分のパソコンで動かそうと思ったら、
apache,activeperlとかインストールしないとだめです。

ここで質問ですが、exeファイルみたいなので、
activeperl無しで動かすことってできるんでしょうか?

perlでアプリケーション作ったら、
apacheとactiveperlもいっしょに入れて、
自分でインストールしてください。
ということになるんでしょうか?

たとえば、チャットのクライアントソフトなど
作るときってどうなりますか。
よろしくお願いします。
0275nobodyさん2006/07/06(木) 02:26:05ID:???
ここはコーティングスレですよー。

∩( ´∀`)∩ドウゾ (っ´∀`)っ))アチラヘ

CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784/
0276nobodyさん2006/07/06(木) 02:45:14ID:???
それ以前に何も分かってなさそう・・・
0277nobodyさん2006/07/06(木) 03:58:15ID:???
>>274
こんにちはこんにちは!
この辺を見るといいんじゃないかな…!
http://hamachiya.com/junk/memo_PAR.html
0278nobodyさん2006/07/06(木) 05:20:33ID:???
>>277
うわ、これ便利スw
0279nobodyさんNGNG
はまちやは書いてある事がいい加減だからこっちを見た方が良い
ttp://0xcc.net/diary/20040716.html
0280nobodyさん2006/07/06(木) 14:12:07ID:???
274です。
すごい便利なものがあったんですね。
でも、説明読んでみるとソースコードが
簡単に見れるのと、複雑なコードが正常に
動かないとか書いてありますね。
もうちょっとネットや本の資料探してみます。
0281nobodyさん2006/07/06(木) 16:24:22ID://0K++zo
すんごい初歩的なことでごめんなさい。
変数を区別する記号付けってどうやるのか度忘れしたので教えて下さい。
検索ワードのご教示だけでも良いです。

[例]
$i = 1;
print "hoge$i_code";
等を正しく表示したい。
0282nobodyさんNGNG
${i}
0283nobodyさん2006/07/06(木) 16:26:57ID:???
print "hoge$i","_code";
0284nobodyさん2006/07/06(木) 16:33:30ID:???
print "hoge$i\_code";
0285nobodyさん2006/07/06(木) 16:54:28ID:???
質問です。
OSはWINです。

すごい初心者で変な質問ですみません。
perlで、dosコマンドを実行することって
できるんでしょうか。

たとえば、
print "del a.txt";
というようにファイルを消そうと標準出力しても
実行できませんでした。

可能でしたら、方法ご教授お願いします。
02862812006/07/06(木) 16:56:24ID:gzQtm5v/
>>282
それです!ありがとうございます。

>>283>>284
print <<HTML;
hoge$i_code
HTML
だとどうなんですかね。
汎用性に問題あり?
教えてクレクレ君の分際で偉そうにすみません。
ありがとうございました。
02872572006/07/06(木) 16:57:41ID:???
>>258-260
なんとなく好意的な感想どもです〜^-^/
0288nobodyさん2006/07/06(木) 17:11:28ID:???
>>285
実行するだけならsystem関数、その出力が欲しいならバッククォートまたは、パイプでopen。
だが、そのファイルを消すというのが単なる例じゃないとしたらunlink関数を使うべき

>>286
284はこういう場合に問題ありだな
"${i}nhoge"
0289nobodyさん2006/07/06(木) 17:24:25ID:???
>>288
はやいお返事ありがとうございます。
さっそく勉強します。
0290nobodyさん2006/07/06(木) 17:40:34ID:???
>>288
じゃあ "$i\x6ehoge"

とかいいつつ、俺もいつも ${i} 以外は書かないw
0291nobodyさん2006/07/07(金) 08:16:27ID:???
>>290
いつもって、そんなに使うことありますか。それ使うときって
変数を変数名にする場合ってことであってますか?
0292nobodyさん2006/07/07(金) 08:22:27ID:???
>>291
大人にはいろいろあるのよ。
0293nobodyさん2006/07/07(金) 08:25:50ID:???
>>292
ム板のアリスさんでしょ?僕を大人にしてください。おながいします。
0294nobodyさん2006/07/07(金) 12:05:06ID:???
すいません。本当に初歩的な質問かと思いますが、
Perl5.8で、jcode.plやJcode.pmを使わずに
全角英数と半角英数の変換を行う方法があれば、教えてください。
0295nobodyさん2006/07/07(金) 12:32:03ID:???
ttp://www.kanzaki.com/docs/jcode.html
step1. 文字コードについて理解する
step2. がんばる
02962942006/07/07(金) 14:25:27ID:???
色々Web検索しながら試してみたところ、
下記のようなスクリプトをUTF-8で保存し、
入力テキストファイルもUTF-8で記述したところ、うまく動作しました。
$_ = decode('utf8',$_);
の部分の意味がよくわからないので教えてください。
ここは何をしてるんでしょうか?

use strict;
use utf8;
use Encode qw/ encode decode /;

while (<>){
$_ = decode('utf8',$_);
tr/[0-9]/[0-9]/;
print;
}
0297nobodyさん2006/07/07(金) 15:11:08ID:???
tr/[0-9]/[0-9]/

オアエスゴイナww
0298nobodyさん2006/07/07(金) 15:19:10ID:gJw2prbr
配列の中身全部を全角→半角みたいに変換するには
やっぱforeachとかで中身を展開しながら1コずつ処理するしかない?
jcode.plとかJcode.pmとで配列そのものを扱う方法ってある?

>>294
英数字限定なら正規表現でどぞ。
0299nobodyさん2006/07/07(金) 15:40:01ID:???
それくらい面倒くさがるなよ(´・ω・`)
03002982006/07/07(金) 16:19:58ID:???
>>299
CGI.pmでフォームの内容を配列に入れて文字コードごにょごにょってのは
結構色んなとこで使われそうな処理なんで、実装されてたりするのかなぁ、と思ったもんで。
無いと分かれば、安心して配列回しまくれますわ。さんくす。
03012942006/07/07(金) 16:27:23ID:???
>>297
[]は要らないよ、とおっしゃっているのでしょうか?

>>298
正規表現というと、具体的には?s///を使ってできるという意味ですか?
0302nobodyさん2006/07/07(金) 17:13:35ID:???
>>296
1byte 単位(正確には 8bite 単位)の処理から utf8 の文字列処理に
変換している。
$_ = decode('euc-jp', $_ ) ;
なら、8bite 単位の羅列を euc-jp でエンコードされてると見做
した上で、utf8 に変換。
03032942006/07/07(金) 17:26:00ID:???
>>302
レスありがとうございます。
バイト単位から文字単位へ、という事が必要なので
読み込ませるテキストがUTF8でも必要、という事でしょうか。

読み込ませるテキストの文字コードがわかってない時はややこしそうですね。
0304nobodyさん2006/07/07(金) 17:40:55ID:???
>>303
その通りだと思います。が、perl hacker ではないのでw
03052052006/07/07(金) 20:47:14ID:???
自己解決しました。2重に書き込みされてたのは書き込み部分
open(F,">$localsubjectpath")||die"subject.txtをopen出来ません:$!";
foreach(@localsubject){print F $_;}
close(F);
が追記モードになっていたために2重に書き込んでしまうという症状が起きました。
上書きモードで実行したらうまくいきました。
くだらない質問に答えてくれて本当にありがとうございました。
0306nobodyさん2006/07/07(金) 21:37:02ID:???
>>305
解決おめ。
234で指摘したのとほぼ同じ原因でないか…自力で二日も模索乙
まさか、まだ追記モードを使っていたとは夢にも思ってなかった訳だが。
0307nobodyさん2006/07/07(金) 22:07:16ID:???
>>305
おめ。
俺はがんばって >>234 のコードを読解して新しく書き直してるのかと思ってたw
少しは参考にすればいいのにね。
03082942006/07/08(土) 10:38:42ID:???
すいません。こちらではこれ以上回答がいただけないようなので、
こちらでの質問はこれで終わりとし、
別スレでこちらで回答していただいた事を元に
少しポイントをしぼって質問してみたいと思います。
回答していただいた方々、ありがとうございました。
03092942006/07/08(土) 10:40:49ID:???
あ、ひょっとしたら他所で質問しないかもしれないです。では。
0310nobodyさん2006/07/08(土) 13:48:22ID:???
他所で質問しても無駄だと思うけどwwwww
0311nobodyさん2006/07/08(土) 14:50:57ID:9n4HcMAb
Encodeを使ってメール送信用にUTF8からJISに変換したいのですが、
「〜」の変換がうまくいきません。
変換できずに、「\x{ff5e}」になってしまいます。
JISにも「〜」ありますよね。

どうしたら回避できるでしょうか?
0312nobodyさん2006/07/08(土) 14:58:49ID:???
文字コードも書いてないしなー。
どの文字コでも設定と正規表現で2行だと思うけどw
0313nobodyさん2006/07/08(土) 15:03:12ID:???
>>311
それうちもなった気がする。
「〜」 だけ自分で直せばいいんじゃないかな
0314nobodyさん2006/07/08(土) 15:15:04ID:???
>>311
Unicodeと既存のエンコーディングのマッピングを作る際に、〜のマッピングがメーカーによって
WAVE DASHとFULLWIDTH TILDEの二つに分かれてしまったことに起因する問題。
http://ja.wikipedia.org/wiki/Unicode

事前に"\xEF\xBD\x9E"(\x{FF5E})を"\xE3\x80\x9C"(\x{301C})に変換して統一してやればOK。
ちなみにUTF-8はASCIIとの兼ね合いは勿論のこと、1バイト目の範囲が2バイト目以降の範囲と
重ならないように設計されているから、utf-8フラグを使用しない場合でも、ずれてマッチする心配はしなくて大丈夫。
0315nobodyさん2006/07/08(土) 15:17:56ID:???
>>314
うわぁ、知らなかったナリィ・・・
0316nobodyさん2006/07/08(土) 15:28:25ID:???
>>311
とってもまだるっこしいですが、

encode('iso-2022-jp', decode('shiftjis', encode('cp932', $x)))

とする手もあります。

日本は既存の文字コードとunicodeの対応表をつくるにあたって
統一に失敗して大きく2種類(JISとMS)できてしまったため、こんな
面倒を強いられるのです。恨むなら当時の関係者を恨んでください。

ちなみに「〜」を\x{ff5e}にするのはMS流で、JISだと\x{301c}に対応
させることになっています。

個人的には日本語に関してはunicodeはunicode-jisをunicode-msの
2種類あると思って、それらを自動判定して相互変換するJcode相当の
モジュールが欲しいなと思います。
0317nobodyさん2006/07/08(土) 15:31:47ID:???
みんなEncode使ってるみたいだけど、
そういう面倒を吸収してくれるライブラリがやっぱり必要なんじゃない?
0318nobodyさん2006/07/08(土) 15:39:20ID:???
変換 → 自作モジュ → Encode (5.8の場合)
                  → Jcode (それ以下)

とかやって、その自作モジュのとこで対策すればいいのかもだね
0319nobodyさん2006/07/08(土) 15:40:35ID:???
>>314 リンク先のリンク先 の dan さんのとこで
ttp://search.cpan.org/dist/Encode-EUCJPMS/EUCJPMS.pm
使え的な指摘がありますよ。
0320nobodyさん2006/07/08(土) 15:41:10ID:???
「の」がぬけた orz...
03213112006/07/08(土) 15:41:57ID:9n4HcMAb
みなさんありがとうございます。
〜は事前に\x{301c}に変換したいと思います。

実際、携帯電話からの入力なので、
Encode::from_to( $x, "CP932","UTF8");
としてUTF8に変換してたのですが、CP932→UTF8なので「〜」が\x{ff5e}になってしまうんでしょうか?
0322nobodyさん2006/07/08(土) 15:55:45ID:???
その方向だと、円マーク(\)やオーバーライン(~)は大丈夫なん?
0323nobodyさん2006/07/08(土) 16:11:50ID:???
スカラ変数は白い布で覆った方がいいのでしょうか?
0324nobodyさん2006/07/08(土) 17:22:37ID:H4L43ePp
push @fuga, $hoge_A[$_] . $hoge_B[$_] foreach 0..3;

これを省略せずに書くとどうなりますか?

配列の1番目から4番目まで限定的ではなく
配列内全てをforeachする書き方が分かりません。
@hoge_Aと@hoge_Bの要素数は同じです。
0325nobodyさん2006/07/08(土) 17:40:04ID:???
>>324
> push @fuga, $hoge_A[$_] . $hoge_B[$_] foreach 0..3;
> これを省略せずに書くとどうなりますか?
foreach my $i (0,1,2,3) {
  push @fuga, $hoge_A[$i] . $hoge_B[$i];
}
0326nobodyさん2006/07/08(土) 17:41:41ID:???
>>324
省略せず、じゃなくて一般化の話かな。
まず要素数を取得し、そこから範囲を作る。そのRangeに対してforeachもしくはmap
push @fuga, $hoge_A[$_] . $hoge_B[$_] foreach 0..@hoge_A-1;
or
@fuga = map { "$hoge_A[$_]$hoge_B[$_]" } map 0..@hoge_A-1;

しかし、要素数は同じと言い切れるんだったら、同時に管理されるデータなんだろ?
なら関連性のある二つのデータを別の配列に入れると言う、その構造を何とかしたほうが良いと思う。
@fuga = map { "$_->{A}$_->{B}" } @hoge;
そうすると、こんな風にできる。詳しくはperllolを参照
0327nobodyさん2006/07/08(土) 17:44:23ID:???
>>326
@hoge_A-1 を $#hoge_A
と書くのがBest Practice。
$#は配列の最後の要素番号を表すから、
配列のインデックスとして使う場合に適している。
03283262006/07/08(土) 17:47:57ID:???
>>327
あースマソ…存在をすっかり失念していた…
あとでここ数ヶ月のスクリプトを確認せにゃ
03293262006/07/08(土) 18:01:09ID:H4L43ePp
>>325
「配列の1番目から4番目まで回す」んじゃなくて
「(0,1,2,3)という配列を回す」ってことだったんですね。
ありがとうございます。

>>326
大変詳しい回答と説明ありがとうございます。
想定通りの結果を得ることができました。
>関連性のある二つのデータを別の配列に入れると言う、その構造を何とかしたほうが良いと思う。
まさにその通りで、そのために今回の処理をしようとしていました。
具体的には(情報の後出しになってしまいますが...)
フォームから「月」と「日」を取得し、「日付」という配列に格納するための処理です。
とにもかくにも、アドバイスまでいただいて本当にありがとうございました。

>>327
より良いコードのためのアドバイスありがとうございます。
勉強になりました。
0330nobodyさん2006/07/08(土) 18:04:13ID:???
珍しく気持ちのいい質問者だw
0331nobodyさん2006/07/08(土) 18:51:46ID:???
perl 5.005 で print "\x{ff5e}"; とかってエラーするんだっけ? 単に文字化けするんだっけ?
環境なくなっちゃって確認できなくて orz
0332nobodyさん2006/07/08(土) 19:08:45ID:???
エラーにはならない
0333nobodyさん2006/07/08(土) 19:13:39ID:???
>>332
ならおk! ありんこー。
0334nobodyさん2006/07/08(土) 20:17:42ID:???
$cnt = @hoge_A ;
1 while $cnt != push @fuga, ( shift @hoge_A ) . ( shift @hoge_B ) ;
つーのを思いついた自分に鬱
0335nobodyさん2006/07/08(土) 21:09:20ID:???
すいません、クエリについて質問があるのですか・・・。

ある掲示板スクリプト(bbs.cgi)があるとします。
自分のWEBサイトではこの掲示板をいくつか設置しているのですが、
そのたびに、「bbs1.cgi」、「bbs2.cgi」、「bbs3.cgi」みたく名前を付けて設置しています。

これをクエリを使用して「bbs.cgi?c=1」や「bbs.cgi?c=2」みたくしたいのですが、考え方が分かりません。
ちなみにできればWEB上から必要な数を必要なだけ作成できるようにしたいと思っています。


アルゴリズムだけで構いませんので、どうかよろしくお願い致します。
0336nobodyさん2006/07/08(土) 21:17:18ID:???
エスパーさん、おながいしまつ
0337nobodyさん2006/07/08(土) 21:59:16ID:???
これは普通に読めるけど?

>>335
そのスクリプトの構造にもよるけど十中八九大改修。
他の掲示板と共有できない点を洗い出すことから始めるといいよ。ログファイルとか。
ファイル名変えてる=同一ディレクトリって所から危なっかしいけどPerl関係ない…
改造スレあたり行くのが無難だと思う。
0338nobodyさん2006/07/08(土) 22:33:57ID:???
CGI上で
print $x;
としようと思うのですが、$xはリファレンスの可能性があります。
リファレンスの場合であってもref関数でチェックなどせずにそのまま表示しようと思うのですが、リファレンスだとメモリの場所がわかるわけですよね。
これが何かセキュリティ上問題になるようなことはあるのでしょうか。
例えば、他の変数の内容を閲覧できてしまう、といったことがあれば考え直そうと思うのですが。
0339nobodyさん2006/07/08(土) 22:38:32ID:???
この程度のこともどうやるか見当もつかないプログラミングスキルでは
無理なのでもうすこし地道に勉強してからの方がいいと思われる。
0340nobodyさん2006/07/08(土) 22:39:14ID:???
あ、すまん。339は335へのレスね。
0341nobodyさん2006/07/08(土) 22:42:45ID:???
>>338
そんなことで悩んでる暇があったら表示されないようにちゃっちゃと
書き直すほうが早い。

メモリの場所がわかっただけで即やられるということはないだろうが、
他のセキュリティホールとの合わせ技でなんかされる可能性を
否定するのは難しい。

0342nobodyさん2006/07/09(日) 05:26:05ID:???
>>338
> これが何かセキュリティ上問題になるようなことはあるのでしょうか。

直接の問題はないと思う。
が、何を「セキュリティ上問題」とするかによるだろうね。
「メモリの場所がわかる」ことも見方によれば問題だろうし。
0343nobodyさん2006/07/09(日) 05:32:57ID:???
>>335
ログ読み込みで
open fh,"log$ENV{QUERY_STRING}.dat";
ログ書き込みで
open fh,">log$ENV{QUERY_STRING}.dat";

・・・不特定多数が来る板だとキケンかもw
0344nobodyさん2006/07/09(日) 05:40:13ID:???
>>338
$xはリファレンスでなかったら何になる可能性があるの?
リファレンスになるかもしれない$xを表示したいwebコンテンツ
って言うのが謎なんだけど・・・w
03453382006/07/09(日) 07:29:33ID:???
>>341-342
ありがとうございます。

>>344
確かにそうですね、、よく考えるとそう思います。
ちょっとアルゴリズムを再考してみます、ありがとうございました。
0346nobodyさん2006/07/09(日) 13:14:05ID:OFKeC9Kg
配列の要素に「その時点で何度目の重複か」という数字を付けたいんですが
そういうことはできますか?
簡単な例で言うと、
@DATA = ('B','A','A','B','A','D','C','D');
という配列を対象とした場合は、
@DATA = ('B0','A0','A1','B1','A2','D0','C0','D1');
といった感じです。

map{$count{$_}++}@DATA;
という風にしていくつ重複があったかを調べることはできたんですが
その都度、数字を振る方法が分かりません。
分かる方、どうぞよろしくお願いします。
0347nobodyさん2006/07/09(日) 13:21:34ID:???
grep { $_ = sprintf("$_%d", $count{$_}++) } @DATA;
0348nobodyさん2006/07/09(日) 13:24:03ID:???
@data = map { $_ . $count{$_} ++ } @data ;
>>347
何故に grep ?
0349nobodyさん2006/07/09(日) 13:36:33ID:???
346です。

>>347さん
>>348さん
即回答ありがとうございます!
どちらの方法でもうまくいきました。
348さんの記述の方がより簡潔なのでそちらの方を使わせてもらおうと思いますが
347さんの記述も参考にして勉強します(恥ずかしながら記述の内容が理解できてないので)。
ありがとうございました!
0350nobodyさん2006/07/09(日) 15:12:46ID:???
>>348
それだと 0 が付かないと思ったら、ちゃんと付くんだね。
++ で空の値が 0になる方が. の連結より評価が先になるってことか。

grep 使うのは @data に書き戻さないで良いから(@dataを直接書きかえる)。
>>348 のを grep で書くと
grep { $_ = $_ . $count{$_}++ } @data;
0351nobodyさん2006/07/09(日) 15:29:54ID:???
>>350
>grep 使うのは @data に書き戻さないで良いから(@dataを直接書きかえる)。
いや、map でも無精しなければ…。s/grep/map/ してみ?
0352nobodyさん2006/07/09(日) 15:42:53ID:???
$_ = $_ . $count{$_}++ for @data;

でよくね?

# TMTOWTDI
03533512006/07/09(日) 15:45:39ID:???
>>352
># TMTOWTDI
そだね。
0354nobodyさん2006/07/09(日) 16:19:00ID:???
こういうのを見てしまうとPerlに戻りたくなるなぁ
制御構文の後置って書いていて気持ちいいんだよな
0355nobodyさん2006/07/09(日) 16:29:17ID:Grc/Miyg
質問です。

以下のようなハッシュと配列があります。

my %sex = (
'm' => '男性',
'f' => '女性',
);

my @list = ('name','age','sex','mail','addr', ・・・);


プログラム中で、
while (my($key,$val) = each(%sex)){
 ・・・
}

という処理を行いたいのですが、%sexの'sex'という文字列を、@listから拾いたいのです。

while (my($key,$val) = each(%{$list[2]})){
 ・・・
}

というふうに。
もちろん上記の例では「ハッシュではありません・・・」という意味のエラーが出るのですが、
やりかたがわからず困っています。

each(eval ('%' . "$list[2]")

でもやっぱりダメで、他に考え付きません・・・
よろしくお願い致します。
0356nobodyさん2006/07/09(日) 16:39:01ID:???
my @list = (\%name,\%age,\%sex, ・・・); これじゃあかんのかいな?

ってか普通は %sex とかを $hash->{sex} = {}; とかってやる気がする。

ちなみに eval でやるなら
each(eval ('%' . "$list[2]") → each(eval ("\\%$list[2]") こうじゃね。
0357nobodyさん2006/07/09(日) 16:46:51ID:???
\ 多いて orz
0358nobodyさん2006/07/09(日) 16:46:54ID:???
eval "each %$list[2]"
03593552006/07/09(日) 19:33:47ID:???
>>356
配列@listには、"配列やハッシュに使う「名前」"だけを格納してるのです。。

>>358
evalの使い方を間違えていたのですね。
ありがとう。その例でできました。
0360nobodyさん2006/07/09(日) 20:03:39ID:???
>>359
>配列@listには、"配列やハッシュに使う「名前」"だけを格納してるのです。。
どういう経緯でそうなったかは知らないけど、
eval使いまくりで効率悪くなる事この上ないなぁ。

my %var = (
 'sex' => {
  'm' => '男性',
  'f' => '女性',
 },
 ...
);

みたいにして
each %{$var{$list[2]}}
とすると、eval使わなくていいけど。
0361nobodyさん2006/07/09(日) 20:04:15ID:???
どうしてこう変数名を使ってなにかをしたがる奴が多いのだろうか。
デバッガ作るんでもなけりゃ名前をキーにしたハッシュにしとけよ。
0362nobodyさん2006/07/09(日) 20:39:33ID:???
てぃむどぅでぃはいいけど、せめて use strict 通るのにしたいね。
0363nobodyさん2006/07/10(月) 09:14:03ID:???
perlでサービスというか常駐プログラムを作りたいんだが
メモリの取得とか開放とか 変数使ったときの内部の挙動が
いまいち心配なのですがどうしたらよいでしょうか
0364nobodyさん2006/07/10(月) 09:41:10ID:???
>>363
perlのGCはリファレンスカウントなので循環参照を作って使い
捨てるとメモリリークになる。これに注意すれば無限に太り続ける
ことはないだろう。

perlは基本的にosからとったメモリは返さないので、一度でも大量に
メモリを使うと太ったままになる。それが困るようならたまにexecする
ぐらいしか手はない。

例外もあるがくわしくはperlfaq3の

How can I free an array or hash so my program shrinks?

参照。
0365nobodyさん2006/07/10(月) 16:54:29ID:kBFNwS+A
2つの配列に同じ要素を代入したいんですが
pushで複数の配列に同時に要素を代入する方法ってありますか?
0366nobodyさん2006/07/10(月) 17:07:07ID:???
>>365
pushにそんな機能は無い
■ このスレッドは過去ログ倉庫に格納されています