トップページ⇒php
981コメント366KB

【Perl 】初心者コーナーPart6

■ このスレッドは過去ログ倉庫に格納されています
0001undefさん2001/07/26(木) 00:40ID:???
初めて来た方、初心者はまずこのスレッドから始めよう。
尋ねる前に同じ質問がないかこのスレや旧スレ、及び>>2のリンクを一通り見てみよう。
案外答えはもう書かれているかもしれない。
0401名無しさん@お腹いっぱい。2001/08/13(月) 16:35ID:???
Active Perl をローカルで使ってテキストを処理したとき
改行コードを \n にしても \r にしても、同じ結果になるんだけど、(0D 0A だったかな)
回避方法あります? わざわざ、サーバにアップロードするのは面倒なんで…
0402名無しさん@お腹いっぱい。2001/08/13(月) 16:55ID:???
>>401 perldoc -f binmode
04033992001/08/13(月) 17:16ID:JzeNXb.k
>>400
失礼。説明が足りませんでした。
SOSヘッダ付けたperlスクリプトにD&Dでファイル渡すとショートファイルネームで引数に渡されるのです。
で、渡されたファイル名を出力したいんですが、その時にロングファイルネームで出力したいんです。
なのでショートファイルネームをロングファイルネームに変換する方法教えて〜ん。
0404◆/InUhgpU2001/08/13(月) 18:52ID:???
Win32::GetLongPathName()
04054012001/08/13(月) 21:57ID:???
>>402
ありがとうございます。できました。
04063992001/08/13(月) 22:24ID:???
>>404
それそれー
あんがとーん。
0407名無しさん@お腹いっぱい。2001/08/13(月) 22:41ID:7FPat022
PERL5.6のバグ?

my($str) = q{1  2  3  4  5  6};

if ($str =~ m/^(?:[^\t]*\t){4}5/) {
  print 'OK';
} else {
  print 'NG';
}
print "\n";


下記のコードですが、
perl5.005はOK
perl5.6はNG
になります。
※タブは全角スペースに変換してます。

分かる方いますか?

ちなみに、
m/^(?:[^\t]*\t){3}[^\t]*\t5/
はとおります。。謎
0408◆/InUhgpU2001/08/13(月) 23:09ID:???
1〜6の間もタブなんだよな?
qq{1\t2\t3\t4\t5\t6};
なら"OK"になるが。
当方ActivePerl5.6.1…

ってアレ?5.6.0だとNGだな…何故だろう。
0409UUDH2001/08/13(月) 23:42ID:???
@test2 = ("miyata<>21<>men<>","yokoi<>39<>women","nagata<>26<>men","yanase<>26<>men",);
foreach (@test2){
@temp = split (/<>/ ,$_);
if ($temp[0] eq yokoi){
next;
}else{
push (@out,"$temp[0]<>$temp[1]<>$temp[2]<>\n");
}
}
print "@out\n";

とすると、何故か2行目の頭から空白が入ってしまいます。
もう正規表現とかで何でもかんでも取り払っても入ってしまいます。
3日たって何が何かわからなくなってきました。、、、、
0410名無しさん@お腹いっぱい。2001/08/13(月) 23:55ID:???
>>409
俺も良くわからないけど改行コードの問題な気がする・・・。
0411◆2O1OO1O22001/08/13(月) 23:56ID:9/vbk82Q
>>409
> print "@out\n";
配列をダブルクオートの中に入れると、要素の間にスペースが入る。
print @out;
でいいんじゃない?
0412名無しさん@お腹いっぱい。2001/08/13(月) 23:57ID:???
>>409
#最終行
print @out, "\n";
#or
local $" = "";
print "@out\n";

