1read 100read
2012年1月1期WebProg18: Perlコーディング初心者質問スレ Part 63 (425) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
19: 面白いブラウザゲームのネタを考えたぞ (89)
20: Zend Framework Part5 (493)
23: くだらない質問でも偉そうに聞いていいスレ (283)
24: ファイルメーカーでどこまでできるウェブアプリ! (453)

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


1 :11/09/09 〜 最終レス :12/01/07
Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2 以降
前スレ http://hibari.2ch.net/test/read.cgi/php/1295170172/

2 :
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/
[オンラインマニュアル]
最新のドキュメント: ttp://perldoc.perl.org/
perldoc きまぐれ訳: ttp://fleur.hio.jp/perldoc/
perldoc.jp: ttp://perldoc.jp/
[モジュール]
CPAN: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/
[Perl5.8Unicodeメモ]
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html

3 :
>>1

4 :
[
{
key1 => 123,
key2 => 456,
},
{
key1 => 324,
key2 => 135,
},
{
key1 => 123,
key2 => 135,
},
続く...
]
こんな感じの配列をソートするにはどういう方法が最適でしょうか?
key1で昇順にソートして、key1が同じ場合はkey2で降順にソートします。
key2も同じ場合はどちらが先になってもかまいません。

5 :
sort { $a->{key1} <=> $b->{key1} || $b->{key2} <=> $a->{key2} } @$aref

6 :
ありがとうございます。||こんなのつかえたんですね。

7 :
>>5
こいつは上忍級

8 :
どあほ、perldoc -f sort に書いてある程度の
基礎の基礎じゃねーか。

9 :
全スレでファイルのロックの質問があったけど
読み込んで表示のみ=ロックの必要はない
読み込んだデータを加工して書き込む場合=
ファイルロック1
ファイル読み込み
データ加工
ファイル書き込み
ファイルロック1の解除
というようにするが正解だろ
読み込んで表示のみにロックする必要あったら
普通のHTMLファイルだってロックしなきゃならんだろ

10 :
読み込んでる途中にファイルが書き換えられても困らないんならする必要はないよ
flockとはなんだったのか

11 :
>>9-10
>>1
【総合】 Webprog板質問雑談スレッド 1
http://hibari.2ch.net/test/read.cgi/php/1131016915/

12 :
余りに遅レスって批判は出来るにせよ、質問に答えてるじゃん

13 :
データベースやってれば
書き込みロックと読み込みロックが
あることぐらい知ってるだろ。

14 :
フォームのPOST情報を送ったあとのページを取得し、HTML::TreeBuilderあたりで
情報を取得しようとしています。
下記だと@はヘッダ?の情報が出てきますが、Aは何も出てきません。
どこか間違えているのでしょうか?
my $url = 'http://example.com';
my $formdata = ['id' => '***', 'pass' => '***'];
my $request = POST($url, $formdata);
my $ua = LWP::UserAgent->new;
my $res = $ua->request($request);
print $res->as_string; #@
print $res->content; #A
#my $tree = HTML::TreeBuilder->new;
#$tree->parse($res->content);
#$tree->eof();

15 :
as_string()はHTTP::Responseの全文、つまりheader+body
content()はbodyを返す
example.comを見るならば、Content-Length: 0なんで当然content()は空になる

16 :
>>15
example.comは仮で書いただけなんですが、そのことを書いていませんでした。
失礼しました。
コード的には間違っていないようなので、別の要因を探ってみます。
ありがとうございました。

17 :
すいません、質問です
foreach $data (@isbn){
if(length($data) != 13){
$error_message = "length error";
break;
}
if($data =~ /[^0-9]/){
$error_message = "charactor error";
break;
}
}
$dataに入っている数字が13文字以外の時と、0-9の数字以外の時に
#error_messageにエラーを書き込んでforeachループを抜けるようにしたいのですが、なぜか13文字&数字だけの時にも両ifともtrueになってしまいます。
先に述べている動作をさせたい時の条件の書き方を教えていただけないでしょうか?

