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

Perl コーディング初心者質問コーナー Part34

■ このスレッドは過去ログ倉庫に格納されています
0001前スレの連投で気分崩したので後よろ04/04/05 16:01ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0577nobodyさん04/05/07 20:26ID:???
> とりあえず同一アドレスははじきます。リスクはありますが、
> プロバイダの同一サクセスポイントもはじこうと思っています。
ネタだろ?
0578nobodyさん04/05/07 20:33ID:???
@list に何列(何個)存在しているか
個数をカウントするにはどうすればいいですか・・?
0579nobodyさん04/05/07 20:35ID:???
$kosuu = @list;
058057804/05/07 20:42ID:???
>>579
ありがとうございます!
0581nobodyさん04/05/07 20:52ID:???
>>576
クッキー食わせるのは良くあるパターン
0582nobodyさん04/05/07 21:12ID:???
サクセスポイント
058357604/05/07 21:46ID:???
サクセスポイントはアクセスポイントのタイプミスでした。どもすみません。

>>581

あ、クッキーという手がありましたね。消して再投票する人もありえるでしょうが、
一定の効果はありそうですね。ありがとうございます。
0584nobodyさん04/05/07 22:57ID:???
検索用CGIを作っているのですが、
@array にたとえば「あ」「い」「う」が入っているとして、
それを$aiuにマッチすればそのまま、マッチしなければそのループを抜ける
という表記なつもりなのですが、結果がうまくいきません。

foreach $i (@array){
if ($aiu =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$i/i) { ; }
else { next; }
}

どのようにかきかえればいいでしょうか?
0585nobodyさん04/05/07 23:13ID:???
>>584
foreach my $str (@array){
  $str = quotemeta $str;
  if( !$aiu =~ /$str/){
    last; # ループを抜けるのはlastです
  }
}

こんなもんでどうなんでしょう? 正規表現はそんなにややこしくする必要ありですか?
0586nobodyさん04/05/07 23:39ID:???
>>584
まずそれは EUC-JP とうまく付き合いたがっているコードなわけだけど
@array と $aiu はきちんと EUC-JP ですか?
058758604/05/07 23:53ID:???
早とちり失礼。
058858404/05/08 00:20ID:???
>>585

エラーはおこりませんが、HITしませんでした。。。
下のレスにもかかれてたコードのせいですかねぇ?

>>586
EUC-JPかどうか実はよくわかっていません・・・が、
なぜか部分部分でそのコードを入れないと反応しないものがありまして。
なくてもうまくいく場合もあるんですが、
基本的に日本語が含まれるものには無いとうまくいかないようです。

0589nobodyさん04/05/08 00:59ID:???
$fmt = "%d %d";
@lst = (12, 20);

これを print を用いて「12 20」のように表示したいのですが、
print($fmt, @lst); では「%d %d1220」と表示されてしまいます。
「12 20」のようにするにはどうしたらよいでしょうか。

ちなみに、$fmt, @lst は動的に変わり、
要素が2個とは限りません。
C言語の va_list のようなことができるのか知りたいです。
0590nobodyさん04/05/08 01:07ID:???
>>589
>>574を参考にすべし。
059158904/05/08 01:35ID:???
>>590
$fmt も任意で、必ずしも %d のスペース区切りではないんです。
0592nobodyさん04/05/08 01:41ID:???
>>589
僕が良くワンライナで使う手はこう。
$ perl -e '@list=(1..5);print join(" ", @list);'
1 2 3 4 5
0593nobodyさん04/05/08 01:45ID:???
printf
059458904/05/08 01:58ID:???
>>593
できました、ちょっとハマって勘違いしていました。
ありがとうございました。
0595nobodyさん04/05/08 02:19ID:3p4uAER8
初めまして。

「バイナリ構造体」の意味がイマイチつかめなくて困ってます。

「バイナリ」は2進法とかいう感じの意味らしいですが、では「バイナリ構造体」
とは構造が2進法である。みたいな感じですか?なんか変な感じ・・・

