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

【Perl 】初心者コーナーPart6

■ このスレッドは過去ログ倉庫に格納されています
0001undefさん2001/07/26(木) 00:40ID:???
初めて来た方、初心者はまずこのスレッドから始めよう。
尋ねる前に同じ質問がないかこのスレや旧スレ、及び>>2のリンクを一通り見てみよう。
案外答えはもう書かれているかもしれない。
0002undefさん2001/07/26(木) 00:40ID:???

[関連スレッド]
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156
Part5 http://corn.2ch.net/test/read.cgi?bbs=php&key=988728069
【Perl,CGI】参考書籍 http://tako.2ch.net/test/read.cgi?bbs=perl&key=970166109

[総合]
□Perl Com: http://www.perl.com/pub/
□CPAN.com: http://search.cpan.org/
□ActivePerl: http://www.activestate.com/

[お薦め]
 ・Perl Recipes: http://www.effectiveperl.com/recipes/
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html

[Module]
 ・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module/
 ・PPMPackages: http://www.activestate.com/PPMPackages/
 ・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm

[Document&Tutorial]
 ・Perl News: http://www.news.perl.org/
 ・Perl Monks: http://www.perlmonks.org/
 ・PerlMonth - Online Perl Magazine - : http://www.perlmonth.com/index.html
 ・use Perl All The Perl: http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Perl for Newbie: http://www.harukaze.net/~mishima/perl/index.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
0003ちょこら2001/07/26(木) 00:44ID:IoXCn0Pg
>>1
ごくろうさまです。
0004名無しさん@お腹いっぱい。2001/07/26(木) 00:48ID:???
↑しまた。名前消し忘れた。。。
0005名無しさん@お腹いっぱい。2001/07/26(木) 00:56ID:???
>>1
ご苦労様。

ところで、前スレの956さん
TAB区切りとか言いながら$dataは半角スペース区切りになってるよ。
などと無駄なツッコミを入れてみたり。
0006名無しさん@お腹いっぱい。2001/07/26(木) 04:33ID:34foWq2Y
ハイマ(バーチャ)から、他鯖のファイルを読み込むCGI書いたんだけど、
「〜が見つかりません」となってしまう。

これって、ダメなの?

$htmlfile = "http://〜〜〜/temp.html"; # 他鯖のアドレス

if(!open(HTML,"$htmlfile")){
print "<html>$htmlfileが見つかりません</html>\n";
exit(0);
}
0007名無しさん@お腹いっぱい。2001/07/26(木) 04:39ID:???
>>6
ダメに決まってる。
つーか初級ネット逝け。もう戻って来るな。
0008名無しさん@お腹いっぱい。 2001/07/26(木) 06:47ID:JG2uz2mw
配列の中に幾つかの要素が入っています(数は不明)、
この@hairetsuの中の要素を全て変数に入れたいのですが
方法が解らないです。
$yousosuu = @hairetsu
ってして不明な要素数を得たのですが、そこからが解らないです。
初心者以前の問題でしょうか。
000982001/07/26(木) 06:53ID:JG2uz2mw
変な日本語でゴメンナサイ、
@hairetsuの中身が、、1<>2<>3<>4<>5<>6<>7<>8<>9<>10
ってなっている時に
$youso1 = 1
$youso2 = 2
と言う風に代入したいのです、数が不明だとどうすれば良いのかが
解らないのです。
0010名無しさん@お腹いっぱい。2001/07/26(木) 07:01ID:???
>>8
my @array = qw(aa bb cc);
my $str = '';
map { $str .= $_ } @array;
print $str; # aabbcc

こういうことじゃなくて?
0011名無しさん@お腹いっぱい。2001/07/26(木) 07:10ID:???
>>8=9
別に取り出さないで$hairetsu[0]って使うのではダメなの?
0012ちょこら2001/07/26(木) 07:16ID:pAced2Jk
$yousosuu = @hairetsu;
が前提なら

for($i=0;$i<$yousosuu;$i++){
  $varname = 'youso' . $i;
  $$varname = $hairetsu[$i]
}