18 :
foreach $data (@isbn){
    if(length($data) != 13){
        $error_message = "length error";
        break;
    }
    if($data =~ /[^0-9]/){
        $error_message = "charactor error";
        break;
    }
}
見づらいだろうので修正

19 :
例えばどんな@isbn?

20 :
ほんとにすいません、フォームから送ったデータに改行コードが入ってたせいでおかしくなってたようです
失礼しました・・・。

21 :
my $error_message;
for my $data (@isbn){
if (length $data != 13){
$error_message = "length error";
last;
}
if ($data !~ /^\d+$/){
$error_message = "charactor error";
last;
}
}
次から >>1 には「use strict; use warnings; を必ず使う事」とでも書いとけ。

22 :
break は last の誤用だと思われるのだが・・・
ってことで break が自作の関数だったりしなくて、ループから抜けることを意図としてるなら
last としませう。

23 :
% perldoc -f break
break Break out of a "given()" block.
This keyword is enabled by the "switch" feature: see feature
for more information. Alternately, include a "use v5.10" or
later to the current scope.

24 :
>>22
Perl以外のほとんどの言語はcontinueやbreakだから
他の言語を先に知っててPerlにあまり馴染みがないと
最初のうちは間違っちゃったりするよね
Perl / C,JavaScript,PHP,Ruby,Python,etc.
next / continue
last / break

25 :
単語の意味を考えると、Perl で採用した next, last の
よさがじわじわと分かる。continue, break だとあいまい
な感じがして、(単語からは)何をしてくれるのか想像しに
くい。

26 :
printlnとか書いてて発狂しないのかな、あっちの言語圏は。

27 :
printlnってperlでいえばsayだよな。

28 :
あっちの言語圏は変数名と被ると駄目なんだっけ?

29 :
>>28
関数名は動詞、変数名は名詞にしましょうねw

30 :
形容詞は?

31 :
引数

32 :
はじめまして
現在SQLを勉強するためにPERLを使いMYSQLにつなぐ練習をしています
DBIを使用してデータベースへの接続およびテーブルを作成することはできました。
このデータを更新する為にユーザーから ユーザーIDおよびパスワード データを新規ユーザー登録フォームなどから受け取るにはどうしたらいいのか、
またデータベースから受け取ったデータから全体のソートをかけたい全表示したい場合 どうしたらいいのかわからず困っています
かってですがURLのところに?userid=foo&password=fooのようにはできるだけ表示しない方向でよろしくお願いします

33 :
>>32
>>1
http://www.ifdefdebug.com/cgi_introduction/
http://perldoc.jp/docs/modules/CGI-3.49/CGI.pod
依頼されたツールを誰かが作るスレ
http://hibari.2ch.net/test/read.cgi/php/1078997682/
金出すからスクリプト作ってよvol.1
http://hibari.2ch.net/test/read.cgi/php/1150508106/
DBの絡んだWEB制作の相場
http://hibari.2ch.net/test/read.cgi/php/1004437935/
手伝ってくれるかた募集
http://hibari.2ch.net/test/read.cgi/php/1083303786/
【総合】 Webprog板質問雑談スレッド 1
http://hibari.2ch.net/test/read.cgi/php/1131016915/

34 :
>>33
すみません・・・リンクの中を見るとフォームのデータはこれでできそうですね
テンプレを読まず・・・申し訳ない

35 :
すみません、質問です
XML::Simpleを使ってXMLを解析しているのですが、 <Creator Role="イラスト">名前</Creator> 
のような属性(エレメント?)付きの値を取り出すにはどうすればいいのでしょうか?
普通に~~~->{Creator}->{Role}とすると属性の中身?の"イラスト"は取り出せるのですがその先が分かりません・・・。
もしかして::Simpleでは取り出せないのでしょうか?

