Perlコーディング初心者質問スレ Part 54
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/02/10(土) 19:21:23ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc10.2ch.net/test/read.cgi/php/1164519503/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0153nobodyさん
2007/02/24(土) 21:51:38ID:Iwese7yM∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
______ < 踏んだら孕んだ!抱いたら揉んだ!
/:::::::::::::::::::::::::::::ヽ < 孕んだ振る降る般若だ!
/::::::::::::::::::::::::::::::::::::ヽ < ティムポ擦る無駄、フン出る春巻きはむ無理!
|::"´ ̄ ̄ ̄ ̄ ̄ヽ:::| < チン毛ちぎり、看板塗る飛騨!
|:::| |:::| < 陰毛臭いんだ!モッコリ膨らんだ!
ヽ/ -=.、 _,=- ゾ < 安打!?半田ゴテ適時打!!
| | -ェゝ ";ュ- |ヽ < 原チャリ盗んだ!あんだとこら!?
ヽト、 ´i ` ,.イ/ < よくちょん切れるハサミだ!
〈 i /L_、 i 〉 _ノ∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨
__,. -‐ヘ -=三=- /──、
_ -‐ ''" / \ /\  ̄゛ー- 、
ハ / |ヽ ̄ ̄// ヽ、 ∧
| ヽ く ! .>ーく / > / !
| | _> ∨-、r‐/ <_ / !
∧ ! ヽ | 厂L/ ■/ i .∧
/ \ | \ ∨ ! / | / ハ
0154130
2007/02/24(土) 23:31:04ID:WjAlsxOjは「?」に変換したいと考えてます。
この場合どのようになコーディングをしたらよいでしょうか?
せっかく131の方が答えてくれたんですが、
よくわかりませんでした。。すみません。。。
0155nobodyさん
2007/02/25(日) 00:25:19ID:???$CGI::POST_MAX = 1024*1024;とせずに
ファイルサイズを調べて1MBより大きい場合にはじくのとでは
サーバへの負担が違いますか?
あと、POST_MAXを指定してサイズがオーバーしていた場合に
処理が取り消されたという情報はどこかに入るのでしょうか?
0156155
2007/02/25(日) 00:29:49ID:???最初にやってみるべきでした。
スレよごし、すいません。
0159nobodyさん
2007/02/25(日) 07:00:21ID:???$hoge = 11 ;
$foo = 3 ;
if ( $hoge % $foo == 0 ){
}
0160nobodyさん
2007/02/25(日) 07:31:31ID:???結局質問には一応だけど答えてるツンデレなんだし。
0161nobodyさん
2007/02/25(日) 08:41:45ID:???>>148をもう一回よく読んでみ
45 % 20 は0じゃないが割り切れると判断するんだぞ
0162nobodyさん
2007/02/25(日) 09:25:01ID:???0163nobodyさん
2007/02/25(日) 09:26:01ID:???0164nobodyさん
2007/02/25(日) 09:38:58ID:???0165148
2007/02/25(日) 10:16:04ID:k71AVSTb>>149,159,160
% で解決できるなら助かるのですが(>_<)
質問は理解し易く『 45 / 20 = 2.25 』と書いたつもりだったのですが、
難しかったようで、失礼しました。
>>152
有難うございます。
難しい・・・。もうちょっと勉強します。
>>162,163
有難うございます。10倍しても、1億倍してもどこで諦める瞬間を作らないと
いけないですよね。もしかしたら1億1倍のところで割り切れるかもしれない。
>>161 thank you...
0167nobodyさん
2007/02/25(日) 13:02:07ID:???0168nobodyさん
2007/02/25(日) 13:02:55ID:???0169nobodyさん
2007/02/25(日) 13:04:45ID:???0170nobodyさん
2007/02/25(日) 13:13:05ID:???数IIIは履修してるけど数ABCを履修してねぇww
0171nobodyさん
2007/02/25(日) 13:41:55ID:???use bignum (a => 50);
sub is_terminating($) {
(my $n = shift) =~ s/0*$//;
return not ($n =~ /\.\d*(\d+)\1/);
}
for my $i (1..25) {
my $n = 45 / $i;
my $s = is_terminating($n) ? "terminating" : "non-terminating";
print "45/$i is $s.\n";
}
というのはどーお?
0172148
2007/02/25(日) 14:24:42ID:k71AVSTb有難うございます。
なんか出来そうですけど、2323 / 1000 なんて場合にちょっと無理ですね。
でもそうしたら今度は元の数字が循環してるかを調べればいいのかな?
ん?でも2つの値が関連するし...。どうだろ、無理かな?
もうちょっと試してみます。有難うございます。
0173nobodyさん
2007/02/25(日) 18:42:00ID:???やってた頃の成績はやたら良かったけど。
0174nobodyさん
2007/02/25(日) 22:31:59ID:???0175nobodyさん
2007/02/26(月) 05:06:09ID:1VnrxNPdレンタル鯖に、欲しいモジュールが入っていないときには
どうすればいいでしょうか。
鯖管理者に要望を投げても無視されて、
「欲しいモジュール」を自力でコーディングするのもカッタルイというときです。
「hogehoge モジュールを CPAN からダウンロードしてインストールするなんて技はアリですか?」
(管理者権限の関係からムリっぽい気が・・・)
0176nobodyさん
2007/02/26(月) 05:54:19ID:???0177nobodyさん
2007/02/26(月) 06:41:20ID:???Jcode.pm/jcode.plみたいに。
0178nobodyさん
2007/02/26(月) 06:52:35ID:???0179nobodyさん
2007/02/26(月) 08:24:24ID:???0180nobodyさん
2007/02/26(月) 13:35:52ID:QboTsacU「b.cgi」内のサブルーチン「second」を実行するにはどうすれば良いでしょうか?
0181nobodyさん
2007/02/26(月) 13:44:05ID:???悪いことは言わないのでsecondはb.cgiから外に出して別ファイルにして、
a.cgiとb.cgiからuseかrequireするようにしとけ。
0183nobodyさん
2007/02/26(月) 14:48:32ID:aE2N5fUYという配列があったとして、例えば3番目の要素を削除して
@hoge = ('a','b','d','e');
とする方法が分かりません。
foreachで特定の要素を「空」にすることはできるんですが
その要素自体を削除するような方法はないでしょうか?
0185183
2007/02/26(月) 15:06:54ID:???ズバリな関数があったんですね…勉強不足です。
foreachで「空以外なら」という条件式でゴリ押ししてた現状から抜け出せます。
ありがとうございました。
0186nobodyさん
2007/02/26(月) 15:38:34ID:04bnguupファイル内容が垂れ流されてきてしまいます。
print "Content-type: application/x-gzip; name=archive.gz";
print "Content-Transfer-Encoding: base64";
print "Content-Disposition: attachment; filename=archive.gz";
ヘッダーの設定が間違ってるようですが、どう直せばいいでしょうか?
よろしくお願いいたします。
0187nobodyさん
2007/02/26(月) 15:45:12ID:???で、ヘッダーの終了部分には連続改行が必要
これ常識ね
0188nobodyさん
2007/02/26(月) 15:46:32ID:???あ、抜け落ちてるみたいですが
\\n これででるかな(改行)
をつけ、最後のprint には 連続改行をいれております
もうしわけありません
0189nobodyさん
2007/02/26(月) 15:47:39ID:???0190nobodyさん
2007/02/26(月) 15:51:58ID:???0191nobodyさん
2007/02/26(月) 15:53:52ID:???0192nobodyさん
2007/02/26(月) 15:54:29ID:04bnguup#mine.type
application/x-gzip gz
#httpd.conf(apache)
AddEncoding x-gzip .gz .tgz ← これいらない?
AddType application/x-gzip .gz .tgz
の設定をしてあります
しかし、 >>186 のヘッダがあるものを呼び出すと
Content-type: application/x-gzip; name=archive.gz
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=archive.gz
・ ハ・Eワスロrc9懲{ュシ姨ヒ`J、ホ�賜籌Rー%Eeeオオオ1(F・畑ヲ、ャP=~,8 ・・・・
というような出力になってしまいます。
0193nobodyさん
2007/02/26(月) 15:58:00ID:???ソースを見返したら、先頭に
print "Content-type: text/html\n\n";
の一行が入っていました
大変お騒がせいたしました。
申し訳ありませんでした・・・・
0194nobodyさん
2007/02/26(月) 17:18:08ID:???0195nobodyさん
2007/02/27(火) 22:15:55ID:LieiSn0Nperl から Windows アプリケーションを制御したいんですが、
そういうモジュールはありませんか?
たとえば、アプリケーションを起動したのち、
Alt-F でファイルメニューを開いて・・・とか、
アプリケーションを perl スクリプトで操作したいのです。
いや、コマンドラインで制御できるとよいのですが、
コマンドラインの引数を解釈してくれないアプリなのです。
0196nobodyさん
2007/02/28(水) 01:50:24ID:???0197nobodyさん
2007/02/28(水) 02:21:12ID:???とかで自動的にfoo.txtを読み込んでくれないよーなアプリってことかな。
0198nobodyさん
2007/02/28(水) 06:08:06ID:???そんなことをするなら最初からJScriptやVBScriptでやったほうが楽だけど。
0199nobodyさん
2007/02/28(水) 06:32:17ID:wbAOzWAx中身は aaaaa bbbb ccc ddd adwg
なら、5となります.重複は考えなくもいいです。半角英文字です
どのようにすればよいでしょうか? (*- -)(*_ _)ペコリ
0201nobodyさん
2007/02/28(水) 08:41:36ID:???while($comment =~ /([a-z0-9']+)/gi) #英単語数のカウント
{
$count++;
if($count > 10000){last;} #無限ループ対策
}
0202199
2007/02/28(水) 09:06:30ID:???最近、乱打無な栄単語を打ち込むスパマーやろうがいまして。。
ありがとうございます
0206nobodyさん
2007/02/28(水) 15:34:08ID:BEaWUL0P今はwgetをひたすら呼んでました。javascriptのページはよめないです。
CPAN探したのですが、LWPってので、できるのかはっきりしませんでした。
0207nobodyさん
2007/02/28(水) 15:40:23ID:???0208nobodyさん
2007/02/28(水) 19:43:20ID:Oefi/gxXとりあえず試したところでは、第一引数を「ファイルー開く」の入力としては解釈するようです。
その他のコマンドラインオプションは皆無。
アプリは「英和翻訳ソフト」です。
特殊辞書を使う翻訳なのと、翻訳内容が極秘なんで excite.co.jp 等は使いたくないのです。
>>198
WSH でぐぐった所、これですよ! ありがとうございました。
0209nobodyさん
2007/03/01(木) 12:17:01ID:???一部のURLの場合は変換をして表示 という処理を考えてます。
# リファラをindexで調べ含まれる場合は該当サイト名に変換
if (0 <= index($referer,'http://search.yahoo.co.jp/')) { $search = 'Yahoo'; }
elsif (0 <= index($referer,'http://www.google.co.jp/')) { $search = "Google"; }
# 上記以外にもelsifが続く
と上記のような冗長なコードになったのですが、
もっといい方法などありましたら御教示お願いします。
0210nobodyさん
2007/03/01(木) 13:02:53ID:???あんまり変わらないかもしれないけど・・
my @SEARCH = ('http://search.yahoo.co.jp/<>Yahoo','http://www.google.co.jp/<>Google');
map{my($u,$n)=split/<>/;$search = $n if 0 <= index $referer,$u;}@SEARCH;
もっとスマートな方法あるんだろうけど漏れにはこれが限界..
0211nobodyさん
2007/03/01(木) 13:13:18ID:???auで動作不良があるんです。
まずは簡単に状況説明します。
◎検索ページ(フォーム入力後動作)
→検索条件をフォームで入力後、サブミット
→検索結果のページが表示されずエラーメッセージが出る
◎表示データを一定数で区切って次ページに行く(フォーム入力後動作)
→プルダウンで飛ぶ先のページ数を選択後、サブミット
→ページが表示されずエラーメッセージが出る
エラーメッセージは共通で以下の通りです。
---------------------------------------------
cgi-lib.pl:Unknown Content-type:application/
x-www-form-urlencorded; charset=shift_jis
---------------------------------------------
なんだろう。docomoは何ともないんだけれど。
0212209
2007/03/01(木) 13:23:34ID:???すんませんw 一行プログラミングのように単に短くしたいって意味ではなかったです。
解析部分を関数で別ファイルにする予定なので、
elsif行が続くのは別にいい(しょうがない)と思ってるのですが、
Perl歴が少ないので処理方法自体には問題ないか不安です
0213nobodyさん
2007/03/01(木) 13:52:05ID:???ttp://sb.xrea.com/archive/index.php/t-10224.html
ぐぐってみるとココでも話題になってるね
cgi-lib.plのソースを見てみたけど、AUの場合環境変数のCONTENT_TYPEが
ちょっと変わっててエラーになるようだから
cgi-lib.plの81行目の
$type eq 'application/x-www-form-urlencoded') {
を、以下に変えるといけるかも・・
$type eq 'application/x-www-form-urlencoded' || $type =~ /application\/x-www-form-urlencorded/) {
もしくは以下
$type eq 'application/x-www-form-urlencoded' || $type =~ /x-www-form-urlencorded/) {
cgi-lib.plはform-urlencodedで処理してるけど、
AUはx-www-form-urlencordedだから一致しなくてエラーになってるんだと思う・・たぶん..
0214211
2007/03/01(木) 15:30:30ID:???ありがとうです! 自分もぐぐってみて、
”cgi-lib.plがエージェントのうちCHARSETに対応していない”とかなんとか、
81行目までは見当を付けられたんですが、具体的な書き換え記述が見あたらなくて参ってました。
まず213さんの書き換えで試してみます。
AU手元にないんで、確認後結果報告に参ります。
ようするに、HTTP_REFERERに含まれる文字列によって、変数$searchに特定の文字列を代入するって事かしら?
my $search;
my %Exchange_Strings = (
'yahoo', 'http://search.yahoo.co.jp/',
'Google', 'http://www.google.co.jp/',
);
for my $hash_key (keys %Exchange_Strings){
next if index($referer, $Exchange_Strings{$hash_key}) != $[ - 1;
$search = $hash_key and last;
}
0216nobodyさん
2007/03/02(金) 00:28:43ID:???Net::telnetモジュールを利用し、サーバーへTelnet接続し
取得したデータをhtmlで返すCGIをコーディングしています。
telnetログインする側のサーバのレスポンスが遅い為、一度に
複数のコネクションを確立し、接続した全てのサーバへリクエストを
投げて応答を待つシステムを構築したいのですが方法がわかりません。
現在は単一のサーバに対してアクセスを実施し(timeout->120程度)
forループで順次接続しなおす構成になっています。
なにか良い方法があれば是非ご教示下さい。
0217nobodyさん
2007/03/02(金) 02:51:40ID:???0218nobodyさん
2007/03/02(金) 11:40:00ID:???とりあえず糞トリ目障り
0219nobodyさん
2007/03/02(金) 13:00:32ID:???目障りなら NG ネームに指定すればいいでしょ
トリップ無しだと NG 指定することができないから、余計目障りだよ?
0220nobodyさん
2007/03/02(金) 13:19:36ID:???0221nobodyさん
2007/03/02(金) 16:33:38ID:ShHoFtwt変換したいのでですがうまくいきません。
例えば「12x20」を「12×20」にする、といった感じです。
当然ですが、
s/\d+x+\d/\d+×+\d/
では無理でした・・・。
どなたかアドバイスお願いします。
0223nobodyさん
2007/03/02(金) 16:50:46ID:ShHoFtwt即レスありがとうございます。
カッコでグループ化したものを呼び出せるんですね。
s/(\d)+x+(\d)/\1×\2/
ということでしょうか。
ただ、これだと
「12x20」が「2×20」になってしまいました。
\dは数字1文字のはずなのになぜ??
0224nobodyさん
2007/03/02(金) 17:18:44ID:???としてないのはなぜ?
0226nobodyさん
2007/03/02(金) 17:22:59ID:???前後の数字だけ保存すればいいんだから(¥d)x(¥d)で十分。
xにも+が付いてるあたり、理解が怪しくはある。
0227221
2007/03/02(金) 17:36:02ID:???225さん、226さんがご指摘の通り、
「+」の意味を間違えて捉えていました・・・。
自分がやりたかったkとは(\d)x(\d)でした。
224さんの方法でもできました。
正規表現の外で呼び出すことはないので、
s/(\d)x(\d)/\1×\2/
を使おうと思います。
レスを下さった方、親切に教えて下さり本当にありがとうございました。
とても勉強になりました。
0228nobodyさん
2007/03/02(金) 18:32:23ID:5GKaYECYトップページからindex.cgi?lang=ja と index.cgi?lang=en で下記のsub ja と sub enのそれぞれへ移動するようにしたいのですが、どのように処理したらよろしいのでしょうか?
#!/usr/bin/perl
$script = "index.cgi";
################################
#↓の処理の仕方を教えてください。
################################
if ($lang eq "ja") { &ja; }
elsif ($lang eq "en") { &en; }
################################
print "Content-type: text/html; charset=EUC-JP;\n\n";
print <<EOM;
<a href="$script?lang=ja">日本語</a> <a href="$script?lang=en">英語</a>
EOM
#日本語訳
sub ja {
print <<EOM;
日本語訳ページ
EOM
exit; }
#英語訳
sub en {
print <<EOM;
英語訳ページ
EOM
exit; }
0229nobodyさん
2007/03/02(金) 18:52:39ID:???>>1を読んでちょ
print "Content-type: text/html; charset=EUC-JP;\n\n";
を条件文の前にしてみたらどうかな
0230nobodyさん
2007/03/02(金) 19:50:22ID:5GKaYECYindex.cgiで表示されているリンクをクリックしても、URLがindex.cgi?lang=jaと
なるだけで、下記の
if ($lang eq "ja") { &ja; }
elsif ($lang eq "en") { &en; }
条件式では、sub jaやsub enには移動しない状態です。
index.cgi?lang=enでsub enの内容を表示させるためには、
何が足らないのか、間違っているのかわからない状況です。
0231nobodyさん
2007/03/02(金) 19:55:29ID:???フォームの内容はどこかで取得してるのかな?
0232nobodyさん
2007/03/02(金) 20:31:35ID:???0233nobodyさん
2007/03/02(金) 22:29:38ID:???http://pc11.2ch.net/test/read.cgi/tech/1166708139/
PATH_INFOをHTMLに出力する場合、以下のエスケープ方法で大丈夫でしょうか。
2バイト文字の処理行っていない点が気になるのですが。
$path = $ENV{'PATH_INFO'};
$path =~ tr/+/ /;
$path =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$print_path = $path;
$print_path =~ s/&/&/g;
$print_path =~ s/>/>/g;
$print_path =~ s/</</g;
$print_path =~ s/"/"/g;
$print_path =~ s/'/'/g;
print $print_path;
0234nobodyさん
2007/03/02(金) 23:07:02ID:???#!/usr/bin/perl
use strict; use CGI;
my $script = "a.cgi";
my $in = new CGI; my $lang = $in->param('lang'); $lang = 'none' if (($lang ne 'ja') && ($lang ne 'en'));
my %pagetitle = ('ja' => '日本語のページ', 'en' => '英語のページ', 'none' => 'いんでっくす');
print "Content-type: text/html; charset=euc-jp;\n\n";
print "<html><head><title>$pagetitle{$lang}</title></head><body>";
if($lang eq "ja"){ &page_ja; }
elsif($lang eq "en"){ &page_en; }
else{ &none; }
print "</body></html>";
exit;
#########################
sub none{ print "<a href=\"$script?lang=ja\">日本語</a> / <a href=\"$script?lang=en\">英語</a><br>"; }
sub page_ja{ print "日本語訳ページ"; }
sub page_en{ print "英語訳ページ"; }
0235nobodyさん
2007/03/02(金) 23:44:30ID:???$hash{$n} = $v;
のようなことをよくやるのですが、
もっとスマートィな書き方はないでしょうか?
0236nobodyさん
2007/03/02(金) 23:57:38ID:???リストは1次元に展開されてしまう
の2つを利用して、
%hash = (%hash, split(/,/, $line))
でいいのかな。
0238nobodyさん
2007/03/03(土) 00:24:52ID:???ループの中で繰り返しやってる場合、ハッシュを作っては捨て
作っては捨てになるから、splitの結果だけテンポラリなリスト
にpushしていって、最後にハッシュ化したほうがいいかも。
0240nobodyさん
2007/03/03(土) 11:39:50ID:???ありがとうございます。遅くなって申し訳ないです。
色々読んで、myでローカル変数化する
ハッシュに対応するkeyとvalueを代入して、forでループさせてlastで終了
とかは理解できたのですが、
next ifの行で比較している $[ - 1 は数値でしょうか?
あとは他にもこういうループで
foreach $key ( keys %hash ) や while ( ($key, $value) = each(%hash) )
などの方法がありますが、どれが適してますでしょうか?
0241nobodyさん
2007/03/03(土) 11:51:27ID:???indexは見つからなかった場合に $[ より1小さい値を返す。
普通は $[ = 0; した状態だが、世の中には $[ = 1; としている人もいる。
$[ - 1 と書いてあれば両対応できる。
eachで返される値は制御が出来ないけど、keysでキーを取ってくるなら
sortするなどの制御が可能。
それ以外はここではfor keysでもwhile eachでもあんまり変わらん。
0243240
2007/03/03(土) 12:33:09ID:???ありがとうございます。
$[ は検索できず困ってたのですが、おかげさまで何となく分かりました。
ttp://www.rfs.jp/sb/perl/02/05.html
ハッシュのループ方法に関しては↑などを見たのですが、
DBでORDER BYを使い、順序も正確に欲しい場合はどうすればよいでしょうか?
今回の場合は、訪問が多いリファラを最初に比較したほうがループを少なくできるのですが
0244240
2007/03/03(土) 13:31:13ID:???下記のような感じにしてみましたが、これは変だという箇所ありますでしょうか?
my $referer = $ENV{'HTTP_REFERER'};
my $search;
my @url = (
'Yahoo', 'http://search.yahoo.co.jp/',
'Google', 'http://www.google.co.jp/',
'Google', 'http://www.google.com/'
);
for ( $i=0; $i<=$#url; $i++ ) {
my $tmp = $url[$i];
next if ( index($referer, $url[++$i]) < 0 );
$search = $tmp and last;
}
→今回の場合は、訪問が多いリファラを最初に比較したほうがループを少なくできるのですが
多い少ないが判っているようでしたら優先順位を付与してあげると良いかもですね♪
my %url = (
'Yahoo' => {
'priority' => 1
'referer' => 'http://search.yahoo.co.jp/'
},
'Google1' => {
'priority' => 2
'referer' => 'http://www.google.co.jp/'
},
'Google2' => {
'priority' => 3
'referer' => 'http://www.google.com/'
}
);
for my $temp (sort $url{$a}->{priority} <=> $url{$b}->{priority} keys %url) {
next if index($referer, $url{$temp}->{referer}) != $[ - 1;
$search = $temp and last;
}
そろそろ頭の中がこんがらがってきました(哀)
0247nobodyさん
2007/03/03(土) 14:59:57ID:???1) $[は@hogeの時の$hoge[0]?
2) それとも0?別の例だと$hoge[9]だった場合の9?
3) もしくは配列が@mage = (undef,undef,222,undef,444,);の場合の$mage[2]になる?
(こんな風に配列にundef入れた事無いから、そもそもやっていいのかさえわからないけどw)
調べてみたけど、ろくに検索に引っかからないから厳しいわ。
0248nobodyさん
2007/03/03(土) 15:30:11ID:???それだとGoogleが分かれてしまうのと、後でパターンを増やすのが面倒なので×
処理速度も遅そうかな
( index() != $[ - 1 ) と ( index() < 0 ) は等価じゃないの?
0249nobodyさん
2007/03/03(土) 16:21:57ID:???$[は、リストの先頭の要素を指すために使う「添え字の値」。
$[ = 0; (デフォルトはこれ)
と代入すると、要素数5の@fugaの各要素は
$fuga[0], $fuga[1], $fuga[2], $fuga[3], $fuga[4]
で参照される。
先頭の要素である$fuga[0] は $fuga[$[]でも参照できる。
$[ = 1;
と代入すると、要素数5の@fugaの各要素は
$fuga[1], $fuga[2], $fuga[3], $fuga[4], $fuga[5]
で参照される。
先頭の要素である$fuga[1] は $fuga[$[]でも参照できる。
>>248
indexが、要素が見つからなかったときに返すのは、-1ではなく
そのときの $[ より1小さい値。
$[ = 1;していると、見つかれば1以上の値、見つからなければ0を返す。
以上のことは
$ perldoc perlvar
$ perldoc perlfunc
で調べました。
0250nobodyさん
2007/03/03(土) 16:35:41ID:???$[ は配列の先頭の添え字を何にするか決めているってことですね?
デフォルトは通常 0 と。
0251nobodyさん
2007/03/03(土) 16:46:46ID:???perldoc perlvar でもいいけど。
重複させないようにとなると、DB_FileあたりのR_DUPが必要になるかなぁと。
あと、頻度が多い順っていう優先順位を付けることで処理速度の低下を余計なループを減らす方向で防いでみようと思ったものでして。
このあたりは実際に回してみてベンチなりを取ってみなきゃですね。
ってことでこの辺りの手法はRock54回路でも悩んでいたりしました。
■ このスレッドは過去ログ倉庫に格納されています