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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/05/31(水) 04:32:28ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0357nobodyさん2006/06/08(木) 21:17:23ID:???
許さんよ
0358nobodyさん2006/06/08(木) 23:57:04ID:???
htmlログなんですが2chブラウザで読み込めるようにするにはどうすればいいでしょうか?
書き込み禁止の読み込み限定にしたいんですが
0359nobodyさん2006/06/09(金) 00:01:33ID:???
>>358
日本語でおk
03603582006/06/09(金) 00:10:31ID:CHuIt143
>>359
日本語とは?
0361nobodyさんNGNG
にほん‐ご【日本語】

古来日本民族が用いてきた言語で、日本国の公用語。
北海道から沖縄までの島々にわたり、一億余の人々に使用されている。
音韻面では、一つの子音と一つの母音との結合音節を基調とし、
母音で終わる開音節を特徴とする。「ガ・ッ・コ・オ(学校)」という発音にも見られるような
等時的なリズム上の単位、すなわち拍(モーラ)をもち、高低アクセントを伴う。
文法面では膠着語(こうちやくご)に属し、助詞・助動詞が文の成立について
大きな役割を果たしており、また、述語が文の最後にくるという文法構造をもつ。
複雑な敬語法が発達していることもその特徴の一つに数えられる。
中国語から借用した漢字と、漢字を母胎として成立した仮名との併用で表記されるのが普通である。
語彙(ごい)には日本固有の語である和語のほかに、漢字音に基づく漢語も多い。
近年は、西欧語からはいってきた外来語も多く用いられる。国土の面積の割には、
方言による違いも著しく、男女や職業などの別による用語差も大きい。
系統はアルタイ諸語の一つに属するものか、などとも言われるが、いまだに定説とはなっていない。
0362nobodyさん2006/06/09(金) 00:13:57ID:???
>>360
こいつ最高にアホ
0363nobodyさん2006/06/09(金) 10:11:56ID:???
日本語でおk=文章がわかりにくい
0364nobodyさん2006/06/09(金) 15:58:08ID:???
$file1から読み込んだデータを処理した上で$file2に書き込む場合は
if(!open(FH, "< $file1")){&file_err;};
flock(FH, 2);
@DATA = <FH>;
close(FH);

# @DATAの処理。

if(!open(FH, "+< $file2")){&file_err;};
flock(FH, 2);
seek(FH, 0, 0);
print FH @DATA;
truncate(FH, tell(FH));
close(FH);

で良いんですよね?
とすると、$file1から読み込んだデータを処理した後再び$file1に上書きする場合、
上の$file2の部分を単純に$file1にすれば良いんでしょうか?
それとも処理の前にクローズするのはマズイんでしょうか?
0365nobodyさん2006/06/09(金) 17:45:02ID:???
>>364
file2をそのままfile1にすると、ロックが効かない典型。
http://web.archive.org/web/20040216083853/www98.sakura.ne.jp/~jun/perl/flock.html
0366nobodyさん2006/06/10(土) 01:04:27ID:???
if(!open(FH, "+< $file2")){&file_err;};
↑こういう書き方を誰が広めてるの?
open FH, "+< $file2" or file_err();
のほうが自然言語に近くて読みやすいしタイプもすくない。
0367nobodyさん2006/06/10(土) 01:06:14ID:???
・・・ kent とか?
03683582006/06/10(土) 01:10:25ID:fHtGRC+E
htmlログなんですが2chブラウザで読み込めるようにするにはどうすればいいでしょうか?
書き込み禁止の読み込み限定にしたいんですが
0369nobodyさん2006/06/10(土) 01:21:13ID:???
>>368
日本語でおk
0370nobodyさん2006/06/10(土) 01:30:58ID:???
失敗したら何か複数の処理って時に or を使ってると
open(FH, "file") or do { a(); b(); };
とかなってキモス。
03713582006/06/10(土) 01:49:00ID:fHtGRC+E
>>369
たんなるHTMLのみだと
JaneStyleで読みこめません
かちゅでも読みこめません

