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

【Perl】初心者コーナー Part18

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/11/20 22:04ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0369nobodyさん02/12/11 20:59ID:???
>>367
じゃぁいちいち、perlのスクリプトがある場所までcdしてからやらないといけないのですか?
毎回cdするのは結構面倒だと思うんですけどどうなんでしょうか。
0370nobodyさん02/12/11 21:03ID:3ApX3k5Y
面倒だと思うなら、useしませう。
0371nobodyさん02/12/11 21:08ID:???
デスクトップでスクリプトはしらすのは・・ワラタ
0372nobodyさん02/12/11 21:32ID:IDueDvlE
>>368
そうなんです。Perl5.6用は見つかるんですが5.8用に全く行き当たらなくって。
グーグルしか使ってませんが。w
暇を見てぼちぼち探してみます。
>>365
いっぺんお使いのPerlにJcodeをインスコしてみてはどうでしょ。
コマンドプロムプトで

perl -MCPAN -e shell

してから、プロムプトがcpanに変化しますんで

>cpan install Jcode

でいけるかと。
0373nobodyさん02/12/11 21:57ID:???
>>371
え?デスクトップではしらすのはトーシローですか?
0374nobodyさん02/12/11 22:10ID:a27i1ZyR
半角スペースで区切られたファイルを split を使って並び替えたい&いらないものを破棄したいんですが
上手くいきません。Perl5を使っています。

#!/usr/bin/perl

$file = 'split.txt';

open(IN,$file);
@data = <IN>;
close(IN);
foreach(@data){
($1,$2,$3,$4) = split(/ /,$_);
$newdata = "$4,$3,$2";
open(OUT, ">$file");
print OUT "$newdata\n":
close(OUT);
}
exit;