でどうだ。まあこの例だと$youso0から始まるがいやならいじってくれ。
0013初心者名無しさん2001/07/26(木) 08:07ID:D05Jcn/w
>>8
これでも……たぶん
foreach (@hairetsu) {
  $num++;
  ${youso.$num} = $_;
}
001482001/07/26(木) 08:25ID:JG2uz2mw
ヤター!!(^ ^ ) 皆さんありがとうございますぅ
ちょこらさんと初心者名無しさんの方法で上手く行きました。
未知の数値の扱い方がわからなかったんです。
と言うよりfor文の使い方が解って無いのか (汗)
皆さんカコイイです! ありがとうございました あげっ!! (^ ^ )
0015ちょこら2001/07/26(木) 09:15ID:???
ああ。>>13の方が断然スマート。
勉強になります。精進します。
0016名無しさん@お腹いっぱい。2001/07/26(木) 10:16ID:fwGjG1C6
自作CGIの配布を考えているのですが、
実行時、鯖にどれくらい負担がかかるのかチェックしたく思ってます。

なにかいい方法ありますか?
0017名無しさん@お腹いっぱい。2001/07/26(木) 10:36ID:???
use Benchmark;

使い方は

perldoc Benchmark

負荷チェックはローカルで。
0018ほげ2001/07/26(木) 11:33ID:???
>>9
で、代入したあとどうやって使うの? >>11も書いてるけど、
また $i に数字をいれて print ${youso.$i} ってやるだけなら、
配列のまま $hairetsu[$i] を使う方が分かりやすいと思うよ。
0019名無しさん@お腹いっぱい。2001/07/26(木) 12:19ID:OUMdOt/2
時間<>タイトル<>名前<>コメント
という構成のログがあって、それをハッシュ%INに入れたいんですが、

qw($IN{'TIME'} $IN{'TITLE'} $IN{'NAME'} $IN{'COMMENT'}) = split /<>/;

今こんな感じにやってるんですが、
もっと上手い方法はありませんでしょうか?
0020_gunzip2001/07/26(木) 12:27ID:???
>>19
@IN{ qw[ TIME TITLE NAME COMMENT ] } = split /<>/;
0021名無しさん@お腹いっぱい。2001/07/26(木) 12:31ID:OUMdOt/2
>>_gunzipさん
はーなるほど、@INを使うのか…
ありがとうございました!
002282001/07/26(木) 12:34ID:???
えっと、${youso.$i}の中身が実はCSVファイル(と言うより初めに読み込んだファイル)なんです。
今ずっと過去ログを読んでいたんですが、偶然にも前スレの952さん
と同じ目的のような気がするです。
.csvの中身を並べ替えて区切り文字を","から"<>"に変更したいのです。

それで、今度は${youso.$i}(中身はa,b,c,d,eとかの5つの要素が入ってる)
をもう一回配列に入れようとして芯でるです (^ ^;)
基本的に考え方が間違えてるのかなぁ、、、、
今リンクを一杯開けて勉強中    (^ ^ )
002382001/07/26(木) 12:37ID:???
アア、、やっぱり電波な日本語だぁ (^ ^ )
もっと精進して出直して来るっす。 失礼します 
0024名無しさん@お腹いっぱい。2001/07/26(木) 13:11ID:20lkItDU
jcodeを使用せずに、
文字コードがshift_jisかどうかを判断するにはどうしたらいいですか?
0025_gunzip@出掛けますが2001/07/26(木) 13:26ID:???
>>21
>20 のは、ハッシュのスライスです。スライスについては、
http://www.effectiveperl.com/EP.02.pdf
のItem2辺りを参照するといいと思います。

>>22-23
無理して言葉で表現しようとせずに、元のデータと、自分が期待する結果を両方示して、
「このような事を実現するには、どんなデータ構造にして、どのように処理すべきか」
って聞いた方がいいと思う。

例えば、(こーゆー事じゃないかと勝手に想像)
「
Aoki,54,Nagano
Terui,95,Hokkaido
Maeda,23,Osaka
(続く)

