Perlコーディング初心者質問スレ Part 46
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2006/01/18(水) 02:17:46ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0809nobodyさん
2006/02/21(火) 17:51:46ID:???どうしてもprintを使いたいならIO::ScalarなりIO::Stringなり、
さらに必要ならIO::Teeなりを使う必要がある。
0813nobodyさん
2006/02/22(水) 05:44:07ID:???サイトに来てくれた人のHTTP_REFERERを保存していて
どんな単語で検索して来たのかを表示しようと思ったんですけど
うまく表示されない場合があります。
$value =~ tr/+/ / ;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("H2", $1)/eg ;
jcode::convert( *value, 'euc' );
調べたんですけど、だいたいどこもこのくらいしか書いてないんです。
他に何か必要なことがあるんでしょうか?
0814nobodyさん
2006/02/22(水) 06:10:09ID:???0815nobodyさん
2006/02/22(水) 07:48:55ID:???ありがとうございましたmm()__
0816nobodyさん
2006/02/22(水) 15:01:17ID:???詳しく言うとボタンをつかわいで変数にデータを入れる方法とかなんですが・・・
その場合後ろのタイトルとかに?をつけてポストとか書けばいいんでしょうか?
なんとかしてボタンじゃなくてリンクだけで送信されるようにしたいのですが。
宜しくお願いします。
0817nobodyさん
2006/02/22(水) 15:12:46ID:???それぞれ対応したページを生成する掲示板を作っています。
その掲示板に’ホームへ戻る’のリンクをつけて、その呼び出した元のページへ帰るようにしたいのですが、
どのような方法があるでしょうか?
最初はリファラーをクッキーに保存しておけばいいかなと思ったんですが、
imodeはクッキー使えないみたいなので困っています。
他の方法があれば教えてください。
0818nobodyさん
2006/02/22(水) 15:21:39ID:???クリック保証型の詐欺ですか (; ̄^ ̄)
0819nobodyさん
2006/02/22(水) 15:23:17ID:???面倒くさいだろうけど、<input type="hidden"〜 を使うしかないんじゃないかな
0820nobodyさん
2006/02/22(水) 17:49:13ID:???'KKK'をプリントしたいんですが・・・
どうやればいいんでしょうか。
$a = {
1 => 'aaa',
2 => 'bbb',
3 => 'ccc',
4 => $b->{test}[0]
};
$b = {
test => ['kkk','yyy']
};
print $a->{4}; # KKKをプリントしたいけどうまくいかないorz
0821nobodyさん
2006/02/22(水) 18:13:58ID:???それと$a,$bはsortで使う特殊変数だから、テストでも使わないのが吉。
0823nobodyさん
2006/02/22(水) 18:40:23ID:???Jcodeを使用しようと思い
Jcode一式をドキュメントルートのlibフォルダ下へコピーしました。
続いて、test.cgiに
use lib './lib';
use Jcode;
と記述しました。ですが、エラーになります。
ttp://www.aglabo.com/agl/proevo/perl/install/jcode-user.html
ここを見るとこれだけで使えるようなのですが
何が悪いのでしょうか。
0824nobodyさん
2006/02/22(水) 19:00:54ID:???エラーメッセージをコピペしないところが悪いんじゃないかなと思った
最近はEncodeもJcodeも入ってる貸し鯖が増えてると思ってたんだけど
そうでもないのかな?
0825nobodyさん
2006/02/22(水) 19:13:05ID:???utfフラグとかめんどくさくて結局Jcode使ってる。
0826nobodyさん
2006/02/22(水) 19:34:27ID:???すいません。
エラーは 500 Internal Server Error です。
use Jcodeをevalでくくってもだめでした。
0827nobodyさん
2006/02/22(水) 19:37:27ID:???うう。そっちじゃなくて、
use CGI::Carp qw(fatalsToBrowser);
を仕込んでおいたら吐いてくれそうなほうのエラーメッセージ。
0828nobodyさん
2006/02/22(水) 20:13:43ID:???CGI::Carp使ってみました。
でも500エラーのままかわりません。
use Jcode;をコメントにするとエラーはなくなります。
use Jcode or die("asdf");は無理なんでしょうか?
0829nobodyさん
2006/02/22(水) 20:14:51ID:???Encodeのある今、Jcodeなんてキモくて使えない。
utfフラグが面倒だったら常にfrom_to使えばいい。
0830nobodyさん
2006/02/22(水) 20:22:10ID:???0833nobodyさん
2006/02/22(水) 21:20:26ID:???0834nobodyさん
2006/02/22(水) 21:37:54ID:???0837nobodyさん
2006/02/23(木) 00:36:17ID:???山田家の逆襲を参考にファイルごとevalしてみたらこんなのが出ました。
Can't locate auto/Jcode/Unicode/utf8_euc.al in @INC
( (@INC contains:
./lib
/usr/lib/perl5/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/5.8.0
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.0
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.0
/usr/lib/perl5/vendor_perl .) at lib/Jcode/Unicode.pm line 64
このline64ってのはコメント除いた行数なんですかね?
>>836
やったけどだめだったんです。
0838nobodyさん
2006/02/23(木) 01:12:06ID:???動いたら、それのほうが問題
0839nobodyさん
2006/02/23(木) 06:14:00ID:???eval {
require Encode;
};
if ($@) {
print $@;
}
eval 使う時って、use でなくて、require しないと止まるんやね。
あと、eval ブロックは、; セミコロン付けないといけないので、きをつけるべし。
0840nobodyさん
2006/02/23(木) 07:29:23ID:???print $@;
…じゃダメなの?
拙い自分用に拙く作ってみました。% hoge.pl Net::SMTP したりして遊ぶ。
#!/usr/local/bin/perl -w
use strict;
if (!$ARGV[0]) {
die("まじめにトラップする気がない。\n");
}
eval("use $ARGV[0]");
if ($@) {
print $@, "\n↑読め。\n";
} else {
print "$ARGV[0]が使える気配。\n";
}
0843nobodyさん
2006/02/23(木) 11:25:13ID:???eval("use Jcode");
ではエラなしの様子です。
eval{ Jcode::convert($hoge,"utf8","euc-jp"); };
だと>>837と同じエラがでます。
間違えて
eval{"use Jcode"};
としたときは
Undefined subroutine &Jcode::convert called
とでました。
0844nobodyさん
2006/02/23(木) 11:33:40ID:???これだけ実行すると何もエラー吐かないわけだけど。
0845nobodyさん
2006/02/23(木) 12:06:11ID:???perl -e "eval('use unko'); print $@"
0846nobodyさん
2006/02/23(木) 12:08:49ID:???ここみて同じ今年たら解決しました。
お世話になりました。
evalの件は勉強になりました。ありがとうございました。
0848nobodyさん
2006/02/23(木) 20:01:33ID:???0849nobodyさん
2006/02/23(木) 23:51:28ID:???SQL発行(insert)時に止まってエラーになったみたいなの
ですが、この現象を回避する方法をご教示いただけますと
幸いです。
DBはPgモジュールを使用し、Postgresで管理しております。
たしかにコマンド直打ちでSQLを実行してみると、ターミナルが
停止してしまいます。。
0850nobodyさん
2006/02/23(木) 23:52:30ID:???0852nobodyさん
2006/02/23(木) 23:56:18ID:???ちゃんとエスケープしてくれるんじゃないかな。
0853nobodyさん
2006/02/23(木) 23:57:35ID:???肝心のバイナリが貼り付けられませんでした。
「蕨市」と「ヘロ」の間には、エディタで開いて「SV」という
反転文字が入っております。
コードはSJIS→EUCに変換したものです。
0854nobodyさん
2006/02/23(木) 23:58:36ID:???元の文字列って何だろう?
そういうことも示せないってのは馬鹿かなにか?
0855849
2006/02/24(金) 00:22:49ID:???本当にありがたいです。。
もう少し具体的に説明させていただきますと、フォームはSJIS
ですので、入力があった文字はプログラムの先頭でEUCに
変換されます。
それをSQLにいれてinsertするのですが、その際に
「蕨市 〒ヘロ1-5-15」
↑
血管が浮き出るようなマーク
このような文字列でSQLが止まってしまっていることが発覚し、
改修していたのですが、どうしてもこのバイナリを処理すること
ができず困り果て質問させていただきました。
バイナリ文字は秀丸エディタで開くと、「SV」という反転文字が
入っております。
説明不足で申し訳ありません。
0856nobodyさん
2006/02/24(金) 00:26:33ID:???0859nobodyさん
2006/02/24(金) 00:35:54ID:???はい次
0860nobodyさん
2006/02/24(金) 00:38:18ID:???0862nobodyさん
2006/02/24(金) 01:17:56ID:???849が自殺していないことを祈る
0863nobodyさん
2006/02/24(金) 01:37:32ID:???0864nobodyさん
2006/02/24(金) 01:59:07ID:???何を使って変換したのか(できればモジュールのバージョンも)が分かれば、
原因も分かるかもね。
0865nobodyさん
2006/02/24(金) 05:23:53ID:???500エラー(文法エラーですよね?)になりました。
チェッカなどにかけてみると、
In string, @808 now must be written as \@808 at index.cgi line 70, near "@808"
index.cgi had compilation errors.
と、出たのですが、意味が分からなくて、ググってみたんですが当該情報が見つかりませんでした。
何が問題か、分かる方いましたら、お教えくださいますようお願いします。
0868nobodyさん
2006/02/24(金) 05:45:48ID:???有難う御座います
808なんて記述してないと思い込んで、確認してなかったですが、
(ファイルサイズ 808KB)
ってのがあってそこに\つけたら直りました
ほんと助かりました
0869nobodyさん
2006/02/24(金) 05:55:06ID:???0870nobodyさん
2006/02/24(金) 08:17:49ID:???0871nobodyさん
2006/02/24(金) 10:45:19ID:???0872nobodyさん
2006/02/24(金) 10:59:30ID:???0873nobodyさん
2006/02/24(金) 12:35:39ID:???1. 日本語文字列を使っている: YES => 2, NO => 30
2. Shift_JIS を使っている: YES => 10, NO => 3
3. EUC-JP を使っている: YES => 5, NO => 4
4. UTF-8 ...
みたいな。
0874nobodyさん
2006/02/24(金) 12:37:35ID:???使いやすければ使うし、そうでなければ無駄働きw
0875nobodyさん
2006/02/24(金) 13:17:52ID:???0876nobodyさん
2006/02/24(金) 13:49:15ID:???0877nobodyさん
2006/02/24(金) 13:51:23ID:???0878nobodyさん
2006/02/24(金) 13:55:04ID:???Shift_JIS のスクリプトにはお答えできません
0879nobodyさん
2006/02/24(金) 15:59:44ID:hXh5LOuqこちらで質問させて頂きます。
サーバのローカル上にある画像ファイルのMIMEタイプを
判別したいのですが、どうすればよろしいでしょうか?
GIFとJPEGが区別できるだけでいいです。
できることならモジュールとか使わず、
今のスクリプト上にシンプルに書きたいのですが。
0880879
2006/02/24(金) 16:03:26ID:hXh5LOuq画像のMIMEタイプって変ですね…。
画像のフォーマットの種類を判別したいのです。
よろしくお願い致します。
0881nobodyさん
2006/02/24(金) 16:22:19ID:???0882nobodyさん
2006/02/24(金) 16:24:24ID:???$file = $_[0];
open (FILE, "$file");
read (FILE, $data, 4);
close (FILE);
($type) = unpack ("H4", $data);
if ($type eq "ffd8") {
$type = "jpg";
} elsif ($type eq "8950") {
$type = "png";
} elsif ($type eq "424d") {
$type = "bmp";
} elsif ($type eq "4749") {
$type = "gif";
} else {
$type = "知るかボケ";
}
return ($type);
}
0883nobodyさん
2006/02/24(金) 16:45:12ID:???口悪くて性格も悪いやつもかなり混じってるけど。
0884879
2006/02/24(金) 16:53:33ID:hXh5LOuqどうもありがとうございます。
画像なんて普段扱わないから、さっぱり?でした。
>>883
ほんとですねw
0885nobodyさん
2006/02/24(金) 17:38:26ID:???特に問題は発生しないだろうけど、Win も考えるなら read の前に binmode を
0886nobodyさん
2006/02/25(土) 01:58:25ID:qE7CF1Aw外部ファイル呼び出しについて質問なのですが、呼び出し時に関数を
与えて呼び出す事は可能なのでしょうか?
ニュアンスとしましてはmain.cgiというソースの中に外部ファイル
(gaibu.cgi)を呼ぶ時にgetデータの送り方のように
require("gaibu.cgi?data=1");
としてgaibu.cgiへdata=1という関数を引き渡したいのですが・・・
main.cgiから渡されたdata=1というのをチェックして、gaibu.cgiの方で
main.cgiへ引き渡す関数を指定したいのですが。
妙な文章で申し訳ありませんが、どなたか宜しくお願い致します。
0887nobodyさん
2006/02/25(土) 02:23:48ID:???0888nobodyさん
2006/02/25(土) 02:28:14ID:???0890nobodyさん
2006/02/25(土) 02:48:36ID:???0891nobodyさん
2006/02/25(土) 02:54:14ID:???0892nobodyさん
2006/02/25(土) 02:56:47ID:???0893nobodyさん
2006/02/25(土) 02:58:46ID:???$ENV{"REQUEST_METHOD"} = "GET";
$ENV{"QUERY_STRING"} = "data=1";
my $data = `gaibu.cgi`;
0896nobodyさん
2006/02/25(土) 11:37:16ID:JV6sbN7wを読み込んで、その最終行だけを行ごと削除して出力したいのですが
ググっていろいろ調べて試したんですがうまくいきません。
よろしくお願い致します。
0898nobodyさん
2006/02/25(土) 13:50:14ID:???ロックとかエラー処理は自分で付け加えてね
open(IN, "inputfile.csv");open(OUT, ">outputfile.csv");while(my $inline = <IN>){if($inline =~ /XXX/){print OUT $inline;}}close(IN);close(OUT);
… どこのセルにXXXが含まれてるか分からんからこれ以上は無理
0899nobodyさん
2006/02/25(土) 13:51:44ID:???if(!($inline =~ /XXX/)){〜
0900nobodyさん
2006/02/25(土) 14:08:44ID:???0901nobodyさん
2006/02/25(土) 15:47:11ID:???0902nobodyさん
2006/02/25(土) 16:01:54ID:???0904nobodyさん
2006/02/25(土) 18:21:00ID:???>>901 と >>902 が上級者である根拠は?
0905nobodyさん
2006/02/25(土) 18:22:11ID:???0906nobodyさん
2006/02/25(土) 18:26:41ID:???0907nobodyさん
2006/02/25(土) 18:26:45ID:???0908nobodyさん
2006/02/25(土) 18:27:58ID:???レス数が900を超えています。1000を超えると表示できなくなるよ。