0372nobodyさん2006/06/10(土) 01:54:26ID:???
>>370
or ( a() , b() ); でもいかね?

>>371
その2ちゃんブラウザのデータのフォーマット見ればどうすればいいのかわかるじゃん。
何がわかんないかさっぱりわかんないから相手にされないんだよ。 現時点じゃ perl の話題とも思えないしな。
0373nobodyさん2006/06/10(土) 02:34:33ID:???
>>372
動く動かないの問題じゃなくて、
open($io, "./3/2/1/0/0/321001056131731037.dat") or ( $obj->method_a() , $obj->method_b() , $obj->method_c() , $obj->method_d() , $obj->method_e() );
位になるとどこで折り曲げるか悩むだろ。
0374nobodyさん2006/06/10(土) 02:45:21ID:???
>>373
なるほ。 まあそれはいくらなんでもそりゃ if 文使うだろーね。
あるいは前もって無名サブルーチン作っておいて、そこでまとめて処理するとかかな。
0375nobodyさん2006/06/10(土) 03:03:50ID:???
おれならorやandで改行しちまうね。
open $io, "./3/2/1/0/0/321001056131731037.dat"
or $obj->method_a()
and $obj->method_b()
and $obj->method_c()
and $obj->method_d()
and $obj->method_e();

しかしこんぐらいなら別のサブルーチン作るかも
0376nobodyさん2006/06/10(土) 03:06:37ID:???
open $io, "./3/2/1/0/0/321001056131731037.dat"
or map { $obj->can("method_$_")->($obj) } (a..e);
とか。この場合ね。
0377nobodyさん2006/06/10(土) 03:13:25ID:???
うぁああキモシキモシキモシなんだこの言語はっ
0378nobodyさん2006/06/10(土) 03:20:09ID:???
2chを支える言語です
0379nobodyさん2006/06/10(土) 03:32:05ID:???
There's more than one way to do it.
03803582006/06/10(土) 03:35:54ID:YyFvvuc/
htmlログなんですが2chブラウザで読み込めるようにするにはどうすればいいでしょうか?
書き込み禁止の読み込み限定にしたいんですが
0381nobodyさん2006/06/10(土) 03:39:26ID:???
>>380
日本語でおk
03823582006/06/10(土) 04:01:25ID:YyFvvuc/
>>381
たんなるHTMLのみだと
JaneViewで読みこめません
ギコナビでも読みこめません
0383nobodyさん2006/06/10(土) 04:11:44ID:???
JaneViewのスレに逝けばいいと思うよ。
0384nobodyさん2006/06/10(土) 04:13:02ID:???
先生、質問ー。

use strict;
my $fuge = 'fuge';
my $run1 = \&Hoge::fuge::run;# 通る
$run1->();
my $run2 = \&{"Hoge::${fuge}::run"};# 通る
$run2->();
my $str = \${"Hoge::${fuge}::str"};# エラー
print $$str;
exit;

package Hoge::fuge;
use strict;
$Hoge::fuge::str = '++++++++++++++++++++++',"\n";
sub run { print '-----------------------------', "\n"; }

上で、$str が通らないのはわかるけど、$run2 が通るのは何でなのかな?
0385nobodyさん2006/06/10(土) 04:52:18ID:???
そんなはずは…

use strict;
(\&{"test"})->();
exit;

sub test{ print "hello, world!"}

って、こんなのも通るのね…。
0386nobodyさん2006/06/10(土) 05:05:09ID:???
AUTOLOADかけなきゃならんからじゃないかな?
0387nobodyさん2006/06/10(土) 06:17:24ID:???
ちゃんとstrictのドキュメントに書いてあるな。386正解
ttp://search.cpan.org/~nwclark/perl-5.8.8/lib/AutoLoader.pm
| There is one exception to this rule:
| | $bar = \&{'foo'};
| | &$bar;
| is allowed so that goto &$AUTOLOAD would not break under stricture.
0388nobodyさん2006/06/10(土) 06:30:15ID:???
うお、URLミスった…
http://search.cpan.org/~nwclark/perl-5.8.8/lib/strict.pm#DESCRIPTION
0389nobodyさん2006/06/10(土) 07:23:45ID:???
例外だったんだ!

