Perl 初心者コーナー Part24
レス数が1000を超えています。これ以上書き込みはできません。
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
0932nobodyさん
03/06/27 09:45ID:???超初心者な質問です。
if だと何かが真なら…って分岐になりますが、
「これら全てが真なら」とか「全てが偽なら」って記述をスマートに書くにはどのように書くのが一般的なのでしょうか?
頭悪いので
if(){
if(){
if(){
}
}
}
こんな記述使ってます。
見にくいです。
0933nobodyさん
03/06/27 09:47ID:???andじゃ駄目なの?
if($a == 1 and $b == 2 and $c == 3){
全てが真の時の処理;
}else{
一個でも違ったら;
}
0934932
03/06/27 11:05ID:???頭が悪いのか、andとか、全然使いこなせないんです。汗
0936374
03/06/27 11:22ID:???0937nobodyさん
03/06/27 11:36ID:???0940nobodyさん
03/06/27 12:57ID:???if文をまとめたぐらいでは体感的な速度差はない。
ただ、日頃から>>932のようなコーディングをする人は、自分でも理解できなくなるような
スパゲッティコードを書いたり、非常にパフォーマンスの悪いアルゴリズムを使ったりと
間違った方向に進みがち。
まあ何にせよ、基本はきっちりと押さえとけってこと。
0941nobodyさん
03/06/27 13:01ID:???したあと、
$houselist[あれこれ]->{id}
が重複するものを、
@houselist から取り除く(※)にはどうすればいいのでしょう?
※取り除くというか、1つだけ残したいです。
0942nobodyさん
03/06/27 13:21ID:???こんな感じかのう
@check = ();
@houselist = grep { !$check{$_->{id}}++ } @houselist;
0943nobodyさん
03/06/27 13:22ID:???0944nobodyさん
03/06/27 13:35ID:???>>934が言っているように、ほとんど体感は無いけどね。
ただ、漏れは仕事の都合上、xGB単位のファイルの処理とかするんだけど、
そうなってくると、細かいところでかなり違ってくる。
といっても、1時間が55分に短縮されるとか程度だけど。
どっちかってーと、>>934の言うとおり、わかりやすく書く、ってことが
重要かと。
0946nobodyさん
03/06/27 13:40ID:???∧∧
ヽ(=゚ω゚)ノ″
〜( ×)
(=゚ω゚)ノぃょぅ U U
0947nobodyさん
03/06/27 13:42ID:gWCPnMBPsub func{
$str = $_[0];
foreach(@list){
if(/$str/){
$result = $_;
}
}
return $result;
}
みたいに検索条件を変数にしたい時はどうすれば良いのでしょうか?
0948942
03/06/27 13:42ID:???0949nobodyさん
03/06/27 13:44ID:???正規表現じゃなくてindex使え。
0951374
03/06/27 14:01ID:???print s//uc join('',unpack('A1 x4 A1 x7 A1 x4 A1', <<EOT))/e && $_,"\n";
Just another Perl Hacker
EOT
0952nobodyさん
03/06/27 14:03ID:???0955nobodyさん
03/06/27 14:32ID:???変数を正規表現に使うときは、メタ文字が入っているとうまくいかないから、
quoteする。
metaquote($str)または\Q$str\E
全部にマッチしちゃうってのは、/^$str$/してないから、一部にひっかかって
るんじゃないかな。
0957947
03/06/27 14:39ID:???>>955の書き込みを見る前にindexでとりあえずの解決しました。
for($i = 0;$i < @list;$i++){
$idx = index($list[i],$str);
if($idx ne -1){
$result = $i;
}
}
としました
ありがとうございました。
>>955さんのが原因かと思われるのでそちらも勉強してみます。
感謝です
0958950
03/06/27 14:55ID:???要は正規表現を使って(変数に入った)文字列を検索したかったのね。
0960nobodyさん
03/06/27 15:07ID:???一覧のうち1部だけが文字化けするって、
何が考えられますか?
なお、スクリプトは、EUC(スクリプト中の処理も全てEUCで処理してます)、
CSVはSJIS、HTML吐き出しもSJISです。
文字化けしてしまってるところは、EUCになっちゃってます。
0961nobodyさん
03/06/27 15:14ID:???文字コード変換を自動判別に頼ってるため、Shift_JIS文字列をEUC
と見間違えるんだと思う。
CSVの1レコードとかテーブル全体を一括で文字コード変換するか、
明示的に変換元と変換先の文字コードを文字コード変換ルーチンに指示
するかすれば問題は起こりにくくなる。
あと、いわゆる半角カナが多いShift_JIS文字列もEUCと誤認識
しやすい(場合によっては区別が付かない)。
0962nobodyさん
03/06/27 15:15ID:???0964nobodyさん
03/06/27 15:54ID:???この方法の解説は確かperlメモに書いてあった。
だがしかしperlメモ説明がくどいから逆に分かり難いかも。
でも便利だから一度は見ておけば?
0965nobodyさん
03/06/27 17:01ID:???メールソフトと同じように、
$bcc = 'amano@alive.ne.jp, mine@alive.ne.jp';
if (!open(OUT,"| $sendmail -t")) { &error('申し訳ありませんが何らかの原因で処理できません.'); }
#中略
print OUT "Bcc: $bcc\n";
#後略
で問題ないですよね?
実験だと問題なさそうなんですが、
環境に依存するとなんなんで、一応質問・・・
0966nobodyさん
03/06/27 20:05ID:???その sendmail が Sendmail とは限らない。
とか言ってみるテスト。
ようはそのプログラム次第ってこと。
Socket使うとかしてみたら?
その手のモジュールも転がってるし。
0967965
03/06/27 20:21ID:???いや、sendmailのパス入ってます。
sendmailだったら、他の環境によらず大丈夫ってことですか?
Socketの勉強は、まだ少しペンディングにしてるので。。。
0969nobodyさん
03/06/27 20:53ID:???0970nobodyさん
03/06/27 21:05ID:???0971nobodyさん
03/06/27 21:26ID:???それ以外のは知らないけど。
つか、スレ違いぎみな気が。
0972ふつー
03/06/27 22:05ID:???use Net::SMTP;
0973nobodyさん
03/06/27 22:34ID:???なぜみんなヒアドキュメントを使うんでしょう?
print << "END_OF_HTML";
ほげ
ふが
ひげ
END_OF_HTML
っていう風に、最後を、インデントつけれないから、すごくコードがみづらくなって、
個人的にはいやなんですけど。
(なんかのオライリー本にもそんなことかいてあったきがする)
やっぱり、END_OF_HTMLみたいに意味をかけるからいいんでしょうか?
ちなみに自分は、ほとんど
print qq|
ふが
ほげ
|;
ってやってます。
0974965
03/06/27 22:36ID:???(だから、>>971 でqmail の sendmail ってなんだ?と思った)
スレ違いぎみなので、逝って勉強してきます。
0979nobodyさん
03/06/27 23:33ID:???0980nobodyさん
03/06/27 23:36ID:???'
hoge
';
<< 'HOGE';
hoge
HOGE
ちなみに私は前者が多いかな。
インデントがと言うか、楽だから。
0981nobodyさん
03/06/27 23:41ID:???クックブック
0983982
03/06/27 23:43ID:???0984nobodyさん
03/06/27 23:53ID:???0985nobodyさん
03/06/28 00:01ID:???なんてどお?
0986nobodyさん
03/06/28 00:26ID:???0987nobodyさん
03/06/28 00:34ID:???0988nobodyさん
03/06/28 00:37ID:???Perlコーディング 初心者コーナー Part25
じゃないのか?
0989nobodyさん
03/06/28 00:51ID:???0990nobodyさん
03/06/28 01:03ID:???0991nobodyさん
03/06/28 01:08ID:???0992nobodyさん
03/06/28 01:11ID:???0994nobodyさん
03/06/28 01:14ID:???0995nobodyさん
03/06/28 01:15ID:???0996nobodyさん
03/06/28 01:19ID:???http://pc2.2ch.net/test/read.cgi/php/1056730690/
立てたよ
0997nobodyさん
03/06/28 01:28ID:???0998nobodyさん
03/06/28 01:29ID:???0999nobodyさん
03/06/28 01:32ID:???1000nobodyさん
03/06/28 01:32ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。