36 :
失礼、解決しました
~~~{creator}->{content}で中身を取り出すことが出来ました

37 :
再度失礼します
現在Padreで開発しているのですが、なぜかPadre上ではうまく動いているのですが、
サーバーにUPすると500エラーを吐いてしまいます。
確認してみた所、my $ua = LWP::UserAgent->new();が原因でエラーを吐いているようで、
ライブラリ自体はちゃんと所定の場所にあり、パーミッションも他のライブラリと同じ設(705)で問題は無いはず。
そもそも頭のuse LWP::UserAgent;ではエラー吐いてないのでライブラリ自体は読み込めてるようです。
エラーの無い状態で上記のmy $ua = LWP::UserAgent->new();を追記した時点でエラーになるのですが、
これってただnewしただけでも他の物に影響を与える物なのでしょうか?

38 :
>>37
http://perldoc.jp/docs/perl/5.10.1/perlfaq9.pod

39 :
>>38
すいません、そこは既にチェックした後だったのですが一向に解決していません
LWP::UserAgentは止めて、LWP::Simpleを使おうとするも今度はuseした時点でエラー・・・。
use LWP::Simple (); にして、後でgetすればエラーでないというのも見かけましたが関係なくエラーが。

40 :
エラーの内容を画面に表示すればわかるよ。

41 :
すいません、use worningsだけじゃエラーが出なかったんですね・・・
Can't locate HTTP/Config.pm in @INC
エラー先を見たらUserAgent.pm内の require HTTP::Config;  これがエラーの原因のようです

42 :
まさかと思ってHTTP::ConfigをDLしてきてユーザー固有のフォルダに入れてみたら動きました
LWP:;UserAgent自体が使うファイルも色々CPANから拾ってきておかなきゃだめだったようです・・・というか外部ソース依存多すぎる
そして私の場合、レンタルスペースを利用している為、XML::Parserのコンパイルとか出来ないんですがこの場合どうしたらいいんでしょうか・・・?

43 :
>>42
> この場合どうしたらいいんでしょうか・・・?
・管理者にインストールしてもらう
・設置先と同じ環境を手元にも構築してコンパイルしたものを持っていく
・設置先で利用できる形にまとめてくれている人を探して一式もらう
・Pure Perl なモジュールのみを使うよう書き換える
・サーバを替える
いずれにしてもスレ違い。

44 :
pure perlな実装で代用すれば良いんじゃね。

45 :
コンパイルもできるレンサバに替えるのがいいとおもふ。
#そして次は「すいません、できないと思ってたけどコンパイルできました」とか書き込まれそうな予感

46 :
すいません、できないと思ったけどコンパイル・・・という冗談は置いといて、
結局 XML::UserAgent も XML::Simple も使わずに済むPurePerlな XML::TreePP を使う事にしました。
こういう放置は本当はあまりよくないんでしょうけど、とりあえず完成させたいもので、とりあえず後で再考する事に。
失礼しました。

47 :
>>46
> こういう放置は本当はあまりよくないんでしょうけど、とりあえず完成させたいもので、とりあえず後で再考する事に。
いえいえ、良い選択だと思います。ご健闘を。

48 :
コンパイルができないと諦めるもんじゃない。
たとえshellが使えなくともtelnet.cgiみたいなのを使って
コンパイルすればいいのだ。
サーバーの環境を特定し、それに近い環境で
自宅コンパイルしたものをアップする方法もある。
諦める必要はないぞ!

49 :
初心者です。2ちゃんの統計を出力するスクリプトを作りたくて、色んな場所からつぎはぎして作っていたのですが、問題がでて進めなくなりました。
板の中のスレの内容を表示しようというところまできたんですが、カウンターの i が動いていないような感じで、同じスレ(dat)が何回も表示されてしまいます。
ほかにもツッコミどころがあったら教えてください。
ソースは次のレスです。