というデータがあり、これを二番目の項目の数値で昇順に並び替え、","を <> に変換して

Maeda<>23<>Osaka
Aoki<>54<>Nagano
Terui<>95<>Hokkaido

のように書き出したいが、この場合どんなデータ構造でデータを格納し、
どんな手法でそれらをソートすればいいのか?

環境: 自分でコンパイルしたPerl5.7.2+VineLinux
」
・・・のような感じ。(ん....なんか変だが)
0026162001/07/26(木) 14:22ID:???
ありがとうございました!>>17
002782001/07/26(木) 14:27ID:???
_gunzipさんありがとうございます。
ハイっ、その通りです。全部聞いちゃうと凄い量になるのかなと
思ってしまって... (^ ^;)

1,2,3,4,5
aoki,M,1985_01_08,220,157
egawa,F,1984_09_11,170,142
saitou,M,1983_11_22,247,167
yokomori,M,1986_07_15,195,150
.
. 続く(行数は分からないです)

と言うファイルの内容を...

1<>2<>3<>4
aoki<>M<>Highscore---220<>Average---157
egawa<>F<>Highscore---170<>Average---142
saitou<>M<>Highscore---247<>Average---167
yokomori<>M<>Highscore---195<>Average---150
.
.  続く...

こんな風に並べ替えて少しの文字列を加えたいのです。
それで、Vine2.15+perl5.005_03な環境でWEBのフォームにtextを
貼り付けて、変換結果を再びtextareaに表示しようとしたのですが
受け取りと出力は出来たものの、肝心の処理が上手くいかない
のです。
0028212001/07/26(木) 16:45ID:rFKr7cVw
わざわざ参照サイトまでありがとうございます。
今日偶然にもEffectivePerl買ってきたので合わせて勉強したいと思います。
スライス慣れれば便利そうですね。
0029名無しさん@お腹いっぱい。2001/07/26(木) 18:21ID:???
>>8
ベタに処理しただけだが、参考にでも。

open FILE, "< $file" or die;
my $cut = <FILE>;
print join('<>', 1,2,3,4)."\n";
while (<FILE>) {
chomp;
my @data = split /,/;
$data[3] = 'Highscore---' . $data[3];
$data[4] = 'Average---' . $data[4];
print join('<>', $data[0],$data[1],$data[3],$data[4])."\n";
}
close FILE;
0030undefさん2001/07/26(木) 21:13ID:20lkItDU
初めまして。
テキストファイルのリストをソートしてはき出したいのですが、
いい方法が思いつきません。

とりあえず、私が考えた物、、
ファイルが大きくなると問題あるです。。。



open(IN,"list.txt") || die;
my @list = <IN>;
close IN;

open(OUT,"sort_list.txt") || die;
foreach(sort @list){
print OUT;
}
close OUT;
0031302001/07/26(木) 21:15ID:???
あ、修正。

open(IN,"list.txt") || die;
my @list = <IN>;
close IN;

open(OUT,">sort_list.txt") || die;
foreach(sort @list){
print OUT;
}
close OUT;
0032名無しさん@お腹いっぱい。2001/07/26(木) 23:30ID:???
ネタだとは思うが…
俺なら
my @list = sort <IN>;
と読み込むな(ファイルがメモリに収まるくらい小さいのであれば)

もしくは、書き込むときに
print OUT sort @list;
とかね(まぁ、やり方は何通りもあるから)。

