Perlコーディング初心者質問スレ Part 46
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/01/18(水) 02:17:46ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0709nobodyさん
2006/02/16(木) 14:29:23ID:???言語切り替えが出来るように作ってあるページで、
フランス語なんかに言語を切り替えると文字化けして、その文字化けがタグを侵食したり
して表示が崩れたりします。フランス語やドイツ語を扱う時に注意する点ってどういうとこ
だか、誰かアドバイスもらえませんか?
ページは全部Perlで組んでます。
0710nobodyさん
2006/02/16(木) 14:40:42ID:???0711nobodyさん
2006/02/16(木) 19:00:13ID:???<form action=aaa.cgi>
<input type=submit value=更新>
</form>
としているのですが、これだとボタンをクリックすると画面がaaa.cgiに移動してしまいます。
画面が一切変化しないでaaa.cgiを動かすにはどうすればよいでしょうか?
0716nobodyさん
2006/02/17(金) 00:28:06ID:???perldoc CGIの「FETCHING THE PARAMETER LIST AS A HASH」という項目を読め。
0717676
2006/02/17(金) 00:50:26ID:LOkWB/9eこんなソースです↓
if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $post, $ENV{'CONTENT_LENGTH'});
}else{ $post = $ENV{'QUERY_STRING'};}
for (split(/&/, $post)){
($word, $value) = m/^(\w+)=(.*)$/;
$value =~ s/\+/ /g;
$value =~ s/%([0-9A-F]{2})/pack('C', $1)/egi;
$q{$word} = $value;}
print <<EOS;
"Content-Type: text/html; charset=Shift_JIS"
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>たいとる</title>
</head><body>
〜略
PCでは大丈夫ですが携帯では表示はしても反応なしです
どなたかフォローお願いします
0718nobodyさん
2006/02/17(金) 00:52:34ID:???print <<EOS;
"Content-Type: text/html; charset=Shift_JIS"
これおかしくね?
何でダブルクォートが・・
つか略すな。そこも大事だ。
0722nobodyさん
2006/02/17(金) 01:49:09ID:???お前はそれだけの情報で足りると思ってんのか?
エスパーさん向けだな。
つか>>719で萎えた。
名前の欄はちゃんと確認しようねボクちゃん。
0723nobodyさん
2006/02/17(金) 01:59:20ID:???0725nobodyさん
2006/02/17(金) 03:33:08ID:???0726nobodyさん
2006/02/17(金) 03:36:38ID:???悔しいのは分かるがContent-lengthも知らない香具師はとりあえず黙ってろ
最近アレだな、厨房っぽいのが常駐してんだな
0728nobodyさん
2006/02/17(金) 03:55:29ID:???0730nobodyさん
2006/02/17(金) 04:05:10ID:???0731nobodyさん
2006/02/17(金) 04:22:14ID:???0732706
2006/02/17(金) 04:51:48ID:RcUmmaVqありがとうございます。
use CGI;
CGI::ReadParse();
とすることで、%inをそのまま利用でき、$incfnも$inへ変更してファイル名が無事に取得できました。
ただ、マルチパートの画像を取り出すことができません。
open (OUTFILE,">>/usr/local/web/users/feedback");
while ($bytesread=read($filename,$buffer,1024)) {
print OUTFILE $buffer;
}
close $filename;
としても0byteとなってしまいます。
今まで調べて試行錯誤してみましたが、どうにもなりませんでした。
どなたかアドバイスを頂けないでしょうか。
0733nobodyさん
2006/02/17(金) 04:56:57ID:???0734706
2006/02/17(金) 04:58:30ID:RcUmmaVq<form action="./***.cgi" method="POST" ENCTYPE="multipart/form-data">
としております。
0735nobodyさん
2006/02/17(金) 06:13:19ID:???0736nobodyさん
2006/02/17(金) 09:20:24ID:???次からは独り言はチラシの裏にでも書いてね。
0740nobodyさん
2006/02/17(金) 17:48:02ID:???よく気が付いたなw
ちゃんと閉じられてなかっただけっていうオチかな?
でも最後にちゃんと閉じられなくてもスクリプトが終われば閉じられると思ったし、ん〜なんだろ
0741nobodyさん
2006/02/17(金) 17:51:12ID:???0742nobodyさん
2006/02/17(金) 17:55:00ID:???でもまあ $filename っていう変数名からして十中八九 read() の使い方間違えてるんだろうね。
0743nobodyさん
2006/02/17(金) 17:57:35ID:???read("d:\test.txt", $readduff, 1024);
みたいな使い方を想像してるのかな?
0744nobodyさん
2006/02/17(金) 21:15:59ID:???Crypt-SSLeay-0.51はインストール済みでございます。
ソースは下記です。
ご教示いただけますと幸いです。
sub post_request{
use LWP::UserAgent;
my ($req_url, $data) = @_;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(POST => $req_url);
$req->content_type('application/x-www-form-urlencoded');
$req->content($data);
my $res = $ua->request($req);
if($res->is_success){
return $res->as_string;
}
else{
return "";
}
}
0745nobodyさん
2006/02/17(金) 21:36:53ID:???0746nobodyさん
2006/02/17(金) 22:33:50ID:???$tmp = index( $text , 'title' );としました。
しかし、「title」だけではなく「TITLE」という文字の可能性もあり
そちらも同時に検索したいのですが、良い方法はありますか?
0747nobodyさん
2006/02/17(金) 22:38:03ID:???SSLeayはインストールさえしておけばLWPが自動的に
使用してくれると仕様書に書いてありましたが、認識に
相違がございますでしょうか。
0748nobodyさん
2006/02/17(金) 22:43:44ID:???正規表現こそがPerlの華。
$text =~ /title/i
だけどこれじゃ位置を知ることはできないから、使える用途はやや限られる。
多くの場合位置を知らなくても処理できるんだけどね。
本当にそれが現れる位置を知りたいなら、先に小文字に合わせてしまうという手がある
$tmp = index( lc $text , 'title' );
0750nobodyさん
2006/02/18(土) 00:16:59ID:???http://search.cpan.org/~nwclark/perl-5.8.8/pod/perlfunc.pod#pos_SCALAR__
$text = 'foo title bar tiTle, baz titlE foo Title, bar TITLE baz title';
print uc substr($text, pos($text) - 9, 4) while $text =~ /title/gi;
0751nobodyさん
2006/02/18(土) 00:19:21ID:???@-でわかるよ。
% perl -e '$text="aaaTitle"; $text =~ /title/i; print $-[0];'
3
0753nobodyさん
2006/02/18(土) 02:12:59ID:Hc0+hkLtなので携帯でも実行できるように改造おねがいします
if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $post, $ENV{'CONTENT_LENGTH'});}
else{$post = $ENV{'QUERY_STRING'};}
for (split(/&/, $post)){
($word, $value) = m/^(\w+)=(.*)$/;
$value =~ s/\+/ /g;
$value =~ s/%([0-9A-F]{2})/pack('C', $1)/egi;
$q{$word} = $value;}
if ($q{'WORD'} ne ''){
for (split(/\r*\n+/, $q{'WORD'})){next unless /(.+)/;$word = $1;}
}
print <<EOS;
"Content-Type: text/html; charset=Shift_JIS"
<html><head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>たいとる</title>
</head><body>
$word
<form method="POST">
<input type="SUBMIT" value=" テスト "><input type="text" name="WORD">
</form></body></html>
EOS
0754nobodyさん
2006/02/18(土) 02:18:16ID:???自分でやる気が無い人はスレ違い
http://pc8.2ch.net/test/read.cgi/php/1127916965/
0755nobodyさん
2006/02/18(土) 02:20:21ID:???おみくじCGIの方ですか
<form method="POST">
actionを指定しないと確かドコモじゃ実行できないんじゃなかったか。
つか普通に記述ミスだろ
0756nobodyさん
2006/02/18(土) 02:56:52ID:Hc0+hkLt記述忘れでした
ありがとうございました
0757nobodyさん
2006/02/18(土) 05:25:34ID:???0758nobodyさん
2006/02/18(土) 07:46:55ID:???1139355934
1139301779
1139325935
1139231627
1139409916
リスト2
1139231627
1139301779
1139355934
1139325935
のようにリスト1とリスト2があって、それぞれ$list1[連番]$list2[連番]のようになっています。
リスト1の上から順に読み込んで、読み込んだ内容がリスト2のどれかと一致したとき
$check[$list1の内容]を1にしたいと考えています。下のようにやってみましたがうまくいきませんでした。
どのようにしたら実現できるのでしょうか。ご教唆お願いします。
$num=-1;
until($list1dir_filenum==$num){
$num++;
print "$list1name[$num]\n";
$list2num=-1;
until($list2dir_filenum==$list2num){
$list2num++;
print "$list2name[$list2num]\n";
if ($list1name[$num]eq$list2name[$list2num]){
$val=$list1name[$num];
$namecheck[$val]="1";
}
}
}
0761758
2006/02/18(土) 08:29:29ID:???すいません。goo辞書で確認してみたら自分が間違いでした。教示ですね。ありがとうございます。
で、質問のほうはどのようにしたらうまくいくのでしょうか。お願いします。
0762nobodyさん
2006/02/18(土) 08:38:48ID:???http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#data__arrays
my @list1 = (0..9, 5..9);
my @list2 = (1, 5, 10, 10);
my %check;
{
my(%saw1, %saw2, %count);
# ++$count{$_} == 2 && ++$check{$_} for # 要素が多い時
# %check = map ++$count{$_} == 2 ? ($_, 1) : (), # map で一気に
%check = map +($_, 1), grep ++$count{$_} == 2, # 段階を踏んで
grep(!$saw1{$_}++, @list1), # それぞれのリストが既に
grep(!$saw2{$_}++, @list2), # ユニークなら必要無し
;
}
print map "$_\n", sort { $a <=> $b } keys %check;
0763nobodyさん
2006/02/18(土) 08:39:26ID:???for $i (0 .. $#list1){
$check[$i]= grep($list1[$i] eq $_, @list2);
}
0764nobodyさん
2006/02/18(土) 08:42:47ID:???> $check[$list1の内容]
早まるなっそんな馬鹿でかい数を配列の添え字に使ったら
すごい量のメモリが確保されるぞ
0765nobodyさん
2006/02/18(土) 11:31:58ID:???世の中こういうヘボだらけになって、メモリをガンガン使って欲しい。
0767nobodyさん
2006/02/18(土) 12:34:04ID:???0768nobodyさん
2006/02/18(土) 12:58:01ID:???テキスト入れた日にゃ・・・Perl落ちw
0769nobodyさん
2006/02/18(土) 13:01:05ID:???0770nobodyさん
2006/02/18(土) 13:02:07ID:???0771nobodyさん
2006/02/18(土) 13:09:37ID:???嘘だと思うならやってみれ。
0772nobodyさん
2006/02/18(土) 13:11:23ID:???0773765
2006/02/18(土) 13:21:35ID:???頭使わず、メモリ使え。
0775nobodyさん
2006/02/18(土) 16:14:55ID:???おみくじこそPerlの真こっちゅおって言ってたなぁ・・・
この前通りかかったら別の教室になってた
0776nobodyさん
2006/02/18(土) 17:47:39ID:???0778nobodyさん
2006/02/19(日) 00:53:45ID:???0779nobodyさん
2006/02/19(日) 01:32:35ID:xuHW0Wknどんな風に書いたらよいですか?
データファイル
4234 ←一行目(カウンター)
さいたま市<>県庁<>アリーナ<>レッズ ←二行目以降はループで
川越市<>時の鐘<>古都
秩父市<>祭り<>花の街
プログラム
open(FILE, "<hogehoge.dat");
eval{ flock(FILE, 1) };
@log = <FILE>;
一行目の読み込み
@logの一行目
二行目以降はこの処理
@logの二行目以降
0780nobodyさん
2006/02/19(日) 01:47:56ID:???カウンタと次からのデータは切っても切れないものなの?
違うファイルにしてもいい希ガス。
で、foreachじゃなくて、for (my $i = 1; $i ++; @log) {}
で、いい希ガス。
0781nobodyさん
2006/02/19(日) 01:49:33ID:???0782nobodyさん
NGNG$readline =~ s/\x0D\x0A|\x0D|\x0A/;
my($cnt) = int($readline);
while($readline = <FILE>){
〜処理〜
}
0783nobodyさん
2006/02/19(日) 01:50:09ID:???配列に読み込んでforeachするのが良いかどうかは置いといて。
一行最初に読めば良いじゃん。
open(FILE, "<hogehoge.dat");
eval{ flock(FILE, 1) };
$counter = <FILE>;
@log = <FILE>;
0785nobodyさん
2006/02/19(日) 14:03:52ID:???┌→┐
↑話↓
└←┘
0786nobodyさん
2006/02/19(日) 15:17:40ID:???しょうがねぇじゃん
過去ログ読まねぇんだもんorz
0787nobodyさん
2006/02/19(日) 17:04:46ID:???↓ ↑ ↑ ↓
└→┘ └←┘
↑↑
───────
低 気 圧
0788nobodyさん
2006/02/19(日) 19:19:24ID:sHmg7IfX今Z-Z BOARDをレンタルしているのですが、こんど自前の掲示板を設置したいと思っています
どうしても利用者のトリップを引き継ぎたいのですが設置しようと考えている掲示板は
暗号化の部分がこのようになっています
sub tripmake{
my($key,$salt,$trip);
$_[0]=~s/◆/◇/g;
if($_[0]=~/#(.+)/){
$key=$1;
$salt=substr($key."H.",1,2);
$salt=~s/[^\.-z]/\./go;
$salt=~tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
$trip=substr(crypt($key,$salt),-10);
$_[0]=~s/#(.+)/◆<\/B>$trip/;
}
return $_[0];
}
Z-Z BOARDのトリップにすることは可能でしょうか?
皆様よろしくお願いいたします
0789nobodyさん
2006/02/19(日) 19:33:27ID:???可能です
終了、次の質問どうぞ
0790nobodyさん
2006/02/19(日) 20:25:14ID:???LWPのgetメソッドでページの情報を取ってきたのですが
その取ってきたページで使われている文字コードが何であるかを
知る方法は無いでしょうか?
0791nobodyさん
2006/02/19(日) 20:40:05ID:???0792nobodyさん
2006/02/19(日) 21:41:24ID:???0793nobodyさん
2006/02/19(日) 22:05:53ID:???0794nobodyさん
2006/02/19(日) 22:34:29ID:???0795nobodyさん
2006/02/19(日) 22:52:30ID:???0796788
2006/02/19(日) 22:58:25ID:???0797nobodyさん
2006/02/19(日) 23:03:51ID:???0798nobodyさん
2006/02/20(月) 00:26:00ID:ppD/ecqFとかしたときに、$xのなかにある正規表現の特殊文字を普通の文字として扱う場合はどうしたらいいですか
0801nobodyさん
2006/02/20(月) 08:03:48ID:???jcodeのgetcodeを使いました。>>793も調べてみようと思います。
0804801
2006/02/21(火) 02:29:14ID:???jcodeを利用したのですが、まだ文字化けが起こります。
$ua = LWP::UserAgent->new();
$res = $ua->get( $inurl );
if($res->is_success)
{
$title = $res->title;
&jcode::convert( $title , "euc", "", "z");
}
else
{
#異常終了処理
}
ページ取得、タイトル取得には成功しているのですが。
jcodeの使い方は合ってますか?
私の使い方が正しくないのでしょうか?
jcodeでは希望の処理はできないのでしょうか?
Encodeを使えば回避できますか?
0805nobodyさん
2006/02/21(火) 02:54:00ID:???0806nobodyさん
2006/02/21(火) 03:14:58ID:???渡すのは型グロブかリファレンス
&jcode::convert( \$title , "euc", "", "z");
0807nobodyさん
2006/02/21(火) 17:43:45ID:???普通のプリント文をlengthするにはどうしたらいいんでしょうか?
sub hoge{
print 'momoko';
return;
}
この、サブルーチンhogeで出力される'momoko'の長さ(6文字)を計りたいのです。
$a = length(&unko);
print $a;
だとうまくいきせん。どうやればいいんでしょうか。
0809nobodyさん
2006/02/21(火) 17:51:46ID:???どうしてもprintを使いたいならIO::ScalarなりIO::Stringなり、
さらに必要ならIO::Teeなりを使う必要がある。
■ このスレッドは過去ログ倉庫に格納されています