Perlコーディング初心者質問スレ Part 42
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/05/25(水) 06:36:28ID:PVpWgcdf【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0068nobodyさん
2005/05/27(金) 16:24:21ID:???こう使うって意味だと思う
@tmp = ("シュウマイ", "餃子", "ラーメン");
#$tmp[0] = "シュウマイ";
#$tmp[1] = "餃子";
#$tmp[2]= "食いてぇ〜";
@soc = (100, 200, 300);
$count = @tmp;
$index = int(rand $count);
print "$tmp[$index] $soc[$index]円";
0069nobodyさん
2005/05/27(金) 17:20:12ID:???> 数字だけ出して割り振ろうと〜
余計配列とかのが適してない?
ハッシュ(連想配列)でもいいかもしれない。
my $tmp01 = 'シュウマイ';
my $tmp02 = '餃子';
my $soc01 = 100:
my $soc02 = 200:
ってやるより、
my %menu = (
'シュウマイ', => 100,
'餃子' => 200,
);
とかやった芳がわかりやすいと思わないかい?。
0070nobodyさん
2005/05/27(金) 17:22:02ID:???0071nobodyさん
2005/05/27(金) 17:56:56ID:???my @db = (
{name=>'シュウマイ',price=>100},
{name=>'餃子',price=>200}
);
ってやるのが好き
Template Toolkit にもそのまま貼りつけられて楽だし
007253
2005/05/27(金) 18:10:05ID:???この例でようやく直感的に理解できました、そうですよね変数をしまっておけるんですよね
正直な所、配列の本当の便利さがよくわかってませんでした、すごい便利なんですね、恥ずかしい
配列もちゃんと理解してなかったのにアレですが、>69のハッシュは使えそうだなと思ってました
ただ、要素をランダムに選び取るというのがどうやったらいいのか全くわからなくて
今までここでお世話なった分で何とか$tmpを取り出す所まではできたんですが、
@array = ('01', '02','03',);
$index= rand @array;
my $sed=$array[$index];
%hash = ($tmp01=>$soc01, $tmp02=>$soc02, $tmp03=>$soc03,);
%hash_value = reverse %hash;
print $hash_value{${soc.$tmp}};
$socの中身を一緒に取り出すというのができませんでした。
(eachだと1つではなく、全部取り出してしまいますよね?)
下2行のvalueの所をkeyに、socをtmpに変えても何も出てこない…
reverse関数で何故こういう結果が出るのかも実はよくわかりません……
007353
2005/05/27(金) 18:11:34ID:???よくわかりませんがすげえー そんなやり方もあるのか!
0074nobodyさん
2005/05/27(金) 19:45:37ID:???それだとすごく >>68 と >>69 意味ないなw
どうしてもその 01, 02, 03, ってのは必要なの?
0, 1, 2, じゃだめなの?
どうしても 01, 02, 03 にしたいなら、こう書くのは?
my %hash = (
'01' => { tmp => $tmp1, soc => $soc1 },
'02' => { tmp => $tmp2, soc => $soc2 },
'03' => { tmp => $tmp3, soc => $soc3 },
);
my @key = keys %hash; # ex) 01, 02, 03
my $index = rand @key # ex) 1
my $sed = $key[$index]; # ex) 02
my $r = $hash{$sed}; # ex) { tmp => $tmp2, soc => $soc2 }
print $r->{tmp}; # $tmp2
print $r->{soc}; # $soc2
1行1行やるのはまわりくどいけどとりあえず。
007553
2005/05/27(金) 20:10:30ID:???ですよね…生かせてないなと思いつつ、どうしたらいいもんか思いつきませんでした…。
>0, 1, 2, じゃだめなの?
全然だめじゃないです。ファイルの名前つける時のクセで0つけてました
'01' => { tmp => $tmp1, soc => $soc1 },
あの、無知で恥ずかしいんですがこれってどうなってるんでしょうか?
01〜03がキーで{}の中身が値、{}の中で値が二種類ある、という状態でしょうか。
>71のも見て「?」ってなったんですが、ハッシュってキー1つに対して
値1つを格納しておく物だと思ってたんですが…1:1じゃない場合もあるという事 ??
まずは>73で教えてもらったので勉強してもちょっと頑張ってみます。
0076nobodyさん
2005/05/27(金) 20:49:21ID:C4o5Scf8>>17ですが、遅レスですいません。
データ項目に点数という項目があり、データが追加される度に点数の降順に並べ替えて書き込みを
行っています。こういった場合でもopen(ABC, ">") を使わない方法はありますでしょうか?
0077nobodyさん
2005/05/27(金) 20:53:42ID:???0078nobodyさん
2005/05/27(金) 20:56:48ID:C4o5Scf8a.cgiからb.cgiを呼び出すときに、引数を渡したいのですが、
以下のような渡し方では根本的に間違っているのでしょうか?
【a.cgi側】
print "<FORM METHOD=\"POST\" ACTION=\"b.cgi?x=1>\n";
【b.cgi側】
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
}
としているのですが、$value にはなにも入っていませんでした。
0079nobodyさん
2005/05/27(金) 21:53:12ID:???@array = (
{tmp=>'シュウマイ',soc=>100},
{tmp=>'餃子',soc=>200},
{tmp=>'ラーメン',soc=>500},
{tmp=>'チャーハン',soc=>400},
{tmp=>'半熟卵',soc=>50},
);
%hash = %{$array[rand@array]};
print "$hash{tmp}\t$hash{soc}\n";
0080nobodyさん
2005/05/27(金) 22:45:10ID:???こんなプログラム作ってみた。
%menu = (
'シュウマイ' => {soc=>100},
'餃子' => {soc=>200},
'ラーメン', => {soc=>500},
'チャーハン' => {soc=>400},
'半熟卵' => {soc=>50},
'チャーシュー' => {soc=>100},
'ライス' => {soc=>150},
'チャーシューメン' => ['ラーメン','チャーシュー','半熟卵'],
'ラーメンセット'=> ['ラーメン','ライス','半熟卵'],
'チャーシューメンセット' => ['チャーシューメン','ライス'],
'チャーハンセット' => ['ラーメン','チャーハン','半熟卵'],
'シュウマイセット' => ['ラーメンセット','シュウマイ'],
'餃子セット' => ['ラーメンセット','餃子'],
);
0081nobodyさん
2005/05/27(金) 22:45:25ID:???%hash = sub{menu=>$_[1],$_[0]->(@_)}->(sub{
my $code = shift;
my $key = shift;
if(ref $menu{$key} eq 'HASH'){
return(tmp=>$key,soc=>$menu{$key}{soc});
}elsif(ref $menu{$key} eq 'ARRAY'){
my @tmp;
my $soc;
foreach my $key(@{$menu{$key}}){
my %hash = $code->($code,$key);
push @tmp, $hash{tmp};
$soc += $hash{soc};
}
return(tmp=>join(":",@tmp),soc=>$soc);
}else{
return(tmp=>'',soc=>0);
}
},$menu[rand@menu]);
print "$hash{menu}\t[$hash{tmp}]\t$hash{soc}\n";
0083nobodyさん
2005/05/27(金) 23:31:46ID:???ヒント : action="b.cgi?x=1" の x=1 は $ENV{'QUERY_STRING'} に記録される。
>>75
0, 1, 2 、どっちでもいいなら >>71 および >>79 の方法にしとくのが一番いいかと。
まあ、>>79 はわざわざ %hash にしなくても、別に無名ハッシュのままでいいじゃん、とは思うけどな。
%hash = %{$array[rand@array]};
print "$hash{tmp}\t$hash{soc}\n";
↓
$hash = $array[ rand @array ];
print "$hash->{tmp} \t $hash->{soc} \n";
矢印演算子、覚えればいろいろベンリだぞ。
>>80-81 は・・・まあ好みで
0084nobodyさん
2005/05/27(金) 23:41:49ID:???何か違くね?
0085nobodyさん
2005/05/27(金) 23:51:07ID:???0086nobodyさん
2005/05/28(土) 06:51:40ID:???>>83の一文だと、矢印演算子が万能みたいだって言いたいんじゃね?
そもそも>>75はリファレンスを知らなさそうだし
リファレンスをデリファレンスするのに
矢印演算子が使えるよってのが適切ではないかと
0087nobodyさん
2005/05/28(土) 11:01:56ID:???矢印演算子を全く使わなくてもデリファレンスやメソッドコールはできるからな。
0088nobodyさん
2005/05/28(土) 11:19:45ID:???ああ、そうだね。 リファレンス。
それはわかるけど、でも >>83 のは >>79 に対して言ったんだけどなw
> %hash = %{$array[rand@array]};。
せっかくリファレンス使ってるのに、わざわざそんなくどい書きかたしなくても、って。
矢印知ってたら楽に書けるのになーと。
まあ誤解生ましたようで正直スマンかった。
0089nobodyさん
2005/05/28(土) 11:49:47ID:???009075
2005/05/28(土) 12:47:52ID:???>75の疑問がすんなり解決しました… 多次元配列って訳がわからなくて今まで無視してました
何か色々とお世話になってしまって、すごく助かりました
いただいたレスのスクリプトや内容を把握しきれてない部分が多いので、
名無しに戻ってまた勉強してきます。目が回りそうです。
もしまた詰まったら助けたって下さい〜このスレの人皆やさしい!幸あれ!ほんとありがとう!
0092nobodyさん
2005/05/28(土) 19:21:59ID:/z95VPw7>> test.cgi
#!/usr/bin/perl
#cgiはEUCで記述
require './jcode.pl';
print <<'END_OF_HEADER';
Content-type: text/html; charset=EUC-JP
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=euc-jp"></HEAD><BODY>
END_OF_HEADER
$query = $ENV{'QUERY_STRING'}; #クエリ文字列を得る
print &jcode'getcode(\$query); #入力されたクエリの文字コード
&jcode'convert(*query, 'euc'); #EUCに変換
print ' to ', &jcode'getcode(\$query), '<BR>'; #変換されたことを確認
print '<A HREF="test.cgi?', $query, '">', $query, '</A>'; # 文字化け発生部分
print <<'END_OF_FOOTER';
</BODY></HTML>
END_OF_FOOTER
<<
3: 半角文字及び、一部の全角文字(あいうえお、アイウエオ 等)では成功。しかし、一部の全角文字(まみむめも、マミムメモ 等)で、文字化けを起こします。
マルチバイト文字の2バイト目が悪さをすると思ってEUCにしたんですが、このコードでは処理が不完全なようです。問題部分の指摘をどうぞよろしくお願いいたします。
0093nobodyさん
2005/05/28(土) 20:47:58ID:???0094nobodyさん
2005/05/28(土) 20:58:22ID:???0095nobodyさん
2005/05/28(土) 21:01:04ID:???$query =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
とかしてないけど平気なのか?
0096nobodyさん
2005/05/28(土) 21:02:05ID:???0097926
2005/05/28(土) 21:08:01ID:???URLデコードは考えてません・・・。
009892
2005/05/28(土) 21:13:29ID:???test.cgi?%83%7d%83%7e%83%80%83%81%83%82
(マミムメモ)でやってみましたが、結果同様でした。
ちょっと舌足らずでした。最初に上記の様にアクセスした時はうまくいくのですが、
それで出てきたリンクを使って再帰的にアクセスした時に文字化けを起こします。
0100nobodyさん
2005/05/28(土) 22:59:52ID:z135H4rkif( scalar @BUF==5) { … }
この二つの条件式の書き方で、下の方が良いとか上の方が良いと言うことはありますか?
0101nobodyさん
2005/05/29(日) 00:02:47ID:???0103nobodyさん
2005/05/29(日) 14:34:29ID:I/a3Ab/R名前、点数、日付
A 80 20050529
B 100 20050523
C 70 20050525
D 80 20050524
というようなデータを点数の降順に並び替える場合はどうすれば良いのですか?
リストにセットしてsortを使っても、点数での並び替えは出来ないですよね?
一度ハッシュというものに点数をkeyとしてセットし、keyで並び替えたりする
のですか??でも同じ点数があった場合はまずいですよね?
なんかアホな質問ですいません。標準的な並べ替え方法を教えて下さい。
0104nobodyさん
2005/05/29(日) 14:38:05ID:I/a3Ab/R記述し忘れましたが、同点の場合は、できれば日付の降順にしたいです。
0105nobodyさん
2005/05/29(日) 15:17:33ID:???my @array = (
# 名前、点数、日付
['A',80, 20050529],
['B',100, 20050523],
['C',70, 20050525],
['D',80, 20050524],
);
my @sorted_array =
sort { $b->[2] <=> $a->[2] } # 日付で
sort { $b->[1] <=> $a->[1] } # 点数で
@array;
0106nobodyさん
2005/05/29(日) 16:30:09ID:???my @array = (
# 名前、点数、日付
['A',80, 20050529],
['B',100, 20050523],
['C',70, 20050525],
['D',80, 20050524],
['E',70, 20050526],
['F',80, 20050526],
['G',50, 20050526],
);
my @sorted_array = sort {
$b->[1] <=> $a->[1] || # 点数で
$b->[2] <=> $a->[2] # 日付で
}@array;
0107nobodyさん
2005/05/29(日) 16:37:41ID:???my @array = (
# 名前、点数、日付
{name=>'A',point=>80,date=>'2005/05/29'},
{name=>'B',point=>100,date=>'2005/05/23'},
{name=>'C',point=>70,date=>'2005/05/25'},
{name=>'D',point=>80,date=>'2005/05/24'},
{name=>'E',point=>70,date=>'2005/05/26'},
{name=>'F',point=>80,date=>'2005/05/26'},
{name=>'G',point=>50,date=>'2005/05/26'},
);
my @sorted_array = sort {
$b->{point} <=> $a->{point} || # 点数で
$b->{date} cmp $a->{date} # 日付で
} @array;
print map{"$_->{name}\t$_->{point}\t$_->{date}\n"}@sorted_array;
0108nobodyさん
2005/05/29(日) 16:44:36ID:???my %hash = (
# 名前、点数、日付
'A' => {point=>80,date=>'2005/05/29'},
'B' => {point=>100,date=>'2005/05/23'},
'C' => {point=>70,date=>'2005/05/25'},
'D' => {point=>80,date=>'2005/05/24'},
'E' => {point=>70,date=>'2005/05/26'},
'F' => {point=>80,date=>'2005/05/26'},
'G' => {point=>50,date=>'2005/05/26'},
);
my @sorted_keys = sort {
$hash{$b}{point} <=> $hash{$a}{point} || # 点数で
$hash{$b}{date} cmp $hash{$a}{date} # 日付で
} keys %hash;
print map{"$_\t$hash{$_}{point}\t$hash{$_}{date}\n"}@sorted_keys;
0109nobodyさん
2005/05/29(日) 17:04:57ID:???my @array = (
# 名前、点数、日付
[qw( A 80 20050529 )],
[qw( B 100 20050523 )],
[qw( C 70 20050525 )],
[qw( D 80 20050524 )],
);
my %hash = map{
$_->[0] => {
point => $_->[1],
date => $_->[2],
}
} @array;
my @sorted_keys = sort {
$hash{$b}{point} <=> $hash{$a}{point} || # 点数で
$hash{$b}{date} <=> $hash{$a}{date} # 日付で
} keys %hash;
print map{"$_\t$hash{$_}{point}\t$hash{$_}{date}\n"}@sorted_keys;
0110nobodyさん
2005/05/29(日) 17:26:07ID:???print map{
"$_->[0]\t$_->[1]\t$_->[2]\n"
} sort {
$b->[1] <=> $a->[1] ||
$b->[2] <=> $a->[2]
} map {
[
grep {
!/^\s*$/
} split /\s+/
]
}grep{
!/^\s*$/
} split /\n/, q(
A 80 20050529
B 100 20050523
C 70 20050525
D 80 20050524
);
0111nobodyさん
2005/05/29(日) 17:28:44ID:w/eeChjMopen(FH,"subject.txt");
@list=<FH>;
close(FH);
と同等のことを、http://news19.2ch.net/newsplus/subject.txtからとってきて
やりたいんですが、どげんすればいいんでしょうか?
XP上でhttpdとActivePerlでテストしてる段階で行き詰ってます。
0112nobodyさん
2005/05/29(日) 17:30:16ID:w/eeChjMそっくりそのまま落としてきて、subject.txtとして保存するんでもいいす。
むしろそれがしたいっす。
おながいします。
0113nobodyさん
2005/05/29(日) 17:32:22ID:???0114nobodyさん
2005/05/29(日) 17:44:34ID:???use LWP::Simple;
open(FH,">subject.txt");
print FH get 'http://news19.2ch.net/newsplus/subject.txt';
close(FH);
0115nobodyさん
2005/05/29(日) 17:51:07ID:???use LWP;
open(FH,">subject.txt");
binmode FH;
print FH LWP::UserAgent->new()->request(
HTTP::Request->new(
GET => 'http://news19.2ch.net/newsplus/subject.txt'
)
)->content();
close(FH);
0116nobodyさん
2005/05/29(日) 18:08:16ID:???use LWP;
open(FH,">subject.txt");
binmode FH;
print LWP::UserAgent->new(
agent => 'HogeHoge-Agent'
)->request(
HTTP::Request->new(
GET => 'http://news19.2ch.net/newsplus/subject.txt',
HTTP::Headers->new(
Referer => 'http://hogehoge/'
)
)
)->content();
close(FH);
0117nobodyさん
2005/05/29(日) 18:35:04ID:EsZHM8T2ほれ、俺の力作
GET http://news19.2ch.net/newsplus/subject.txt > subject.txt
0118nobodyさん
2005/05/29(日) 18:43:53ID:???>>116はファイルに保存できないねすまん。>>115の真似はせず一つづつ展開してみた。
use LWP;
my $url = 'http://news19.2ch.net/newsplus/subject.txt'; #取得したいコンテンツのURLを指定
my $user_agent = 'HogeHoge-Agent'; #ユーザーエージェント名を指定
my $referer_url = 'http://hogehoge/'; #参照元を指定
my $save_file = 'subject.txt'; #保存先のファイル名
my $ua = LWP::UserAgent->new(agent => $user_agent); #エージェントオブジェクトを作成
my $header = HTTP::Headers->new(Referer => $referer_url); #HTTPヘッダーオブジェクトを作成
my $request = HTTP::Request->new(GET => $url, $header); #HTTPリクエストオブジェクトを作成
my $respons = $ua->request($request); #サーバに接続してデータを取得
my $content = $respons->content(); #取得したコンテンツ内容を変数にコピー
open(FH,">$save_file"); #保存先ファイルを書込みモードでオープン
binmode FH; #保存形式をバイナリ形式に指定
print FH $content; #コンテンツ内容をファイルに保存
close(FH); #保存先ファイルを閉じる
0119nobodyさん
2005/05/29(日) 19:05:27ID:???use LWP;
open(FH,">subject.txt");
binmode FH;
LWP::UserAgent->new(
agent => 'areyakoreya'
)->request(
HTTP::Request->new(
GET => 'http://news19.2ch.net/newsplus/subject.txt',
HTTP::Headers->new(
Referer => 'http://untara.kantara.com/tekitou.html'
Cookie => 'are=nani',
)
),
sub{ print FH $_[0] },
1024*1024
);
close(FH);
0120nobodyさん
2005/05/29(日) 20:41:42ID:QH9/XuV40121nobodyさん
2005/05/29(日) 22:00:45ID:I/a3Ab/R@wk_list[0] と$value の共に数値、文字が混在している場合、
if( @wk_list[0] eq $value || @wk_list[0] == $value ){
と記述すると、数値同士の場合はうまくいきますが、文字の場合違う
データと一致してしまいます。数値、文字が混在の場合の比較演算は
どうすれば良いですか?
0122nobodyさん
2005/05/29(日) 22:23:47ID:QH9/XuV4とりあえず、localhostからhttp://localhost/subject.txtを呼び出して、コピーをローカルに作ることに成功しました♪
ありがとうございました。
0123nobodyさん
2005/05/29(日) 22:28:02ID:???Scalar::Utilのlooks_like_numberで数値かどうかは調べられるから、
両方が数値なら==、どっちかが数値でなけりゃeqでいいんでねーの?
0124nobodyさん
2005/05/30(月) 02:00:43ID:sacYxvRrできましたー
んが!
鯖がそのcgiに広告つけやがる。javascriptはきだすcgiなんで、んなことされたら
台無しなんですが…というわけで、鯖探し中。とにかく、
解決したっぽいです、ありがとー
0125nobodyさん
2005/05/30(月) 04:08:17ID:???0126nobodyさん
2005/05/30(月) 04:30:03ID:???>>124 print する Content-type を JS用に変えたら広告着かないサバも結構あるよ
0128nobodyさん
2005/05/30(月) 16:13:42ID:efT5hV/s0129nobodyさん
2005/05/30(月) 16:17:17ID:???0130nobodyさん
2005/05/30(月) 16:38:57ID:???乙。とだけ言っておこう
ってか
んなわけないやろw
普通そういう考えに至らない。自演常習者ならではの発想。
0132nobodyさん
2005/05/30(月) 19:01:53ID:2nqscNNylooks_like_number ってライブラリか何かですか?普通に使える関数でしょうか?
できれば使い方を教えてもらえないでしょうか?
0133nobodyさん
2005/05/30(月) 19:04:21ID:???「Scalar::Utilの」って言ってくれてるんだから、まずは自分で調べてみましょう。
perldoc Scalar::Util
0134106,107,108
2005/05/30(月) 19:34:37ID:???0135nobodyさん
2005/05/30(月) 19:37:51ID:2nqscNNy私の素人用の本には載っていなくて、検索でなんとか
【@bool = DBI::looks_like_number(@array);リストの各要素について、数値に見え
ばTRUE、そうでなければFALSEを返します。未定義、あるいは空文字であれば、undef
もしくは空文字を返します。】
ってのは見つけたのですが、そもそもScalar::Utilってのがさっぱり分かりません。
素人考えで昨日から if( DBI::looks_like_number($value) && @wk_list[0] eq $value ){
とか色々やってるんですが、もう疲れました。先生、そろそろ答えを。。
0136nobodyさん
2005/05/30(月) 19:44:32ID:???0137nobodyさん
2005/05/30(月) 19:45:46ID:Xh5clFyG0138nobodyさん
2005/05/30(月) 20:29:17ID:???0139nobodyさん
2005/05/30(月) 20:42:20ID:2nqscNNy比較対象データが、数値・文字混在で1000件ほどあって、比較元が
数値の場合は良いのですが、文字の場合、先に違うデータ(数値?)と
一致してしまうんです。
0140nobodyさん
2005/05/30(月) 21:11:58ID:???@bool = DBI::looks_like_number(@array);
なら
if (DBI::looks_like_number($value))
は必ず真にならないか?
wantarray でちゃんと 0 か 1 で返してくれてるのかな。
あと
if( DBI::looks_like_number($value) && @wk_list[0] eq $value ){
の @wk_list[0] eq $value の部分
は、「数字の場合」、なんだから
$wk_list[0] == $value になるのでわ。
同じかも知らんが一応。
つーか数字に見えるかどうかくらい、そのモジュール使わなくても自作でできると思うがw
0141nobodyさん
2005/05/30(月) 21:19:22ID:???君はまずモジュールというものを知るべきだ。
その後、CPAN を知ることにより、より幸せになれるであろう。
ttp://search.cpan.org/search?query=Scalar%3A%3AUtils&mode=all
ttp://search.cpan.org/~gbarr/Scalar-List-Util-1.15/lib/Scalar/Util.pm
で、Perl が使える環境で perldoc Scalar::Util って実行したら下と同じドキュメントが見られるはず。
ちなみに、@wk_list[0] だとスライスなので、$wk_list[0] の間違いだと思う。
>123 に従って書いてみるとこんな感じ。
use Scalar::Util qw(looks_like_number);
if(looks_like_number($wk_list[0]) && looks_like_number($value) ? $wk_list[0] == $value ; $wk_list[0] eq $value) {}
「数字のように見える」だから君の求めている結果と違う可能性はあるけどね。
0142nobodyさん
2005/05/30(月) 21:27:57ID:???0143nobodyさん
2005/05/30(月) 22:04:45ID:???looks like number = 数値のように見える
'123'と123を見分けるにはPerlレベルでは無理だし、見分けても意味ない。
0144nobodyさん
2005/05/30(月) 22:05:43ID:???0145nobodyさん
2005/05/30(月) 22:08:01ID:???ttp://search.cpan.org/~gaas/Perl-API-0.01/
これでperlapiの殆どの関数を利用できるようになる。
0146nobodyさん
2005/05/31(火) 06:36:25ID:???JST とか GMT とか EST とかそういうの。
0147nobodyさん
2005/05/31(火) 08:23:28ID:???0148nobodyさん
2005/05/31(火) 08:43:42ID:???windows perl じゃ取れなかったけどw
0149nobodyさん
2005/05/31(火) 08:45:01ID:???タイムゾーン関係の設定ファイルがあるがlibcのバージョンや
OSの作法によっていろいろ違いがあり、ポータブルなのを自前
で書くのはたいへんなのでDateTime::TimeZoneモジュールを使
うのが楽だろう。
use DateTime::TimeZone;
use DateTime;
my $tz = DateTime::TimeZone->new(name => 'local');
print $tz->name, "\n";
my $dt = DateTime->now;
print $tz->short_name_for_datetime($dt), "\n";
0150nobodyさん
2005/05/31(火) 08:48:39ID:???use POSIX;
print strftime "%Z", localtime;
0151nobodyさん
2005/05/31(火) 10:01:32ID:???>>149 も ありー。
でも必要なモジュール多いし揃えても何故か動かなかったw スマン。
0152nobodyさん
2005/05/31(火) 11:03:00ID:TIA+apXZ習作でperlでライブラリ及びdbを使わずに(なるべく多くの環境で動くことを目標に)
2ch風の掲示板を作ろうとしています。
んで、排他処理について質問…というか意見を伺いたいです。
板(blist.dat)、スレ(tlist.dat)、書き込み(スレid.dat)があります。
権限を持っていれば、板とスレも作成/論理削除が可能で、
同時に更新される可能性があります。
数は板・スレッド共に、00〜ffまで持てる物とします。
排他処理はロックファイルのリネーム方式で行おうと考えています。
なるべく軽快に動かしたい為、必要な時に必要な所だけロックをかけようと思っており、
そういう意図で必要になるロックファイルは
・lock_blist(板一覧用)
・lock_tlist(スレッド一覧用)
・lock_スレッドid(個別スレッド用)
となります。
これで組むと、ロックファイルが板の数*256個となり、最大で65536個になってしまうのですが、
これは設計としてアリ…というか必然なのでしょうか。それとも、ダメダメ(工夫の余地あり)なのでしょうか。
もちろんここに書き込む時点で多いなーという疑問を持っているのですが、
任意の一スレッドに書き込むたびに掲示板全体をロックするというのは、
それはそれで違うかなという気がしています。。
ご意見などありましたら、ご教授お願いします。
0153nobodyさん
2005/05/31(火) 11:12:03ID:???レス数とか
0154nobodyさん
2005/05/31(火) 11:17:57ID:???そうか。。。
その通りでした…orz
何ではまってたんだろう…ありがとうございますorz
0155nobodyさん
2005/05/31(火) 16:14:18ID:???簡単なデータベースを動作させたいと思っています。
1つのページに2×4個データを表示させたいんです。
もちろんそれ以上の情報があれば次のページへと移動です。
この「2つ目で改行・8個目でページ終了、さらに次のページ移動やページ数を計算」
というものを勉強したいのですが、どこかに良いサイトや参考となるCGIはありませんか?
0156nobodyさん
2005/05/31(火) 17:58:58ID:???どう表示するかはわけて考えた方がいいだろうな。
前者は自分で作ってもいいが、Data::Pageとかそれっぽいのが
CPANにあるから適当に探して気に入ったものがあれば使うのも
いいだろう。次のページあるかないかとか、このページにある
データはいくつかなんてのはもちろんよく考えれば簡単に計算
で求まるとはいえめんどうだからね。もし自分で書くとしても
だらだらとスクリプトのあちこちでその場で計算しないで、
うまく手続きをまとめておくことをお勧めする。
後者はあんまり知らないのだがどうせ作るんならn×mで一般的
に作っておくと気がかわったときにいいかもしれん。
あとhtmlベタでスクリプトに埋め込むよりはTemplate Toolkit
とか使った方がすっきりするよ。
0157nobodyさん
2005/05/31(火) 18:51:34ID:md7jEE3a0159nobodyさん
2005/05/31(火) 19:19:00ID:???statでは調べられないみたいですが、もしもございましたら
ご教授いただきたい次第です。
0160nobodyさん
2005/05/31(火) 19:20:33ID:???0163nobodyさん
2005/06/01(水) 05:35:45ID:???require Exporter;
require DynaLoader;
@ISA = qw(Exporter DynaLoader);
bootstrap なんか別のモジュール?;
みたいな流れがよくあるんですが、
これって何をやっているんでしょう?
0164nobodyさん
2005/06/01(水) 10:36:57ID:???0165nobodyさん
2005/06/01(水) 12:03:09ID:???んー、Exporterのほうはぐぐってみても日本語化されたマニュアルが見つからないのです。
動的にモジュールをロード?しているっぽいんですかね。
これを使えば、引数からモジュール名を得て、インポートするモジュールを選べたりするのでしょうか。
0166nobodyさん
2005/06/01(水) 12:26:27ID:???ぐぐり方が悪すぎるんじゃ...
Exporterとperlをキーワードにして日本語のページを検索すると
普通に出てきますが...
■ このスレッドは過去ログ倉庫に格納されています