50 :
全部は入らないので関わってると思うところだけ抜きました。
use LWP::UserAgent;
use HTTP::Request::Common;
$url = "http://hidar.2ch.net/news4vip/subject.txt";
$durl = "http://hidari.2ch.net/news4vip/dat/";
&getData($url);
$threadlist = $response->content;
while($threadlist =~ m|\n(.*?)\.dat<>|g){
        push(@dat, $1);
        }
for ($i=0; $i<=$#dat; $i++){
        $url = $durl . $dat[i] . ".dat";
        &getData($url);
        $content .= $response->content . "\n";
}
print $content;
sub getData
{
        $ua = LWP::UserAgent->new;
        $ua->agent('');
        $request = GET($_[0]);
        $response = $ua->request($request);
}

51 :
ごめんなさい、>>50です。
$url = "http://hidar.2ch.net/news4vip/subject.txt";
$durl = "http://hidari.2ch.net/news4vip/dat/";
はそれぞれ
$url = "http://hibari.2ch.net/news4vip/subject.txt";
$durl = "http://hibari.2ch.net/news4vip/dat/";
でした。別なURLでテストしてたのをごまかしたので、URLが間違っていたせいじゃないです。
ていうかdatディレクトリがそのまま見られるみたいだからそっちから抽出したほうがよかったかな・・・

52 :
>>50
コードはともかく、とりあえずiはミスタイプで正しくは$iだね

53 :
>>52
できました!
ありがとうございます!!!

54 :
use strict;
use warnings;
この2つは必須!

55 :
他のスレからこちらに誘導していただきましたのでここでも質問させていただきます。
初心者なのですが、どなたか教えてください。
サーバーに最新のapache(onWindowsXP)をインストールし、Activeperl(最新版)
によるcgiで、Win32::OLEをつかって、
サーバー側でAccess起動→マクロを走らせる→Access閉じる
を行いたいのですが、上手くいきません。
同じPERLソースで、AN HTTPD だと上手くいくので、apacheの設定の問題だと思うのですが、
どこをどう設定するのかが分かりません。

56 :
つづきです。すみません。
ちなみにソースは
# Accesオブジェクトを生成、起動
my $access = CreateObject Win32::OLE 'Access.Application' || die "Cannot create Access object\n$!\n";
my $mdb = 'C:/hoge.mdb';
$access -> {'Visible'} = 1;
$access -> OpenCurrentDatabase($mdb);
$access -> DoCmd -> RunMacro('hoge');
$access-> quit();
undef $access;
です。

57 :
>>55-56
>>1
http://perldoc.jp/docs/perl/5.10.1/perlfaq9.pod
Apache〜嗜みとして〜 Part3
http://hibari.2ch.net/test/read.cgi/php/1043851302/

58 :
つづきです。最後です。すみません。
現象としては、ログにもエラーはなく、サーバー側でタスクマネージャで確認すると
Accessが起動していることまでは確認できるのですが、そのまま止まってしまいます。
タスクマネージャーからAccessを強制終了すると、それ以後のperlスクリプトが処理されるようです。
どなたか同じようなご経験をお持ちの方はおられませんでしょうか。
宜しくお願い致します。

59 :
>>56
my $access = CreateObject Win32::OLE 'Access.Application' || die "Cannot create Access object\n$!\n";

my $access = Win32::OLE->CreateObject('Access.Application' || die "Cannot create Access object\n$!\n");
と等価なので CreateObject() が偽を返しても die しない。
http://perldoc.jp/docs/perl/5.14.1/perlop.pod#Operator32Precedence32and32Associativity
>>58
「それ以後」がどのステップを指していて処理自体は期待通りに終わっているのかどうか不明なので
同じ症状かは分からんが、「perl Win32::OLE access」でググれば
http://www.kaimei.org/read/internal/perl_w32
> 私が Win32::OLE から Excel へアクセスするプログラムを書いてみたところ、
> Perl スクリプトからだと問題ないのに CGI からこれを呼び出すと失敗するケースがあった。
> きちんとした原因まで把握できていないのだが、少なくともオープンする Excel ファイルのパスは
> / ではなく \ で区切らないとアプリケーション・オブジェクトの取得に失敗するようである。
という話が出てくる。