バイナリはいろんな所で調べれますが、バイナリ構造体という言葉の説明はみつかりません。

どうやらスカラ変数や s/〜//; の〜部分もバイナリ構造体らしいのですが、どなたか
バイナリ構造体の意味を教えてくださいませんか。お願いします。
0596nobodyさん04/05/08 02:25ID:???
バイナリデータ
0597nobodyさん04/05/08 02:51ID:???
バイ ナラ
0598nobodyさん04/05/08 02:58ID:???
>>595
プログラミングで構造体と言うと既にある型を使って新しい型を作ることを指す。
Perlは基本的にデータを文字列で記憶するからそれをバイナリ値にしたものが
バイナリ構造体。
0599nobodyさん04/05/08 03:09ID:???
まあ pack してできるものがバイナリ構造体だ

でも s/?//; の?の部分がバイナリ構造体だというのはいまいち意味がわからない
060059504/05/08 03:29ID:???
>>598
ということは文字列をバイナリ値(0と1)に変換して記憶・保存する構造自体がバイナリ構造体ですか?

>>599
packってpack後にバイナリ構造体に結果を返すって勉強したので、packの結果を受け取れる
場所はスカラ変数に限らず、全てバイナリ構造体と言える?あれる?のかなと思いましたが・・・・・

う〜ん難しいですね。スカラや配列って文字列のまま記憶・格納しているのですか?
例)$x = "あいうえお";
という代入をした場合、「あいうえお」のままはコンピューターは保存できませんよね?
だから、保存時に2進数に直して保存し、呼び出すと自動で解凍?される・・・・のですか?
その仕組みがバイナリ構造体そのもの????


0601nobodyさん04/05/08 03:40ID:???
>>600
バイナリ値というのは2進数のことではない。
それにPerlにおいてバイナリ構造体の意味を学んでも役には立たないから
おかしな理解をしてしまう前にpackして得られる値とだけ思っておけ。
060259504/05/08 04:20ID:???
>>601
「整数値を、2 の補数表現で符号化したものをバイナリ値とする。」こんな程度しか
バイナリ値ではひっかかりませんでしたがとりあえず単純な2進数ということでは
ないようですね。

プログラム関係って言葉の意味さえわかれば関数や表記法なんて結構どうにでもなるかな
と思ってるんですよ。理解できない言葉があると勉強の効率が悪いので私にとっては
言葉の意味は重要なんですよ。

プログラム関係の言葉の辞書って今アスキーっていうHP使ってますが、他にどこか
いいとこありますか?アスキーはバイナリ値もバイナリ構造体も載っていませんでしたので
プログラム系の言葉に特化してる辞書とかないですかね
060359504/05/08 04:27ID:???
忘れてました追加です。

「0x」とは、後に続く文字列が16進数であることを示しているらしいのですが、
print hex(0xa);
としてみたら16が表示されました。
print hex(a);
の場合は10なのですが、「0x」は後続が16進数であるという示し以外にどのような
効果を与えるのでしょうか?
0604nobodyさん04/05/08 05:08ID:???
print 0xa;
# 10
print hex 10;
# 16
0605nobodyさん04/05/08 12:01ID:???
バイナリ構造体というのは、誰が作ったか知らないが、日本独自の言葉で、
英語版の perldoc などには存在しない。
よって正確な定義もたぶん存在しない。

たぶんCの構造体(struct)との類推で作られた言葉だとは思う。
struct の定義ならCの入門書でも読めばわかるが、
「なぜこんなものが必要なのか、実際何の役に立つのか」ということは
実際にCのプログラムを作ってみないとわからんだろうな。
0606nobodyさん04/05/08 14:38ID:???
つか、Perlは普通に構造体使えるようになってるしな
$hoge
@hoge
%hoge
0607nobodyさん04/05/08 14:45ID:???
>>606
それは構造体の話とは関係ない
060859504/05/08 15:22ID:???
>>605う〜ん難しいですね。簡単な例え話とかあったらいいんですがね。

