Perlコーディング初心者質問スレ Part 46
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/01/18(水) 02:17:46ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
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なりを使う必要がある。
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」という反転文字が
入っております。
説明不足で申し訳ありません。
■ このスレッドは過去ログ倉庫に格納されています