ちなみにファイルがでかい場合は、DB使うからそもそもこんな問題考えない(藁
0033名無しさん@お腹いっぱい。2001/07/27(金) 01:00ID:???
>>32
どこらへんでネタだと思ったのかわからないけど、
ただ短くするだけなら、print OUT sort <IN>; だろ。
何の解決にもならんけど。
さいごの行については同意。
>>31
http://www.amazon.co.jp/exec/obidos/ASIN/4894712369
前にちらっと見たこの本にそんなような内容が書いてあった気がする。Cだけど。
0034322001/07/27(金) 06:15ID:???
>>33 何の解決にもならんけど。

↑書き方はいろいろできるけど、結局この辺の理由で(藁
あと、最近夏休みに入ったせいか、宿題っぽい質問が多いからね

>>31へ蛇足
|| → or,foreach → forに慣れた方が良いと思われ
0035名無しさん@お腹いっぱい。2001/07/27(金) 09:17ID:Q5S7zu8k
|| -> or はともかく、for と foreach は等価だからどっちでもかまわんと思うが...
0036名無しさん@お腹いっぱい。2001/07/27(金) 09:30ID:???
好き嫌いの問題と思われ。
0037名無しさん@お腹いっぱい。2001/07/27(金) 09:48ID:PIHalO2g
くだらない質問ですいません。
スクリプト言語は理論的に空行はつめたほうが
実行が速くなるのでしょうか。
0038名無しさん@お腹いっぱい。2001/07/27(金) 09:55ID:???
少なくとも人間が体感できるほどの差はありません。
0039名無しさん@お腹いっぱい。2001/07/27(金) 10:00ID:???
理論的には速くなりますでしょうか?
0040JAPU2001/07/27(金) 10:35ID:Q5S7zu8k
まぁ、気になるなら試してみぃ。
0041342001/07/27(金) 10:40ID:???
>35,37
forの方がforeachより字数が少ない(藁
0042名無しさん@お腹いっぱい。2001/07/27(金) 11:13ID:???
字下げしねえとperlタンも読みにくいんじゃねえか ヲ
0043名無しさん@お腹いっぱい。2001/07/27(金) 16:13ID:???
http://www2s.biglobe.ne.jp/~cru/library/lq/index.html
http://dream.lib.net/room/cgi/e_acsdeny.html

の二つを、1つの掲示板に使う場合、どういう風に書けばいいでしょうか?
何回やっても、どちらか一方しか作動しないので質問しました。
0044名無しさん@お腹いっぱい。2001/07/27(金) 16:40ID:???
こらまた、厨房臭いCGIだな。
片方が弾けば次が動作するわけねーじゃん。

つか2つ使う意味あんの?
0045名無しさん@お腹いっぱい。2001/07/27(金) 17:06ID:???
>>44
44ですが、下の奴を主に使ってたんですが、Proxy制限が使えないんですよ。(機能はあるのに)
だから、上のProxy制限に優れてる奴と二つ使えれば問題ないかなと思ったんですが、
どうやらうまく行かないらしいみたいなので、もういいです。ありがとうございました。

ところで、
http://dream.lib.net/room/cgi/e_acsdeny.html
このスクリプトが、きちんとProxy制限できれば良いんですが、
どうしたらいいんでしょうか?どなたかご教授ください。
0046302001/07/27(金) 19:01ID:OFQPU1uA
>>32さん、>>33さんサンクスです。

まとめるとこんな感じですか?
でも、サイズがでかくなると問題です。

open(IN,"list.txt") or die;
open(OUT,">sort_list.txt") or die;
print OUT sort <IN>;
close IN;
close OUT;

何かいい方法ないですかね?
(DBを使用しないで、、)

system 'sort list.txt > sort.txt';
とかやっても無駄ですか?


> || -> or
この違いって何ですか?
調べたら、優先順位が低くなるってありました。
ただ打ちやすいから、|| をつかってたのですが、、、
0047名無しさん@お腹いっぱい。2001/07/27(金) 22:03ID:???
>46
自分でマージ・ソートでも自分で作ってみたら?
昔からあるソート法だよ。
004882001/07/27(金) 23:31ID:???
>>29さん、レス遅れました。
カコイイやり方有難う御座いますぅ (^ ^ )
何とか上手くいったのでご報告ですぅ、結局最初に読み込まれたcsvファイル
を\nをデリミタにして配列に入れて、その要素をもう一回配列に入れてから
からヘコヘコと加工してpushしました。 50行くらいになっちゃった  ^ ^ )
今>>13さんや>>29さんの カコヨイやり方で挑戦中
0049名無しさん@お腹いっぱい。2001/07/28(土) 00:25ID:???
結構過去のログまで読んだのですが見つからなかったので質問いたします。

プログラムが大きくなったのでソースファイルを分割して、

main.pl
require 'sub1.pl';
require 'sub2.pl';

のようにしたとき、

1.use strict;をmain.plで宣言すると、requireで呼び出した
sub1.pl sub2.plにもその宣言が適用されるのでしょうか?

2.main.plで宣言したグローバル変数はsub1.pl sub2.plでも
適用されるのでしょうか?
0050名無しさん@お腹いっぱい。 2001/07/28(土) 02:01ID:???
米鳥にカウンター設置したいんですけど
誰かご教授してもらえませんか?
<img src="/bin/counter">これをHTML
にくみこむだけでなんとかなると思ってたのですが・・・
0051名無しさん@お腹いっぱい。2001/07/28(土) 02:41ID:???
>>49
結構過去の過去ログを読むのはいい心がけだけどさ、なんで過去ログにないのか考えること。
そのくらい自分でちっちゃいプログラムを書けば簡単に試せるから誰も質問しないんだよ。
0052JAPU@今日も観鈴ちんを探しにマクドナルドへ...2001/07/28(土) 06:25ID:???
>>46

典型的な例:

1. open MOE, "misuzu.txt" || die;
2. open MOE, "misuzu.txt" or die;

ここで、
1. は open MOE, ("misuzu.txt" || die);
2. は (open MOE, "misuzu.txt") or die;
と解釈されるので、おそらく 1. は期待した動作じゃないだろう...
みたいな話。

もちろん、括弧で括れば全く問題ないので、|| で全て書いても良いです。
個人的には or を使うのが好きです。

# The Perl motto is "There's more than one way to do it."
ZZ
0053名無しさん@お腹いっぱい。2001/07/28(土) 07:01ID:???
>>52 個人的には or を使うのが好きです。

同意。

Perlの上級者は極力()や&、$_を書かないでコーディングするから、
Perl初心者からみると訳のわからないスクリプトに見えることがありますよね。
でも、それを自分で考えて解くのも楽しいし勉強になります。

よく、メールの署名欄に簡単なスクリプトが書いてあって、それを実行すると
結構驚くスクリプトが沢山あります。自分でも書いてみたいけど、スマートな
ものが書けないので未だ署名欄は名前だけ(w
0054492001/07/28(土) 11:53ID:???
>>51
なるほど。
私が試したところによれば、

1.適用されない
2.適用される

と言う結果が得られたような気がするのですが、あっているのでしょうか?
0055名無しさん@お腹いっぱい。2001/07/28(土) 16:42ID:???
randで乱数を作成できますよね?
非常に偏りが大きいのですが、回避方法はありますか?
0056名無しさん@お腹いっぱい。2001/07/28(土) 16:45ID:zGTvO/Jw
 文字列の囲みのクオートってダブルとシングルがありますが、
理論的にはどちらを使ったほうが高速ですか?
 自分のところで試してみたところ、1/10〜1/20程度の差が出、
どちらかが常に速いということはありませんでした。
0057名無しさん@お腹いっぱい。2001/07/28(土) 16:58ID:???
>>55
毎回srandしてない?
0058名無しさん@お腹いっぱい。2001/07/28(土) 17:06ID:m51BRqkY
>>55 種をtimeにしてる?
0059名無しさん@お腹いっぱい。2001/07/28(土) 19:56ID:???
俺の種を使ってくれ。

>>56
変数の判定をやらない分シングルの方が早そうだけど、知らん。
死ぬほど巨大なスクリプトじゃないと差は出ないんじゃないの?
0060552001/07/29(日) 02:15ID:???
プログラムの初めの方で
srand();
としてから使ってます<rand
後はsrandは宣言していません。
種は指定無しでtimeになるようなので指定無しにしています。
0061JAPU@観鈴ちんげっと2001/07/29(日) 02:40ID:???
種を省略した場合、最近のバージョンではもっと良い値が使われるよん。
詳しい話は perldoc 読んでね。
0062名無しさん@お腹いっぱい。2001/07/29(日) 03:45ID:???
あと、最近のバージョンではsrand()自体を省略して構いません。
0063名無しさん@お腹いっぱい。2001/07/29(日) 04:08ID:???
どうして偏りが大きいと思ったんだろうか。
調べ方に偏りがあるとは思わないのかね。
0064名無しさん@お腹いっぱい。2001/07/29(日) 04:57ID:???
>>63
禿同
0065552001/07/29(日) 16:21ID:???
私の調べ方はrand(100)をfor文で10000繰り返し、
エクセルにてその値の分布を表にしました。
その結果、0〜10と90〜100の範囲が他の範囲に比べて2割ほど
大きな値となりました。

・・・・偏り大きい調べ方ですか・・ね?
0066名無しさん@お腹いっぱい。2001/07/29(日) 17:20ID:???
>>65
20,000 回では?50,000 回では?100,000 回では?1,000,000 回では?
という具合に調べればわかると思うんだけど….
0067 2001/07/30(月) 01:43ID:???
perlでエラーが出て、エラーメッセージで何行目に
エラーが出てるよ!と教えてくれる時は間違いが探しやすいんですが、
最終行のみにエラーが出てるよ!と出た時に途方にくれます。
そういう時は文法的には間違ってないけど、処理の流れが
おかしいと言うことなのでしょうか?
また、こういう時にエラーを判断するコツがあれば、アドバイス
いただけないでしょうか?
0068名無しさん@お腹いっぱい。2001/07/30(月) 03:22ID:???
>>67
"や'の閉じ忘れの可能性が高い。
0069名無しさん@お腹いっぱい。2001/07/30(月) 03:45ID:???
Linxu上でのsystem()についてです。

$status = system("$command", "$str");
とすると、$statusに数字が入りますが、
この数字の意味するところがよく分かりません、というか知りません。
成功か失敗かは0と1(256)なので分かりますが、他の値、
2とか9等にはどういう意味があるのか知りたいです。

調べようにも何をきっかけに調べればいいのか思いつかないので
知ってる方、おねげぇします。
0070名無しさん@お腹いっぱい。2001/07/30(月) 03:46ID:???
>>69は
system("$command $str");
のミスです。。。
0071名無しさん@お腹いっぱい。2001/07/30(月) 06:05ID:GER1kc7.
DB_File使用時に最適なロック方法について教えてください。

CGI&PerlポケットリファレンスのdbmopenのTipsを参照すると、
『DBMファイルをロックする機構はDB_Fileモジュールに用意されています』
と書いてあったのですが、なかなか方法がわからないでいます。

今のところ、下記のドキュメントは発見しましたが、
英語がわからない上に、use DB_File::Lockの記述で即エラー(*1)になります。
http://www.perldoc.com/cpan/DB_File/Lock.html
*1) BEGIN failed--compilation aborted

ローカル環境はmac OS X perl v5.6.0 built for darwin
公開用サーバーはlinux
使えるモジュールはこんな感じだそうです。(モジュールについての知識はあまりないです・・)
http://web.arena.ne.jp/suite/support/manual/cgi-cgi/perlmodule/index.html

よろしくお願いします。
足りない情報があれば追記します。
0072名無しさん@お腹いっぱい。2001/07/30(月) 06:46ID:???
>>71
> use DB_File::Lockの記述で即エラー
DB_File::Lockがインストールされていないからでしょう。
別のロック機構を試すべきかと。
007312001/07/30(月) 09:43ID:Aj8f98qc
>>72
レスありがとうです。
根本的な認識ミスってことですか?(恥)
DB_File::Lockって、DB_Fileモジュールさえあれば使えるのかと思っていました・・
リファレンスに書いてあったのと上記のLock機構が
同じものを指してるのかは不明ですが、
DB_Fileを使うなら、これがおすすめ!っていう方法があったらよろしくお願いします〜

やっぱり普通にflockとか・・なオチになりそうですが(泣)
0074712001/07/30(月) 09:45ID:Aj8f98qc
名前入力ミスりました〜!^^;
71==73です、よろしくです。
0075722001/07/30(月) 09:47ID:???
>>71
DB_Fileのドキュメントを見ると、flockを使用しているようですね。
DB_Fileを使ったことがないので、オススメとかはないのですが、
自分はファイルロックの必要がある時は、renameを使った方法を用いてます。
これだと環境に依存しないので。
0076JAPU@オートレスポンダの作者をいじめるのはやめよう (笑)2001/07/30(月) 11:16ID:???
> Linxu上でのsystem()についてです。

惜しい。

> $status = system("$command", "$str");
> とすると、$statusに数字が入りますが、
> この数字の意味するところがよく分かりません、というか知りません。

system の返り値、すなわち $? の値は wait(2) が返す値なので、
$? >> 8 が exit value
$? & 127 がどのシグナルで殺されたか、
$? & 128 がコアダンプしたかどうか
を表す。

perldoc -f system
perldoc perlvar
man 2 wait
って感じ?
0077名無しさん@お腹いっぱい2001/07/30(月) 12:02ID:???
$i = 3;

という風に、変数に数字が入っていて、
この数字が奇数か偶数かを判断するには、
どうしたらいいでしょうか?
0078名無しさん@お腹いっぱい。2001/07/30(月) 12:06ID:???
$i % 2
0079hage2001/07/30(月) 14:49ID:???
if($i & 1) {
print "odd\n"
} else {
print "even\n";
}
0080名無しさん@お腹いっぱい。2001/07/30(月) 17:09ID:312.Yf8o
rmdirでやるとどんな感じ?<DBファイルロック機構
0081名無しさん@お腹いっぱい。2001/07/30(月) 19:26ID:t7BVDL/M
前スレ見ましたが載ってないみたいなので質問します。
"ー"が入ってる文字列をgrepかけるとエラーが表示されます。
対処法はありますか?

@a=("あ","あー","あーー");
@b=grep('ー',@a);
0082812001/07/30(月) 19:28ID:t7BVDL/M
@b=grep(/'ー'/,@a);
0083712001/07/30(月) 20:55ID:Ydf2hNHw
■DB_Fileのロックについて
>>75
renameですか!使った事ないです〜。
・・・flockが使える環境だとしたら、実際どちらがおすすめでしょうか?

>>80
おお、rmdirもはじめて聞きました(恥)
ちょっと調べてきますね。もっかい質問するかもしれません。。
0084T女の竹田2001/07/30(月) 21:00ID:???
>>81
うーん、ログ見てもわかりにくいけど、やっぱりFAQ。

「正規表現の中でシフトJISを使うときは、m/\Qマッチさせたい文字列\E/
のように\Qと\Eではさむ」
シフトJISは2バイト目にメタ文字(正規表現で特別な意味を持つ文字、
この場合は'[')が含まれることがあるので\Qでエスケープするわけ。
(\Eはその終わり)

ちなみに似たような問題で、'―'とかは'―\'にしないとダメ(この場合は
2バイト目が'\')。

自分は昔二つともつまずきました^^;
FAQスレとかあったほうがいいかな?
0085T女の竹田2001/07/30(月) 21:07ID:???
余談だけど、昔書いたスクリプトを見ると
s/\+|\\|\(|\)|\[|\]|\{|\}|\^|\$|\*|\?|\./\\$&/g;
みたいなのがあったり(恥)
0086692001/07/30(月) 21:33ID:CEolkqW6
>>76
なるほどです。
$? だったんですね。
perldoc perlvar 初めて使いました。てへ。

でも"$? & 127"のANDしてる値自体の
一覧みたいのはあるんしょうか?

例えばPerlがuseやrequireで
外部ファイルを取り込めなかった場合(等?)は512とか。
0087722001/07/30(月) 22:27ID:???
>>71
flockが良いかどうかという話は、今までにもいろんなところで議論されていて、
結局は本人の好みの問題になると思います。
が、あえて自分の意見を述べさせていただくと、
自分の場合flockだと失敗することが多かったと思うので、rename使ってます。
その辺の話はPerlメモがオススメです。
0088712001/07/31(火) 01:38ID:???
>>80
調べました〜!・・テストはまだです。
せっかくなので、いろいろ試しにやってみようと思います^^
>>72
なるほど。しっかり動作確認してから運用した方がいいですね。
Perlメモみてきます!

うう、いろいろ見てまわってるうちに、どんどん分らない事が増えてます。
そもそも、DB_FileとバークレーDBの関係がよくわかっていません。
DB_FileさえあればバークレーDBも使えちゃうってことなんでしょうか。
それとも、またそれ専用のモジュール等が必要とか・・?
ttp://member.nifty.ne.jp/hippo2000/perltips/db_file.htm
[$X =] tie %hash, 'DB_File', [$filename, $flags, $mode, $DB_HASH] ;
この先頭の [$X =] もあるとどういう利点があるのか不明なのです。

こんなわたしに丁度いいリファレンスサイトとか解説書がありましたら
どうか教えてくださいませ。。
0089JAPU@腹痛2001/07/31(火) 04:13ID:???
> でも"$? & 127"のANDしてる値自体の
> 一覧みたいのはあるんしょうか?

use POSIX; すると、この辺の定数使えるようになるみたいだ。
SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK
SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM
SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT
SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM
SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK
SIG_DFL SIG_ERR SIG_IGN SIG_SETMASK SIG_UNBLOCK

あとは、man 2 signal とか、/usr/include/sys/signal.h とか参照?

> 例えばPerlがuseやrequireで
> 外部ファイルを取り込めなかった場合(等?)は512とか。

なにか勘違いしている?
0090692001/07/31(火) 04:52ID:zN5/REcM
>>89
またしてもありがとうございます。
ここら辺あたれば何か分かりそうな気配・・・

>なにか勘違いしている?
いえ、勘違いではないです。
やってることが簡易shellみたいなもので
実行後、エラーの返値を見ても実際は何が起きたのか
さっぱり分からないので何とかしたいなぁ、と。
故に返値一覧があったら楽でいいなぁと思った次第です。
0091812001/07/31(火) 05:48ID:q2wDcpy6
>>84
竹田様
お手数おかけしました。お忙しい所ありがとうございます。
本当に嬉しいです。ありがとうございました。
0092JAPU@夏ですねぇ...2001/07/31(火) 14:02ID:???
何をやりたいのかさっぱり理解できん...
もうちょっと整理して質問しよう。
0093名無しさん@お腹いっぱい。2001/07/31(火) 14:54ID:???
Perl では EUC を使おうよ ヽ( ´ー`)ノ
0094名無しさん@お腹いっぱい。2001/07/31(火) 17:31ID:???
>>69
絶対勘違いしていると思われ。
JAPUたんに一票。
0095692001/07/31(火) 23:11ID:???
そう言われると勘違いしているのかもしれないに一票。
0096名無しさん@お腹いっぱい。2001/08/01(水) 00:48ID:???
あはは、、もうちょっと出来たら書き込んでね ^_^
0097名無しさん@お腹いっぱい。2001/08/01(水) 07:50ID:kOCX6RGE
FTPで削除できないファイルが生成されてしまったのですが、(人様のCGI使用)
unlinkで削除出来ますでしょjか?
0098名無しさん@お腹いっぱい。2001/08/01(水) 09:06ID:???
>>97
削除できます。
0099JAPU@千影たん2001/08/01(水) 18:58ID:???
別に69たんを責めているわけじゃないので、勘違い無きよう...

とりあえず質問するときは、「具体的な目的」も併記すると吉かもしれない。
「○○をしたときに、云々...」という質問の仕方でも悪くはないけど、
実はそれよりもうまい方法を教えてもらえるかもしれないぞ。
0100名無しさん@お腹いっぱい。2001/08/02(木) 00:28ID:DguDE1y6
キャストのやり方おしえろやゴルァ!
■ このスレッドは過去ログ倉庫に格納されています