( ・∀・)シ∩<へぇーへぇーへぇー

先生方さすがです。
0390nobodyさん2006/06/10(土) 15:22:30ID:+aR8vdDY
htmlとshtmlの違いは何でしょうか?
shtmlにしないとSSIディレクティブはできないんでしょうか??
0391nobodyさんNGNG
すでにPerlの質問じゃネェェェェエェー!!!
0392nobodyさん2006/06/10(土) 15:24:45ID:???
>390
perlと何の関係もないな。
スレ違い。
0393nobodyさん2006/06/10(土) 15:25:38ID:???
FORMから飛ばしてきた内容はどのように扱えばいいのでしょう?

<input name="NAME" type="hidden" value="hoge">

というタグを送信元のページに入れておき、
それをcgiの中で、別の変数に移す時、

$hage = $FORM{ 'hoge' };

と記述したのですがうまくいきません。
記述が間違っていますか?
03943902006/06/10(土) 15:28:43ID:+aR8vdDY
あぁすみません
カウントダウンのCGI作ってたもんで
0395nobodyさん2006/06/10(土) 15:37:06ID:???
>>393
CGIの勉強しろよ…。CGI.pmとか。
PHPじゃないんだからいきなりそんな風には記述できない。
0396nobodyさん2006/06/10(土) 15:43:39ID:???
>>395
某サイトからダウソしたcgiファイルに、FORMで受け取った内容を
>>393の記述で使っている部分があったんで、これでおkと思ってますた。

で、今そのcgiファイルの中に>>393の記述でおkにする部分(らしきもの)を見つけたんで、
それを処理の一番上に持ってきたら思い通りに動作しました。

ありがとうございます。
0397nobodyさん2006/06/10(土) 16:59:32ID:???
切り貼りしてすごい汚いソース作ってそうだなー・・・。
まあ最初は自分もそうだったけどw
0398nobodyさん2006/06/10(土) 17:21:59ID:???
うわー 自分が今その状態…
いろんなところから切り貼りして汚い…('A`)
誰にも見せられない…
0399nobodyさん2006/06/10(土) 21:50:32ID:???
誰もみねえよ
0400nobodyさん2006/06/10(土) 22:06:47ID:???
もっとエレファントに書けよ。
0401nobodyさん2006/06/10(土) 23:02:04ID:???
もっとゴージャスに書いたよくださいほうがいいよ
0402nobodyさん2006/06/10(土) 23:30:24ID:???
書いたよくださいほうがいいよ
0403nobodyさん2006/06/10(土) 23:52:59ID:???
|∀`)ホントニダレモ ミナイ?
0404nobodyさん2006/06/11(日) 01:30:03ID:???
誰も見てないって、
そんな、へんてこで読みにくいスクリプトなんて。
use strictを使えばいいのに。ふぅ。

だから、絶対見てないって!
0405nobodyさん2006/06/11(日) 01:44:54ID:???
>>400
#!/usr/local/bin/perl
どかーん!
(⌒⌒⌒)
 ||

/ ̄ ̄ ̄ ̄ ̄\
| ・ U      |
| |ι        |つ
U||  ̄ ̄ ||
   ̄      ̄
もうおこったぞう
0406nobodyさん2006/06/11(日) 01:52:53ID:???
けつからでてるのはunko?
0407nobodyさん2006/06/11(日) 01:55:40ID:???
掲示板などを作る際にjcode.plを使わないとどんな不具合が出るのですか?
0408nobodyさん2006/06/11(日) 02:03:10ID:???
>>407
、ウ、?ハノヤカ?遑ゥ
0409nobodyさん2006/06/11(日) 02:04:17ID:???
>>407
シコヌヤ。」、ウ、、ハノヤカケ遉タ、ハ。」
0410nobodyさんNGNG
今時のブラウザはフォームがあるページのエンコードで送ってくるから
別に使わなくていいと思う
0411nobodyさん2006/06/11(日) 02:12:30ID:???
   _、_         こんなトコロで
 ( ,_ノ` )     n     私に質問するんですか?
 ̄    \   ( E)      だったら答えてあげますよ!