60 :
PSGI に対応した WAF では何が使い易いのでしょうか?
それぞれの WAF の特色とか違いとかが分かるサイトとかあるのでしょうか?
ご教示いただければと思います。

61 :
スレッドごとにファイルがあって
それをまとめるスレッドリストファイルがある場合のロックについて
ファイルロック1
スレッドNファイルへの書き込み
スレッドリストファイルへの書き込み
ファイルロック1の解除
というようにしなければならないので
例えばスレッド1にだれかが書き込んでいる最中は他スレッドでも書き込みができない
ということになる。
ということで間違いないんですか?
それとスレッドを誰かが見るだけの場合でも
ファイルロック1
スレッドNファイルの読み込み
スレッドリストファイルの読み込み
ファイルロック1の解除
としなければならないので
誰かが任意のスレッドを見ている間はどこのスレッドにも書き込めない
ということでいいんでしょうか?
そうするとロックかかりまくりじゃないんですか?

62 :
それぞれのファイルに対してロックすればいいだろ

63 :
>>62
それぞれのファイルにロックすると
スレッドNファイルには書き込まれて
スレッドリストファイルにロックがかかるという場合も考えられる
そうするとデータの連動がずれる

64 :
>>61
マルチスレッドプログラミング相談室 その8
http://hibari.2ch.net/test/read.cgi/tech/1253521167/

65 :
>>64
スレッドってそのスレッドじゃないと思うんだw

66 :
>>61
ロックかかりまくりとはいうけど
実際は各リクエストがケンカしないように順番に処理されていくわけだから特に問題はないだろ。

67 :
DBMSみたいに、まとめ役のプロセスが1つだけ起動して、もちろん複数起動しないようにして、
そいつが全部取り仕切るように動かせばいいんだ。疑似マルチタスクみたいに。

68 :
ロックには排他ロックと共有ロックがあってだな
・・という話ではない、これ?

69 :
シェケナベイベー

70 :
>>68
この件は全部排他
横からだけど>>61の解答は気になる

71 :
教えてください
Perlで2chの特定のキーワードのスレを自動取得するCGIを改造したいのですが、
#板名「@BoadName」にある、スレッド名に「$KeyWord」を含む板の一覧を表示する。
$BoardName[0] = "大規模MMO";
$BoardName[1] = "ネトゲサロン";
$BoardName[2] = "ネットwatch";
$Keyword = "●○";
この条件のところで、大規模MMO板だけでなく、例えば
ニュー速等複数の板を指定するにはどういう風にコードを書き換えれば良いでしょうか?
なるべく簡単な方法を教えてください。
スクリプト
http://aceof.s57.xrea.com/?p=sp

72 :
>>71
正規表現を使えるようにすればいいんじゃないの。

73 :
>>72
…?どうやるのでしょうか?
COBOLは昔習いましたが…
条件のところの
$BoardName[0] = "大規模MMO"; を
A(大規模MMO) AND B(ニュー速) のような条件にしたいのですが、
parlでの表記が分かりません。
コードを教えてください。

74 :
例えば
$BoardName[0] = "大規模MMO" AND "涙目ニュース";
ではエラーになりますよね??

75 :
$BoardName[0] = "大規模MMO";
$BoardName[1] = "ネトゲサロン";
$BoardName[2] = "ネットwatch";
$BoardName[3] = "ニュース速報";
$BoardName[4] = "WebProg";
でいいんじゃないかな?
Socket って使ったことないからわかんないけど BoardName で追ってみると
http://www.ff.iij4u.or.jp/~ch2/bbsmenu.html
↑ここから $BoardName[n] でURL取ってるみたいだし
確認してないけど