#yokoiはクォートしろ
0413名無しさん@お腹いっぱい。2001/08/14(火) 02:51ID:???
>>398
このスレではわからん
0414UUDH2001/08/14(火) 04:30ID:???
あぁ〜 神です!!、このスレには神が居るです!
>>410
僕もそう思いましてあちこちで\wと\d以外は全部捨てたりしてみたんですが
解決できなくて、、まさか一番最後だったとわ
>>411
今まで " は有っても無くてもほぼ良し、位に思い込んでました。
ダメだなぁ、、今KENTさんのチャット見るとやっぱり裸のまま
printしていました。
まだコンテキストが良く理解出来てない様で度々こう言うトラブル
に見舞われています 
>>412
これはどちらも絶対解らなかったです。
. じゃ無くて , なんですね。 初心者本には載ってないなぁ
方法2の方は局所的に " を意味の無いものにすると言う感じでしょうか
localも使うこと有るんですね、ふかいッス 
>#yokoiはクォートしろ
YES SIR!!!、ゴチャゴチャしていて段々無茶苦茶になっていました

一人だと絶対自己解決出来なかったです。 大感謝です!!>>みなさん
きっと良書を沢山読んでいるから、こう言う事で躓かないんですよね
まだ結城さんの本と、WEBだけで粘ってるのですが、ちょっと限界かなぁ。。
書籍スレを読み直してみます。
プログラミングPerlとか買っちゃっても大丈夫かな、、  (^^;)

もう一回PART1から読み直してみよう、有難うッス>>みなみなさま
0415UUDH2001/08/14(火) 05:00ID:???
@test = ('hokkaidou','aomori','yamanashi','iwate','tokyo','kyoto');
$scalar1 = @test;
$scalar2 = "@test";
print '配列が裸で評価されると・・・'."\n";
print "$scalar1\n".'↑要素数が返る'."\n\n";
print ' " で括って評価されると・・・'."\n";
print "$scalar2\n".'↑要素を空白で区切ったものが返る'."\n";

