Perlコーディング初心者質問スレ Part 57
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/02/25(月) 19:25:51ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ http://pc11.2ch.net/test/read.cgi/php/1189939783/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0067名無し募集中。。。
2008/03/07(金) 19:05:18ID:???で削っていけば?
0068nobodyさん
2008/03/07(金) 19:22:48ID:???3.02じゃなくて?
3.02なら*1すりゃいいだけだけど・・・
0069nobodyさん
2008/03/07(金) 19:28:01ID:???一旦数値コンテキストで評価。
print "$_ => ", $_ + 0, "\n" for qw(3.00 3.02000 19120730.0000);
0070nobodyさん
2008/03/07(金) 19:40:11ID:???レスありがとうございます。
>>68
> 3.02じゃなくて?
そのとおり、3.02でした。
*1でも+0でも可能でした。ありがとうございました。
0071nobodyさん
2008/03/09(日) 04:23:14ID:???そんなもんJifty使って1時間もあればプロダクションまでいけるおれが答えよう。
(「在庫」の複雑さにもよるが)
これからプログラムやりたいんであれば、なんとしてでもこの機会を利用しろ。
開発用マシン買ってくれとか、本買ってくれとか、時間くれとか。
どんな言語がやはっていても、RDBMSの知識は常に使える。
3rd manifestoまではまだ10年以上かかるだろう。
プログラムやるきがなくて、この社内アプリが手柄になるなら外注しろ。
どれでもなければ、「できません」だな。
0072nobodyさん
2008/03/09(日) 06:21:52ID:kv7E/tC/期待に応えたりしたらさらに良いように無理難題押し付けられるのが関の山だ
にげちまえ
0073nobodyさん
2008/03/09(日) 10:38:47ID:???「外注」というと上司が文句を言う場合は、部品(ライブラリ)を
買うと言ってみてはどうだろう?
use ZAIKOKANRI
ZAIKOKANRI->new( -option=>... );
みたいな形で起動する、ライブラリという名のアプリケーション。
実際、漏れの上司は何故か外注を嫌がるが、「ライブラリを買う」
というと許可が下りるので、フリーのプログラマの知り合いに
頼んで作ってもらってる。
0075nobodyさん
2008/03/10(月) 16:46:11ID:???これはどう対処すべきなのでしょうか…?
#タイトルのエンコード
$subject = encode('iso-2022-jp', $subject); # iso-2022-jpにエンコード
$subject = encode_base64($subject, ''); # Base64にエンコード
$subject = '=?iso-2022-jp?B?' . $subject . '?='; # ヘッダー文字列の追加
# 本文のエンコード
$content = encode('iso-2022-jp', $content); # iso-2022-jpにエンコード
# メール送信
$cnt=<<"EOT";
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=iso-2022-jp
From: $from
To: $to
Subject: $subject
$content
EOT
open MAIL, "| /usr/sbin/sendmail -t" or &err("Cannot open sendmail: $!");
print MAIL $cnt;
close MAIL or &err("Cannot close sendmail: !=$! ?=$?");
0076nobodyさん
2008/03/10(月) 17:53:13ID:dzM4A1jo他池
007775
2008/03/10(月) 19:29:36ID:???>>75のは、「文字コードが意味不明だゴラァ」と言われていたようでした。
(『encode』とは『UTF-8から』sjisやらiso-2022-jpやらにエンコードする機能。
一度UTF-8に『decode』しなければならなかった。)
以上、スレ汚し失礼しました。
0078nobodyさん
2008/03/10(月) 22:41:42ID:???といったものを作りたいのですが上手く行きません。
症状は、エラーは吐かず、同じ行があっても末尾に追記されてしまいます。
ご教授いただけたら助かります。
foreach my $aaa ( @{$data->{'aaa'}} ) {
$line="This is $aaa->{'msg'}";
$chk=0;
open( DAT, "./log.txt" );
while ( <DAT> ) {
if( $_ == $line ){
$chk++;
}
}
close( DAT );
if( $chk == 0 ){
open(FILE, ">>./log.txt");
$line="$line\n";
print FILE $line;
close(FILE);
}
}
0079nobodyさん
2008/03/10(月) 22:51:05ID:???0080nobodyさん
2008/03/10(月) 23:25:05ID:???0081nobodyさん
2008/03/10(月) 23:34:28ID:dzM4A1jo比較的簡単に見つかるはずだからググッてみそ
0083nobodyさん
2008/03/10(月) 23:43:47ID:???ありがとうございます。
別サイトのRSSのタイムスタンプを読み、データベース化するのに秒数の方が効率がいいと思いました。
ただ標準実装では出来ないようなのでYYYYMMDDhhmmssで行こうと思います。
チラシの裏
RSSの仕様のいい加減さと各サイトの独自拡張と欧文フォーマットの日付表記ウザすぎですね。
少々殺意を覚えました。YahooやgooやニュースサイトのRSSを見てみると、バージョン違いで
タグが違う(pubDateやらdc:dateやら)はまだ許せますが、フォーマットもめちゃくちゃですね。
Mon, 10 Mar 2008 19:17:02 +0900
Mon,10 Mar 2008 11:02:29 +0900
2008-03-10T21:56:00+09:00
少なくとも3パターンはあるようで、非常に嘆かわしいと思いました。
0084nobodyさん
2008/03/11(火) 00:00:51ID:kt3GGsX40085nobodyさん
2008/03/11(火) 00:17:08ID:???自由にできるのは結構なことだけど,良く使う日時のフォーマットくらい統一してほしいぜ・・・
0086nobodyさん
2008/03/11(火) 00:31:27ID:???Time::Local (の timelocal) は組込関数ではないが標準モジュール。
故意に抜かない限り入っている。
0087nobodyさん
2008/03/11(火) 00:55:54ID:???#!/usr/local/bin/perl
sub DateFmt{
my $str=$_[0];
my $i,$temp,$num;
if($str =~ /[0-9]{4}?(-[0-9]{2}?){2}?T[0-9]{2}?:[0-9]{2}?:[0-9]{2}?\+[0-9]{2}?:[0-9]{2}?/){
return $str;
}
$str =~ s/^[a-zA-Z]{3}?\,//;
$str =~ s/^\ +//g;
@mname = ('Jun','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
$i=1;
foreach $temp (@mname){
$num=sprintf("%02d",$i);
$str =~ s/$temp/$num/i;
$i++;
}
($day,$month,$year,$hms,$jst) = split(/ /,$str);
$jst =~ s/\+(..)(..)/+$1:$2/;
return "$year-$month-${day}T$hms$jst";
}
print &DateFmt("Mon, 10 Mar 2008 19:17:02 +0900");
print "\n";
print &DateFmt("Mon,10 Mar 2008 11:02:29 +0900");
print "\n";
print &DateFmt("2008-03-10T21:56:00+09:00");
print "\n";
0088nobodyさん
2008/03/11(火) 05:18:16ID:???use Date::Parse;
print str2time($_), "\n" for <DATA>;
__DATA__
Mon, 10 Mar 2008 19:17:02 +0900
Mon,10 Mar 2008 11:02:29 +0900
2008-03-10T21:56:00+09:00
0089nobodyさん
2008/03/11(火) 05:24:13ID:???0090nobodyさん
2008/03/11(火) 09:52:01ID:???0092nobodyさん
2008/03/11(火) 12:11:54ID:PA7R3QgSこのモジュールのあるバージョン以下の場合はメソッドA実行、それ以外はメソッドB実行
といった振り分けを行いたいのですが、モジュールのバージョンをperl上で調べるには
どうすればいいのでしょうか?
print $SpreadSheet::WriteExcel::VERSION;
としても、何も表示されませんでした。
0093nobodyさん
2008/03/11(火) 12:35:37ID:???ソースに当ってみたら?
0094nobodyさん
2008/03/11(火) 13:47:11ID:???レスありがとうございます。わざわざ調べて頂きどうもです。
やってしまいました。
print $SpreadSheet::WriteExcel::VERSION;
ではなく、
print $Spreadsheet::WriteExcel::VERSION;
でした。これははずかしい(*´Д`)
バージョン2.15、2.20とも表示されました。大変失礼しました。
0095nobodyさん
2008/03/11(火) 14:00:50ID:???0096nobodyさん
2008/03/11(火) 14:26:49ID:???0097nobodyさん
2008/03/11(火) 14:34:32ID:???0099nobodyさん
2008/03/12(水) 20:50:08ID:???Perlの勉強中で簡素なプログラムを作成しているのですが
POSTでデータがうまく送信できなくて困っています。
同じコードでMETHOD="GET"とすると送信できるのですが
パスワード入力などをするため、URLにパラメータを表示したくないのです。
お知恵を拝借させてください。よろしくお願いします
0101nobodyさん
2008/03/12(水) 21:02:36ID:???0102nobodyさん
2008/03/12(水) 21:04:45ID:???迅速なレス、感謝します。
浅学でお恥ずかしいのですがCGI.pmについてこれから調べてみます。
ありがとうございます。
0103nobodyさん
2008/03/12(水) 21:10:03ID:???レスありがとうございます
受信後の処理は、次のような処理を記述しております
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $form, $ENV{'CONTENT_LENGTH'});
} else {
$form = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $form);
foreach (@pairs) {
($name, $value) = split(/=/, $_);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/>/>/g;
$value =~ s/</</g;
&jcode'convert(*value, 'sjis');
&jcode'convert(*name, 'sjis');
$FORM{$name} = $value;
}
GETだとうまく処理されるので2行目の
read(STDIN, $form, $ENV{'CONTENT_LENGTH'});
が怪しそうですね。
CGI.pm?で調べられるのかどうなのかまだよくわかっておりませんが
まずいところの見当すらつかなかったので助かります。
ありがとうございます。
0104nobodyさん
2008/03/12(水) 21:18:29ID:???しかしnameにも日本語を使ってるのか
0105nobodyさん
2008/03/13(木) 00:55:15ID:???0107nobodyさん
2008/03/13(木) 02:21:43ID:???0108nobodyさん
2008/03/13(木) 03:58:19ID:???0109nobodyさん
2008/03/13(木) 13:54:44ID:???「あれ? どうやるんだっけ?」と本気で焦った俺。
使わないとそんなもんだよな。
0111nobodyさん
2008/03/14(金) 00:19:02ID:jE/64EXv$aaa=1;
if($aaa==1||$aaa==3)
これをもっと簡潔に書くにはどうすればいいですか。
あと、「$aaaが8のn倍ならマッチさせる」というのも
わかりませんでした、おねがいしますm(_ _)m
0112nobodyさん
2008/03/14(金) 00:26:38ID:???8で割ってみて余りが0なら割り切れてるので8の倍数ということ
0113nobodyさん
2008/03/14(金) 00:34:03ID:???if($aaa==1||$aaa==3)
if ($aaa =~ /^[13]$/)
こんなのできないこともないけど、そのままでいいんじゃないか?
0114111
2008/03/14(金) 00:40:08ID:jE/64EXvそういうやりかたもあるんですね。
>113
極端にいえば
if($aaa==1||$aaa==5||$aaa==13||$aaa==17||$aaa==25||$aaa==34||)
こんなに長くなってしまう。
これじゃあまりにもじゃないですか?
0115nobodyさん
2008/03/14(金) 01:07:31ID:???長くなるんだと思う。
0116nobodyさん
2008/03/14(金) 01:13:26ID:???1つの変数に対して配列で一気にチェックできた気がする
grep 使ったような使わなかったような・・・ごめん。 俺にはもう無理w
0117nobodyさん
2008/03/14(金) 01:41:34ID:???そんな劇的な違いは無いとしても気分的になんとなくw
0118nobodyさん
2008/03/14(金) 01:51:12ID:???if($aaa =~ /^(1|5|13|17|25|34)$/)
0119nobodyさん
2008/03/14(金) 06:02:08ID:???if ( defined $tmp{$aaa} ){
print "俺の名を言ってみろ\n" ;
}
0120nobodyさん
2008/03/14(金) 11:41:19ID:???grep使う方法だとこうかな?
if ( grep { $aaa == $_ } qw( 1 5 13 17 25 34 ) ) {
# code here
}
0121nobodyさん
2008/03/14(金) 11:42:57ID:???grep { $aaa == $_ } qw/1 5 13 17 25/;
#
use List::MoreUtils qw/any/;
any { $aaa == $_ } qw/1 5 13 17 25/;
# use 5.10
$aaa ~~ [qw/1 5 13 17 25/];
0122nobodyさん
2008/03/14(金) 11:53:06ID:???my %tmp = map +( $_ => 1 ), ( 1, 5, 13, 17, 25, 34 );
grep $aaa == $_ ,( 1, 5, 13, 17, 25, 34 );
0123nobodyさん
2008/03/14(金) 14:50:45ID:???ttp://blog.livedoor.jp/dankogai/archives/51017983.html
0124nobodyさん
2008/03/14(金) 15:48:58ID:???http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_can_i_tell_whether_a_certain_element_is_contained_in_a_list_or_array
0125nobodyさん
2008/03/14(金) 22:34:42ID:exCIvuwaディレクトリ探索し、ディレクトリの中の「.txt」をファイルを見つけたら
その行数を出力したいのですが、「open(FH, "$_") or die;」のところで
落ちます。何がいけないのでしょうか?
---ここから
use File::Find;
my $dir = 'TestDir';
find(\&print_file, $dir);
sub print_file {
$_ = $File::Find::name;
if (/.+\.txt/) {
print "$_ \t";
open(FH, "$_") or die;
1 for <FH>;
print $. . "行\n";
close(FH);
} else {
print "$_ \n";
}
}
0126nobodyさん
2008/03/14(金) 22:50:02ID:???open(FH, "$_") or die "$! [$_]";
1 while <FH>;
とでもして吐かれたエラーメッセージを読む。
0127nobodyさん
2008/03/14(金) 23:25:19ID:???File::Find の find では pwd が変りますが、
$File::Find::name で得られるのはこの場合は $dir からのパス。
use Cwd ;
して if 文の中に
print getcwd ;
して確認してみそ。
簡単な解決方法は、$dir にゼッタイパスを突っ込め。
それから perldoc File::Find くらいしろ。
0128nobodyさん
2008/03/16(日) 19:27:01ID:483Ek7KZ以下で生成されたcontentをチェックしても、漢字だけ消えています。
どの様にすれば良いでしょうか。
よろしくお願いいたします。
use encoding "shift-jis";
LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my %form=('test'=>'漢字123');
my $request = POST('http://test.test',[%form]);
my $con=$request->content;
print "test:$form{test}\n";
print "content:$con\n";
出力
test:漢字123
content:test=123
0130nobodyさん
2008/03/16(日) 23:03:42ID:eaCmNgRi自作の掲示板を作ってまして、ある書き込みにレスが付いた場合は
そのレスの数をカウントして画面に表示させる、という事をやってます。
現状はこんな感じです。
print "($res)<br>\n" if ($res ne "");
レスがある場合は(9)とかの某かの数字、レスが付いてない場合は空白という所までは
上手く行ってるのですが、
この(9)の部分を赤で出力したいと思ってます。
出来れば上記の命令の中だけで完結させたいのですが、無理でしょうか?
0131nobodyさん
2008/03/16(日) 23:16:51ID:???print qq|<span style="color:red;">($res)</span><br>\n| if $res;
Webサイト制作初心者用質問スレ Part 194
http://pc11.2ch.net/test/read.cgi/hp/1204015309/
△▲ WebProg 初心者の質問 Part17 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1204462146/
0132nobodyさん
2008/03/17(月) 02:23:56ID:WVXzjYIyありがとうございました。
ただ、UserAgentは使うのでコメントアウトできません。
EUCでソースを書き、1行目だけコメントアウトで解決しました。
0134130
2008/03/17(月) 21:21:26ID:iYfDDUadありがとうございました、無事に解決いたしました。
これを応用して、文字のサイズを変える事もやってみましたが上手く行きました!
ところで考え方の確認を1つ。。。
admin.cgiで生成した画面から、subって画像をUPロード。
その画像を、album.cgiという別の画面上に表示させていて上手く動いてるのですが、
「その画像がUPされた日時をalbum.cgiの画面上に表示させる。」という事を考えています。
すごーく単純に考えて、
「subる直前に日時を取得して、それを変数に格納。その変数をalbum.cgiに渡して、その変数をprintすればOKかも。」
と考えてやってますが上手く行きません。(表示すらされない。)
もともとCOBOラーなもんで、この手のコーディングは激苦手なのですが四苦八苦しながら何とかやってます。
変数の初期化は?変数は共通変数なのかpg内変数なのか?受け渡しはどうやってやるのか?
などなど色々疑問は尽きませんが、そもそも上記の考え方でおかしくはないですか?
0135nobodyさん
2008/03/17(月) 22:03:37ID:???>>1-3
△▲ WebProg 初心者の質問 Part17 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1204462146/
CGI: Common Gateway Interface part 13
http://pc11.2ch.net/test/read.cgi/php/1126436361/
0136nobodyさん
2008/03/18(火) 10:37:05ID:???CGIプログラム:バッチ
htmlフォーム:コマンドライン
と考えれば、おのずと答えが見えると思われ。
各バッチ処理間でデータをやり取りするには、
・ファイルまたはDBに格納する
・コマンドラインオプションを利用しうまく受け渡す方法を考える
のいずれかになる。
CGIプログラム間でうまくデータを受け渡すには
・セッション(ファイルまたはDB)を利用する
・htmlフォームデータとして生成しPOSTする(値を変えられたくなければHIDE要素にする)
のいずれかになる。
0137nobodyさん
2008/03/18(火) 11:07:18ID:???stat使えばいいだろ
0138nobodyさん
2008/03/18(火) 17:51:36ID:yz+TlyvN----------------
sub test{
$hoge = shift;
$fuga = shift;
$hoge += $fuga;
}
----------------
のような感じのプログラムを作っていましたが
うまくいかなくてどうしてだろうかと考えた所
文字列として認識していたっぽいです。
この $fuga を 数字に明言したいのですが
どのようにやるのでしょうか?
以上 ご助力いただけますとありがたいです。
0140nobodyさん
2008/03/18(火) 18:25:39ID:???$hoge と $fuga に数字がきちんと入ってたら、最初に文字列として認識してようと、
+= の段階で数字として扱ってくれるだろ…。他の部分のミスじゃね?
0141nobodyさん
2008/03/18(火) 18:26:00ID:???0142138
2008/03/18(火) 18:30:10ID:yz+TlyvN$hogeか$fugaに数字以外の記号が入っている場合もあり
ソノ場合は0として扱いたいのですが
数字が入っていた場合は数字として扱いたいのです、、、
num $fuga
int $fuga
などで数字と明言する方法があったような気がするのですが
私の勘違いでしょうか???
0143nobodyさん
2008/03/18(火) 18:35:55ID:???っつーかデバッグして調べろよ
0144nobodyさん
2008/03/18(火) 19:26:34ID:???そのままSQL文を書くと長いので
my ( @n, @q, @p );
foreach my $key ( keys %hash ) {
push @n, $key;
push @q, '?';
push @p, $hash{$key};
}
my $sth=$dbh->prepare('INSERT INTO test('.join(',',@n).') VALUES('.join(',',@q).')');
$sth->execute(@p);
という形でSQL文を構築してデータを格納しているのですが、
もう少しスマートな方法は無いでしょうか?
0145nobodyさん
2008/03/18(火) 19:50:13ID:???$sth->execute(map{$data{$_}}(keys %data));
適当にmapで記述したら、ここまで短くなりましたが、map{'?'}(keys %data)の辺りは、
もうちょっとスマートな方法がありそう…。
0146nobodyさん
2008/03/18(火) 20:25:49ID:???スマートな方法より可読性を選んだら?
keys %data を三回も呼ぶんだったらアレイに突っ込むだろ。
ついでに、join ',' も二回あるんだったらサブルーチンかなんかにしちまえ。<= 嘘。
sub foo { return join ',', @_ ;} ;
@arr = keys %data ;
my $sth=$dbh->prepare('INSERT INTO test('. &foo( @arr ) .') VALUES('. &foo( ('?') x @arr) ).')');
$sth->execute( @data{ @arr } );
てきとーに書いたから、' とか抜けてても勘弁。
0147nobodyさん
2008/03/18(火) 21:49:40ID:???#!/usr/bin/perl -w
use strict;
use Scalar::Util qw(looks_like_number);
test(@ARGV);
test(map looks_like_number($_) ? $_ : 0, @ARGV);
sub test {
my($hoge, $fuga) = @_;
print "hoge:[$hoge] fuga:[$fuga] ";
$hoge += $fuga;
print "result:[$hoge]\n";
}
>>144
my $col = join ',', my @col = keys %hash;
my $phs = join ',', ('?') x @col;
my $sth = $dbh->prepare("INSERT INTO test($col) VALUES($phs)");
$sth->execute(values %hash);
0148138
2008/03/19(水) 16:21:54ID:uoUGbd4u>143さん おっしゃるとおりでした。
すいません。デバッグしてみますと整数になっていなかった訳ではなくバグでした。
下記のようなプログラムでタブ区切りのファイル内の$filename
(フォーマットは「名前\t\t\t\t\t\t\t数\t\n」)
でハッシュデータで $hash{名前}->数
とやろうとして下記のようにプログラムを組んでみました。
----------------
open(FH,"$filename"); my @data = <FH>; close(FH);
my %hash = ();
foreach(@data){
my @splitdata= split(/\t/);
if(defined $hash{$splitdata[7]}){
print "<>$splitdata[7]no$hash{$splitdata[7]} ha mouaru<><br>";
}else{
$hash{$splitdata[7]} = 0;
print "$splitdata[7] wo sengen<br>";
}
}
my $key;
foreach $key ( keys %hash ) {
print "$key<br>";
foreach(@data){
my @splitdata= split(/\t/);
if($key eq $splitdata[7]){
print "$hash{$key} ni $splitdata[10] tumari $hash{$key} += $splitdata[10];wo tasu<br>";
$hash{$key} += $splitdata[10];
print "$hash{$key} : $hash{$splitdata[7]}<br>";
}
}
}
(続く)
0149138
2008/03/19(水) 16:23:18ID:uoUGbd4u----------------
それで出力が
print "$hash{$key} ni $splitdata[10] tumari $hash{$key} += $splitdata[10];wo tasu<br>";
$hash{$key} += $splitdata[10];
print "$hash{$key} : $hash{$splitdata[7]}<br>";
の所が
0 ni 2 tumari 0 += 2 ;wo tasu
0 : 0となっていたのですが どのようにすれば
ハッシュデータで $hash{名前}->数
とのハッシュデータを取得できますでしょうか?
以上 ご助力をいただけますとありがたいです。
0150nobodyさん
2008/03/19(水) 16:44:42ID:???0151nobodyさん
2008/03/19(水) 16:56:44ID:???0152nobodyさん
2008/03/19(水) 17:13:34ID:???$hash{名前} = 数で取り出したいってこと?
$splitdata[10]てなに?空じゃないの?
$hashには$hash{$splitdata[7]} = 0; この部分でしか入れてないよね?
0153nobodyさん
2008/03/19(水) 17:20:14ID:???$splitdata[0] が「名前」
$splitdata[7] が「数」
に見える。
コードは
$splitdata[7] が「名前」
$splitdata[10] が「数」
っぽいことになってるし、いつのまにか $splitdata[10] に 2 が入ってるし、よくわかんない。
(exists $hash{$splitdata[0]}) かどうか調べて、なかったら用意して
$hash{$splitdata[0] += $splitdata[7] したいんじゃないのかな。
0154153
2008/03/19(水) 17:21:25ID:???0155153
2008/03/19(水) 17:23:29ID:???$hash{$splitdata[0]} の } が抜けてました。
0156nobodyさん
2008/03/19(水) 17:28:37ID:???0157nobodyさん
2008/03/19(水) 23:15:18ID:???perl 5.8.4
mysql 4.1.11
OS debian
上記の環境でお勉強目的で BBS を作成しています。
データ自体は utf8 で格納出来ているはずですが、 perl 取得した結果を print した
際に文字化けが発生してしまいます。何処を注意すべきでしょうか?
# やってる内容をかいつまんで記入します
use DBI;use utf8;use Encode;
binmode STDIN, ":encoding(utf8)";
binmode STDOUT, ":encoding(utf8)";
$db = DBI->connect("DBI:mysql:database:localhost:$port", "hoge", "hoge");
$db->prepare("set character set utf8");
あとはセレクトして print しているだけ
# DB の中身は dump したファイルが utf8 で出力されていたのでデータは utf8 のはずです
0159nobodyさん
2008/03/19(水) 23:45:37ID:???それでメタタグの文字コード宣言が違うとか
0160157
2008/03/20(木) 12:29:10ID:???apache を使ってブラウザ上に表示させてます。
メタタグには一応 utf-8 って記入してます。
ブラウザ側の文字コードも utf-8 になってました
0161nobodyさん
2008/03/20(木) 12:38:21ID:???0162nobodyさん
2008/03/20(木) 13:03:57ID:???for ($j=0+$i*10; $j<10+$i*10; $j++) {
$box[$i][$j] = $j;
};
};
print "$box[0][0]\n";
print "$box[0][1]\n";
print "$box[0][2]\n";
print "$box[0][3]\n";
print "$box[0][4]\n";
print "$box[0][5]\n";
print "$box[0][6]\n";
print "$box[0][7]\n";
print "$box[0][8]\n";
print "$box[0][9]\n";
print "$box[1][0]\n";
print "$box[1][1]\n";
print "$box[1][2]\n";
print "$box[1][3]\n";
print "$box[1][4]\n";
print "$box[1][5]\n";
print "$box[1][6]\n";
print "$box[1][7]\n";
print "$box[1][8]\n";
print "$box[1][9]\n";
上記のプログラムを実行すると、$box[1][x]が表示されないのはなぜ?
0163nobodyさん
2008/03/20(木) 13:33:56ID:???0164nobodyさん
2008/03/20(木) 13:41:13ID:???の行の次に
print "[$i][$j]\n";
入れて表示してみ
0165nobodyさん
2008/03/20(木) 13:42:25ID:???期待する動作はこれかな?
■ このスレッドは過去ログ倉庫に格納されています