76 :
>>75
すみません、基本的に大きな勘違いをしていました
$BoardName[0] = "大規模MMO";  板名
$BoardName[1] = "ネトゲサロン"; スレット名
$BoardName[2] = "ネットwatch"; ?
かと思っていましたが、全部板名で、番号を増やしていけばいいだけですよね^^:
で、
$Keyword = "●○"; の所を2〜3個指定したいんですが、
複数指定したい場合はどう書けば良いのでしょうか?
$Keyword = "●○" "●▲" "××";
$Keyword = "●○" AND "●▲";
  でしょうか?
ANDの代替がぐぐっても分かりません・・・
ちなみにスレ一覧のURLは移動してましたので書き換えます。

77 :
>>71-76
【 スクリプト改造依頼スレ 】(丸投げ) part8
http://hibari.2ch.net/test/read.cgi/php/1314546533/
★三 【 スクリプト改造工房 PART 9 】 ★三
http://hibari.2ch.net/test/read.cgi/php/1143834740/
金出すから改造してよvol.3
http://hibari.2ch.net/test/read.cgi/php/1162147035/

78 :
>>77
ありがとうございます。
あと、条件を複数指定する場合にどう記述すれば良いかだけ教えていただければ
十分なのですが…。
$Keyword = "●○" "●▲" "××";
$Keyword = "●○" AND "●▲";
  でしょうか?
それとも $Keyword = "●○","●▲";


