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

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

■ このスレッドは過去ログ倉庫に格納されています
00019882005/12/08(木) 22:48:27ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0474nobodyさん2006/01/08(日) 02:41:38ID:???
これ以上なく単純明快な形で既に解決策が提示されているものを猿が罵倒した件について。
04754552006/01/08(日) 02:42:47ID:???
>>473 普通に置換できてる。つか当たり前っちゃ当たり前。
0476nobodyさん2006/01/08(日) 02:43:14ID:???
>>469
あの質問ではあんなテンプレートあってもなくても意味がないような気がするが
のちのちの完成形ではテンプレートを読み込むというのが絶対条件なら
くずせないだろ、バカチン
0477nobodyさん2006/01/08(日) 02:44:46ID:???
Content-type: text/html

<HTML>
   <BODY>
      <FORM action="" method=POST>
         <INPUT type=text
      </FORM>
   </BODY>
</HTML>
0478nobodyさん2006/01/08(日) 02:45:40ID:???
KENT様を見習え。バカチン!
0479nobodyさん2006/01/08(日) 02:45:47ID:???
>>474
解決策などありませんでした
ありませんでした
ありませんでした
0480nobodyさん2006/01/08(日) 02:47:04ID:???
requireやuseしていない組み込みモジュールに$nameがあると見た!
0481nobodyさん2006/01/08(日) 02:47:22ID:???
赤帽系のperlが変ってこと?
0482nobodyさん2006/01/08(日) 02:48:48ID:???
>>480
仮にそんなことがあるとしてもそんなことが判明しても解決にならない。
formのnameが別の名前に置き換えられないんだから。
0483nobodyさん2006/01/08(日) 02:50:03ID:???
そこらへんのHTTPデーモンにはエラーログを日本語で出力してくれるものがあるの?
0484nobodyさん2006/01/08(日) 02:50:31ID:???
フォームでは「name/value」しか使えないのケ?
0485nobodyさん2006/01/08(日) 02:52:10ID:???
>>483
アーカイブ化されてるつってんだからレンタル屋がraw->日本語処理スクリプトも置いてんだろ
0486nobodyさん2006/01/08(日) 02:53:22ID:???
もうこいつら頭良すぎ(w
全然付いていけない。

オヤスミナサイ。
0487nobodyさん2006/01/08(日) 02:53:57ID:???
>>486
逃げたwww
0488nobodyさん2006/01/08(日) 02:54:28ID:???
daemonのエラーログには何にも残ってねーな
つーかエラーじゃないし
0489nobodyさん2006/01/08(日) 02:55:40ID:???
何の役にも立たない>>486の捨て台詞カッコイイぜ
0490nobodyさん2006/01/08(日) 03:03:25ID:???
再現したって言う奴、これどうよ?
$line =~ s|<TEXTAREA name="comment1" cols="60" rows="10"></TEXTAREA>|<TEXTAREA name="comment1" cols="60" rows="10"></TEXTAREA>|;
0491nobodyさん2006/01/08(日) 03:08:21ID:???
ああ
それも試したんだわ
これも試した↓
$line =~ s|comment1" cols="60" rows="10"></TEXTAREA>|comment1" cols="60" rows="10"></TEXTAREA>|;
結果
Content-type: text/html

<HTML>
   <BODY>
      <FORM action="" method=POST>
         <TEXTAREA
      </FORM>
   </BODY>
</HTML>

どうやらこうやら$lineがnameを含有していて評価部分にnameがあろうとなかろうと$lineを評価してしまうとダメらしい
$lineを評価なしにそのままprintしたときだけテンプレートのすべてがprintされる
0492nobodyさん2006/01/08(日) 03:11:21ID:???
>>491
仮にそれがperlのバグだとしても今まで出てこなかったのが変だよなー
0493nobodyさん2006/01/08(日) 03:15:59ID:???
>>492
再現しない環境があるんだから
それが大多数ならおかしくないな
perlやosの種類・バージョン・リビジョンの組み合わせは星の数だ
04943662006/01/08(日) 04:52:43ID:ekOfQHSy
>>374
そうなんですか!?知りませんでした。
ご親切にありがとうございます!

質問していいですか?
「data.txt」 という何か書き込みされている テキストファイルがあるとして
open(F,"data.txt");
while(<F>){
chomp;
push(@arr,$_);
}
close(F);
$num = @arr;
$num += 1;
という感じに書き込みした順番付けをしてあって、順番は1から始まる数字なんですが

このスクリプト4行目の「$_」には、行番号がセットされているんですか?
@arrというのは、どの部分を指しているんでしょうか?

CGI&Perlポケットリファレンスには、「$_」は特殊変数と言う事位しか触れられていません。
@arrというのは、「ただのarrという名前の配列」と理解してるんですが、これは大間違いですかね?
0495nobodyさん2006/01/08(日) 05:04:36ID:Pbsz8/Oh
4行目は改行が削られたデータ
$numは要素の数が入る

最後の行、その他の解釈の仕方があればそれを知りたい
0496nobodyさん2006/01/08(日) 05:08:26ID:???
>>494
「array(配列)」を略しただけだと思う。つかそのくらい想像せい。
04973662006/01/08(日) 05:15:05ID:ekOfQHSy
>>374
そうなんですか!?知りませんでした。
ご親切にありがとうございます!

質問していいですか?
「data.txt」 という何か書き込みされている テキストファイルがあるとして
open(F,"data.txt");
while(<F>){
chomp;
push(@arr,$_);
}
close(F);
$num = @arr;
$num += 1;
という感じに書き込みした順番付けをしてあって、順番は1から始まる数字なんですが

このスクリプト4行目の「$_」には、行番号がセットされているんですか?
@arrというのは、どの部分を指しているんでしょうか?

CGI&Perlポケットリファレンスには、「$_」は特殊変数と言う事位しか触れられていません。
@arrというのは、「ただのarrという名前の配列」と理解してるんですが、これは大間違いですかね?
04984942006/01/08(日) 05:52:31ID:ekOfQHSy
>>495
早速のアドバイスありがとうございます!
...と言うことは、例えば「date.txt」の中身が
山田太郎,[email protected],\n
鈴木花子,[email protected],\n
佐藤次郎,[email protected],\n
だった場合、具体的に言うと「$_」の最初は
「山田太郎,[email protected]」で、2番目に
「鈴木花子,[email protected]」が来て、3番目に
「佐藤次郎,[email protected]」という順番でセットされていく訳ですか?(ただ\nが抜けただけ?)

これが、@arrにセットされていく訳だから@arr[0]は【山田太郎,[email protected]】という理解なんですがOKですかね?
その後の、「$num = @arr;」という処理の仕組みが詳しく説明できないのですが、
結果は【山田太郎,[email protected]】は【山田太郎,[email protected],1】となっています。
>>495さんは【$numは要素の数が入る】と言われてますが、もう少し噛み砕いてもらえないでしょうか?
「$num」には、「@arr」からどんなデータが渡されているのでしょうか?
0499nobodyさん2006/01/08(日) 05:59:48ID:???
>>498
非常に痛々しいが答えてあげる。

「$_」の中身が知りたければprintしなさい。
pushの解釈はそれでおk。
「$num = @arr;」は@arrの要素数、つまり>>498の例の場合は3が入る。
これ以上噛み砕きようがない。その後で1足してるけど意図は不明。

つか書いたのお前だろうがよ。
0500nobodyさん2006/01/08(日) 06:00:39ID:???
>>498
printすりゃいいだろ。
少しくらい自分で解決できるようになれ。
あと関数の意味くらい調べろ。
05014982006/01/08(日) 06:08:00ID:ekOfQHSy
間違えてました!

10行目の
@arr[0]は【山田太郎,[email protected]】は、
$arr[0]は【山田太郎,[email protected]】でした!書き間違えてました!

もう一つ補足です。
僕の中ではまだ仮定なのですが、
「$num = @arr;」という処理は、「@arr」の中身を順番に「$num」に渡す。
「@arr」には3つの変数がセットされていて、それぞれ

「山田太郎,[email protected]」
「鈴木花子,[email protected]」
「佐藤次郎,[email protected]」

そんでもって、それらの名前は「$arr[0]」、「$arr[1]」、「$arr[2]」となると。
>>495さんが言ってた【$numは要素の数が入る】の【要素の数】とは、
「$arr[0]」の「0」の事だったんですかね!

だから、「$num = @arr;」の処理をすると、「1」、「2」、「3」になってる!
と考えれば納得できますけど、この仮定は合ってます?やっぱりダメですか?
0502nobodyさん2006/01/08(日) 06:11:00ID:???
>>501
print $num; してみ? 答えが出てくるから。
0503nobodyさん2006/01/08(日) 06:16:30ID:???
そろそろ放置しないと、このレベルのガ湧き出すぞ
0504nobodyさん2006/01/08(日) 06:17:27ID:???
いいんじゃね? 初心者スレだし。
0505nobodyさん2006/01/08(日) 06:18:55ID:???
ID:ekOfQHSyは初心者以前にバカだがな。
05065012006/01/08(日) 06:42:29ID:ekOfQHSy
さっきのdata.txtで

#!/perl/bin/perl
require "jcode.pl";
print "Content-type: text/html\n\n";

open(F,"data.txt");
while(<F>){
chomp;
push(@arr,$_);
}
close(F);
$num = @arr;
$num += 1;
print $num;

をやったら、「4」が出ました!
>>499さんが「3」が入るの意味が分かりました!
みなさん、僕のレベルが低くてすみませんでした。
でも、ありがとうございました!

CGI&Perlポケットリファレンスはお勧めだと言われて買ったんですけど、基本と言うか仕組みと言うか、その辺を分かった上で使う物みたいな気がします。
ただ、僕のレベルが低いだけかもしれませんけどね。

やっぱり、perlやphpってのは本だけでやるものじゃなくって、ちゃんと学校行って勉強するべきなんですかね?

>>503
早くこのレベルから抜け出たいです!>>503さんはどれくらいの経歴の持ち主なんですか??やっぱり何年もされてるんですか?
0507nobodyさん2006/01/08(日) 06:53:18ID:???
>>506
ネットの情報だけでも一週間あればBBSくらい作れるやつはゴロゴロしてる。
逆に学校で習っても全然理解できないやつもゴロゴロしてる。

要は素質の問題。素質の差を埋めるのは勉強の仕方と、知識を求める意欲。
0508nobodyさん2006/01/08(日) 07:03:07ID:???
>>506
安易に2chに頼るヤシは成長しない。
悩んで悩んで悩みぬいてのちに来なさい。

それと、馴れ馴れしくしないでくれるかな?
お前と茶飲み話をするためにここにいるんじゃないんだから。
05095062006/01/08(日) 07:14:08ID:ekOfQHSy
>>507
簡単な掲示板やスケジュール表は作ったりしました!

最初は、本も買ってなかったのでネットで勉強していました。そこで、配布されてたスクリプトを試して、こんな感じにしてみたいなと思ったら少し書き換えて遊んだりしていました。
なので、自分で1から作ったりは出来ませんでしたが、ほんの少しずつ「なんだか、何か分かんないんだけど、何かが分かってきたような気」がしてごくごく簡単なスクリプトを書いてみたら、
Internal Server Errorと何回も何回も出てきて悔しかったですが、やっと画面に文字が出てきた時はかなり嬉しかったんです!!

僕は、プログラムなんて向いてないだろうし、どうせ出来ないんだから...
と思っていたので余計に嬉しかったです!興奮して眠れませんでした!

>>507さんが学校で習っても全然理解できないやつもゴロゴロしてるというのは想像もつきませんが
恥ずかしいけど、僕には学校に行く余裕も無いのでネットと本で勉強して、自分が作りたいようなプログラムなら出来るくらいにはなりたいです。
でも、いつかちゃんとした設計の仕方とかも覚えてみたいので、まずは今の自分が出来ることからやってるという段階です。

>>507さん、みなさん、色々親切にしてくれてありがとうございます。
正直、僕程度のレベルじゃみなさんの邪魔になるだろうし、野次られても全然構いません。
これからはちゃんと自分で調べれることは調べてみてから相談します。無視はこたえるので、野次でも何でも良いから教えてくれたら嬉しいです!!
ありがとうございました。
05105062006/01/08(日) 07:24:11ID:ekOfQHSy
>>508
>安易に2chに頼るヤシは成長しない。
>悩んで悩んで悩みぬいてのちに来なさい。
はい。基本がなっていない為、最初は、数多いかもしれませんが
理解して、ここに来る回数は減らします。努力します。

>それと、馴れ馴れしくしないでくれるかな?
>お前と茶飲み話をするためにここにいるんじゃないんだから。
ごめんなさい。
0511nobodyさん2006/01/08(日) 07:31:42ID:???
よし、じゃあID:ekOfQHSyはコテハンを名乗ることを許す。
05125062006/01/08(日) 07:34:13ID:ekOfQHSy
>>511
ありがとうございます。
でも、前に親切な人がコテハン使っても良いこと無いって......??
言われたままに納得してましたが、そうなんですか?
0513nobodyさん2006/01/08(日) 07:41:01ID:???
>>512
気にするな。名乗りたいという気持ちが大事。
つかすぐに他人の言動に左右されるな。意思を強く持て。
05145122006/01/08(日) 07:47:55ID:ekOfQHSy
>>513
じゃあ、コテハン名乗りたいです!
というか、ここでのコテハンを持ちたいんです。ここの住人になりたいと思ったから!



よかったら、僕に命名してくれませんか




0515nobodyさん2006/01/08(日) 07:58:23ID:???
>>514
山田太郎、鈴木花子、佐藤次郎 好きなものを選べ
0516nobodyさん2006/01/08(日) 08:03:52ID:???
皆暇なんだな…。

>>514
ゲーム脳、ゆとり教育、5才児 好きなものを選べ
0517nobodyさん2006/01/08(日) 08:17:21ID:???
朝見てみれば、何この流れ。

「ここの回答者は初心者ばかり」って言っていたやつは、
初心者以下だったことがはっきりしたのは収穫だったけど。
0518nobodyさん2006/01/08(日) 09:48:09ID:???
伸びてると思ったら、なにこれ…(;´Д`)
0519nobodyさん2006/01/08(日) 11:38:52ID:???
VIPから沸いて出たうんこだよ
0520nobodyさん2006/01/08(日) 12:52:37ID:???
伸びてると思ったら・・(略
0521nobodyさん2006/01/08(日) 13:15:22ID:Pbsz8/Oh
>516
暇ってよりも、みんなはNGワード登録したいだけなんじゃないかなとw
0522nobodyさん2006/01/08(日) 13:45:54ID:???
>>510から雑談になってるぞ
0523nobodyさん2006/01/08(日) 22:08:51ID:???
ここ雑談スレだし
0524nobodyさん2006/01/08(日) 22:52:11ID:???
こんなスレが底の方にあったよ。長引きそうな時は
移動してもらえると有り難い。

自分の作ったCGIスクリプトをデバッグするスレ
http://pc8.2ch.net/test/read.cgi/php/1011174442/


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

業界談義、愚痴はプログラマ板へどうぞ。
http://pc8.2ch.net/prog/
0525nobodyさん2006/01/08(日) 23:06:59ID:Uz3qgn+x
例えばなのですが、
A.cgiで入力した出力結果(たとえばヘローワールドとか)を
B.htmlの中に埋め込んで表示したい場合、って
どうやって表示させるのでしょうか?

A.cgi→B.cgiに表示させるのは判るのですが・・・
0526nobodyさん2006/01/08(日) 23:08:46ID:???
ssi
0527nobodyさん2006/01/08(日) 23:14:20ID:???
ログに吐く→ログを読んでB.htmlを作成→B.htmlへ移動


(゚∀。)
0528nobodyさん2006/01/08(日) 23:17:56ID:???
iframe
0529 ◆TWARamEjuA NGNG
B.htmlをテンプレートにしちゃうとか。
0530nobodyさん2006/01/08(日) 23:56:33ID:Pbsz8/Oh
>529のが理想的
05315142006/01/09(月) 00:40:09ID:YG2ddn0l
戻りました。
初心者の質問スレなので、スレ違いの発言は避けます。すみません。
0532nobodyさん2006/01/09(月) 00:42:41ID:Exqn7RF4
>531
その書き方だと「僕は初心者じゃ有りません」ってなっちゃうぞ!
あっ!初心者にも達してないってことなのか!
すみませんでした!!
0533nobodyさん2006/01/09(月) 00:43:12ID:???
VIPから出てこないでね
0534nobodyさん2006/01/09(月) 00:59:21ID:DuxY6YkJ
でもEk君素直でいい子だよ。
自分で調べなさすぎるけど。
05355312006/01/09(月) 01:39:57ID:YG2ddn0l
>>532
あっ、いやそうじゃなくてですね。
僕は初心者には違いありません。
ただ、余計なことを書き過ぎたので必要以上の私語は慎みますと言う意味です。
05365312006/01/09(月) 01:58:24ID:YG2ddn0l
早速なんですが、僕は自分の理解が正しいのか間違っているのか正確な解答を知りません。
そこで、僕の理解が正しいのかだけ答えてもらえませんか?

フォームで入力したものをcgiファイルに渡して、それを変数に入れて使うとき
$i=$FORM{'i'};とか、$FORMが$inになってるものとか、$i=$cgi->param('i');みたいなのとかありますよね。
3番目が別物と言うのは何となく分かるんですが、1番目と2番目もやはり違うものどうしですか?
0537nobodyさん2006/01/09(月) 02:57:25ID:???
$FORMや$in、$cgiがどうやって生成されているか見てきて下さい><
前者の二つはcgi-lib.plを使って後者はCGI.pmを使っていると見受けられます。
0538nobodyさん2006/01/09(月) 03:41:58ID:???
初心者より低いレベルのやつがおるな
05395362006/01/09(月) 05:18:37ID:YG2ddn0l
>>537
ありがとうございます。

>前者の二つはcgi-lib.plを使って後者はCGI.pmを使っていると見受けられます。
と言う点については、理解しています。(cgi-lib.plやCGI.pmの説明は出来ませんけど^^;)
僕が分からなかったのは、$FORMと$inについてで
両方ともcgi-lib.plをrequireしていますよね?んでも、違う変数にセットしている。と言うのがいまいち理解に苦しんでいたんです。
この2つ(もっとあるのかもしれませんが)を使い分けるような必要性があるから作られていると思うのですが、それはどんな時なのでしょうか?
0540nobodyさん2006/01/09(月) 05:22:52ID:???
>>539
cgi-lib.plの中身を見れ。すぐわかる。
そういうことしようとしないですぐ聞いちゃうから呆れられるんだよ。
0541nobodyさん2006/01/09(月) 05:29:28ID:uNKy5Wkj
>539
for ループを使うときに $i を使う人と $j を使う人が居る
配列に @list を使う人と @arr を使う人が居る
ただそれだけ
難しく考えすぎ
05425392006/01/09(月) 06:12:11ID:YG2ddn0l
>>540
すみません。読もうとしたことはあったんですが、正直、全く読めず僕にはまだ早いのかもと諦めていました。T_T
でも、それも読むべきなんですね。果てしない道のりですね。
ご指摘、どうもありがとうございました!

>>541
そうなんですかー。
あまり難しく考えないで良いとわかって良かったです!
少しずつ、基礎の基礎が分かるようになって行けば、基礎の段階に進めるので
地道に頑張ります。
0543nobodyさん2006/01/09(月) 09:38:58ID:DuxY6YkJ
>>542
君ひどすぎるよ。
わからんところがあったら自分で少しは調べろよ。自分で少しは考えろよ。

まず、「Perl 入門」でもググって、Perlの基礎を勉強しろよ。

「初心者以下」っていわれるのはそれすらしてないからだろうが。
しましたとかいうなよ。実際君は基礎的な構文すら理解してないんだから。
わかったら>>1と>>7読め。
0544nobodyさん2006/01/09(月) 12:25:25ID:???
もうこのスレだめかもわからんね
0545nobodyさん2006/01/09(月) 12:51:17ID:???
Win-XpのコンソールでPerlのコマンドラインスクリプト書くとき、
unixの
perl -e 'print $var, "\n";'
をどう書いたらいいでしょうか。
NG: perl -e "print $var, \"\n\";"

0546nobodyさん2006/01/09(月) 13:21:44ID:???
NG: perl -e "print $var, \"\n\";"
0547nobodyさん2006/01/09(月) 13:39:16ID:???
perl -e "print $var, qq{\n}"
0548nobodyさん2006/01/09(月) 13:43:05ID:???
>>546
ども。
あれ、それででけた。さっき、だめだったのは何かの間違い。
でも、やっぱcmd.exeでは、かなり面倒ですね。
0549nobodyさん2006/01/09(月) 13:43:57ID:???
>>547
あ、そんな手もありましたか。どうもです。
0550nobodyさん2006/01/09(月) 16:33:02ID:???
50 くらい上の form の話って、 HTML::FillInForm とか
知ってれば悩まなくてよかったのにね。
0551nobodyさん2006/01/09(月) 23:08:44ID:???
>>545
copalって知ってる? 便利やよ。
ttp://homepage1.nifty.com/kaityo/copalpro/
0552nobodyさん2006/01/10(火) 03:27:54ID:j2HoU23f
こんばんは!
プログラムは面白いです。今まで嵌っててここに挨拶に来るのも忘れてました。

>>543
ご指摘ありがとうございます!!
今の僕じゃ何も言えないので、お言葉、だまってありがたく頂戴します。

>>all
あの、ここは初心者の質問スレということなので僕にとって知りたい事を質問させて頂いてたつもりだったんですが
どのレベルなら許されますか?
0553nobodyさん2006/01/10(火) 04:05:08ID:???
お前をつきっきりで介護するスレじゃねえってことだよ。
0554nobodyさん2006/01/10(火) 04:15:56ID:NnDCxprG
>>552
関数を全部覚えろとは言わない。
多用される関数・構文ぐらいは覚えた上での質問を。

とりあえずリファレンスは手元に置いておいたほうがいい

個人的には技術評論社が好き
0555nobodyさん2006/01/10(火) 04:36:29ID:???
>>552
ここは「知りたいことを質問する場」じゃなくて
「初心者じゃ手に負えないこと」を質問する場所。

お前のように試行錯誤もしないで疑問を片っ端から
垂れ流す場所じゃ無いってこと。つかお前何歳?
0556nobodyさん2006/01/10(火) 05:40:00ID:???
ってか、皆スルーすべき。かまってあげすぎ。
スルーされることによって、どういう質問なら適切か、答えが返ってくるかって覚えていくもんだろ?

>>555
>つかお前何歳?
思わず笑っちまったがこの質問は無いだろうw
何歳だったら良いって問題じゃないっつーか。
この質問が既に話を聞いてあげる姿勢の現れっつーか。
深みに嵌りかけてますぞ
0557nobodyさん2006/01/10(火) 05:48:20ID:???
>>556
どう見ても皆ネタとして遊んでいるだけ。深読みしすぎ。
0558nobodyさん2006/01/10(火) 09:25:04ID:j2HoU23f
unshiftを使った構文を使いたいので、まずサンプルで試していたのですが
unshift(@hoge, splice(@huga, 1, 1));

@hugaの1番目だけを、@hogeの先頭にくっつけたいのです。
本の通りなのですができません。
何故なのでしょうか?
0559nobodyさん2006/01/10(火) 09:37:51ID:???
> unshift(@hoge, splice(@huga, 1, 1));
splice @huga, 0, 1
0560nobodyさん2006/01/10(火) 09:43:59ID:???
>>559
それなら shift @huga でいいような...
0561nobodyさん2006/01/10(火) 10:57:13ID:j2HoU23f
まだずっとやってるんですが、何故ならないんだろう。

>>559,>>560
レスありがとうございます。
「splice @huga, 0, 1」も「shift @huga」も、@hugaの1番目のみを削除しているんですよね?

1,2,3,4,5
6,7,8,9,10
11,12,13,14,15

っていうファイルを

2,3,4,5
7,8,9,10
12,13,14,15 と変える...?

ちょっと違うような。@hugaから抜いた1番目のものを
@hogeの先頭にくっつけるには
unshiftを使って、<配列の先頭に要素を追加する>と書いてありました。
更にそのまま引用すると

●配列の$i番目の要素を別の配列の先頭に追加する
unshift(@newarray, splice(@oldarray, $i, 1));
(CGI/perlポケットリファレンスより抜粋)

何が間違っているのでしょうか......
0562nobodyさん2006/01/10(火) 12:06:07ID:???
>>561
perlの配列は添字が0から始まるので、最初の要素から
0番目,1番目,...とあらわすことがよくあります。ポケット
リファレンスはこの書き方を採用しているようですな。
0563nobodyさん2006/01/10(火) 12:09:39ID:???
>>561
> 何が間違っているのでしょうか......

ここ↓
> ●配列の$i番目の要素を別の配列の先頭に追加する

splice の第二引数は配列の先頭からのオフセットなので 0 から始まるのよ。
即ち通常は splice し始める要素の添字と一致する。従って、

> unshift(@newarray, splice(@oldarray, $i, 1));

の動作はその本の記述に合わせると、
「配列の$i+1番目の要素を別の配列の先頭に追加する」
ということになる。

@oldarray から取り除くものが先頭要素に固定されているのなら >>559 の言うように、

unshift @newarray, shift @oldarray;

で等価。
05645632006/01/10(火) 12:12:37ID:???
訂正
s/>>559/>>560/
05655632006/01/10(火) 12:44:26ID:???
>>561
おせっかいついでに、
当方は

「あなたがどんな結果を期待しているのか」
「実行したコード」
「実際の結果」

のうちどれひとつとして知らないので、本来は「何が間違っているのでしょうか」と問われても「何かが間違ってるんでしょうねぇ」としか答えられないのですわ。
だから期待した返答がなくても、あるいは期待しなかった返答すらなくても許してね。ぼくがんばったの。
0566nobodyさん2006/01/10(火) 15:28:44ID:???
strictじゃないperlのcgiも、$を$main::で置換したらuse strictに大変身。
マジお勧め!
0567nobodyさん2006/01/10(火) 15:57:35ID:???
>>566
$namae = 'kansuu';
$bangou = 1;
${$namae . $bangou} = kansuu;
&$kansuu1;
sub kansuu { print 'hoge' }
0568nobodyさん2006/01/10(火) 16:06:53ID:???
3行目をクオートしてあげないと怒られちゃうぞ。
0569nobodyさん2006/01/10(火) 16:24:34ID:???
strictに初挑戦してみた
これでOK?
ちなみになぜ&kansuu1;でいいのかいまいちわかってなかったりするw
myとか使ってやってみてるけどデキネorz

#!/usr/local/bin/perl
use strict;

$main::namae = 'kansuu';
$main::bangou = '1';
$main::{$main::namae . $main::bangou} = 'kansuu';
&kansuu1;
sub kansuu { print 'hoge' }
05705672006/01/10(火) 16:31:00ID:???
>>568
それがstrictじゃ無い環境だと勝手に文字列扱いしてくれるんだよね、これが
-wで警告が出るけど、その辺の解釈が微妙だからstrict subsがあるわけだ
my $hoge = func;
sub func { print 'hoge' }
print $hoge;

>>569
ちょ、おまw
>>567はネタで考えられる限りの悪例だぞw

> ちなみになぜ&kansuu1;でいいのかいまいちわかってなかったりする
${$namae . $bangou}ここで$namaeと$bangouを連結した名前の変数、
つまり$kansuu1に代入してるから。

strictに真面目に書くとこう
my $name = 'kansuu';
my $num = 1;
my %hash;
$hash{$name}[$num] = \&func;
&{$hash{$name}[$num]};
sub func { print 'hoge' }
0571nobodyさん2006/01/10(火) 16:37:22ID:???
>>570
俺もまさかそのままで通るとは思わなかったw
一応strictになってるっぽいw

あと、$kansuu1に連結して、&kansuu1で呼び出すのはわかるんだけど、
なぜ&kansuu1;でサブルーティン呼び出せるのかがいまいちわからんのだ
0572nobodyさん2006/01/10(火) 17:11:34ID:???
>>571
あースマン$がないの読み落としてた
これは、名前空間を直接操作してmain::kansuu1にkansuuを登録しちゃってるから。
$, = "\n";
print keys %main::;
とかやってみるとわかると思う
0573nobodyさん2006/01/10(火) 17:34:33ID:???
なるほど
ちょっとだけわかってきた気がする

#!/usr/local/bin/perl
use strict;

$main::test = 'yeah';
$main::{$main::test} = 'kansuu';
&yeah;
sub kansuu { print 'hoge' }

これでも呼び出せるって事か
つかややこしいなぁ
初心者の俺には理解の範疇を超えそうな感じだよ
色々試してがんばって消化してみる
■ このスレッドは過去ログ倉庫に格納されています