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

Perl 初心者コーナー Part21

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん03/03/18 18:47ID:Dujz7IUF
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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

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


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

過去ログやお勧めサイトは >>2-10
0809nobodyさん03/04/10 05:53ID:???
>>807
>こうすると、キーを文字コード順で並び替え、

残念。そのままでは並び替えはされません。
文字コード順に並び替えるには、sort をつけるだけでok。

foreach $key (sort keys %hash) {
}

数字順にするには、sortに条件式を指定してやります。

foreach $key (sort { $a <=> $b } keys %hash) {
}
081080603/04/10 05:58ID:???
>>808
そうですか・・・
そうやって配列に入れてる説明をしてるサイトがあったんで、
もしかしたら、無理なのかなぁと思いながらも質問してみました。
有難うございました
0811nobodyさん03/04/10 06:00ID:???
>>809
あぁごめんなさい
sort書いたつもりで、書いてないところコピペしてしまってました。

てか、えっ?
foreach $key (sort { $a <=> $b } keys %hash) {
}
これいけるんですか?確認してきます
0812nobodyさん03/04/10 06:06ID:???
下のやついけました。
有難うございました。
0813あぼーん03/04/10 06:16ID:???
 ( ・∀・)< こんなのみつけたっち♪ 
http://muryou.gasuki.com/hankaku/hankaku03.html
http://muryou.gasuki.com/hankaku/hankaku04.html
http://muryou.gasuki.com/hankaku/hankaku02.html
http://muryou.gasuki.com/hankaku/hankaku01.html
http://muryou.gasuki.com/hankaku/hankaku10.html
http://muryou.gasuki.com/hankaku/hankaku09.html
http://muryou.gasuki.com/hankaku/hankaku08.html
http://muryou.gasuki.com/hankaku/hankaku07.html
http://muryou.gasuki.com/hankaku/hankaku05.html
http://muryou.gasuki.com/hankaku/hankaku06.html
0814佐々木健介03/04/10 06:16ID:???
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (5      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < こんなサイトを見つけた
|| | | |  \ ┃  ┃/    \  正直、スマンカッタ
| || | |    ̄         \_________
http://saitama.gasuki.com/kensuke/
0815かおりん祭り03/04/10 06:16ID:???
http://www.saitama.gasuki.com/kaorin/
       こんなのございま−す♪
       ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        〜oノハヽo〜
  ,.-''"¨ ̄●`' ‐(^▽^)
 (,,●i,,,i,,,,,,,,i,,,,●),,)⊂ )
    )  (    || |   
    ( ^▽^)  (_(__)
~~~~~  ̄ ̄ ~~~~~    ~~~~~
0816nobodyさん03/04/10 06:18ID:???
それ流行ってんの?
0817nobodyさん03/04/10 11:49ID:???
変数で変数名を決めてるのですが、微妙に複雑化してきた所でエラーになりました。

${"data$form{name$no}"}{'age'}

これなんですが、
どうもエラーの原因は「$form{name$no}」これっぽい。
でも、ダブルクウォートの中にダブルクウォートなんて書けないし、どうしたら良いでしょうか?
0818nobodyさん03/04/10 12:13ID:???
>>817
> ${"data$form{name$no}"}{'age'}
${'data'. $form{'name'. $no}}{'age'}
とか。

でもそれ、基本的なところから見直したほうがいいのでは・・・。
0819nobodyさん03/04/10 12:17ID:ofuMCP5l
http://namihei.zone.ne.jp/upup/up/1098.lzh
ラジオたんぱのサイトからNEWS記事のリンクを取得するCGIなんですが、
突然出来なくなりました。
どこを修正していいか分かりません。
教えてください。
宜しくお願いします。

具体的には取得してきたhtml
と<!---------------------記事部分------------------->
を比較したいんですが…
文字コードが違うのかうまくいきません。

for( $i = 0 ; $i <= $#data ; $i ++ ){
$data[$i] = &PrintSjis($data[$i]);
if( $data[$i] eq &PrintSjis("<!---------------------記事部分------------------->")){
print $data[$i];
last;
}
}
----
宜しくお願いします。
0820nobodyさん03/04/10 12:24ID:???
>>819
そんな部分のコードだけ見たってわかるわけないだろ
いじったのならオリジナルに戻せばいい
0821nobodyさん03/04/10 12:25ID:???
>>819
ここでCGIの質問すんなハゲ。
0822鮮民03/04/10 13:29ID:oo4Xo2Ys
>>817
$data = {
 01 => {
  neme => 'name',
  age => 'age',
 },
};
$data->{$form{'no'}}->{'age'};
こんな感じにしてみたら?
082381703/04/10 13:31ID:???
>>818
どうもです。変数名の中で演算子も使えるとは知りませんで…。

>でもそれ、基本的なところから見直したほうがいいのでは・・・。
出来るだけコンパクトになるよう考えてこれなんですよ…お恥ずかしい限り。
082481703/04/10 13:39ID:???
>>822
時間差で気付きませんで。
リファレンスですね。ちゃんと勉強してみようかな。

今までなんとなく避けてたし…。
0825nobodyさん03/04/10 13:50ID:5ksdsSWS
Perlというか文字コードの話だと思うんですが

<HEAD>内でcharset=iso-8859-1を指定して書かれた
HTMLのフォームから日本語で文章を打ち込んでメールを送信したいんですが
フォームでSUBMITしてCGI(Perl)でテキストエリアに入力された日本語を取得して
sendmailを開いてメールヘッダに
print SENDMAIL "Content-Type: text/plain; charset=iso-8859-1\n";
を指定して所定のアドレスにメールを送信したんですが
outlook expressで受信して開くと思いっきり文字化けしてる感じです。

とりあえずoutlookで見た時に日本語が表示されている必要があるんですが
HTMLのcharsetの方は事情により変更できないので
Perlの方でうまいぐあいに文字コードを変換(?)してメールするようにしたいんですが・・・
なにか方法とか参考になるサイトなどありましたらアドバイスよろしくです
0826nobodyさん03/04/10 13:55ID:???
まず、実際にメールを送信する前に、
テキストファイルに落とす等ちゃんとテストしてくれ。

んで、文字コードの件は、Jcode.pm か jcode.pl で。
あと charset に iso-8859-1 を指定したい理由が不明なのだが?
0827nobodyさん03/04/10 14:05ID:5ksdsSWS
>>826
一応、実際にメールを送信する前に
フォームに入力された文章の確認画面があるんですが
ここでは正常に日本語が表示されてるようです。
(吐き出されたHTMLのソースを見ると日本語が「???」などとなってる)

メールのヘッダに指定するcharsetは何を指定すればいいのか
分かんないのでHTMLの方とあわせただけです・・・
一応、メールの送信前にはPerl内で
&jcode'convert(*msg, 'jis');
などとはしているんですが、受信したoutlookの方では、そのまんま
日本語の部分が「???」などとなってしまう状態です・・・

jcodeでどんな変換が必要でメールのヘッダに
何のcharsetを指定すべきなんでしょうか・・
082882503/04/10 14:08ID:5ksdsSWS
あれ、なんか???になっちゃいましたが
「???」の部分は
「&#12354;&#12354;&#12354;」てな感じです。
0829nobodyさん03/04/10 14:11ID:???
ぎゃあっ!!

charset に何を指定良いか分からん奴が
メールを送信するプログラムを書く時代になったのか…。
すげーショックだ。

>>827
>フォームに入力された文章の確認画面があるんですが
アホ

>jcodeでどんな変換が必要でメールのヘッダに
単なる plain text だろうから、その変換で OK

>何のcharsetを指定すべきなんでしょうか・・
他のメールのヘッダを覗いてみなさい。

っつーか、少しは勉強してからそういうプログラム書いてください。
お願いします。この通りです。
0830鮮民03/04/10 14:20ID:oo4Xo2Ys
私も一年前まではそんな感じで、データを管理していましたが、
レファレンスを覚えてからは管理が楽になりましたよ。

1<>name<>age<>tel
2<>name<>age<>tel

@fields = qw(num name age tel);
while (<FILE>) {
 $i = 0;
 %hash = map {($fields->[$i++]) => $_ } split /<>/;
 push(@lines,\%hash);
 $lines{$hash{'num'}} = \%hash;
}
print "$_->{'num'} $_->{'age'}\n" for @lines;
print $lines->{'1'}->{'age'};

順番で表示したり、データをキーで指定できたりと何かと便利です。
初めは、わかりにくいと思いますが、頑張ってみてください。
リファレンスがわかれば、オブジェクト指向も出来るようになりますし。
0831鮮民03/04/10 14:24ID:oo4Xo2Ys
>>830は>>817さんへです。
0832鮮民03/04/10 14:32ID:oo4Xo2Ys
間違い発見
@fields = qw(num name age tel);
$fields = [qw(num name age tel)];
意味は無いけどレファレンス。
0833あぼーん03/04/10 14:43ID:???
あぼーん
083482503/04/10 14:49ID:5ksdsSWS
>>829
メールのヘッダにてcharset=iso-2022-jpを
指定してみましたが、指定する前とまったく同じ結果でした…

フォームから受け取った文字が、すでに
&#12354;&#12354;&#12354;のような形ですので
これを&jcode'convert(*msg, 'jis');してメールヘッダでcharset=iso-2022-jpを
指定しても、そのまんま
&#12354;&#12354;&#12354;で表示される感じです。

でもIEのブラウザですとHTMLソース内の文字が
&#12354;&#12354;&#12354;となってても
画面ではちゃんと日本語に変換されて表示されてるようです。。。

outlookで開いて見る時のエンコードの設定もいろいろいじってみましたが
どの文字コードにしても&#12354;&#12354;&#12354;のまんまのようで・・・
0835nobodyさん03/04/10 14:55ID:???
いったい、どんなコード書いてるんだ???
0836nobodyさん03/04/10 15:00ID:???
丸ごとtextにしてUPしたほうが早い
0837nobodyさん03/04/10 15:02ID:???
いや、書いてるコードは想像できるよ。
単にそのまま sendmail に渡してるだけでしょ。

> そのまんま &#12354;&#12354;&#12354;
当たり前じゃん。
ちなみに「あああ」って書いたんでしょ?>>834
0838nobodyさん03/04/10 15:35ID:???
>825
> <HEAD>内でcharset=iso-8859-1を指定して書かれた
> HTMLのフォームから日本語で文章を打ち込んでメールを送信したいんですが
ブラウザによってはページの文字コードを無視して送信するものもあるので、
こういったやりかたはあまり推奨されない。
きちんと文字コードを取得してから変換すべし。
083982503/04/10 15:37ID:5ksdsSWS
>837
はい、「あああ」です。

かいつまんで
http://rivernet.cool.ne.jp/upload/img/200304101536_test.lzh
にテストファイルあげてみました。
HTMLは変更せずにtest.cgiの中だけでなんたら変換して
メール送信してoutlookにて正常に日本語をよみたいんですが・・
084082503/04/10 15:39ID:5ksdsSWS
あ、test.cgi中のメールの送信先が
[email protected]になってますので、ほんとにテストするときは変更お願いします
0841nobodyさん03/04/10 16:00ID:???
>>837
そこまで書いてなぜ正解を書いてあげないの〜?

>>834
>フォームから受け取った文字が、すでに
>&#12354;&#12354;&#12354;のような形ですので

HTMLの ?数字; 表記法を参照のこと。

これを正しい文字コードにそのまま変換できるモジュールあるのかな?
?数字;を抜き出して一文字ずつjisに変換するしかない?
084284103/04/10 16:01ID:???
しまった化けた。もう一度。

>>834
>フォームから受け取った文字が、すでに
>&#12354;&#12354;&#12354;のような形ですので

HTMLの &#数字; の表記法を参照のこと。

これを正しい文字コードにそのまま変換できるモジュールあるのかな?
&#数字;を抜き出して一文字ずつjisに変換するしかない?
0843nobodyさん03/04/10 16:14ID:???
>>841

837ですが、

1. 数値文字参照から charset=iso-2022-jp に適合するように変換する
  効果的な方法を私も知らない
2. <FORM> のページが charset=iso-8859-1 という時点で
  努力する方向が間違ってる気がする
3. 既にPerlの領域じゃない気がする

以上です。
084484103/04/10 16:29ID:???
>>843
どうしてこうなるのか不思議に思ってたんだが、
フォームのページの問題を読み忘れていたようだ…。

というわけで>>825よ。
フォームのページのcharsetを日本語にしてみてくれ。
そもそもの問題はここにあると思われ。
0845nobodyさん03/04/10 18:09ID:???
リンクなしが主流になる中、
ユーザーも規約が緩いサイトに流れるけど
多少規約が厳しくても(無論常識内)ファンが絶たないサイトみると
やっぱ実力なのかなぁ、、、とちょっと憧れる。
0846nobodyさん03/04/10 18:11ID:???
ごめん、、素材スレと誤爆〜・・・・
0847nobodyさん03/04/10 18:46ID:???
配列なら$#をつかって配列の個数を知ることができましたが、
ハッシュだとややこしいことしないと、
いくつ入ってるかを知ることはできないのでしょうか?
0848nobodyさん03/04/10 18:48ID:???
>>846
>>774-775
0849nobodyさん03/04/10 18:55ID:???
>>847
$num = keys %hush;
スカラーコンテキストでkeys関数を使う。
0850nobodyさん03/04/10 18:56ID:???
scalar keys %hash
0851nobodyさん03/04/10 18:56ID:???
>>849
hushじゃなくてhashでしょ。
0852nobodyさん03/04/10 18:58ID:???
えっと、だめもとで、
ハッシュで$#これやってみたら、
期待してたとおりの動作が得られました。
いろんなサイトで探したんですけど、
見つからなかったんで質問させていただいたんですが・・・

それと、皆さん全然違うの書いてくださってますよねぇ?
$#使っちゃだめなんでしょうか?
085384903/04/10 18:59ID:???
逝ってきます
0854nobodyさん03/04/10 19:00ID:???
あ、うそですすいません。
勘違いしてました
0855847,852,85403/04/10 19:02ID:???
すいません。>>852は勘違いでした
>>849さんのでいけました。
ありが�dです
0856nobodyさん03/04/10 19:25ID:???
ふぅ
0857nobodyさん03/04/11 03:32ID:Ngj0Yn4X
某所スレで聞いたらスルーされてしまったのでこちらで再度
質問させてください。

http://sabbath-jam.com/top/det/det_1.html
↑の掲示板使ってるんですが、改造して、新規投稿があったときに
自分のケイタイにお知らせメールが届くようにしたいんです。
もし可能なら、組み込むscriptを教えていただけないでしょうか?
0858nobodyさん03/04/11 03:36ID:???
(´-`).。oO(某スレはまったく見当違いだからスルーは当然だな・・・)
(´-`).。oO(ここでもスレ違いとスルーされるだろうな・・・)
0859nobodyさん03/04/11 03:41ID:Ngj0Yn4X
>>858
(´-`).。oO(適切な場所に誘導してください。。)
0860nobodyさん03/04/11 03:45ID:???
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/l50
0861nobodyさん03/04/11 03:52ID:Ngj0Yn4X
>>860
神!サンクスでつ
0862nobodyさん03/04/11 04:03ID:e9H5z3qo
ハッシュの中に配列のデータを入れたいのですが、
何か良い方法ありますでしょうか。
0863nobodyさん03/04/11 04:19ID:???
>>862
%hash = @array;
0864nobodyさん03/04/11 04:22ID:e9H5z3qo
>>863
言い方悪くてごめんなさい。
私が描いているイメージは
$hash{key} = @array;
こんな感じです。

もしもできればご教授願いします。
086525103/04/11 04:22ID:???
>>863
%hash = \@array;
でそ・・・
086625103/04/11 04:23ID:???
>>865
嘘かいてもうた
086725103/04/11 04:27ID:???
>>864
$hash{key} = \@array;

で呼び出しは
$hash{key}->[0];
とかね・・・
0868nobodyさん03/04/11 15:33ID:???
??????????????-??????! ??????? '????-
?????'??????????????????.????
???????! ??????????????????
0869nobodyさん03/04/11 17:12ID:+804Cr9x
すんません、ある文字列から頭2バイトだけ取り除いたものが欲しいのですが
my $a = 'abcdef';#欲しいのは$a='cdef'。
substr($a, 0, 2);
print $a;

結果
'abcdef'

となってしまいます…

何か良い方法ありますか?
0870nobodyさん03/04/11 17:18ID:???
$a = substr($a, 0, 2);
0871nobodyさん03/04/11 17:20ID:???
>>869
http://pc2.2ch.net/test/read.cgi/tech/1048519394/299
087286903/04/11 18:18ID:+804Cr9x
>>870
すいません、勘違いするような書き方でしたね。
欲しいのは2バイト取り除いた後の残りの文字列なんです。

この場合はcdefが欲しいのですがabしか取れないんです…
0873nobodyさん03/04/11 18:23ID:???
>872
向こうのスレで答えもらってるじゃん。
0874nobodyさん03/04/11 18:27ID:???
マルチに答えるバカがいるスレはここです
087586903/04/11 18:39ID:+804Cr9x
向こうでこっちに誘導されたのでカキコんだのですが、皆さんに迷惑を掛けてしまった
ようですね。

どうもスイマセンでした。
0876nobodyさん03/04/11 18:47ID:???
誘導した奴が悪いということか
087786903/04/11 19:29ID:+804Cr9x
>876
いえ、「こちらに行きます」と明記しなかった私が悪いです。
本当に申し訳なかったです。
0878nobodyさん03/04/11 19:48ID:???
>877
向こうで言われた事をそのまま書くだけか?
自分で考える脳は?

そんな考え方しかできないから、適切なスレに誘導してくれた人に対して
お礼も言えないんだよ。
0879nobodyさん03/04/11 20:17ID:???
>878
ほっとけよ、生理が伝染るぞ
088086903/04/11 20:36ID:+804Cr9x
>>878
なんか会社で怒られてるような気分になりました。
よくこんな感じで怒られるんですよ。

自分はトロいのでやれと言われたことしか中々できないの
ですがもっと自分の頭で考えられるように頑張ります。
本当にすいませんでした。
そしてありがとうございました。
0881nobodyさん03/04/11 20:42ID:nKHFlgQT
>>880
独り言ヤメレ
0882nobodyさん03/04/11 21:29ID:???
そうやってみんなでせめんなよ
醜いアヒルの子でも見れ
0883nobodyさん03/04/11 21:33ID:???
甘やかすだけでは何も前に進まない。
がんすけも分かっているはず。
0884nobodyさん03/04/11 21:34ID:???
>>869
ガンガレ
0885訂正(鬱だ03/04/11 21:34ID:???
×がんすけ
○ガァ助
0886nobodyさん03/04/11 22:51ID:???
× スレ自体を間違えました
○ 板自体を間違えました
0887訂正(鬱だ03/04/11 23:31ID:???
>>886
良く分かったねw訂正ありが�d
0888nobodyさん03/04/12 01:59ID:Wz2xojvl
基本なんですけどよくわからないので、ファイルを開く時のモードのことで質問があります。
読み書き両用でファイルを開く時、

open (DATA,"+<./data.dat");
open (DATA,"+>./data.dat");

この両者にはどういう違いがあるのでしょうか。
自分でやってみたところ前者は「>>(末尾に追加)」で、後者は「>(読み込んだ時点でファイルが空に)」と同じようでした。
「読み書き両用」の正しい使い方を教えて欲しいです。
0889nobodyさん03/04/12 02:13ID:???
現在のファイルの内容を残すか長さ0に切りつめるかの違い。
0890nobodyさん03/04/12 02:20ID:???
>>888
読み込みと書きこみを1回のopenでしたいときに使う。
例えば掲示板の削除処理を俺はこう書く

open LOG, "+<", "./bbs.log" or die;
flock LOG, LOCK_EX;
while (defined(my $article = <LOG>)) {
  chomp $article;
  my($no, $name, $body) = split /\t/, $article;
  $no == $delno or push @newlog, $article . "\n";
}
truncate LOG, 0;
seek LOG, 0, 0;
print LOG @newlog;
close LOG;
0891nobodyさん03/04/12 03:02ID:???
俺ならこう書くな
while (defined(my $article = <LOG>)) {
  next if $article =~ /^\Q$delno\E\t/;
  push @newlog, $article;
}
0892nobodyさん03/04/12 03:29ID:???
アバウトじゃね?
0893nobodyさん03/04/12 03:37ID:???
こんばんわ、Perlを勉強しはじめたのですが、理解できない部分
があったので質問させてください。

for($w=0;$w<10;$w++){
$f=&k($w);
print"$f\n";
}
sub k{
local($d)=@_;
my($w);
$w=$d*$d;
return($w);
}
というものがあるのですが、2行目の$wには1行目のfor()で決定される数字が
入るのでしょうか?それともreturnでの返り値が入るのでしょうか?

もし前者の場合は返り値はどこにはいるのでしょうか?&k($w)自体に入るのでし
ょうか?

もしも後者の場合は関数kには式だけあって数字がなくなってしまう気がしますが
どこから数字をもってきているのでしょうか?

きっとすごい簡単なことなんでしょうけど、教えていただければ幸いです。
よろしくおねがいします。
0894nobodyさん03/04/12 03:42ID:???
>>893
はあ?
forの$wとsub kの$wは別ものだよ。
089525103/04/12 03:45ID:???
>>893
for($w=0;$w<10;$w++){
$f=&k($w);
print"$f\n";
}
sub k{
local($d)=@_;
my($w2);
$w2=$d*$d;
return($w2);
}

こうすれば理解しやすいかな?
2行目の $wにはforループの$wがはいって、$fにはsub kのreturnが入ります。

おまけで、ソース的にもあやしいんで書きなおし

for($w=0;$w<10;$w++){
  $f=&k($w);
  print"$f\n";
}
sub k{
  my $d =$_[0];
  my $w2 = $d*$d;
  return($w2);
}

ソースとしては 多分local($d)=@_; じゃなくて local($d)=$_[0];だとおもう
my $d =$_[0]; にしたのはlocalである必要が無い為・・・


0896nobodyさん03/04/12 03:48ID:???
>>894さん
それはsub kの$wはプライベート変数になっているからですよね?
8行目の$w=$d*$d;で2乗していますけど、そこの$dに入る数字は
どこから持ってきているのでしょうか?

よろしければ教えてください。
おねがいします。
0897nobodyさん03/04/12 03:50ID:???
>>895さん ありがとうございます!
とても分かりやすい説明で理解することができました!
0898nobodyさん03/04/12 05:49ID:???
>>251
まず

my($d) = @_;

受け側も右側もリストコンテクストだから、
右側の配列の要素0が左がわの最初の変数に入る。例えば

my($d1,$d2) = @_;

だったら

my($d1, $d2) = ($_[0], $_[1]);

と同じ。次に

my $d = @_;

受け側がスカラーコンテクスト、右がリストコンテクストだから、

my $d = scalar(@_);

と同等になる。よって、$dには@_に何個要素が入っているか、その数が
入る。最後に

my $d = $_[0];

受け側も右側もスカラーコンテクストだから、そのまま$dに@_の最初の
要素が入る。

というわけでlocal($d) = @_;というのは文法的には誤りはない。
local()の使い方としては多分間違ってるけど。(my()が正解)
089925103/04/12 06:00ID:???
>>898
なるほど、両方ともリストコンテクストか・・・
微妙な所だけど、補足ありがと
0900nobodyさん03/04/12 06:05ID:???
回りくどい説明だな…。
090188803/04/12 10:35ID:???
>>889-891
ありがとうございました。
「読み込みと書きこみを1回のopenでしたい」とまさにその通りでした。
truncate関数なんてものがあったんですね。勉強になりました。
おかげさまで無事解決。
0902nobodyさん03/04/12 11:56ID:9LVB7yXu
$_ while (<LOG>);
を
$article while (defined(my $article = <LOG>));
にしている意味は何のためですか?
0903nobodyさん03/04/12 12:58ID:???
>>902
変数を明示的にするため。
というのが一般的な理由…だと思う。
0904nobodyさん03/04/12 15:47ID:???
>>901
truncateは使えない鯖があるからevalの忘れるなよ
0905nobodyさん03/04/12 17:18ID:???
クラスの中の関数を外から呼べないようにする方法はありますか?
0906nobodyさん03/04/12 17:55ID:???
どうしようもない質問があります。

#!/usr/local/bin/perl

my $test = '表示成功';
&test();
exit;

sub test {
print "Content-type: text/html\n\n";
print "$test";
}
__END__

このスクリプトを実行すると、出力が「表示成功」になります。
何故my宣言したのにこのような事が出来るのでしょうか?
0907nobodyさん03/04/12 18:12ID:???
>>906
> 何故my宣言したのにこのような事が出来るのでしょうか?
あなたが自宅の部屋に立てたテントの中も
「あなたの自宅の中」だからです。
0908はしのえみ好きー03/04/12 18:15ID:???
>>906
## ↓ここから package main;
my $test = '表示成功';  # パッケージに属する変数(my $main::testと等価
&test();
exit;

sub test {
print "Content-type: text/html\n\n";
print "$test"; # ブロック内に$testがないので、$main::testを探す
}
__END__

## ↑ここまで package main;
レス数が900を超えています。1000を超えると表示できなくなるよ。