79 :
うーん
COBOLをやってたというのがよく伝わってくる思考だw
$Keyword は GetData で
if (/$Keyword/){
というふうに正規表現で使われてるから論理演算子は使えないと思われ
$Keyword を @Keyword にしていっぱい入れられるようにして正規表現で | を使うか
if じゃない関数を使うかじゃないかな〜

80 :
読み込んで表示だけのページ=ロックの必要はない
読み込んだデータを更新して書き込むページ=
ファイルロック1
ファイル読み込みモードでオープン
ファイルを配列に読み込み
ファイルを閉じる
データ更新
ファイル書き込みモードでオープン
更新したデータをファイルに書き込む
ファイルを閉じる
ファイルロック1の解除
これでいいはず
仮に読み込んで表示だけのページを
ファイルロック1
ファイルを読み込みモードでオープン
データを配列に入れる
ファイルを閉じる
ファイルロック1の解除とすると
表示するだけのページを開く間は書き込みができなくなるから
そうすると書き込める隙がなかなかない

81 :
use strict;
use warnings;
my @city = ("東京", "大阪", "名古屋");
delete($city[0]);
print "@city";
こんな簡単なので Use of unitialized value in join or string at *** line 6. っていう警告が出たんですが、どうしてですか?
それに Use of unitialized ... というエラーしょっちゅう見かけますが、調べてみてもよくわかりませんでした。
教えてくださいm(_ _)m

82 :
delete $city[0]; で undef になった $city[0] を print するのに使ったから
とりあえずexcite翻訳から初めてみたらどうでしょうか

83 :
>>81-82
http://perldoc.jp/docs/perl/5.10.0/perldiag.pod

84 :
>>82-83
ありがとうごさいます。
@city = grep($_ ne "", @city);
で $city[0] を消しても残ってたので不便な関数だなと思いました。
undef の値を消すような操作をすればいいんですね。

85 :
つshift

86 :
$city[0] = "東京" を削除して詰めちゃってもいい ($city[0] = "大阪" とずれていい) なら
shift @city;
要素をずらさずに $city[0] だけ消したいなら
$city[0] = "";

87 :
あれ、$city[0] = undef;とdelete($city[0]);って同じ?

88 :
>>87
http://perldoc.jp/func/delete
http://perldoc.jp/func/undef

89 :
delete が非推奨とか・・・splice で削除しろとか書いてあるけどさ、
巨大な配列に対して splice すると、すごく遅そう・・・

90 :
>>89
Perl処理系のソースを見ずに言うが、
そのへんはパフォーマンスがガタ落ちにならん程度にはうまいこと処理してるだろうと思う。

91 :
ん?配列の要素に対する delete が非推奨なのは別に問題ないっしょ?
delete $array[$n] は要素を削除するのではなくて、むしろ undef $array[$n] に近いんだから。

92 :
spliceは引数多くて邪魔くさい

93 :
>>89
誤読すんなよ。
(特殊挙動の切り詰めの事を想定してるなら別だが)
splice で対処しろってのは、要素を本当に削除するケースに関してだ。
@arr = 1 .. 5 ; => @arr = qw( 1 2 5 );
delete の代りなら、
splice @arr, 2, 2, (undef) x 2 なんてしなくても
@arr[2,3] = (undef)x2 ;なりの方法があろう。

94 :
8万の配列に長さ1の文字列を入れて、delete、undef、spliceでベンチマーク取ったけど、
spliceが一番遅かったけど大きな速度差は出なかった

95 :
>>94
あと1つか2つ桁増やしてよろしく。

96 :
use Benchmark qw( timethese cmpthese ) ;
cmpthese timethese ( undef, {
delete => sub{ my @arr = ARRAY ; delete @arr[ 99999 .. 999999] },
splice => sub{ my @arr = ARRAY ; splice @arr, 99999, 900000, (undef) x 900000 },
slice => sub{ my @arr = ARRAY ; @arr[99999 .. 999999] = (undef) x 900000 }
});
__DATA__
ARRAY => (q{x}) x 1000000
Benchmark: running delete, slice, splice for at least 3 CPU seconds...
delete: 3 wallclock secs ( 2.91 usr + 0.15 sys = 3.06 CPU) @ 2.94/s (n=9)
slice: 4 wallclock secs ( 3.17 usr + 0.14 sys = 3.31 CPU) @ 2.72/s (n=9)
splice: 3 wallclock secs ( 3.06 usr + 0.19 sys = 3.25 CPU) @ 3.08/s (n=10)
Rate slice delete splice
slice 2.72/s -- -8% -12%
delete 2.94/s 8% -- -4%
splice 3.08/s 13% 5% --
ARRAY => 1 .. 1000000
Benchmark: running delete, slice, splice for at least 3 CPU seconds...
delete: 3 wallclock secs ( 3.12 usr + 0.00 sys = 3.12 CPU) @ 12.82/s (n=40)
slice: 3 wallclock secs ( 3.02 usr + 0.01 sys = 3.03 CPU) @ 6.93/s (n=21)
splice: 3 wallclock secs ( 3.03 usr + 0.07 sys = 3.10 CPU) @ 9.35/s (n=29)
Rate slice splice delete
slice 6.93/s -- -26% -46%
splice 9.35/s 35% -- -27%
delete 12.8/s 85% 37% --

97 :
文字コードで分からないことがあるのでご教授お願いいたします。
(utf-8 でソースを書いています)
utf-8 の半角ア -> EFBDB1
utf-16 の半角ア -> FF71
utf-8 でソースを書いているのだから、print "0xEFBDB1" で半角アが出力されるだろうと思ったら、
print "0xFF71" でないと半角アが表示されませんでした。

98 :
cryptって絶対に復号化できないんですか?
パスワードをこの関数を使って暗号しようと思っていますが
この関数を使う上で欠点や注意点がありましたら教えてもらえませんか?

99 :
>>98
>>1
http://perldoc.jp/func/crypt

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
19: 面白いブラウザゲームのネタを考えたぞ (89)
20: Zend Framework Part5 (493)
23: くだらない質問でも偉そうに聞いていいスレ (283)
24: ファイルメーカーでどこまでできるウェブアプリ! (453)