Perlコーディング初心者質問スレ Part 41
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
05/03/10 00:47:16ID:sT66OcmD【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0577573
2005/04/20(水) 09:47:22ID:???昨日一人で考え込んで明け方になっちゃったんだけど、
まさか起きたらもうレスがついてるとは思わなかったよ。
>>576の言うとおりだね。厚意をありがたく思います。
つか、>>575をコピペでいけちゃいそうだぞw 申し訳ないっす。
0578nobodyさん
2005/04/20(水) 18:30:18ID:???>>575だけどさ、まあいいってことよ。
その代わり、Perlを宣伝しろよな。
Perlに利害関係があるわけじゃないけどさ、このごろrubyが
幅利かせすぎだよね。
0579nobodyさん
2005/04/20(水) 18:33:21ID:???>過疎地だから、飛び入りにはやさしいスレです。
1年前or半年前くらいは、すっごいレスの伸び様だったがな。
何かさ、やっぱrubyに食われてる?それともphpか。
0580nobodyさん
2005/04/20(水) 20:02:41ID:???rubyやpythonに行くぐらいならjavaがいいや。
phpはApacheとの連携が強力なのでいっそJakarta Projectに
加わってApacheの標準Scriptの地位を固めてくれんかな。
0581nobodyさん
2005/04/20(水) 21:49:51ID:???while(<DATA>){
split/\t/;
$_[0]=~s/\/\d+$//;
$hash{$_[0]}{$_[1]}{miko} += $_[2];
$hash{$_[0]}{$_[1]}{kaku} += $_[3];
}
foreach my $tuki(sort{$a<=>$b} keys %hash){
print "$tuki月\n";
foreach my $name(sort keys %{$hash{$tuki}}){
print "$name:\t見込=$hash{$tuki}{$name}{miko}\t売上確定=$hash{$tuki}{$name}{kaku}\n";
}
}
0582nobodyさん
2005/04/20(水) 22:12:44ID:???0583nobodyさん
2005/04/21(木) 03:11:08ID:???a.cgi?k=1のようにアドレスバーに引数を含むアドレスが表示されますよね
CGIゲームなどをやっているとこの引数が表示されない場合があるのですが
そういう風に引数を見えなくするにはどうしたらいいのでしょうか
0584nobodyさん
2005/04/21(木) 03:31:43ID:???CGIスレとかWeb制作板で聞いてね
0585nobodyさん
2005/04/21(木) 09:48:59ID:u958lKZ/スクリプトを手動で実行すると動くのですが、cronから実行すると
ライブラリが見つからないと怒られてしまい困ってます。
0586nobodyさん
2005/04/21(木) 10:05:27ID:???0587nobodyさん
2005/04/21(木) 11:02:48ID:???全部グローバル変数でやってまして最近my変数を覚えたんですけど、
KENTの掲示板などを落として見てみてもmy変数使って無いですし、
そんなに長い処理でもないと思うので、そこまで気を遣う必要ってないのでしょうか。
自作しているのは、サブルーチンの階層も深くて2つまでです。
0588nobodyさん
2005/04/21(木) 16:44:18ID:???0590nobodyさん
2005/04/21(木) 17:56:10ID:???myは便利だよ。 もう my のない世界なんて考えられないって程に。
0591nobodyさん
2005/04/21(木) 18:24:00ID:???直せるうちに直しておいた方が、後で改造するときに分かりやすいと思う。
変数名なんて三日も空けば忘れるからな。
ちょっと手間をかけておく事で、後の面倒を大きく減らせる。
他のプログラム言語なんかも学ぶなら、my変数のような考え方は必須になる。
グローバル関数を無くし関数の独立性を高めるという考えは、カプセル化、そしてオブジェクト指向に繋がっていく。
0592nobodyさん
2005/04/21(木) 18:43:42ID:???0593nobodyさん
2005/04/21(木) 20:42:56ID:???詳しく。
0594nobodyさん
2005/04/21(木) 22:24:07ID:???0595nobodyさん
2005/04/21(木) 22:54:38ID:???0596nobodyさん
2005/04/22(金) 07:08:46ID:0S2C2eid0597nobodyさん
2005/04/22(金) 07:26:56ID:???Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/
Win なら
http://homepage3.nifty.com/hippo2000/perltips/perllha.htm
やりたい事によっては system() で lha(1) を使った方が早いかも。
0598nobodyさん
2005/04/22(金) 07:41:56ID:???そこでで聞いてみるっす
0599nobodyさん
2005/04/22(金) 16:04:20ID:???ググっても出ないorz
0600nobodyさん
2005/04/22(金) 16:07:04ID:???すんません
わかりました
0601nobodyさん
2005/04/22(金) 16:42:34ID:???0602nobodyさん
2005/04/22(金) 18:59:27ID:???これをもうちょっとこざっぱりとまとめて書きたいんですが…
どうしたらいいでしょうか?
0603nobodyさん
2005/04/22(金) 19:09:20ID:???0604nobodyさん
2005/04/22(金) 23:09:20ID:???この例で、$hensu1 にどのような文字列が来るか分からない時は、
必ず、
$aa=~s/\Q$hensu1/$hensu2/g;
とすべきなのでしょうか?
また、例えば、
$aa="ポっポっポ、はとポっポ";
$aa=~s/ポ/ぽ/g;
print $aa;
これでは、文字が化け化けで、
$aa="ポっポっポ、はとポっポ";
$aa=~s/\Qポ/ぽ/g;
print $aa;
とすれば正常になりますが、「ポ」と同じように\Qでクォートしなければ
いけない文字は、他に何がありますか?というか、どのような理屈で
クォートしなければいけないのでしょうか?
0606nobodyさん
2005/04/22(金) 23:15:23ID:???perl -e '$a0=1; $a1=2; $a2=3; for(0..9){print "$a$_\n";}'
みたいなんで$a0から$anまでの変数を作りたいんですが、これじゃ
変数名としてつながってくれないんです。
0607nobodyさん
2005/04/22(金) 23:39:50ID:???詳しくは「シンボリックリファレンス」をキーワードに調べてくれ。
しかし一応できるこたできるが、よっぽど特殊なことをやろうと
言うんじゃない限りはじめから配列かハッシュ使ったほうがいいと
思われ。
0609nobodyさん
2005/04/23(土) 12:37:33ID:???それとも、配列を使えない事情があるのか?
>607のコードが使える状況で配列が使えない状況ってのが思いつかんのだが…
0610nobodyさん
2005/04/23(土) 13:52:44ID:???リファレンスは意外と馴染みやすい。
0611nobodyさん
2005/04/23(土) 17:56:38ID:???0612606=608
2005/04/23(土) 18:16:56ID:???ごみんなさい、わては>>602じゃないです。
もち>>602の場合は、配列でしょうが、
コマンドラインでワイルドカードを引数において、たくさんのファイルを
読んでそのファイル名に応じた変数を作りたかったのです。
便乗質問の積もりですた。
0615nobodyさん
2005/04/23(土) 21:08:01ID:???登録されたデータ(ログファイル)から任意の3つくらいを抽出したいのですが、
このとき重複しないような方法がわかりません。
具体的にいうと、タグを何個か1つのログに登録しておいてそのなかの3つくらいを重複しないようにランダムに出したいのです。
randでやったらどうしても重複してしまいます。
0617nobodyさん
2005/04/23(土) 21:44:19ID:???んじゃ、>>616さんと違う手法で、
ランダムに並べ替えてから、任意の3つを取る。
@tag = ('big','small','strong','table','input','img');
for(@tag){
$hoge = rand(@tag);
($tag[$_],$tag[$hoge]) = ($tag[$hoge],$tag[$_]);
}
for(0..2){
print "$tag[$_]\n";
}
0619nobodyさん
2005/04/23(土) 23:55:32ID:???my @bbb = (
['ab','ac','ad',], # 0
['be','bf',], # 1
['cg',], # 2
); # このようなデータを用意しておき、
my $data = "abc"; # というデータを与えた時に
my @list = ( 'abbecg', 'abbfcg', 'acbecg', 'acbfcg', 'adbecg', 'adbfcg', );
# @listのような配列を作り出したいのですがどなたか教えて下さい。
# (1) %aaaのa,b,cの部分は英数字と記号が入ります。
# %aaaの0,1,2はそれぞれ順番に数字を割り当てています。
# (2) @bbbの一次元目の数値は%aaaの0,1,2と一致します。
# @bbbの二次元目の要素数は固定ではなく変化します。
# (3) $dataは%aaaに該当するものがあった場合にのみ「a→ab」のように変化し、
# %aaaに該当するものが無い場合は「z→z」のように変化しません。
# 現在は以下のようにしてランダムに出力しているのですが、
# 今やりたいことは出力される可能性のある文字列全てを取り出したいのです。
# 分かりにくくてすいませんが宜しくお願い致します。
> my $compdata = "";
> for(split//,$data){
> if ( $#{$bbb[$aaa{$_}]} || $bbb[ $aaa{$_} ][0] ne "" ){
> $compdata .= $bbb[ $aaa{$_} ][ rand $#{$bbb[$aaa{$_}]} ];
> }else{
> $compdata .= $_;
> }
> }
0620nobodyさん
2005/04/24(日) 01:27:40ID:???my @list;
for (split //,$data){
my $comp;
if(defined $aaa{$_}){
$comp=$bbb[0]->[$aaa{$_}];
}else{
$comp=$_;
}
for (@{$bbb[1]}){
my $temp=$comp;
$comp.=$_;
for(@{$bbb[2]}){
my $temp=$comp;
$comp.=$_;
push @list, $comp;
$comp=$temp;
}
$comp=$temp;
}
$comp="";
}
for(@list){
print $_,"\n";
}
0621nobodyさん
2005/04/24(日) 01:31:30ID:???#!/usr/local/bin/perl
use strict;
my %order = (a => 0, b => 1, c => 2, d => 3);
my @data = (
[ 'ab', 'ac', 'ad' ],
[ 'be', 'bf' ],
[ 'cg' ],
[ 'dh', 'di' ],
);
my @result;
my_push(\@result, [ @data[@order{ split //, $ARGV[0] }] ]);
print join "\n", @result;
sub my_push {
my($result, $data, $i, $pre) = @_;
if ($i == $#{$data}) {
push @{$result}, map "$pre$_", @{$data->[$i]};
}
else {
my_push($result, $data, $i + 1, "$pre$_") for @{$data->[$i]};
}
}
0622619
2005/04/24(日) 02:01:01ID:???ありがとうございます。
言葉が足りずに申し訳ございません。目的のものとは違ったようです。
$dataの文字数は毎回異なります。
>>621さん
ありがとうございます。
分かりにくい表現で申し訳ございません。
入力される文字列は設定済みの文字列だけではなく、
> %order = (a => 0, b => 1, c => 2, d => 3);
ではa,b,c,dが設定済みですが、e,f,g...x,y,zのような、
未定義の値が入力されることもあり、その場合は変化しないように出来ると嬉しいです。
とはいえ、後は何とかなりそうなの気がするので頑張ってみます。
お二方、本当にありがとうございました。
書き込みしてからも色々と調べていたのですが、
my %CCC = (
'a' => ['ab','ac','ad',],
'b' => ['be','bf',],
'c' => ['cg',],
);
こんな書き方も出来るのですね。
本当にありがとうございました。
引き続き頑張ってみます。
また、分からないことがあったら宜しくお願い致します。
0623nobodyさん
2005/04/24(日) 02:16:56ID:???0624nobodyさん
2005/04/25(月) 08:46:28ID:???$var =~ m/nantoka/igo; = $var =~ /nantoka/igo;
mって使う必要ないと思うんだけど、みなさん、いつ使ってます?
0625nobodyさん
2005/04/25(月) 11:04:05ID:???'/' を正規表現に含める時。
/^([^\/]*)\/([^\/]+)\/(.*)\z/;
/^ ([^\/]*) \/ ([^\/]+) \/ (.*) \z/x;
m|^([^/]*)/([^/]+)/(.*)\z|;
m|^ ([^/]*) / ([^/]+) / (.*) \z|x;
0627nobodyさん
2005/04/25(月) 16:13:33ID:???0628nobodyさん
2005/04/25(月) 20:42:14ID:???レスありがとうございます。
なるほど、/のエスケープを省略したいときですね。
誤りたいとき使うとまた誤らなきゃですね(w
どもども。
0629nobodyさん
2005/04/26(火) 12:58:40ID:???0630nobodyさん
2005/04/26(火) 14:53:35ID:???@list($h01,$h02,$h03)
$h01〜03に、例えばそれぞれ0,0,1と代入されている時
@listの中のどの変数に1と入っているかを確認するには?indexを使うんでしょうか?
if (@list==1) {・・・(以下続く)
これは間違ってる書き方ですがorz、
こんな風に『@listの中の変数のどれかが1であれば・・・』と
条件文の中に組込みたいのです。
0631nobodyさん
2005/04/26(火) 14:53:56ID:OvccyAYT0632nobodyさん
2005/04/26(火) 15:00:58ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_tell_whether_an_list_o
0633nobodyさん
2005/04/26(火) 17:41:53ID:???ありがとう!やってみます。
0634nobodyさん
2005/04/26(火) 18:10:21ID:6+zG2+f5$aaaが一定以上の値になった時、変動する$aaaをその値以上に固定する
というのはどう書けばいいでしょう?
if ($aaa >= 10) { $aaa != 10 ;}
何か違う・・・orz
0635nobodyさん
2005/04/26(火) 18:41:56ID:???0636nobodyさん
2005/04/26(火) 18:49:53ID:???すみません、説明が悪かったです・・・
$aaaは10以下にはならず、10以上の値には変動できる、という書き方です。
!を消すと$aaaは10、になってしまうので。。
0637nobodyさん
2005/04/26(火) 20:13:05ID:???10以下ならもう一度変動させれば?
あと「以下」と「以上」の使い方がおかしい。
10はどっちにも含まれるぞ?
0638nobodyさん
2005/04/26(火) 20:34:12ID:???乱数なのか、ユーザの入力値なのか、1ずつ減るカウンタ用の変数なのか、二次関数みたいな関数の値なのか。
$aaaに10を代入するのは何故いけないの?
$aaaに10を加算するだけでは駄目?
0639nobodyさん
2005/04/26(火) 20:37:06ID:6+zG2+f5ほ、ほんとだすみません、10未満にはならず、10以上の値には変動できる、です。
>もう一度変動させれば?
言われて気付いたんですが・・・、ここで出た結果のみで判断させたいんですorz
if ($aaa >= 10) { !($aaa <= 10) }
これだと10以上ではない、と言うだけですよねアー
0640634
2005/04/26(火) 20:47:57ID:???ええと、説明下手なんですが・・・
>ユーザーの入力値
はい、そんな感じです。
$aaaは値が1ずつ加算されて、上限(例えば100)で止まる、といった動きをします。
ゲームなどで得点が1ずつ増えていくような・・・
なので、代入や一気に加算する、といった性質の変数ではないです。
0641nobodyさん
2005/04/26(火) 22:12:18ID:???その処理をするには、3つの値(変数)が必要なんですよ。
1. 変動する値 (1ずつ加算される値)
2. 上限値 (100)
3. 保持する値 (上限値に達するまでは1と一致して、それ以降は2と一致)
文章で書くと$aaaと表現するので分かり辛いかも知れないですけど、
1.を比較等の色々の処理をした結果が3.になるわけで、これを1つの変数$aaaで表す事はできません。
0642634
2005/04/26(火) 22:41:02ID:Bt64jE3X詳説、ありがとうございます。目から鱗です。orz
変動する値の$aaaと、上限値$bbb、保持する為の変数が$ccc
$bbb=100;
#ここで$aaaを1ずつ足していく
#で、もし$aaaが10に達したら・・・
if ($aaa >= 10) {
・・・・この先がわかりません・・・
0646638
2005/04/27(水) 02:39:01ID:???比較と代入の理解が滅茶苦茶だな。
<=とか==とか<は比較をするだけで、値を変化させるわけじゃないぞ。
if($aaa > $bbb) $ccc = $bbb;
else $ccc = $aaa;
お前が本当にやりたい処理は
「$aaaが上限値($bbb)より大きいときは、$aaaを上限値にする」じゃないか?
ちょっと落ち着いて、場合分けして考えてみるといい。
個人的には
if($aaa > $bbb) $aaa = $bbb;
でじゅうぶんな予感もする。
上限値に切り揃える前の点数のデータが不要ならば、の話だけど。
0647638
2005/04/27(水) 02:40:06ID:???>「$aaaが上限値($bbb)より大きいときは、$aaaを上限値にする」
ちょっと誤解を招く表記だな。
「$aaaが上限値($bbb)より大きいときは、$aaaを上限値と等しい値にする」
に訂正。
0648nobodyさん
2005/04/27(水) 02:49:37ID:???0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20...
これをどう変動させたいのだ?
0649nobodyさん
2005/04/27(水) 09:44:59ID:???他のところで何やっても10までしか上がらない
ということを希望してるのか?
それだったら、$aaa 専用のクラスを一つ作って、専用の add() メソッドを実装しろ
$aaa 専用に += や ++ 演算子をオーバーロードするのも吉
0650nobodyさん
2005/04/27(水) 11:36:43ID:???0651634
2005/04/27(水) 12:41:57ID:???>比較と代入の理解が滅茶苦茶
はい、値を変化させるものではないのはわかっているんですが、表現が思いつかず・・・
>プログラムの一箇所で「この変数の値は絶対を超えません」と宣言すれば
>他のところで何やっても10までしか上がらない
はい、そんな感じです。
ただ、10までしか上がらないのではなく、10より下には下がらない、というのを希望しています。
add() メソッドは、調べてみたのですがちょっと難しくてわかりませんでした。
折角紹介してくださったのにすみません。
0652634
2005/04/27(水) 12:42:18ID:???余計何したいのかがわかりにくくなってしまいましたよね・・・・orz
下限0から始まって上限100で止まる
0から始まって、ユーザーの入力にあわせて1ずつ加算・減算されていく
(加算と減算は別のところで処理させるつもりでした)
0 1 2 3 4 5 6 7 8 9 10
10まで達したら、
11 12 13 14 15 16 17 18 19 20...
引き続き加算と減算が行われるが、一旦10以上になったら、
それ以降は減算されても値は10未満にはならず、10〜100の間で上下する
こんな動作をさせたいと思っていました・・・
0653nobodyさん
2005/04/27(水) 13:05:03ID:???10を越えた時点でフラグを立てればいいんじゃないの
if ($aaa >= 10) $flag = 1;
if ($flag && $aaa < 10) $aaa = 10;
0654nobodyさん
2005/04/27(水) 13:09:00ID:???一応突っ込んでおくが Perl にぶら下がり if は無い。
Perl のスレなんだから Perl で答えてやれよ。
0656nobodyさん
2005/04/27(水) 14:20:48ID:???0657654
2005/04/27(水) 14:39:18ID:???うーん、あまり一般的な表現ではないようだね。
Perl には if (EXPR) EXPR という構文は無くて、
必ず if (EXPR) BLOCK ないし EXPR if EXPR と
書かなければいけない、って言いたかったんだ。
http://www.nurs.or.jp/~sug/soft/super/macro.htm
での用法のように、if (EXPR) EXPR という構文の
事を「ぶら下がり if」と呼ぶと解釈してたよ。
本題と関係無い話でスレ汚しごめん。>ALL
0658652
2005/04/27(水) 15:01:10ID:FBojevS6$flag=0;
if ($aaa >= 10) {$flag = 1;}
#$aaaが10以上の場合、$flagが立つ
if ($flag= 0 && $aaa < 10) { $aaa = 10; }
#$flagが立っておらず、$aaaが10より小さい場合・・・$aaaは10
?????orz
10より下に行かないようにするって処理を
どう書いてやればいいのかわかりません・・・
0659nobodyさん
2005/04/27(水) 15:06:58ID:4gECGjaSphpの正規表現で
ereg(.*[EGG|EVA].*, $str);
とした場合、マッチするのは*****EGG****か*******EVA*******と言う
$strで良いのでしょうか?
0660nobodyさん
2005/04/27(水) 15:09:21ID:I4dBvpe7でelseをぶら下がり文に使った時に起きる問題がdangling else
>>658
おまえにプログラミングは無理だ
0661nobodyさん
2005/04/27(水) 15:11:46ID:4gECGjaS0662nobodyさん
2005/04/27(水) 15:47:03ID:???binmode(STDOUT,":encoding(charset)");
を使うと、必ず $! に Bad file descriptor と入ってしまうのですが、
どうにかならないのでしょうか。
調べてみても
「binmodeを使えばすでに開いているファイルハンドルにPerlIOレイヤを設定できる」
としか説明されておらず、このことには触れていないようなので、発生するのはActivePerlだけなのでしょうか…。
binmode(STDOUT,":utf8");
binmode(STDOUT,":bytes");
などの":encoding(charset)"が無いの場合は、エラーは起こりません。
shift_jisで出力したいので困ってしまって…。
0663nobodyさん
2005/04/27(水) 16:00:17ID:???基本的に「10より下にいかないようにする」ことはできないと思ってくれ
代わりに「10より下にいくたびに無理矢理10に戻す」処理を行なう
それも、スクリプト中の下にいきそうな可能性のある箇所全てで、ということになる
if ($flag= 0 && $aaa < 10) { $aaa = 10; } というのは
「もしフラグが立っていて、つまり $a が10以上になったことが過去あって、
しかも現在 $a が10を下回っていたら、$aを無理矢理10に戻す」
という意味だ
0664nobodyさん
2005/04/27(水) 16:17:40ID:???ああー、わかりました・・・!!!!
まずできる事とできない事の切り分けができていなかったんですねorz
今回のやり取り、ホント勉強になりました。皆さんありがとうございます。
0665nobodyさん
2005/04/27(水) 16:27:56ID:???つか $! にそのメッセージがセットされても -w 下で警告が出るわけで無し、
#!/usr/local/bin/perl -w
use strict; use Encode qw(from_to);
from_to(my $str = "いーゆーしーじぇーぴー\n", 'euc-jp' => 'utf8');
utf8::decode($str);
binmode STDOUT, ':encoding(shiftjis)';
print $str;
…でちゃんと Shift_JIS で出力されるし、何か困る?
#!/usr/local/bin/perl -w
use strict; use encoding 'euc-jp', STDOUT => 'shiftjis';
print "いーゆーしーじぇーぴー\n";
だと $! はセットされないね。
何にしても
<q cite="http://search.cpan.org/~nwclark/perl-5.8.6/pod/perlvar.pod#$!">
If used numerically, yields the current value of the C errno variable, or in
other words, if a system or library call fails, it sets this variable. This
means that the value of $! is meaningful only immediately after a failure:
</q>
だから、システムコール系の関数でエラーした時にそのエラー内容を
調べる以外の用途で $! の値を見ても意味無いよ。
0666nobodyさん
2005/04/27(水) 16:53:30ID:???なるほど、システムコールに失敗したとき以外の $! は何の意味も持たないんですね。
binmode(STDOUT,":shift_jis");
みたいな間違いをしたとき、期待した文字エンコーディングにならないだけで、
-wで警告もでなければ、エラーも起きず、$!を見てみると No such file or directory になっていたので、
これもまた表にでないエラーが起きているのかと思ってしまいました。
use encodingは、グローバルなんでちょっと使えませんでした。
他で何カ所かファイルを読み込むときに、それぞれのファイルの文字エンコーディングが統一されていない為です。
スッキリしました。
お返事、どうもありがとうございます。
0667nobodyさん
2005/04/27(水) 16:58:33ID:???すいません、警告でてました…。
warningsToBrowserでは表示されないみたいですね。
コマンドラインから実行したらきっちり、Unknown PerlIO layerってでてました。
0668nobodyさん
2005/04/27(水) 19:09:04ID:???$bbb = 100;
#最初の入力プロンプトを出力
print "> ";
while(<STDIN>){
#入力が数値の場合、$aaaから入力分を減算
if(/^\d+$/){$aaa -= $_;$flag = 1}
#入力が空の場合、$aaaに1加算
elsif(/^$/){$aaa++;$flag = 0}
#入力が数値または空以外の場合、終了
else{last}
#入力が減算かつ$cccの値が10以上かつ$aaaが9以下の場合、$aaaに10をセット
if(flag && $ccc>=10 && $aaa<=9){$aaa = 10}
#$aaaが負の場合、$aaaに0をセット
elsif($aaa<0){$aaa = 0}
#$cccの値が$bbbより小さい場合、$cccに$aaaをセット
if($ccc<$bbb){$ccc = $aaa}
#現在の$cccを出力
print "$ccc\n";
#次の入力プロンプトを出力
print "> ";
}
0670nobodyさん
2005/04/27(水) 19:24:42ID:???$flagの処理は無くてもいいから下のように書ける。
$bbb = 100;
print "> ";
while(<STDIN>){
if(/^\d+$/){$aaa -= $_}
elsif(/^$/){$aaa++}
else{last}
if($ccc>=10 && $aaa<=9){$aaa = 10}
elsif($aaa<0){$aaa = 0}
if($ccc<$bbb){$ccc = $aaa}
print "$ccc\n";
print "> ";
}
0671nobodyさん
2005/04/27(水) 20:24:16ID:???my($m,$n,$i)=(10,100,0); # min, max, start
do{print$i=$2?$i==$n?$n:$i+1:$i==$m?$m:$i==0?0:$i-1,' > '}
while<STDIN>=~/^((\+)|-)$/;
0672638
2005/04/27(水) 21:21:37ID:???>Perl にぶら下がり if は無い
最近Perl書いてないから忘れてたorz
0673nobodyさん
2005/04/27(水) 22:56:09ID:D9rBVnk5ファイルの内容を print してから、
新しい値をそのファイルに追記したいのですが、
以下のようにやっても +>> のモードなのに
ファイルの中身が取れません。
open( DATA, "+>> count" );
print <DATA>;
print DATA qq(test\n);
close( DATA );
追記は出来ているんですが、
このモードでは読み込みができないのでしょうか?
0674103
2005/04/27(水) 22:57:19ID:???つかぬことをお伺いします。
掲示板への投稿内容を利用者に送信するというスクリプトを
作っている途中で思ったのですが、
sendmailを使って5通同報メールを送信する場合、
1)5回、メール送信動作を繰り返す
2)BCCに5通分のアドレスを記述してメールを送信する
どちらがサーバー負担軽いのでしょうか。
#メールを5通出すということには変わりはないですが。
それ以前にどうやってBCCに複数アドレスを書くかという
問題にぶつかっていたりしますが(爆死
0675nobodyさん
2005/04/27(水) 22:58:40ID:NwHD2MSRDES方式のパスワード認証をMD5に変えようとしました。
はじめのパスワード設定はしっかりできました。
しかしいざ認証になると”パスワードが違う”となってしまいます。
CGIレスキューチャレンジ/www.rescue.ne.jp/cgi/md5/を読むと、
認証の部分はDESとMD5は同じとあったので、同じにしたのですが
考え方まずいんでしょうか(汗)
0676675
2005/04/27(水) 22:59:05ID:NwHD2MSR#マスターパスワードのセット:動作する
sub pass_set
{
if($in{'setpass'} != $in{'setpass2'}){ &error("パスワード不適合"); }
open PASS, ">$passfile" or &error("$passfileが開けませんでした。");
#ここを変えた↓
$pass = crypt("$in{'setpass'}", "\$1\$$salt");
print PASS "$pass";
close PASS;
}
#パスワードのチェック
sub password_check
{
open(PASS, "$passfile") or &error("$passfileが開けませんでした。");
$pass = <PASS>;
close PASS;
if($in{'mode'} eq "login"){
#↓ここを変えた
$in{'pass'} = crypt("$in{'setpass'}", "\$1\$$salt");
if($in{'pass'} eq $pass){
print qq(Set-Cookie: USER=1\n);
}else{&error("パスワードが違います。");}#このエラーが出てる
(以下略)
■ このスレッドは過去ログ倉庫に格納されています