Perl 初心者コーナー Part24
■ このスレッドは過去ログ倉庫に格納されています
0001 ◆fBgbHI04bQ
03/06/07 22:30ID:GbQKLcPE【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0072nobodyさん
03/06/08 18:03ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0074nobodyさん
03/06/08 18:09ID:???0075nobodyさん
03/06/08 18:10ID:???自分のサイト作って次はCGIだーって思ってる奴が迷い込んで来るんだよ。
質問者は>>1読まないしね。読んだとしても1行ぐらいじゃないかな。
0076nobodyさん
03/06/08 18:11ID:???split(/#/, $name, 2);にしないと$nameが"名前#12#3"とかなっていたら$tripが"12"になってしまうけどいいの?
0077nobodyさん
03/06/08 18:13ID:???>2:それでこんな風にやってみたが・・・
>3:それだとこんなエラーが出て上手く行かなかった。
これを強制させるのはどうだ?
例えば>>66にこれを書かせると
1:自分はこう言う事がしたい。
2chのトリップみたいのを付けたいです。
2:それでこんな風にやってみたが・・・
何もしてません。
3:それだとこんなエラーが出て上手く行かなかった。
何もしてないのでエラーはありません。
となって、自分で全く調べてないって少しは自覚できるんじゃないかな。
0079nobodyさん
03/06/08 18:16ID:???ここは「Perl初心者」のためのスレだろう。
"努力・常識のかけらも無いアホ"の"質問にすらなっていない独り言"で埋まってしまうのはいかんだろ。
0080nobodyさん
03/06/08 18:17ID:???if($FORM{'FROM'} =~ /([^\#]*)\#(.+)/){
my $main_message = $1;
my $handle_pass = $2;
my $change_salt = substr($handle_pass, , 1) . "H";
$handle_pass = substr(crypt($handle_pass, $change_salt), -8);
if($main_message ne ""){
$FORM{'FROM'} = "$main_message </b>◆$handle_pass <b>";
}else{
$FORM{'FROM'} = "</b> ◆$handle_pass <b>";
}
}
0082nobodyさん
03/06/08 18:20ID:???$sharp = index($name);
$sharp++:
$trip = substr($name,$sharp);
ではダメ?
無駄が多い?
008382
03/06/08 18:22ID:???$sharp = index("$name","#");
$trip = substr($name,$sharp++)
これでいいや;
0084nobodyさん
03/06/08 18:25ID:???0086nobodyさん
03/06/08 18:29ID:???$i=0;
$j=$i++;
としたとき、$iは1になるけど$j=0になることは知っているよね?
もちろんそれでいいならいいんだけど。ただ、あとで$sharpを使わなければ意味ないなぁと思って。
0087nobodyさん
03/06/08 18:33ID:???0088nobodyさん
03/06/08 18:40ID:???008982
03/06/08 18:43ID:???次からとるから+1だったな
0091nobodyさん
03/06/08 18:50ID:???$trip = substr($name,$sharp+1);
#ここでトリップ生成
}
0092nobodyさん
03/06/08 18:52ID:???そりゃできるだろ。
if(($sharp = index($name,'#')>=0){
$trip = substr($name,$sharp++);
#ここでトリップ生成
}
では動かんよ。
0093nobodyさん
03/06/08 18:53ID:???括弧の対応があわないね(汗
if(($sharp = index($name,'#'))>=0){
$trip = substr($name,$sharp+1);
#ここでトリップ生成
}
0095nobodyさん
03/06/08 19:06ID:???0096nobodyさん
03/06/08 19:40ID:???あ、いや、そういうことじゃない。
$trip = substr($name,$sharp+1);
が
$trip = substr($name,$sharp++);
だと動かんでしょ?って>>82に言いたかった。
009982
03/06/08 20:43ID:???ぃやぃや、こちらこそ「は?」
なにを指してるんだこいつは
0101ラヴ
03/06/08 21:07ID:Sf/nGZf1#学籍番号
#氏名
print(" a =?");
chomp( $a = <STDIN>);
print("演算子?");
chomp( $op = <STDIN> );
print(" b = ?");
chomp( $b=<STDIN> );
if($op eq '+') {
$c=$a + $b;
print (" $a + $b = $c\n");
} else {
if($op eq '-'){
$c=$a - $b;
print ("$a - $b = $c\n");
} else {
if($op eq '*'){
$c = $a * $b;
print ("$a * $b = $c\n");
} else {
if($op eq '/'){
$c = $a / $b;
print ("$a / $b = $c\n");
}
}
}
}
のフローチャートはどうやって書いたらいいのでしょう??
0102無料動画直リン
03/06/08 21:10ID:+3TQ1ee90108nobodyさん
03/06/08 22:05ID:???>>80
> &jcode::tr(\$FORM{'FROM'}, '#', '#');
Jcode.pm に入れ替えたらエラーになた。(s/jcode/Jcode/g したあと)
でも、Parse したときに、Shift_JISに変えているんだから、
s/#/#/g; にしちゃった。
0109nobodyさん
03/06/08 22:09ID:???どうすればいいでしょうか?
英数なら大丈夫です。
0110nobodyさん
03/06/08 22:15ID:???0113nobodyさん
03/06/08 22:23ID:???超超超特別サービスでおまいに説教を送ってやろう。
普通は叩かれるだけなのに説教を貰えるとは幸せと思え。
@まずどうやって生成した文字列なのか。
どのような過程を通り、どう言ったアプリケーションで文字列に直しているのか書くべきである。
A
>1:自分はこう言う事がしたい。
>2:それでこんな風にやってみたが・・・
>3:それだとこんなエラーが出て上手く行かなかった。
さらにこのスレのルールとして以上の事を書かねばならない。
B
これ決定的。
スレ違いだから他に行って下さい。
記述やコーティングのスレだから。
0117nobodyさん
03/06/08 22:33ID:???じゃあ、
>>112
> >>111
> あってるよ
合ってないのになんでそういうこと言うの?
$name = "hoge#hage";
$sharp = index("$name","#");
$trip = substr($name,$sharp++) ;
print $trip,"\n";
と
$name = "hoge#hage";
$sharp = index("$name","#");
$trip = substr($name,++$sharp) ;
print $trip,"\n";
の結果比べてご覧。
#なんで切れ気味なの?
011882
03/06/08 22:34ID:???違うねぇ、スマン、見間違えてた
0119nobodyさん
03/06/09 02:42ID:KAhSj8Gh($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$month = ($mon + 1);
if ($sec < 10) { $sec = "0$sec"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
if ($mday < 10) { $mday = "0$mday"; }
if ($month < 10) { $month = "0$month"; }
$date = "$month/$mday/$year $hour\:$min\:$sec";
これで実行すると、2003年が103年となってしまいます。
2003年に正しく修正するにはどうしたらいいでしょうか?
0120_
03/06/09 02:54ID:???0121nobodyさん
03/06/09 02:58ID:???0122nobodyさん
03/06/09 03:01ID:???>>119
2003って表示させたいなら
$year += 1900;
下二桁「03」って表示させたいなら
$year = sprintf("%02d",$year%100);
を追加すればいいんでね?
0123nobodyさん
03/06/09 03:09ID:???($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
の$yearは1900年からの経過年数
0124nobodyさん
03/06/09 11:48ID:s9oH3tCTjcode.plを使っていて
WARNING: UtfToLocal: could not convert UTF-8 (0xd6a5). Ignored
というようなエラーが出た方はいらっしゃいませんか?
特にUTFは使っていないのに、必ず出てきてエラーになってしまいます。
ファイルはshift_jisで、それを読み込んでeucに変換しているのですが・・
このエラーはネットで探しても見つからないので
ご存知の方がいらっしゃいましたらよろしくお願いします。
0125nobodyさん
03/06/09 12:41ID:???0127124
03/06/09 12:54ID:s9oH3tCTDBとのコネクト時のことだったみたいです。
申し訳ありありませんでした。
jcode.plにも、そのメソッドを検索して、存在しないから
内部的なものかとおもっていました。
Posgresqlに文字コードをEUCを指定して接続する方法はあるのでしょうか?
DBIを使っています。
interbaseのibperlを使っていた頃は、Charsetでできたのですが・・
0128無料動画直リン
03/06/09 13:10ID:GjkKVS2A0130nobodyさん
03/06/09 14:01ID:QAgTJ6O8安心して24時間お買い物ができる!
セルビデオ店が近くにないお客様も気軽にお買い物を楽しめます。
http://www.net-de-dvd.com/
安心確実
お支払は安心の代金引換です
振り込んだのに商品が届かない等
の心配は無用!
http://www.net-de-dvd.com/
0131nobodyさん
03/06/09 19:15ID:???どちらを使用した方が、処理速度・負荷の面で有利なのでしょうか?
0132nobodyさん
03/06/09 19:26ID:???0133nobodyさん
03/06/09 20:52ID:???$in{id} = 8;
$in{file1name} = "hoge.jpg";
$in{file1name} = "fuga.jpg"
rename($ImageDir.$in{file1name}, $ImageDir."photo1_id".$in{id}."jpg");
rename($ImageDir.$in{file2name}, $ImageDir."photo2_id".$in{id}."jpg");
とやっても、renameされません。
パス付きファイル名をrenameに渡してもダメなのでしょうか?
だとしたら、同じことを実現するにはどうすればいいのでしょうか?
0134nobodyさん
03/06/09 21:32ID:???・ フィアル名が正確かどうかprintで出力して確認
・ エラーがあれば、エラー内容を出力
エラー内容は$!に入ってるので、
rename $file1,$file2 or die "rename Error : $!"; で見てみればいい。
0136nobodyさん
03/06/10 02:08ID:0JHS1DHo半角カナとかの1バイト文字と、1バイト文字も含めた全ての文字列との比較させて、その結果によって処理を振り分けるスクリプトを作りたいんで。
ちょっと説明が難しいんですが、知ってる方いたら教えて下さい。
substrではダメなんです。
0137nobodyさん
03/06/10 03:04ID:???2バイトも一文字として認識してほしいって事?
そんな関数ないっぽいです。
モジュールなら、どこかにあるかも。
極論で言わせてもらえば、jperl使えって事になってくるかな。
0138nobodyさん
03/06/10 03:07ID:???0139nobodyさん
03/06/10 03:16ID:???たぶん極論・・・
って言うか、俺的に極論かな・・・?
日本語文字列で問題がおきてる。
↓
jperl使え。 終了。
これが、黄金パータンでしょ?(w
0140nobodyさん
03/06/10 07:44ID:???sjisじゃできんが(2バイト文字と1バイト文字が重複する)、eucならできる。
perlメモの「日本語を扱う」に書いてある。がいしゅつ
0141nobodyさん
03/06/10 09:10ID:???2:CGI::Sessionモジュールを試用してテスト中、
クライアントからセッションIDを取得できなかった場合のテストをやってみたら...
3:サーバにセッション情報を保持したファイルが残って、更新されることも消えることもなかった。
該当のセッションを使用してのアクセスがないので更新されないのはあたりまえなのですが、
もう使われることのないセッション情報を消す管理用メソッドとかないのでしょうか。
0142nobodyさん
03/06/10 14:45ID:H1NA4Acv"person" => "tanaka",
"adana" => "tanachan",
"adanaid" => 5,
};
$ORG[1] = {
"person" => "takada",
"adana" => "takachan",
"adanaid" => 2,
};
$ORG[2] = {
"person" => "imai",
"adana" => "imachan",
"adanaid" => 3,
};
@tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG;
foreach (@tmp) {
print 'person='. $ORG[$_]->{person}. "\n";
print 'adana='. $ORG[$_]->{adana}. "\n";
print 'adanaid='. $ORG[$_]->{adanaid}. "\n";
}
はわかるのですが(以前こちらで教えていただいたのですが)
そうではなく、@ORGを、${ORG[?]->{adanaid}}でソートした結果を、
再び@ORGとして得るにはどうすればいいのでしょうか?
(ただし、一個一個person、adana、adanaid などとせずに。。。実際は項目が多いもので)
foreach my $key (keys %{$ORG[0]}){
\$ORG[0]->{$key}
}
↑この辺をどうにかするよな気がするのですが・・・
0143nobodyさん
03/06/10 15:16ID:???よくわかんないけど、こんな感じ?
@tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG;
foreach (@tmp) { push(@temp,$ORG[$_]); }
foreach (@temp){
while(($i,$j) = each(%$_)){
print qq|$i = $j\n|;
}
}
0145nobodyさん
03/06/10 18:37ID:???XML::Parser::Liteで読めるようになったけど書き込めない・・・。
0146通行人さん@無名タレント
03/06/10 18:53ID:???foreach my $man(@ORG){
#print_man
foreach my $atti(keys %{ $man }){
print $atti, ' => ' ,$man->{ $atti }, "\n";
}
print "\n";
}
0148nobodyさん
03/06/10 20:13ID:???foreach my $person (@ORG) {
foreach my $attr (sort keys %$person) {
print $attr, ' => ', $person->{$attr}, "\n";
}
print "\n";
}
0149nobodyさん
03/06/10 23:10ID:???0150nobodyさん
03/06/10 23:15ID:???(∞ ) …出来ないんじゃないか?
| |
0152nobodyさん
03/06/11 01:07ID:b6wCYV2GsubInputPage {
print "Content-type: text/html; charset='Shift_JIS'\n\n";
$fname = $FORM{'name'};
print <<END;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><body>
<strong>$fname</strong>さん<br>
</body></html>
END
}
subResultPage {
print "Content-type: text/html; charset='Shift_JIS'\n\n";
print <<END;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>名前入力</title></head>
<body>
<strong>$fname</strong>さん
</body></html>
END
}
↑ResultPage内の $fname が空になってしまうのですが、
InputPage内の $fname に格納したもの(これは表示される)を
ResultPageの中の $fname に受け継がれるようにするには
どうしたらいいのですか?
0153無料動画直リン
03/06/11 01:10ID:xrcrQEEf0154nobodyさん
03/06/11 01:19ID:???http://www.indigostar.com/perl2exe.htm
>>152
表示されるよ?
ちなみにsubの後にスペースが無いのは関係ないよね?
0156nobodyさん
03/06/11 01:34ID:b6wCYV2G>>154
subは関係ないです。
>>155
全くその通りです。
if($FORM{'mode'} eq 'enter') {
InputPage();
}
elsif($FORM{'mode'} eq 'result'){
ResultPage();
}
ってやってます。
どうやったら表示されるようになりますか?
0158nobodyさん
03/06/11 02:04ID:???0161nobodyさん
03/06/11 02:09ID:???0162152
03/06/11 02:10ID:b6wCYV2Gたびたびすいません、ネタじゃなくてまじわからんです。
$fname = '名無し';
if($FORM{'mode'} eq 'enter') {
InputPage();
}
elsif($FORM{'mode'} eq 'result'){
ResultPage();
}
これだと$fnameに「名無し」がはいちゃうし・・
0163nobodyさん
03/06/11 02:14ID:???myやlocalをつけなければグローバルになるはずだから、そのままでも受け継がれるはずだけど・・・
サブルーティンを呼び出す順番は正しい?
0164nobodyさん
03/06/11 02:15ID:???入っちゃいけないの?(´・ω・`)
そういう風に自分で設定してるんだよ(´・ω・`)マジデ マジデ
$fname = $FORM{'name'};
if($FORM{'mode'} eq 'enter') {
InputPage();
}
elsif($FORM{'mode'} eq 'result'){
ResultPage();
}
これじゃだめなの?(´・ω・`)
0165nobodyさん
03/06/11 02:18ID:???0166nobodyさん
03/06/11 02:22ID:???<strong>$FORM{'name'}</strong>さん<br>
0167nobodyさん
03/06/11 02:29ID:???InputPage()とResultPage()は一度に両方とも呼ばれることはないんでしょう?
0168152
03/06/11 02:42ID:b6wCYV2G感激しております。
if($FORM{'mode'} eq 'enter') {
InputPage();
}
elsif($FORM{'mode'} eq 'result'){
ResultPage();
}
else {
EntryPage();
}
exit;
EntryPage()のフォームで読み込んだものをInputPage()で表示し、
その後、InputPage()でボタンを押すと、ResultPage()に移って表示
って感じなんです。
やっぱり表示されないです・・・
何かうまい方法ないですかねぇ
■ このスレッドは過去ログ倉庫に格納されています