>>604どうやらhex関数の引数として「0x」をつかうとちょっと違うことになるみたいですね。
通常は「0x」が前につけば単に16進数という宣言みたいですが、どうしてhex関数の引数
で使うとおかしな事になるんでしょう。

そういえば、バイナリ値以外にもchar値とかその他にもいっぱい「〜値」というものが
あるんですね。どっかにいろんな「〜値」について詳しく解説してるサイト知りませんか?

0609nobodyさん04/05/08 15:59ID:???
>>608
何もおかしくないのに>>604を見てわからないならかなりニブいな。

packで指定する型のcharやintや浮動小数点だのをひっくるめてバイナリ値を呼ぶ。
どんな型があるかはpack関数を調べればいい。

いいかげんスレ違いになってきたからここらでやめれ。
0610nobodyさん04/05/08 16:11ID:???
>>607
釣れますか?
061158404/05/08 16:58ID:???
2重ですいません。
>>584 の質問誰かお願いします。。。
調べたところ、すべてEUCにはされていました。

if ($aiu ne 'all') {
if ($aiu =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$array[0]/i ||
$aiu =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$array[1]/i) { ; }
else { last; }
}

だと、理想的な結果が出るんですが、2枚目のページにいくと、
結果がクリアされるようなんです・・・。
0612nobodyさん04/05/08 17:09ID:???
「2枚目のページ」ねぇ。
誰か2枚目のページってどんなのか知ってる?
知ってる人が教えてあげて。
0613nobodyさん04/05/08 17:13ID:???
(゚�听)シラネ
061459504/05/08 18:04ID:???
>>609
???
print a; #aが出力
print 0xa; #10が出力
print hex a; #10が出力
print hex 0xa; #16が出力
???

本当にわかりません・・・教えてください。

ところでこの話はスレ違いなんですか?ここは変換処理にかかわる事ならOKっていうわけでは
ないんですか^^;
0615nobodyさん04/05/08 18:14ID:t33qT0Ph
文章から一定の単語を抜きだすコードを書いてるんですけど
 if( 文章 =~ 適当な単語) ){
  処理
 }