フKENT /ヽ ヽ_//   初心者にも簡単!
                文字化けは回避できるわ鯖落ちは回避できるわ
                  とりあえず使っとけな雰囲気があるわで大騒ぎ!
0412nobodyさん2006/06/11(日) 02:15:31ID:???
>407
>409さんが書いている通り
ただ、他のページからデータを持ってこようとしたり、自分の管理外の色んなページから
GET・POSTを受ける場合は文字コード変換が必要
0413nobodyさん2006/06/11(日) 02:38:31ID:???
鯖落ちが回避できるのか
0414nobodyさん2006/06/11(日) 02:49:36ID:???
さすがのKENT様だからな
04154072006/06/11(日) 03:18:44ID:???
>>410
それはHTML内で
<Meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
としてあるのにEUCでデータを送ってくるブラウザもあるということですか?
EUCで送られてきたデータを

# $testにフォームから送られたデータが入ってるとする
print <<"HTML";
<html>
<head>
<Meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
$test
</body>
</html>
HTML

このように表示すると文字化けし、
それを回避するためにjcode.plで文字コードを変換する、ということでOKですか

>>412
それはURLエンコードのことではないんですか?
当方、簡単な掲示板を作っていて、jcode.plを使わなくても何の問題も無かったんで気になったんですが。
0416nobodyさん2006/06/11(日) 03:41:11ID:???
KENTわろすww
0417nobodyさん2006/06/11(日) 03:47:49ID:???
むしろ Shift_JIS だけでデータ書いたり保存したりするなら、
j(J)code でデータうけとったときに何でもかんでも変換してると半角カナで文字化けするので、
どうせ変換するなら method get だけにしとくとかのがいいと思った。
他のとこから post でデータ送ってくるのって一部を除いてイタズラ以外にないしな。

まあ get にするにしても utf-8 に対応してない jcode.pl じゃあんま役に立たないとは思うけど。
どうなんでしょうKENT様
0418nobodyさん2006/06/11(日) 04:33:43ID:???
KENTすげーwwwwwwwwwwwww
0419nobodyさん2006/06/11(日) 04:50:51ID:???
一方的にシステムの文字コードで送りつけるブラウザはあるらしい(あったらしい?)。

私は、コードを決めておいて、文字コードが合わなかったら変換しないで、
エラーを出すように作ってる。
0420nobodyさん2006/06/11(日) 05:01:19ID:???
美乳をhiddenで送ってもらって美乳じゃなかったら汚乳エラーでいいじゃん
0421nobodyさん2006/06/11(日) 05:11:02ID:???
>>420
うわ、それ考え付かなかったなあ。
0422nobodyさん2006/06/11(日) 05:25:55ID:???
form 要素の accept-charset を使って、変なデータはエラー表示するのが
正しいんだと思うんだがね。

対応してないブラウザってあるの?
0423nobodyさん2006/06/11(日) 08:33:22ID:???
perl始めると共にいきなりcgi作ってるんですが、何かまずいでしょうか?
プロンプトで色々やってからcgiってのが王道?なんでしょうか?

あとKENTのところのソースを参考にしてるんですが、ここでは評判悪いようですが参考にしない方がいいですか?
04244072006/06/11(日) 09:15:29ID:???
どうも勉強になりました
0425nobodyさん2006/06/11(日) 09:35:16ID:???
>>423
KENT氏のはモジュールなどを使わない枯れた古い方式なので、
車輪の再発明に苦労することになるでしょう。