うれしかたので、カキカキ、、、
配列の中? がカンマデリミタになってると思い込んでたのが気付かなかた
原因でした それ位カンマが出力されない時点で気付けよ=>漏れ (;´Д`)
0416名無しさん@お腹いっぱい。2001/08/14(火) 05:23ID:???
>>414
> 方法2の方は局所的に " を意味の無いものにすると言う感じでしょうか
これって、local $" = ""; のほうって事?
これは配列をダブルクォートの中に入れたときに要素間に入る文字列を定義してる。
デフォルトはスペースになってる。ためしに$" = ":" とかやってみると良いよ。
こういう特殊変数はラクダ本に全部載ってるし、やっぱラクダ本買うべし。
0417名無しさん@お腹いっぱい。2001/08/14(火) 08:23ID:GO0JN5uY
/を
クエリーストリングで扱う方法ってないですか?
/もクエリーストリングとして扱いたいのです
04184172001/08/14(火) 11:24ID:GO0JN5uY
すんまンソ
できた。っていうか勘違い
0419名無しさん@お腹いっぱい。2001/08/14(火) 14:51ID:???
クエリーストリングという表現を初めて見た。
いや別に間違っちゃいないけどね…。
0420KENT-WEB2001/08/14(火) 16:03ID:???
    /   ̄  \
  /    イヤー笑った笑った
KENT-WEBのギャグは素晴らしい
簡単なスクリプトを複雑に記述し
一見難しいスクリプトに見せかけている\
  /     ⌒  ⌒  |
 |      (・)(・)  |
 |   三  ○  三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 |     ___  |  < hello world!からやりなおせ。
  |\   \_/ /    | サイトのパーミッション777にしろ。
  \ \___//     \_________
   \_/  \/
     |==|
      \Ω/
死ね・くたばれ・消えろ・失せろ・潰れろ・馬鹿・あほ・間抜け。ドジ・ 無能。
0421名無しさん@お腹いっぱい。2001/08/14(火) 16:07ID:???
誤爆かよぅ・・・・ -_-
0422名無しさん@お腹いっぱい。2001/08/14(火) 17:38ID:xRewybvc
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=997612896
で訊くよりもここにこいと言われました。
f2sでGDモジュールを使いたいのですが、
モジュールってインストールする必要があるんですよね?
>telnet.cgi かなんかを使って自分のスペース上でインストールする。
>次に、GD モジュールについて同じことをする。
と教えられたのですが、telnet.cgiはどこで配布されているのですか?
0423名無しさん@お腹いっぱい。2001/08/14(火) 17:52ID:???
http://www.catkk.co.jp/gu/telnet/
これか?
0424名無しさん@お腹いっぱい。2001/08/14(火) 18:09ID:xRewybvc
>>423
ありがとうございます。
使い方が分かりません。書いてある通り
アップロードしてタイトルの「$ownhost」というようなのを
CGIファイルの「$Host」に設定し再アップロードしましたが、
そこからがわかりません。手順を簡単にで結構ですので、
説明していただけませんか。
0425名無しさん@お腹いっぱい。2001/08/14(火) 19:46ID:???
gethostbyしてないから$ownhostにhostが入ったりipaddressが
入ったりする、F2sは使ったこと無いからわからんから
論理行の13行目を
$Host = $ENV{'REMOTE_HOST'}; にしちゃえ

後は上の方の設定をちゃんとして、作業が終わったら
*****速攻で*****削除する事だ
ccが使えないとか言うなよ
0426UUDH2001/08/14(火) 20:38ID:???
>>416
はぅっ、まだ間違えてる、、、思いっきり特殊変数じゃん、、、
いつも @aray = ('1','2'); とかしてるんで 勝手にデフォルトのバウンダリは
コンマだと思い込んでたのがいけなかったみたいです。
>やっぱラクダ本買うべし。
了解!! まだ持って無いけど他の皆さんにも推奨  (わ
サンキューです。
0427名無しさん@お腹いっぱい。2001/08/14(火) 20:39ID:???
今、掲示板のデータファイルから、
画像URLを読み込んで画像を表示させてるのです。
決まった縦横サイズの画像だけを表示させたいのですが、
何か画像情報を取得する方法はありますでしょうか?
0428名無しさん@お腹いっぱい。2001/08/14(火) 22:20ID:???
>>427
画像のフォーマット調べれば取得できるけど。

まあ、面倒ならこれ使うとか。
http://www-power.net/cgi/other/library/stdio/reference/
の getImageSize()
0429名無しさん@お腹いっぱい。2001/08/14(火) 22:25ID:???
そのものズバリImage::Sizeがある
0430名無しさん@お腹いっぱい。2001/08/15(水) 00:56ID:???
>>416 >>426

特殊変数なら perlvar に全て書いてあるし、
邦訳青ラクダ本って内容が5.003の頃のだから古い。
ラクダ本に書かれている事は同じ内容でドキュメントにも書かれてる。
そのドキュメントの邦訳も存在する。

これでも推奨?
0431名無しさん@お腹いっぱい。2001/08/15(水) 01:14ID:???
>>430
> そのドキュメントの邦訳も存在する。
どこの事ですか?
0432名無しさん@お腹いっぱい。2001/08/15(水) 01:30ID:avupzYrQ
>>431
http://www.att.or.jp/perl/man/
こことかじゃない?
でも、自分で、探してよ・・・。
0433名無しさん@お腹いっぱい。2001/08/15(水) 01:58ID:???
Perl5.6.0ベースのドキュメントの邦訳があれば折れは要らんかな。
でも紙とWebページじゃ読みやすさが全然違うので初心者には奨励する。
04344272001/08/15(水) 02:31ID:???
>>428 >>429
ありがとうございました。
getImageSize() を試してるのですが、pngの情報だけ読めず・・・.
どうしてなのか? うう。
0435名無しさん@お腹いっぱい。2001/08/15(水) 02:53ID:???
>>432
御免なさい。一応確認したかったもので。
0436名無しさん@お腹いっぱい。2001/08/16(木) 11:13ID:Z9iCsVz2
ご教授お願いいたしたく。

open関数で取得できるファイルリストの件数に上限はあるのでしょうか?
ファイル数が4000ちょっとまでなら取得できるのですが、それ以上存在する場合、
ファイルハンドルには空が返ってくる模様…
もし上限があるとするならば、どのように対処するのが吉でしょか?
よろしくお願いいたします。
0437名無しさん@お腹いっぱい。2001/08/16(木) 11:15ID:Dm7Pm6YQ
すみません。初心者質問です。
無名配列ってなんなのかいまいち掴めません。。
それにどんな事に使ったら有効か教えてください。。
お願いします。
0438名無しさん@お腹いっぱい。2001/08/16(木) 13:08ID:Z1NIPYXE
$abc_ref = ["a", "b", "c"];
とすれば、スカラー変数に無名配列のリファレンスが保存でけるでそ?
でさ、普通配列ってさ、(("a", "b", "c"), ("d", "e", "f"))みたく単純には階層化できません。
厳密に言うとスカラー値しか入れられないからね。
さっきの $abc_ref を使えばそれが出来るようになるってわけさ。
無名配列や無名ハッシュを使えば多重構造の変数が出来上がります。
0439名無しさん@お腹いっぱい2001/08/16(木) 15:43ID:.lon33X.
任意日付から曜日を求めるにはどうしたらいいですか?
0440名無しさん@お腹いっぱい。2001/08/16(木) 15:58ID:???
>>439
「日付 曜日 公式」とかで検索したらわらわら出てくるぞ。聞く前に自分で調べようね。
0441T女の竹田2001/08/16(木) 16:00ID:???
>>439
timelocal(Time::Local)とlocaltimeにかけるといいよ。
0442名無しさん@お腹いっぱい。2001/08/16(木) 22:54ID:???
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃  ただいま、ラウンジで大盛り上がりのブラウザ戦争ゲーム! .  ┃
 ビビー       ______________
 [>>8888888  ‖|*ENDLESS BATTLE@2ch*|‖      . \冂/
           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄     . E´∀` ヨi /7
 逝って良し!を発動。   . ミ从、;、;从 彡   ボシュッ .())  「/~'ー'~~ 7/ ̄ |
  ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ http://wwwwwwwww  ===二]匚ト〈‐〈iテ〈〈c iエコ
    ∧ ∧ [》∞∝     彡゙ ゙/;´ミ  ∧∧∧∧      []v/□ || ╋|
  冂(,,゚Д゚) ウマー   ボンッ | |(*゚Д゚)| <覚醒中!>     | j | |.|| ┃|
 | ̄\つ∧二ヽ       ∩ >->_>->_<要塞に  >    几0(几)L二!
 \_匚i_|∪∪i]      ((_(∴ヽヽ\(∴|当たる!>   ∠三ヲ/i二iヽ
   \_/二/  〜〜 /oヽヽ ,>─>ヽ ∨∨∨∨    __∧___
  [》∞∝         く。◎◎)=)__/)=)    ψ ζ     させるかあ!
                  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  恨み!復讐!英雄の誕生!生身の人間とのどろどろした戦闘!  ...

┃http://corn.2ch.net/test/read.cgi?bbs=entrance&key=997943180 .┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
0443名無しさん@お腹いっぱい。2001/08/16(木) 23:01ID:/rmEQXZ6
分岐して文章返す関数で、いちいち$ret .= 'ABC'; return $ret;ってやるのがめんどうなので、
print 'age'; print 'sage';
とやって
$buffer eq 'agesage';
にすることはできますか? できるならやりかた教えてください。
やりたいことは、printとか短い文での変数への書き込みです。

>>436 当方初心者ですが、システム依存のような気がします。
何やろうとしてそんなにファイル開くんですか?
0444名無しさん@お腹いっぱい。2001/08/17(金) 00:53ID:???
>>443
全然意味ワカンナイですけど。
print $buffer .= "age";
とか云うことじゃないよね?
0445名無しさん@お腹いっぱい。2001/08/17(金) 01:06ID:???
IO::Scalarというモジュールで
$foo = new IO::Scalar;
$foo->print("bar");
$foo->print("baz");
print $foo;# output "barbaz"
という書き方が出来る。
0446名無しさん@お腹いっぱい。2001/08/17(金) 01:14ID:???
>>443

#!/usr/bin/perl

package ScalarHandle;
use base 'Tie::Handle';

sub TIEHANDLE {
my $self = bless {}, shift;
$self->{_ref} = shift;
$self;
}

sub WRITE {
my ($self, $scalar, $len, $ofs) = @_;
my $_ref = $self->{_ref};
$$_ref = join '', $$_ref, $scalar;
$len;
}

package main;

my $buffer = '';
{
tie local(*H), ScalarHandle => \$buffer;
use SelectSaver;
my $saved_h = SelectSaver->new(\*H);

print 'hoge', 'foo';
}
print $buffer;

__END__
0447名無しさん@お腹いっぱい。2001/08/17(金) 01:51ID:???
余談だがIO::Scalarも
tie *Handle, 'IO::Scalar';
という使い方が可能だ。
04484432001/08/17(金) 03:13ID:???
ありがとうございます。 勉強になります。
>>445 あ、けっこうズバリなモジュールがあったんですね。
>>446
 むつかしくて読むのにだいぶ時間かかりましたが、なんとなくわかりました。
ファイルハンドルを上書き実装して、バッファの後ろに足していってるんですね。
>>447 こういうふうに使うと、多分4行くらいでできますね。

>>436
 モジュール調べてたらこんなの見つけた。
>FileCache:システムの制限よりも多くのファイルをオープンします
http://www.kt.rim.or.jp/~kbk/perl5.005/perlmodlib.html#Standard_Modules
0449名無しさん@お腹いっぱい。2001/08/17(金) 05:29ID:???
モジュールを試してみたのですがエラーが出てしまいます。

use CGI qw/:standard/;;
これを書いてやって、同じディレクトリにCGI.plを入れてみたんですが・・。
ちなみにWin98のHttpdです。
0450名無しさん@お腹いっぱい。2001/08/17(金) 13:59ID:???
CGI.plってはじめて聞いたけど、どこから入手したの?
あと、.plだからrequireじゃないかなぁと思われ(w
0451名無しさん@お腹いっぱい。2001/08/17(金) 18:13ID:f5KMH1QY
IISのサーバーでのトラブルなのですが、
自社IISサーバーで動いたCGIをクライアントのIISサーバーに移したら
書き込み処理だけができなくなってしまいました。
サーバーはエラーメッセージをださないので、サーバー側の設定で書き込み制限が
かかっているということは考えにくい状況です。
原因はどのようなものが考えられるでしょうか?
クライアントのサーバーを直接いじらせてもらえなくて、原因を特定しないと
解決できない状況で困っちゃってます。
よろしくお願いします。
0452名無しさん@お腹いっぱい。2001/08/17(金) 18:43ID:Oy6kpATQ
<input type=file name="upfile">
でローカル側からテキストファイルをサーバへアップロードさせるようなスクリプトは
どうしたら宜しいのでしょうか…?
0453名無しさん@お腹いっぱい。2001/08/17(金) 18:48ID:???
>>451-452 Perlの話ではないと思われ。スレ違い
0454名無しさん@お腹いっぱい。2001/08/17(金) 18:50ID:???
まぁまぁ
>>451
よく解らないけど Kcatchとかで解らないの?
0455名無しさん@お腹いっぱい。2001/08/17(金) 18:52ID:???
ああ。。アンタッチャブルなのね (;´Д`)
逝ってくる
0456名無しさん@お腹いっぱい。2001/08/17(金) 19:25ID:f5KMH1QY
>>
すみません。
他の適切なスレはどれでしょうか?

>>454
文法にはとくに問題ないようです。
0457名無しさん@お腹いっぱい。2001/08/17(金) 19:28ID:k3HSgI6s
PerlそのものではないがWebプログラムには関係するだろうってことで。

>>452
まあこんな感じで送れるはず

<FORM ACTION="CGIPATH" METHOD="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="upfile" SIZE="80">
</FORM>
0458名無しさん@お腹いっぱい。2001/08/17(金) 20:42ID:HfJszqSo
Linuxを使っているのですが、自分のマシンでの
CGIの動かし方がわかりません。
Apacheを使うのですか?
0459JAPU2001/08/17(金) 20:51ID:???
>>458
まずは、その辺で入門書を買ってくるのが吉かと。
04604582001/08/17(金) 20:53ID:HfJszqSo
あってもWindowsばっかでしょ。簡単なことなんだから
もったいぶらないで教えてください
0461名無しさん@お腹いっぱい。2001/08/17(金) 21:04ID:???
CGIを動かすのにApacheを使います。
確かにYes/Noを答えるのは簡単だね。
あと、Perl != CGI なのでスレ違い。
0462名無しさん@お腹いっぱい。2001/08/17(金) 21:23ID:oQcz5Ykw
sfioでperlコンパイルした人感想をお願いします。
0463名無しさん@お腹いっぱい。2001/08/17(金) 21:50ID:???
>あってもWindowsばっかでしょ。簡単なことなんだから
簡単なことなら質問しない。
あっごめんネタか(藁
04644522001/08/17(金) 21:56ID:Oy6kpATQ
そうですね。PerlでCGIスクリプト組んでいるものですから...
スレ違いすいません。
0465JAPU2001/08/17(金) 22:14ID:???
少し大きな本屋にでも行けばUNIX/Linuxの本くらいいくらでも売ってます。
yes/no で答えるのは簡単だけど、どうせ次は「Apache の設定が分かりません。」とかいう質問が来るだろうからね。だから、入門書を1冊買って、ある程度 (完全にとは言わない) 理解してくださいってこと。
0466名無しさん@お腹いっぱい。2001/08/17(金) 23:40ID:HfJszqSo
Apacheについては勿論Linux系サイトで調べます。
ここはスクリプトでプログラマ気取りのが多いですから(^^;
0467さげ2001/08/17(金) 23:58ID:???
>>466はあおりバカ厨
0468名無しさん@お腹いっぱい。2001/08/18(土) 00:00ID:???
>>458
1.回線を切ります。
2.ロープを用意します。
3.ロープの片端で30cm程度の輪っかをつくります。
4.ロープの逆端を適当な高さにつるします。
5.輪っかに首を引っ掛けてください。
0469名無しさん@お腹いっぱい。2001/08/18(土) 00:11ID:???
>>
漏れもそれが一番手っ取り早いと思う。
精進しろよ>>468
04704692001/08/18(土) 00:12ID:???
ちゃう
最初の>>が>>468で後のが>>458ね
0471名無しさん@お腹いっぱい。2001/08/18(土) 00:23ID:???
>466
Perl=CGIと思ってる厨房は逝ってよし!
「CGIだけど、なんか質問ある?」ならきちんと答えたよ。
0472名無しさん@お腹いっぱい。2001/08/18(土) 01:44ID:???
つーか Perl も C++ も似たようなもんだ。
文法や仕組みが少し違うくらいで。
言語に差があるとか思ってるヤツの方が痛い、と思うぜ (´ー`)y−~
0473名無しさん@お腹いっぱい。2001/08/18(土) 01:53ID:FWE7cxsw
win2k+activeperl+apacheの環境でCGI作ってるんですが、
作成中、無限ループしちゃった場合、どうやって止めるんですか?
タスクマネージャーで、perlのプロセスを終了させようとしますが、
「権限がない」とかなんとかで、終了が出来ません。
結局再起動するはめになってしまいます。

何か、強制終了させる方法はないんでしょうか?
0474名無しさん@お腹いっぱい。2001/08/18(土) 05:52ID:???
>472
と思っているならプログラム板のC++のところにいってPerlもしくはCGIの
質問して下さい。ここには二度と来なくていいよ。

C++のスレにWindowsの環境のことなんか聞かないよね?それと同じ事。
専用のスレがきちんとあるのに、それが解からないのが厨房だって言ってるの。
0475名無しさん@お腹いっぱい。2001/08/18(土) 06:17ID:???
>>474
いや>>472はどーみても>>466の煽り(?)に反応してるだけだと思うが…

つか前半と後半の文が繋がってないぞ。
0476なんと言うか2001/08/18(土) 06:33ID:???
酷いな・・・・・
0477質問スレで2001/08/18(土) 08:06ID:???
議論すんなよ
0478名無しさん@お腹いっぱい。2001/08/18(土) 15:18ID:???
皆さんは全ての変数を宣言しますか?

#!/usr/local/bin/perl

$hoge = 0;
&hogege;

sub hogege{
 print "hoge";
 exit;
}

って感じの時、ちゃんと

my hoge = 0;

って風にするかどうか。
0479名無しさん@お腹いっぱい。2001/08/18(土) 15:19ID:???
ああっ、$ が抜けてる…ミス。
0480名無しさん@お腹いっぱい。2001/08/18(土) 16:02ID:DQB0LabM
>>478
初期値は 0 か 空文字列だから、>>478 のような宣言はしないよ。
変更する必要があったら適宜初期化すればいいことだと思う。
0481別の初心者2001/08/18(土) 16:12ID:???
では、他の言語の様に初期化忘れで嵌るシーンとは
どういった局面でしょうか。
まだそんな事気にする事ないのかな。。
0482 2001/08/18(土) 16:51ID:58tnIP9Q
そもそもグローバル変数使う事はほとんどない。
0483JAPU2001/08/18(土) 16:53ID:???
変数名 typo したときはまるねぇ。
使い捨て以外は use strict; なのできちんと宣言する。
0484名無しさん@お腹いっぱい。2001/08/18(土) 18:38ID:???
んーとねぇ、use strict; で動かしたい時以外は特に宣言しない。

#!/usr/local/bin/perl

$hoge = 0;

&hogeho;
&hogege;

sub hogege{
 print "$hoge";
 exit;
}

sub hogeho{
 $hoge++;
}

って時はそのまま。
でもラクダ本ではきちんと全部宣言してたような気がする。
0485名無しさん@お腹いっぱい。2001/08/18(土) 18:39ID:???
あ、サブルーチン内でしか使わないことが解ってる変数はちゃんと宣言するよ。
れきしかるマンセー
0486 2001/08/18(土) 18:55ID:58tnIP9Q
整数入れるときは
our $hoge = 0;
か
our $iHoge;

文字列のときは
our $hoge = "";
か
our $sHoge;

にしてる。
0487名無しさん@お腹いっぱい。2001/08/18(土) 19:01ID:???
素材屋(って言って良いのかは知らんが)とかで配布してる掲示板とか、
上の方に設定項目がずらーっと並んでるじゃない。

$script = "./script.cgi"; #このスクリプトのパス
$backcolor = "#ffffff"; #背景色
$textcolor = "#000000"; #文字色

って感じで。
そういうスクリプトを組む時はどうする?
0488奈々資産2001/08/18(土) 19:13ID:58tnIP9Q
全部スクリプトと分けて設定ファイルを別にしてる。
-----
P_SCRIPT=./script.cgi
C_BACK=#ffffff
C_TEXT=#000000
-----
のようなKey=Value形式のWindowsのINI形式に似たような設定ファイル
の処理するクラスを作っておいて

my $obj_conf = new CIni(FILE => $file_conf);
my %USR_CONF = $obj_conf->ReadAll();

みたいにしてる。
04894862001/08/18(土) 19:15ID:???
他のHN入ってた
0490名無しさん@お腹いっぱい。2001/08/18(土) 19:17ID:???
単純に pl ファイル作って require で読み込んでも良い気はするな。
0491名無しさん@お腹いっぱい。2001/08/18(土) 19:17ID:???
うーん、俺もそんな感じ。
でももっと適当かな。
my %conf = ReadCofigureFile($filename);
だね。
$conf{BGCOLOR} とかでアクセス。
0492名無しさん@お腹いっぱい。2001/08/18(土) 20:37ID:???
#init.pl
%CONFIG = (
foo => "bar",
);
#EOF
としてrequireするな。
%CONFIGはvarsなりourなりで宣言しておく。
とりあえず何か理由が無い限り必ず宣言するよ。
0493別の初心者 2001/08/19(日) 00:27ID:???
なるほどー、勉強になりますー、
サブルーチンとかクラスを使いこなせる様に
なればその辺の悩みとは無縁になるのかな。
悪い癖が付くと後で大変かなとおもったんで
でもstrict とか -wcすると五月蝿いからなぁ  サササッ(((((^ ^ )
0494名無しさん2001/08/19(日) 12:38ID:FfPXw2rY
過去ログ検索しましたが、該当する内容がなさそうだったので質問させて頂きます。
フリーのCGIをアップして利用しようとしていたところ、どうしてもサーバーエラー
になります。
telnetで実行すると、正常に返ってくるのですが…。
今までこのような現象に遭遇したことがなかったので、どうしたらいいか困ってます。
よろしくお願いします。
0495名無しさん@お腹いっぱい。2001/08/19(日) 13:00ID:???
>>494
CGIスクリプトの名前くらい書いたらどうだ。
とりあえずKCatch.pmでも使っとけ
0496名無しさん@お腹いっぱい。2001/08/19(日) 13:48ID:qKl.cEXQ
日付のデータをyyyymmddの形式で持ってるとして
(例20010101)これの翌日とか前日を簡単に
求める方法ってないですか?
いろいろやってみたんですが、なかなか
すっきりしたスクリプトにならなくて悩んでます。
0497名無しさん@お腹いっぱい。2001/08/19(日) 14:08ID:Mz6GQnDY
Date::Calc を使えばラク。

use Date::Calc qw(Add_Delta_Days);

$date = 20010101;
$delta = -1; # 一日前を求める。
@date = ($date =~/(\d{4})(\d{2}(\d{2}/);
@newdate = Add_Delta_Days(@date, delta);
$newdate = join '', @newdate;
04984972001/08/19(日) 14:09ID:???
あ、間違えてる。
@date = ($date =~/(\d{4})(\d{2})(\d{2})/);
04994962001/08/19(日) 22:38ID:Oo9DGM7o
467さんありがとうございます。
自分でも調べてみたらTime::Local
っていうのもありました。
(こっちは手順がちょっと複雑になりそうですが)
Date::Calcが標準モジュールだったら、
こっちの方が楽そうですね。助かりました。
0500名無しさん@お腹いっぱい。2001/08/20(月) 10:04ID:..QkqNpI
sendmailを使って一括送信する時に負担を分配するように
数回に分けて送信するようにしたいのですがどのようにしたら良いのでしょうか?
0501名無しさん@お腹いっぱい。2001/08/20(月) 11:03ID:???
>>500
そのようにしたら良いんじゃないでしょうか。

CGIで[最大100件の送信者リスト]*nを作成→cronで送信
■ このスレッドは過去ログ倉庫に格納されています