という方法では
(´・ω・`) のようなものに引っ掛からないみたいで、、、
こう言う場合はどのようにマッチさせれば良いのでしょう?
0616nobodyさん04/05/08 18:17ID:???
マルチバイトを標準で使いたいのならphpにしろ
perlはjcodeがいるだろ
061759504/05/08 18:24ID:???
あ〜〜〜〜〜〜〜!!!!!!!!

0xってhexと同じような働きがあるから
print hex 0xa;
っていうのは
print hex (hex a);
と同じことで、流れ的には「a」を10に変換してさらにそれを16進数として評価してしまう!!!

ってことですね^^やっとhex問題が片付いた。バイナリ値問題はまだまだですが++;

ほんと日本語が世界語だったらプログラム用語もPC関連用語ももっと簡単だったろうになあ

0618nobodyさん04/05/08 18:24ID:???
>>611
Perlメモみれ
0619nobodyさん04/05/08 18:27ID:???
>>615
指定の単語を抜き出すよりもマッチするかどうかじゃ?
マッチすれば指定単語を含むわけだし・・・

index関数使え
0620nobodyさん04/05/08 18:28ID:???
>595
まぁ、釣りではないとして回答しておこう。

>理解できない言葉があると勉強の効率が悪いので私にとっては
>言葉の意味は重要なんですよ。
細かいことにこだわりすぎだと思うがね。
プログラミング用語自体、文脈で結構柔軟な解釈がされることもある。
所詮、用語自体が「表記法」に過ぎないと思う。

>614
hex が文字列を引数としてとること、Perl が型変換を自動で行うこと、
0xa は数値であること、キーワード以外の単語は文字列として扱われること、
以上を元に少し考えてみれば?

>ところでこの話はスレ違いなんですか?
>ここは変換処理にかかわる事ならOKっていうわけではないんですか^^;
スレタイ嫁、変換処理ってなんだよ?
# あと末尾のは顔文字のつもりかしらんが、個人的に妙にいらつくぞ。
>どっかにいろんな「〜値」について詳しく解説してるサイト知りませんか?
総じて Perl コーディング以前の問題のような気がするんだよ。
062161504/05/08 18:44ID:t33qT0Ph
>>619
説明文が激しく半端でした。
HTMLから必要な単語を抜き出して、それがそのHTML内に何回出現しているか
確認するプログラムを書いています。
例えば
<FONT COLOR="#ffff00">そいつぁショボンヌ(´・ω・`)</FONT>
という行からindex関数で前のタグと後ろのタグを見つけて
「そいつぁショボンヌ(´・ω・`)」を単語として抜き出しています。
この単語を文章とマッチさせているのですが、どうも顔文字が上手くマッチしてくれないのです。
他の単語は普通にマッチするようなので、顔文字の文字がまずいのかなと思ったのですが、、、、、
0622nobodyさん04/05/08 19:02ID:???
index関数の言い分:
        おれはどんなやつよりも素早く目的のフレーズを探し出して
        みせるぜ!
062359504/05/08 19:07ID:???
>>620

コーディング 【coding】

(1)
⇒符号化(ふごうか)
(2)コンピューターなどで,一定のプログラム言語を用いて,プログラムを作成すること。


ふごうか 【符号化】

(1)
〔encoding〕
情報がある一定の規則に基づいて符号に変換されること。記憶における記銘や,非言語コミュニケーションにおける表情の表出などもこの例として捉(とら)えられる。
→解読
(2)
〔数〕
〔coding〕
一連の情報を適切な符号系を定めて符号に変換すること。

とありましたので変換処理とも言えるのかなっと・・・
顔文字の件申し訳ないです。

>総じて Perl コーディング以前の問題のような気がするんだよ。
かもしれませんね。

私的には記述方法とかってあまり問題じゃなくて、関数やコーディングの機能・処理内容自体を日本語のみで全くの素人にでも
教える事ができるようになる事が大切かなって思ってます。なので、細かいとこにこだわって他人より要領が
すこぶる悪い・・・自分でも自覚してます。

とりあずこのスレで、私のように基本的な部分を質問するのは迷惑になってしまうようですね。ごめんなさい。
0624nobodyさん04/05/08 19:09ID:???
>>621
quotemetaか\Q...\E使を適切に使ってないに一票。

062559504/05/08 19:23ID:???
>プログラミングで構造体と言うと既にある型を使って新しい型を作ることを指す。
>Perlは基本的にデータを文字列で記憶するからそれをバイナリ値にしたものが
>バイナリ構造体。

バイナリ→テキスト形式(文字データ)以外のデータ形式全般。

値がテキスト形式以外のデータ形式であれば全てバイナリ値。

char値→バイナリ値の分類の中の・・・・

とりあえずここで学んだことをまとめておきました。それでは失礼します。
0626名無しさん04/05/08 19:29ID:cBod9el7
>>595氏
バイナリ構造体なんてどっから拾ってきた言葉だかしらんが、言葉は
何かを説明するためにあるのであって、造語を前提なしに持ち出して
どういう意味なんだと考える自体が無意味。初心的どうこうではない。
プログラムはアルゴリズム実現の表記手段であって哲学的誤謬に陥るのは愚。

>>624 同じく一票
顔文字って()を使うからねぇ。。。Perlのメタ文字が入る場合は注意だし。
062759504/05/08 19:31ID:???
キャラクタ→キーボードから入力可能な文字や記号。

pack("C*",0x41); #A
第2引数以降のリストで指定したデータを、キーボードから入力可能な文字や記号に
一定の規則をもって変換する。(char値に変換する)
0628nobodyさん04/05/08 19:34ID:???
>>621
indexで書いてみるテスト。
my $cnt = 0;
my $pos = 0;
$cnt++ while(($pos = index($data, $match_str, $pos)+1) > 0);

>>595
Perlより先にアセンブラやってみるというのはどう?
# これ以上はスレ違いなので、後は本でも読んでみては。
062959504/05/08 20:31ID:???
アセンブラ→アセンブリ言語で書かれたプログラムを機械語に翻訳するのがアセンブラ。

>>628
アドバイスありがとうございます。とりあえず、ゆっくり地道にやっていこうと思います。
バイナリ構造体についての質問は完全にスレ違いでしたね。

ところでこうゆう質問もスレ違いでしょうか?↓

相変わらず基礎的な部分で、コーディング(符号化)の流れについてなんですが、
例えばUNIX系のサーバにあるwebページに対して、「あいうえお」と送ったとします。

そのときの内部で起こっている事は、
1、送られてきた文字データをEUCでコーディング(エンコード)
2、それをさらにASC�Uコードでエンコード

文字列データとして表示させるには
1、まずはASC�Uコード化されたデータを受け取りASC�U方式でデコード
2、それをさらにEUCでデコード

で、合っていますか?なんか違う気もするんですが・・・
一番初めに文字列データをどの形式でコーディングするかの決定権をもっているのは
クライアント側のユーザですよね?受け取り側で自動でされる処理はASC�Uでエンコードするのみですか?
でもそれだと、何故UNIX系でEUCを指定されているのか?ですし・・

・・もしかしてこれもスレ違いな内容でしたら、一言「スレ違い」とお返事ください。


0630nobodyさん04/05/08 20:33ID:???
sub auto_link {
$_[0] =~ s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;
}
この場合
URLがある文字数を超えたときにそれ以降を省略するようにするにはどうしたらいいのでしょうか
substrとか使えばいいんだと思うんですけどよく解りません。

0631nobodyさん04/05/08 21:15ID:???
>>629
スレ違い
0632nobodyさん04/05/08 21:52ID:???
>>630
my $limit = 16;
s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/
"$1<a href=\"$2\" target=\"_blank\">".substr($2, 0, $limit).
(length($2) > $limit && '..')."<\/a>"/egx;

こんなとか。
0633nobodyさん04/05/08 22:28ID:???
>>632
ありがとうございます!すごいや!エロい人
0634nobodyさん04/05/08 22:37ID:???
と思ったらURLがうまくリンクにならないです...orz
063563004/05/08 23:06ID:???
"$_[0] =~ "抜けてたからですね...申し訳ないです。ちゃんと動きました。
0636nobodyさん04/05/09 06:07ID:6P0icBMn
流れからするとレベルの低い質問です。

ファイルオープン後、
@temp = <FH>;
とすると行ごとに配列へ格納されますが、
\nも含めてひとつのスカラ変数に格納したいのです。

普通はjoin関数であとから結合するのでしょうか?
どうも冗長な気がし質問しました。
0637nobodyさん04/05/09 07:13ID:???
>>636
undef $/;
$temp=<FH>;
063863604/05/09 11:39ID:6P0icBMn
>>637
ありがとうございます!

$1〜、$_以外の特殊変数はまだまだ理解出来ないと思ってたら、こうやって使うんですね。
0639nobodyさん04/05/09 12:54ID:LzQ8Bs2h
ソートについての質問です。

@list = (0,1,2,3,4,5,6,7,8,9,10,11);
sub number {
  if ($a < $b) {
    return -1;
  } elsif ($a == $b) {
    return 0;
  } elsif ($a > $b) {
    return 1;
  }
}
@result = sort number @list;

@resultが何故0,1,2,3,4,5,6,7,8,9,10,11になるのか理解できません。
漏れの考えですが、$aに0、$bに1が代入される。比較され-1が返る。@resultの第一要素は「-1」になる。
以降繰り返しで@resultは-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1となるのでは?と考えました。
@resultが何故0,1,2,3,4,5,6,7,8,9,10,11になるのか教えてください。
0640nobodyさん04/05/09 13:44ID:???
$a < $b なら ($a, $b)
$a == $b なら ($a, $b) のまま
$a > $b なら ($b, $a)
の配列要素の順番入れ替えをおこなうのが sort 関数

数値の昇順や降順にソートすることは簡単にできる。
@result= sort {$a <=> $b} @list;
@result= sort {$b <=> $a} @list;
064163904/05/09 15:23ID:???
なるのほどsort関数が順番の入れ替えを行っていたのか
>>640ありがとう
0642nobodyさん04/05/09 15:48ID:???
このスレの住人のギャグセンスはなんだな。オサーンばっか
0643nobodyさん04/05/09 16:26ID:Si4CJEJN
cgiの実行結果を読み込ませたいのですが
open(IN,"/なんとか/test.cgi|");
@file = <IN>;
close(IN);
print @file;
だと出来るのに

open(IN,"/なんとか/test.cgi?hoge|");
@file = <IN>;
close(IN);
print @file;
だと「sh: /なんとか/test.cgi?hoge: No such file or directory」と表示され開けません。
どなたかご教授ください。
0644nobodyさん04/05/09 16:39ID:???
コマンドラインからの引数の渡し方を勉強しなさい。
0645nobodyさん04/05/09 16:44ID:???
このすれ用の、質問->解答の流れを登録できるサイトを作ろうと思うんですが、どうでしょ?
0646nobodyさん04/05/09 16:48ID:???
意味わかんね。
0647nobodyさん04/05/09 16:51ID:???
>>645
失敗する、間違いない。

2ちゃんの掲示板だからこそ、人が集まりこういう流れが成立してる。
他スレでもそういう案は見かけるが、大抵が誘導に失敗し元に戻る。
Q&Aのデータベースなら活用されるとは思うが。
0648nobodyさん04/05/09 16:53ID:???
>>647
なるほど。 まぁ、暇つぶしにシステム考えてみます。
0649nobodyさん04/05/09 16:57ID:???
FAQ集なら歓迎。
0650nobodyさん04/05/09 17:49ID:???
>>648
ム板のPerlスレにもそんなことをやろうとしたヤシがいたが、結局公開に至らず。
日本人って熱は冷めやすいから、飽きたんだろうね。
そういうことなので、>>648にはごく基本的なシステムでとりあえず公開することをきぼん。
その上で突込みが入れば修正すればいいんだし、自分で修正できなかったらここで質問すればいいんだし…
0651nobodyさん04/05/09 17:52ID:???
>>648
Wikiなら暇な人が触ってくれると思われ
0652nobodyさん04/05/09 18:06ID:???
ここでは失敗する気がする。
ちょっとしたシステムの不満でもみんな吐きまくるぞ。
そして最後には自分で作った方が早いとなっていく。
他人のシステムで満足できるような人間はこのスレにあまり来ないだろうし。

やるんだったらいっそ逆にPerl使わないほうが安全かも。
もしくはこのスレ住人の力を結集して作っていくか。
0653名無しさん04/05/09 18:14ID:???
>>645
俺はめんどくさいしやる気も無いのだが、まずは
過去ログを全検索して一覧表示できるようにっつうのは?
あとは>>をみてリンクツリー構成表示するとかね。
手動なんて絶対力つきるしPerlスレなんだからPerlつこて自動化すれ。
0654nobodyさん04/05/09 18:17ID:???
パンチ5分の2に荒らされるのでは?
065564304/05/09 18:19ID:???
>>644
盛り上がっているところすいません
open(IN,"/なんとか/test.cgi hoge|");
として受け取るtest.cgiに@ARGVを使うということでしょうか?
test.cgiに手を加えないで出来る方法があったらその方がよいのですが無理ですか?
0656nobodyさん04/05/10 00:13ID:???
open(IN, "env QUERY_STRING=hoge /path/to/test.cgi |");
0657nobodyさん04/05/10 12:53ID:???
掲示板作ってるんだけどさ…
AUだけ

掲示板に書き込んだ→書き込み完了画面表示→戻るリンク(その掲示板のトップへ行く)

この最後の戻るリンクをクリックすると、また書き込みしちゃうんだけど、どうすれば対処できるんでしょうか?
imode、vodafoneはちゃんと掲示板のトップに戻ってくれるんですが orz
0658nobodyさん04/05/10 13:05ID:???
>>657
>>1
http://www.au.kddi.com/ezfactory/
0659nobodyさん04/05/10 13:12ID:???
>>658
だめなんです、解決方法が載ってないんです orz
0660nobodyさん04/05/10 14:41ID:???
SMART! ウェブ講座の中の人たちはいつまで江ノ島旅行に行ってるのですか?
0661nobodyさん04/05/10 14:48ID:9bXUHl3j
ソケットを使ってどこかのHTMLを取得し、それを加工して表示する
というプログラムを書いています。
少々疑問に思ったのですが、ソケットでHTMLを獲得するのと
ウェブブラウザでHTMLを獲得するのとでは何が違うのでしょう?
処理するのがユーザ側かサーバ側か、の違いと見て良いんでしょうか。
0662nobodyさん04/05/10 15:08ID:???
>>661
ブラウザも同じソケット通信してるから、同じこと。
そのようにサーバ側でソケット使おうとユーザ側で使おうと
どちらもHTTPクライアントリクエストをwwwサーバに対しておこなっている
0663nobodyさん04/05/10 15:17ID:???
変数の名前を変数にしたい場合はどのようにすればよろしいでしょうか。
PHPなら$foo = "val";のとき$$fooで$valにアクセス出来ますが,Perlはちょっと違いますか?

$val = "hoge";
$prm = "val";
print $$prm; #「print $val;」と同じ結果

$val = "hoge";
$HASH{'prm'} = "val";
print $$HASH{'prm'}; #ダメ
0664nobodyさん04/05/10 15:25ID:???
ブレースでくくれば同様にできるよ。でも必要性を感じない。
0665nobodyさん04/05/10 15:28ID:???
訂正します。use strict;だとCan't use string ("val") as a SCALAR ref while "strict refs" in use at...などと怒られます。

use strict;
my $val = "hogehoge";
my $prm = "val";
print $$prm; #だめ
print ${$prm}; #これもだめ
0666nobodyさん04/05/10 15:34ID:???
絶対にシンボリックリファレンスでないとダメなん?
他のアプローチを考えたほうが早いと思うが…
0667nobodyさん04/05/10 15:36ID:???
他にはどういうやり方があるのでしょうか?
0668nobodyさん04/05/10 15:41ID:???
use strict;
my $prm= 'val';
my $$prm= 'hoge';
print $$prm;

or

#use strict;
0669nobodyさん04/05/10 15:50ID:???
no strict 'refs';
0670nobodyさん04/05/10 15:56ID:???
>>669
それでもダメでした。あきらめます。
0671nobodyさん04/05/10 16:04ID:???
myで宣言するローカル変数はシンボリックリファレンスの対象にならないから

my $$prm= 'hoge';

なんてのは無理ってもんだろう。
0672nobodyさん04/05/10 16:18ID:???
2次元配列を関数内で作成しその戻り値を受け取りたいのですがうまくいきません。
どうすればいいのでしょうか。
以下のようでは空っぽのままです。

--

$test = &hairetu;
print $test[0][0];
print $test[1][1];


sub hairetu {
$box[0][0] = 0;
$box[0][1] = 0;
$box[1][0] = 0;
$box[0][2] = 0;
return $box;
}



0673nobodyさん04/05/10 16:19ID:???
訂正
×$box[0][2] = 0;
○$box[1][1] = 0;
0674nobodyさん04/05/10 16:40ID:???
$test = &hairetu;
print $$test[0][0];
print $$test[1][1];


sub hairetu {
$box[0][0] = 0;
$box[0][1] = 0;
$box[1][0] = 0;
$box[1][1] = 0;
return \@box;
}
0675nobodyさん04/05/10 16:46ID:???
>>672
$test = &hairetu;
print $test->[0][0];
print $test->[1][1];


sub hairetu {
$box->[0][0] = 0;
$box->[0][1] = 0;
$box->[1][0] = 0;
$box->[0][2] = 0;
return $box;
}
067667204/05/10 16:51ID:???
>>675
ありがとうございました。
無事思うような動作が出来ました。
■ このスレッドは過去ログ倉庫に格納されています