これからPerlを始めるのなら、モジュールをバシバシ使った
お手軽プログラミングをおすすめします。
0426nobodyさん2006/06/11(日) 09:38:19ID:???
>>423
cgi はいいんじゃない?
最初は形に残ったほうが面白いしね。

KENTはまあ、一回参考にしてもいいかもね。
反面教師って言葉もあるし。

use strict; して↓これみとk
http://www.perldoc.jp/docs/perl/5.8.0/perlstyle.pod
0427nobodyさん2006/06/11(日) 12:24:35ID:???
頑張って、人気投票ができるCGI作ってるんですが、プラウザの更新ボタンを押すと、
「情報を再送信しないと、ページを更新できません。「再試行」をクリックして〜」と表示され、
「再試行」を押すと、2重投稿っぽい感じに投票が行われてしまいます・・・・・。

更新ボタンを押しても、CGIにデータを送らないようにはできないでしょうか?
0428nobodyさん2006/06/11(日) 12:27:26ID:???
そりゃブラウザが情報保持して再送信してるだけ
情報送って登録したらprint "Location: ..."すりゃ一応回避できるけど
もしくは同一IPから同一情報の登録はブロックするとか
0429nobodyさん2006/06/11(日) 12:34:09ID:???
>>428
やっぱ同一IP、同一内容の投稿を規制するしか方法はないですか・・・ orz
ありがとうございます。
0430nobodyさん2006/06/11(日) 14:25:32ID:???
>>423
> perl始めると共にいきなりcgi作ってるんですが、何かまずいでしょうか?

ダメとは言いませんけれど、少し不安です。
他はともかく、安全性についての配慮は忘れないでください。できる限り -Tw スイッチを使うようにしてください。ユーザという種族はいつでも、プログラムの動作にとって最も都合の悪い操作を選択的に行うものです。

> プロンプトで色々やってからcgiってのが王道?なんでしょうか?

CGI はサーバサイドプログラムの出力をサーバ応答として返す仕組なので、コマンドプロンプト (のことですよね?) 上でプログラムがどのように動作し、どんな出力を吐くのかを知っていたほうが有利であることは確かです。

> あとKENTのところのソースを参考にしてるんですが、ここでは評判悪いようですが参考にしない方がいいですか?

氏の CGI スクリプトは動作環境の範囲を広く取るために後方互換性を重視したスタイルのようです。
あなた (あるいはあなたのユーザ) がこれから何年もの間、比較的古い (and|or) 制限の多い環境を使い続けるなら、その点で参考になる部分は多いかもしれません。
0431nobodyさん2006/06/11(日) 14:27:28ID:???
>>430
何かを翻訳したの?
0432nobodyさん2006/06/11(日) 14:40:36ID:???
KENTについて意見の翻訳wwwww

広い動作環境ゆっても、perl4 とかのがめずらしいよな。
local だけだと全部グローバルになるせいか、少し長い script 組むとたまーにありえない挙動するから困る。
0433nobodyさん2006/06/11(日) 15:14:21ID:???
>>432
> local だけだと全部グローバルになるせいか、少し長い script 組むとたまーにありえない挙動するから困る。

それはあなたがそのように書いたからです。
また、こういった認識は上達の妨げになるので気をつけてくださいね。
プログラムは (処理系のバグも含めて) 「書いたなり」にしか動かないことを忘れちゃいけません。
0434nobodyさん2006/06/11(日) 15:41:32ID:aFjDPMnZ
すいません、ちょっと質問させていただきたいのですが・・・
「log.dat」の中に↓のようなデータが入っているとして

5,4,4,3,1,2006/06/11(日) 14:59:27,yyyyyyyyyyyyyyyyyy
1,3,4,5,3,2006/06/11(日) 14:58:45,ggggggggggggggggggg
2,4,4,4,3,2006/06/11(日) 14:58:37,ggggggggggggggggggggggggg