これを走らせると
Modification of a read-only value attempted at split.cgi line 9.
と split の部分にエラーが出てしまいます。
どうしたらいいんでしょうか?
0375nobodyさん02/12/11 22:15ID:qA0+bOBO
>>374
$1とか$2というのはマッチの特殊変数。
任意の値を代入することは出来ない。
変数名を別なのに変えるべし。
0376nobodyさん02/12/11 22:22ID:???
>>373
もしくはヘビーユーザー( ´∀`)

>>374
同じファイル2回もopenするのは無駄っぽいから、
>>331(の下のやつ)みたいに1回にまとめた方がいいかもね。
0377nobodyさん02/12/11 22:26ID:???
っていうかforeachの中でopenしてんのかぁ・・(´Д`;)
037837402/12/11 22:34ID:???
やっぱり OPEN させすぎですかね?(;´Д`)
とりあえず、出来ました。ありがとうです。
chomp(だっけ?) だかなんだかを使ってやるやり方があったような…
0379nobodyさん02/12/11 22:47ID:???
>374
つーか、chomp使ってないから、できたファイルは意図したようにはなってないはずだが?
0380ありゃ02/12/11 23:15ID:pgarahTm
すみません、ハッシュの全データの全角スペースを
削除したいのですが、
foreach (values %array){
s/ //g;
print "$_\n";
}
とした場合と、
foreach (values %array){s/ //g;}
foreach (values %array){print "$_\n";}
とした場合、私のローカル環境(パールのバージョン:5.6.0 built for i386-linux)
では、同じ結果が出るのですが、ほとんどのレンタルサーバ上で
実行すると、違った結果が出力されてしまいます。
なぜでしょう?
}

038135302/12/12 00:03ID:???
>>354
レス、サンクスです。

>モードは"+>"だよね。そのコードからすると。
"+>"と"+<"は意味は同じですよね?ちなみに僕は"+<"です。

open(FILE,"xxxx");
@file = ();
push @file, scalar <FILE> for 0..8;
seek(FILE,0,0);
print FILE "zzzz";
print = @file;
close(FILE);

こんな感じでいいんですよね?
いまいち”scalar <FILE> for 0..8”この辺の書き方が曖昧にしか理解できていないど、
本でも読んで理解したいと思います。

0382nobodyさん02/12/12 00:04ID:???
そんなバナナ
0383nobodyさん02/12/12 00:53ID:???
まさか、スクリプトとテスト用データの文字コードが違ってるとかの
話じゃないよね? っていうか「違った結果」の
希望とする値
実際の結果
の両方が見たいんですけど。
0384nobodyさん02/12/12 01:25ID:ZGG2sBOp
>>381
違うよ。
"+>"は内容を消す。
"+<"は内容がそのまま残ってしまう。
素直に一旦読んだ後書き込みで開き直した方がいい。
0385ありゃ02/12/12 01:56ID:DcSt6eP2
>>383
すみません、
%array = ('one' => '0 1','two' => '0 2','three' =>
'0 3');
とした場合、希望する結果は01と02と03が表示されることで、
私のローカル環境(パールのバージョン:5.6.0)
では、上下どちらの書き方でも同じ結果が出ますが、
実験した複数のサーバでは、
上の場合では0 1と0 2と0 3が表示され、
下の場合では01と02と03が表示されてしまいます。
実験したサーバのひとつは、パールのバージョンが5.0
だったので、単にバージョンの違いでしょうか・・・。
0386Q102/12/12 03:43ID:???
質問です。
ランダムリンクを作成して、
処理で
print "Location: http://xxxx.xx.xx/\n\n";
として飛ばしているのですが、
サンプルで自分のホームページを登録したのですが、
試して見ると、 302 FOUNDと表示されます。
この処理はアンカータグを使い、getの処理で呼び出しているのですが、
呼び出すページと飛ぶページが同じだと、302が表示される様なのですが、
これを回避する方法はないでしょうか。
「302を表示させずに、そのページへ飛ぶ。」というのは可能でしょうか。
0387マリモーマ02/12/12 05:04ID:ItnO3SiH
メタタグで 飛ばしてみたら?
&header;
print "<meta http-equiv=refresh content=0;url=http://$url>;";
exit;
0388Q102/12/12 05:39ID:???
ありがとうございます。やはり、それしかないですかね。
検討してみます。
ありがとうございました。
0389nobodyさん02/12/12 09:19ID:???
質問です。いまフリーのスクリプトを見て勉強中なのですが

> if ($mode %2 != 1) {

っていうのがあるんですけど、これの %2 って何ですか?
0390nobodyさん02/12/12 09:23ID:???
>>389
2で割った余り。
$modeを2で割って余りが1じゃなかったら
= $modeが偶数なら の意味だね。
0391nobodyさん02/12/12 09:30ID:???
>>386
ステータスヘッダ送ればいいじゃん。

print "Status: 200 OK\n";
039239102/12/12 09:33ID:???
あっダメだわ・・さ
039338902/12/12 11:25ID:???
>>390
>2で割った余り。
あっそうか。% と 2 がくっついてるので
「またPerlの記号的な記法か」と思ってしまいました。
ありがとうございます。
0394nobodyさん02/12/12 11:55ID:???
sendmailでReturn-Pathがうまく入らないんですけどなぜですか。
0395nobodyさん02/12/12 12:09ID:???
>>394
勝手に変えられないように設定してあるから。
039635302/12/12 15:33ID:???
>>381
と言うことは

open(IN,"<xxxxx");
flock(IN,2);
@file = ();
push @file, scalar <IN> for 0..8;
close(IN);
open(OUT, "+>xxxxx");
flock(OUT,2);
seek(OUT,0,0);
print OUT "zzzzz\n";
print OUT @file ;
close(OUT);

とした方が良いみたいですね。
なんとなくopenを2回するのは、あんまりいいことではないと思っていました。
"+<"と"+>"の違いも教えてもらって、感謝します。
039735302/12/12 15:34ID:???
>>384でした・・・
自分にレスした・・・
0398nobodyさん02/12/12 18:05ID:???
>>395
誰が設定してるんですか?
0399nobodyさん02/12/12 18:32ID:???
>>398
俺
040033602/12/12 19:14ID:BLMNLzB2
エラーつぶせました!!<<レス下さった方ありがとう。
ここ間違ってました。
sub decode {
if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("長すぎます"); }
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

# S-JISコード変換
&jcode'convert(*value,'sjis');
}
}←このカッコを忘れていた。

エラーメッセージよりだいぶ上(^^;

・・・でも動かない。なんでだろう。
ファイルへの書き込みが出来ていないみたいなんですが。。。

>>344
それはここに書き込む時に付け加えたので問題ないです(^-^;
040133602/12/12 19:18ID:BLMNLzB2
この部分なんですが、
#入力された内容をファイルを作って保存する。
sub words {
$file = "./pass.txt";
if($in{'pass'} eq ""){ &error("設定できませんでした"); }
open PD, ">$file" or &error("システムエラー発生");
@pwd = ('a'..'z','A'..'Z','0'..'9','.','/','%');
srand;
$kw = $MIX[int(rand(@pwd))] . $MIX[int(rand(@pwd))];
$words = crypt("$in{'word'}", $kw);
print PD "$words";
close PD;
}
@pwdの変数をちょっと変えているんですが、これは使っては駄目ですか?
(%とか/とか。)
#参考にした掲示板スクリプトでは中身が9までしかないです。
#それ以降は私の付け加え。
040233602/12/12 19:19ID:BLMNLzB2
↑ファイルへの書き込み、を行うサブルーチンです。
0403nobodyさん02/12/12 19:51ID:???
>>401
@MIXって @pwd じゃない?(別に@MIXがあるのかな)
あと、cryptの salt($kw) は '%' は使えません。
それ以外の64文字は使えるので、 int(rand(@pwd)) は int rand 64 でもOK。
0404nobodyさん02/12/12 20:01ID:???
すみません。頭悪いのでアルゴリズムが浮かびません。

以下のようなsort したデータがあります。

名前,点数というデータの形(配列)です。

山田,28
山田,39
佐藤,94
加藤,83
加藤,28
加藤,28
木下,23
木下,33

ここから、各人の合計点を出したいのですが、どうするのが良いでしょうか?
名前でuniqする方法は分かるのですが、点数を足していく方法がわかりません。
ヒントだけでよいので、お願いします。
0405nobodyさん02/12/12 20:07ID:ZGG2sBOp
>>404
@dataに入ってるとして、
%hash=();
for (@data) { my @array = split/,/; $hash{$array[0]} += $array[1]}
で%hashに入る。
0406nobodyさん02/12/12 21:01ID:???
>>404
すげーー!目からウロコ。thanx

12行位かかって書いてたのに、一行って!(for は foreachでなくてもOK?)
平均点(合計点 / 名前の出現回数)を出すには、

%hash=();
$no =1;
for (@data) {
my @array = split/,/;
$hash{$array[0]} += $array[1];

if ( $prev_name eq $array[0]){ $no ++; }else{ $no = 1; }
$avg = $hash{$array[0]} / $no;
$prev_name = $array[0];

}

??? とか? やっぱ頭悪い。
0407nobodyさん02/12/12 21:16ID:???

割り算の後に小数点を下2桁まで表示したいのですが、

sprintf("%4.2f",$a) すると割り切れる時でも小数点以下に 3456.00
と出てしまいます。

割り切れない場合、 1234.56
割り切れる場合 1000

と表示するにはどうしたらよいのでしょうか?
0408nobodyさん02/12/12 21:20ID:H3YHNRGs
最近、始めてPerlを使い出したんだけど
use strictってなんでみんな使わないの?
0409nobodyさん02/12/12 21:23ID:???
>>407
普通に条件分岐するのはダメ?

>>408
みんな使ってると思うよ。
0410nobodyさん02/12/12 21:26ID:???
>>409
そうかなあ。ちゃんとしたPerl使いならもちろん
使っているだろうけど、CGIだけのためにPerlやってる
人ってなんかそういうのあんまり意識してないような。。。
0411nobodyさん02/12/12 21:33ID:???
>>407
$a =~ s/\.00$//;

>>410
巷で配布してるCGIはピンからキリまであるからなあ。
あと配布用にPerl4でも動くようにしてるところもあるでしょうし。
0412nobodyさん02/12/12 21:35ID:???
>>411
>配布用にPerl4でも動くようにしてるところもあるでしょうし
なるほど。それもあるかもしれませんね。
0413ななし02/12/12 22:17ID:???
隠しページがありそうなとこのソースみたら文字化けしていました。
なんとか方法は分かったんですが、ブラウザにドラッグするののやり方が
わかりません。おしえてください。おねがいします。
0414nobodyさん02/12/12 22:20ID:???
・・・
0415nobodyさん02/12/12 22:21ID:LUwqAPKo
>>407
ありがとうございます。
そういう方法しかないんですかね。結局。

あるサイトに

$a = int($a * 100)/100;

ってあったんですけど、これだと無駄が多そうですよね。

$a =~ s/\.00$//;
$a =~ s/\.0$//;

の方が早そうですね。
0416nobodyさん02/12/12 22:39ID:???
>>413
日本語を勉強してください
大体の意図を頑張って汲み取ると、EUCとかの文字コードに対応してるエディタを使え、と
0417nobodyさん02/12/12 22:50ID:rgoFlUwc
★最新情報★
★http://yahooo.s2.x-beat.com/linkvp/linkvp.html★
0418n02/12/12 22:51ID:rgoFlUwc
★最新情報★
★http://yahooo.s2.x-beat.com/linkvp/linkvp.html★
0419nobodyさん02/12/12 23:05ID:???
>>415
int $a でも逝けるっぽい
0420nobodyさん02/12/12 23:16ID:???
>419
>407を読み直した方がいいかも。
0421nobodyさん02/12/12 23:19ID:i62/L17Z
sprintf($a=~s/\.0+//?"%4f":"%4.2f",$a)
0422nobodyさん02/12/13 00:03ID:???
>>407
$b=sprintf('%4.2f', $a); a+=0;
042342202/12/13 00:04ID:???
あ
$b+=0;
の間違い。
0424nobodyさん02/12/13 00:12ID:???
>>406
ベタだけど、

%hash1=%hash2=();
for (@data) {
my @array = split/,/;
$hash1{$array[0]} += $array[1];
$hash2{$array[0]}++;
}
$hash1{$_} /= $hash2{$_} for keys %hash1;

でどうかな。(結果は%hash2)
042539802/12/13 00:53ID:???
誰か本当のことをおしえてください。
0426nobodyさん02/12/13 07:15ID:???
>>425
偉い人 夜勤くらい
042742402/12/13 08:15ID:???
結果は%hash1でした。
0428nobodyさん02/12/13 11:37ID:???
>>425
検索すれば理由は簡単に判りそうな気がするけど・・・

ttp://www.ryu.dyn.to/cgi-bin/tree.cgi?action=clip&no=771
※※※これは「Return-Path」のみの検索キーで見付けた※※※

注)自力で調べる努力を怠ってる人はまともに相手をして貰えません
042942502/12/13 14:46ID:???
>>428
あなたみたいな人が居るので甘えちゃうんです。ごめんなさい。
0430nobodyさん02/12/13 15:58ID:???
>>407
の者ですが。色んな方法がありますね。

sprintf($a=~s/\.0+//?"%4f":"%4.2f",$a)

と

$b=sprintf('%4.2f', $a); $b+=0;

が一番シンプルそうです。

>>419
int $a ではいけないですよね?
0431nobodyさん02/12/13 17:39ID:iG+3sspL
誕生日と名前フォームデータ($yyyy,$mm,$dd,$name)を
CSVで貯めるのですが、その際、CSVデータが誕生日$yyyy,$mm,$ddで
ソートしたいのですがいつソートするんでしょう?

1回そのまま書き込んで、もう一回呼んで、ソートしかないですか?
書き込む前にソートできますか?
0432nobodyさん02/12/13 18:07ID:???
>>431
マルチ
0433nobodyさん02/12/13 18:16ID:???
>>431
好きなように決めてくれ。
書き込みが追加書き込みなら、読んでからソートのほうが改造が楽。
基本的には頻度が少ないほうでソートするべきだろう。
0434nobodyさん02/12/13 19:29ID:4EJmzvt/
>>403
@MIX??・・・は、ないです。
$MIXではなく@MIXにしないといけないのでしょうか。
あ、あと%の件ありがとうございました(^^;

で、書き直しましたが、これでもできてないです。
文法エラーとかInternalエラーとかは一切出ず、フォームに
言葉を入れてボタンを押すとリロードされます(これはちゃんとした処理)
動いているように見えるんですけど、PDへの書き込みが出来てません。
どこで引っかかっているのかな・・・。
cryptが動いていないのか、ファイル書き込みが動いていないのか。。。
0435nobodyさん02/12/13 19:54ID:???
>>434
$MIX を $pwd でどう?
それ以外は問題なさそうだけど。
0436nobodyさん02/12/13 20:12ID:???
>>434
そもそも、
$kw = $MIX[int(rand(@pwd))] . $MIX[int(rand(@pwd))];
は、
$kw = $pwd[int(rand(64))] . $pwd[int(rand(64))];
であるべきでは?
あと、
print PD "$words";
は、何かセパレータを入れておくべきかも?
例:
print PD "$words\n";
13文字ずつで切り出せばよいけれども。
0437nobodyさん02/12/13 20:13ID:???
今掲示板を作成中で、よくある「次の何件」と言うやつを付けようと思って試行錯誤しているところなんですが、僕の今のスキルでは以下の物を書くのがやっとでした。
これはちょうど表示部分のところです。

#このスクリプトの名前,"bbs.cgi"
$pagemax = "1ページの表示数";
$file = "データファイル";

open(OUT, "<$file");
flock(OUT,2);
@view = <OUT>;
$log = @view;
if($ARGV[0] =~ /\d{1,3}/){
print @view[$ARGV[0]..$ARGV[0]+$pagemax];
$ARGV[0] += ++$pagemax;
if($ARGV[0] < $log){
print "<a href=\"bbs.cgi?$ARGV[0]\">NEXT</a>";
}
}else{
print @view[0..$pagemax];
if($log > $pagemax+1){
$pagemax++;
print "<a href=\"file.cgi?$pagemax\">NEXT</a>";
}
}
close(OUT);

とりあえずこれで動作はしたんですが、もっとスマートな方法はないですかね?何かすごく効率が悪そうなんで。
0438nobodyさん02/12/14 01:20ID:???
25歳。
去年まで金無し君だったけど、オンラインカジノとパチンコで
二年で350万貯めた。一度やってみなよ。
初回のみだけど、1ドル以上のチップを買えば30ドル(4000円くらい)貰える。
もらうだけもらってプレイせずに換金することもできるし、ルーレットで赤か黒に
思い切って賭けてしまえば50パーセントで二倍になる。
金なきゃオフラインでゲームすればいいだけ。暇つぶしになる。
ビデオポーカーとかスロとか色々あるのでマジでお勧め。
http://www.imperialcasino.com/~1kl5/japanese/
0439nobodyさん02/12/14 11:40ID:???
perl で \nで区切られたログファイルを読み込みたいんですが
無駄なところは読み込みたくないので
何行目〜何行目 を ハンドルに放り込む方法はないのでしょうか?
044043902/12/14 11:57ID:???
配列使わないでやるのは無理なのかな?
ちょっとログがMB級あるんで
必要なところだけ読み込めたら楽なんだけど
0441nobodyさん02/12/14 12:20ID:???
>440
原始的な方法でいいなら、100〜200行の場合。

$from = 100;
$to = 200;
open(IN,$file);
foreach $l(1 .. $from-1){<IN>;}
foreach $l($from .. $to){push(@data,<IN>);}
close(IN);

とか。

過去スレで出た方法だと、行の始まりのインデックスを別ファイルに保存して
readで呼び出すとかあったかな?
0442nobodyさん02/12/14 12:59ID:???
行の頭から数B読み込む程度の方法しかないんじゃないかな。
データを展開しないで指定行に飛ぶのは無理っぽい。
044343902/12/14 13:08ID:2kNAmjtj
やっぱり難しいのかな?
ログファイルの記録方法を考え直して見ます
0444nobodyさん02/12/14 13:12ID:???
漏れに不可能はないぜ
0445nobodyさん02/12/14 15:48ID:???
>>439
$from = 100;
$to = 200;
$lines = $to - $from + 1;
open IN, "head -$to | tail -$lines |";
044643902/12/14 17:39ID:???
>>445
んん すまんです
とほほ見ながらやってるくらいのレベルなんで
ファイル名はどうすればいいんでしょうか?
044743902/12/14 17:45ID:???
>>445
open IN, "head -$to $filename | tail -$lines |";
で逝けそうですね ありがとうございます。
0448nobodyさん02/12/14 19:22ID:???
俺がよくやるのは、

while (<IN>) {
next if ++$count < $from;
last if $count > $to;
...
}

ファイルの大きさと、指定範囲によるけど、
数千行ぐらいなら十分かなぁと。
パイプは起動コスト高いから、ベンチとって見るのがいいと思う。
perlメモにperlでtailするサンプルあったけど、正直大して早くなかった。
でもお勧めは、バークレイDBかな。。身も蓋も無いけど。
0449nobodyさん02/12/14 21:36ID:???
フォームから送信された内容を溜めて
自動で、別窓で一覧にして永久的に表示するというのをやりたいのですが
どうしたらいいでしょう
0450nobodyさん02/12/14 21:46ID:???
>>449
プリントアウトしてモニタ画面に張り付ける。
0451nobodyさん02/12/14 21:49ID:???
あーあ
0452nobodyさん02/12/14 22:57ID:???
>>407
激しく亀レスで悪いがprintf関数の変換指定に%gを使えば一発だよ。
0453nobodyさん02/12/14 23:14ID:TSZsnHUG
電波少年は意味不明な終わり方をしたわけで・・・


An electric wave boy is the reason which carried out the way which finishes being incomprehensible...


電波少年は不可解な方法を実行した理由です...



微妙ですが
0454nobodyさん02/12/15 00:32ID:???
誤爆?
0455nobodyさん02/12/15 01:03ID:???
>>448
それ結構時間かかるよ
あまりスマートじゃないけど配列に読んだほうが
速い
0456nobodyさん02/12/15 02:18ID:???
元データに行番号うっとけよ。
0457nobodyさん02/12/15 02:56ID:N8e98l/q
$value{'key'}
$value{key}
この二つではどちらが書き方として正しいのでしょうか?
0458nobodyさん02/12/15 03:13ID:brjLalCm
http://www.media-0.com/www/sal/
↑ここはどうですか?
0459nobodyさん02/12/15 03:13ID:???
>>457
定数か文字列かに依る
0460nobodyさん02/12/15 04:02ID:N8e98l/q
>>459
いちおうどちらの形にしても、同じ値が見れるので
どっちでもいいのかなと思ったのですが。。。
0461nobodyさん02/12/15 11:28ID:???
Perl4対応なら$value{'key'}
perl5以降なら$value{key}
0462nobodyさん02/12/15 12:43ID:???
>>461 ありがとうございます
なるほど、そうなんですか。よく頭に叩き込んでおきます。
0463nobodyさん02/12/15 21:08ID:5VtRENUn
HTTPSクライアントを作りたいのですが、
参考になるサイト、書籍等ありますでしょうか?
0464nobodyさん02/12/15 22:17ID:V1pBf1ml
すごくおかしな質問かもしれませんが
どなたか教えてください。

use strict;

print ${&return_html};

sub return_html {
 return \"<p>てすと</p>";
}

これを実行すると当然のごとく<p>てすと</p>が出力されますが、

1.この”<p>てすと</p>”が記憶される領域は変数を宣言して確保するのとどう違うのでしょうか。
2.これが記憶されている領域はいつまで読めることが保証されているのですか?
(読まれる可能性があるときまで保持して置くように勝手にコンパイルされるのですか?)
3.このように値の参照を返す方法は返す内容が膨大になった時に、
値そのものを返すよりパフォーマンスの点で期待できますか?

いまいち上手く説明できないので質問の意図がわからないかもしれませんがよろしくお願いします。
0465nobodyさん02/12/15 23:20ID:1E3ue/P5
>>464
よくわからんけど・・

1. 無名のスカラーのリファレンスだという所。
2. 参照されている間、だから、printの次の行では、もう消滅している(読む手段がなくなるから)、かな??
3. 期待できる
046646402/12/16 03:56ID:???
なるほど、無名のスカラーなんですね。
それで納得いきました。
0467nobodyさん02/12/16 14:33ID:P42iaa2L
textarea から入力したデータ(つまり掲示板みたいなの)の改行コードを置換して
上手く <p>文章</p> としてやりたいのですが、上手くいきません。
改行コードを </p><p> に置換しても、最初の部分で </p> が余ってしまうし。
どうにか上手く囲えないですかね?
0468nobodyさん02/12/16 14:51ID:3MTAHZ/X
>>467
データを$detaに入れるとして

$deta = "<p>$deta</p>";
$deta =~ s/[\r\n]/<\/p>\n<p>/g;

これでダメ?
■ このスレッドは過去ログ倉庫に格納されています