この「log.dat」内の「5,4,4,3,1」や「1,3,4,5,3」といった頭5つの数字だけを、
全て足していきたいのですが、そうゆうことってできますでしょうか?
ちなみに上の例だと「5+4+4+3+1+1+3+4+5+3+2+4+4+4+3」で「50」という数字を求めたい・・・・・・

一応自分で調べようと努力はしたのですが、検索しきれなくて・・・・・
よろしくお願いします orz
0435nobodyさん2006/06/11(日) 15:54:20ID:???
>>434
処理の流れがわからんのだろうかね…これは
答えを書くのは五行足らずだがそれじゃ本人のためにならないのでヒント

まず、その処理で必要なことは何かを考える
・ファイルを開いて
・一行一行読み取って
・カンマで切り分ける
・その最初の五つを取り出して
・足し合わせる

で、これをコードに落とす
ファイルを開くのは"open"(読み取るサンプルも大抵一緒に解説されてる)
切り分けは"split"、初めの五つを取りだすには"配列のスライス"辺りで検索汁
0436nobodyさん2006/06/11(日) 15:59:53ID:???
map{}(@)の方がスマートかと
0437nobodyさん2006/06/11(日) 16:07:20ID:???
この流れを考えられないのを相手にいきなりmapを説くか?
04384342006/06/11(日) 16:16:01ID:aFjDPMnZ
open(FP,"log.dat") || &error("ログファイルが開けませんでした。");
@logs=<FP>;
close(PF);

foreach $line(@logs) {
chop($line);
($atai1,$atai2,$atai3,$atai4,$atai5,$dat,$value,) = split(/\,/,$line);
if (!$line){last;}

print
"<TABLE border=\"1\" align=\"center\"><TR><TD>\n".
"$atai1/$atai2/$atai3/$atai4/$atai5/$dat<br><br>\n".
"$value\n".
"</TD></TR></TABLE><br>\n\n";
}

一応、ここまでは何とか分かっているのですが、この「$atai1〜$atai5」の値を全て足すには。。。。
foreachの間に「$tasu = $atai1+$atai2+$atai3+$atai4+$atai5;」と書いてみましたが、全然駄目でした・・・

正直、自分の頭では・・・・・
0439nobodyさんNGNG
$tasu += $atai1+$atai2+$atai3+$atai4+$atai5;
0440nobodyさん2006/06/11(日) 16:46:10ID:???
>>439
教えていただいて申し訳ないのですが、このようにログが一番古いものしか、ちゃんと表示されません。。。。
http://ranobe.sakuratan.com/up/src/up113712.jpg
0441nobodyさん2006/06/11(日) 17:23:33ID:???
>>440
つまりあれか、その全てに同じ値、全体の合計を表示したいわけか。
それなら二段階に分ける必要がある。
事前に合計を調べた上で、その後に表示。

>>436
reduceの処理でmapを使うのはスマートに思えないな…
$sum += $_ foreach @list[0..4];
reduce処理にはmapを使ってもそう大差無い様に思うのだけれども
0442nobodyさん2006/06/11(日) 17:28:59ID:???
>>434
>一応自分で調べようと努力はしたのですが、検索しきれなくて・・・・・
ていうか、なんで考えないで検索しようとするんだろうね。

自分と全く同じ状況にあるコードの書き方なんて
検索してもなかなか出てくるもんじゃないのに。
0443nobodyさん2006/06/11(日) 18:00:25ID:l/QD+3uq
http://7hp.jp/?id=dealy5th
04444342006/06/11(日) 18:51:48ID:aFjDPMnZ
>>441
ログファイルを2つに分けるってことでしょうか?・・・・ orz
ありがとうございます。やってみます。

>>442
「ファイル perl」、「open perl」等、とりあえずファイル関係で調べていました・・・ orz
0445nobodyさん2006/06/11(日) 18:59:18ID:???
>>444
> ログファイルを2つに分けるってことでしょうか?

そうじゃなくて、1つのログファイルから内容を読み込んだ後
1. 合計を求める foreach
2. 結果を表示する foreach
の2つのforeachを書く必要がある、という事だと思うよ。
0446nobodyさん2006/06/11(日) 19:01:16ID:???
>444
>442は
>なんで考えないで検索しようとするんだろうね。
と書いているんだが・・・お前は日本語が読めないのか?
まず日本語がちゃんと理解できるように勉強し直せ。
0447nobodyさん2006/06/11(日) 19:34:32ID:???
2chクオリティ
0448nobodyさん2006/06/11(日) 20:44:56ID:???
use strict;

my($total) = 0;

open(INFH, "test.txt");
while(<INFH>){
  chomp;
  my($tmpsum, $tmpstr);
  my(@data) = split(/,/, $_);
  my(@nums) = splice(@data, 0, 5);
  map { $tmpsum += $_ } @nums;
  $total += $tmpsum;
  $tmpstr = join("/", @nums);
  print <<"EOM";
------------------------------
$data[0]
$tmpstr = $tmpsum Points.
$data[1]
EOM
}
close(INFH);
print "------------------------------\n";
print "TOTAL : " . $total . "\n";
print "------------------------------\n";

0449nobodyさん2006/06/11(日) 21:42:55ID:???
今日Perl始めた新米なんだが、例えば
sub test {

$a = 5

}
sub test2 {

print "値は$aだお\n";

}
みたいなノリで、”test”サブルーチン内の変数を”test2”のサブルーチン内で使うことってできる?
上のだとうまく行かなくて…
0450nobodyさん2006/06/11(日) 21:57:42ID:???
もちろんできるよ。ちゃんと定義したサブルーチンを呼び出してる?
パッケージ変数(グローバル変数)を使う時はなるべく our で宣言しておいた方がわかりやすい。
後々「use strict;」を覚えた時にこの事は役に立つはず。

our $a = 0;

sub test { $a = 5; }
sub test2 { print "値は$aだお\n"; }

test();
test2();

実行結果:値は5だお

ところで、 $a と $b はソートに使う特殊な変数なので、なるべく使わない方がいいよ。$c 以降は問題ない。
0451nobodyさん2006/06/11(日) 23:45:03ID:???
>>449
>$a = 5
0452nobodyさん2006/06/11(日) 23:50:12ID:???
だから、いくらサンプルなり例だったりしても$aとか$bは使うなよorz
0453nobodyさん2006/06/12(月) 00:00:13ID:???
漢は黙って$hoge, $fuga


ただしドメインの例示だけはexample.com
0454nobodyさん2006/06/12(月) 01:00:03ID:???
オレは$yakiniku, $oyakodon, $namahamu
0455nobodyさん2006/06/12(月) 01:01:25ID:???
hoge fuga に続くものってなんなんかな。5つくらいだしたいときって例に悩むわ。
foo bar だと baz, qux, quux, corge, grault, garply, waldo, fred, plugh, xyzzy, thud とかあるんだけど
0456nobodyさん2006/06/12(月) 01:02:57ID:???
>foo bar だと baz, qux, quux, corge, grault, garply, waldo, fred, plugh, xyzzy, thud とかあるんだけど
初めて知った
0457nobodyさん2006/06/12(月) 01:12:21ID:???
$hoge, $fugaみたいなのって意味あるのかな?
それともただ"ほげほげふがふが"?(ダレてるときの擬音??)

そういえば変数名でよくみかける$lnがピンとこない。
$imgとか$cntだったらパッとみて内容を想像できるんだけど
lnは何を略してるんですか!!
入ってる内容から察するにlineですかね?(´・ω・`)
■ このスレッドは過去ログ倉庫に格納されています