トップページ⇒php
1001コメント331KB

【Perl】初心者コーナー Part18

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/11/20 22:04ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0002nobodyさん02/11/20 22:05ID:???
[過去ログ]
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/test/read.cgi/php/1028816385/
Part16 http://pc.2ch.net/test/read.cgi/php/1032070299/
part17 http://pc.2ch.net/test/read.cgi/php/1034583844/

[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0003nobodyさん02/11/20 22:07ID:???
perl -F, -ane 'print @F[2];' kyoto.csv
とすると表示されますが、
perl -F, -ane 'print @F[4];' kyoto.html.csv
……
perl -F, -ane 'print @F[10];' kyoto.html.csv
は表示されません。perlって●を認識するのでしょうか?
0004nobodyさん <sage>02/11/20 22:29ID:???
>>3
●って何よ。

0005nobodyさん02/11/20 22:33ID:???
前すれ>>991
Socketを使わないとむりぽ。
がむばってネ。
0006前スレ99102/11/20 22:46ID:/E1Vbwsz
>>5 ありがとうございます。

あと、いきなり出て来て1000取ってすいません・・・。
0007nobodyさん02/11/21 00:06ID:???
>>3
前スレで答えた者だが、HTML(と、変換したCSV)はSJISだろ?
"\x81\x9c"を代わりに書けばよし。
0008702/11/21 00:20ID:???
ちなみに答えは多分683(自然なんちゃら)と126(ビオ)だと思う。
0009nobodyさん02/11/21 00:42ID:???
>>前スレ991
LWP::Simpleモジュールが入っているなら
perldoc lwpcookして出てくる文書読んでみるとやり方出てるよ。

use LWP::Simple;
getstore "http//:www.yahoo.co.jp", "yahoo.html";
みたいな感じ。
0010nobodyさん02/11/21 00:49ID:izFT1sBO
  ┏━━━━━┓    ┏━┓┏┳┓            ┏━┓      ┏┳┓
  ┃          ┃┏━┛  ┗┫┃┃            ┃  ┃┏━┓┃┃┃
  ┗━┳━    ┃┃        ┗╋┛┏━━━━┓┗━┛┃  ┃┃┃┃
      ┃      ┃┗━┓  ┏━┛  ┃        ┃      ┃  ┃┃┃┃
      ┃  ┏━┛┏┓┃  ┃┏┓  ┗━━━━┛┏━━┛  ┃┗┻┛
    、 ┃  ┃    ┃┃┃  ┃┃┃    .‘; ゜  ・  ┃        ┃
    、 ┃  ┃    ┃┃┃  ┃┃┃    .‘; ゜  ・  ┃        ┃┏┳┓
      ┗━┛ ” ;┗┛┗━┛┗┛   ノ      ┗━━━━┛┗┻┛
      ∧_∧    ヽ(。、::。.::・'゜・' )〆     .'  ,   
     (  ゚∀゚)__ ( 。、 ::。 ).。::  θ)  .∴ '     
     r'⌒ ̄ ̄ ̄ ̄ (。、::。.::・'゜。'゜ )ゝ|    ・,‘ 
     |   ̄ ̄ ̄ ̄ ) ヘ( 。、 ::。 )ヽ | |      ←>>1
     \   │     ’ Υ  γ  | | 
       ヽ   │     ⊂.J|     ) し`⊃ ヾ 
       (    ヽ       |  ||  |   
        \  \\     |  |.|  |   
          \  ヽ ヽ   ( 丶(  \
            > ノ ノ     \ \\ \
          / /| /       )  \. )  \
         / // /         (_/ .(_/
        /__// /__
      〈_ __〉 _ __〉
0011nobodyさん02/11/21 18:30ID:La3b0kHh
perlで「#」を変数名に普通に使えるのでしょうか?
例:$#hogehoge
0012nobodyさん02/11/21 18:52ID:???
>>11
使えない。
$#hoge は配列 @hoge の最後のインデックス値。

Perl で変数名に使えるのは英数字とアンダーバー。
ただし $ に続く一文字目が数字の場合、
変数名はすべて数字でなくてはならない。

で、あってる?
0013nobodyさん02/11/21 19:33ID:???
>>12
変数名に数字って使えたっけ?
0014nobodyさん02/11/21 19:37ID:???
>>12
やってみれ。

$hoge1ならいけるだろ?
0015nobodyさん02/11/22 16:14ID:UpQRYD34
質問です。2桁の整数値、たとえば
"01","09","01","21"
"01090121"
としたいのです。各値は実は日付で整数演算で日付の
更新を行っていますが、更新されたあとの数字を繋げると
"19121"
のように整数2桁にはなりません。
どうしたらよいのでしょうか?
0016nobodyさん02/11/22 16:40ID:???
my $ctg_id_ = $CTG_ID;
my @ctg_ids = ();
while (length($ctg_id_) > 1) {
push (@ctg_ids,$ctg_id_);
chop $ctg_id_;
}

------------

$CTG_ID = 'MK0010'
↓
@ctg_ids = (MK0010,MK001,MK00,MK0,MK)

というコードを一行にしてください。

0017nobodyさん02/11/22 16:57ID:???
>>15
意味がまったく解りません。

数値と数字の違いとか理解してる?
0018nobodyさん02/11/22 17:11ID:???
>>15
配列だとしたら、
@array = ("01","09","01","21");
join('', @array);

それ以外なら sprintf で %02d のフォーマットで出力すれば良。
0019nobodyさん02/11/22 17:28ID:UwQQAcbp
西暦と月を算出しようとしているのですがうまくいきません。
わかっているのは現在の西暦と月($nowYear、$nowMon)で、
ユーザーから与えられるのはページ番号($pg)とします。
1ページに 3ヶ月まとめて表示します。

未来については問題ないのですが、過去を表示させようとすると
「/12」でやっているのでマイナス値が出せません。
もっと効率のよい式はないでしょうか?

-------------------------
$nowYear = 2002;
$nowMon = 11;
$pg = 0;

foreach $i ( 0 .. 2 ){
$mon = ($nowMon + $i + $pg * 3) % 12 + 1;
$year = $nowYear + int((($nowMon + $i) + ($pg * 3) -1) / 12);
print "$year / $mon\n";
}
-------------------------
00201502/11/22 19:48ID:UpQRYD34
>>18
ありがとう。解決しました。
0021nobodyさん02/11/22 20:55ID:???
>16
my $ctg_id_ = $CTG_ID; my @ctg_ids = (); while (length($ctg_id_) > 1) { push (@ctg_ids,$ctg_id_); chop $ctg_id_; } ------------ $CTG_ID = 'MK0010' ↓ @ctg_ids = (MK0010,MK001,MK00,MK0,MK)
0022rubyist@カラアゲうまうま02/11/22 20:58ID:???
( ´,_ゝ`)プッ
00232302/11/22 23:11ID:???
perlopに載っている「s/\$(\w+)/${$1}/g;」の勉強なのですが

@data = (taro ,Jiro, Sabro);
@temp = ('$b');
foreach $b(@data){
foreach $c(@temp){
$c =~s/\$(\w+)/${$1}/g;
print $c;
}
}

とやって、ほんとは「taroJiroSabro」と表示したいんですが
「tarotarotaro」となってしまいます。
どうすればいいのでしょう

00242302/11/22 23:13ID:???
perlopに載っている「s/\$(\w+)/${$1}/g;」の勉強なのですが

@data = (taro ,Jiro, Sabro);
@temp = ('$b');
foreach $b(@data){
foreach $c(@temp){
$c =~s/\$(\w+)/${$1}/g;
print $c;
}
}

とやって、ほんとは「taroJiroSabro」と表示したいんですが
「tarotarotaro」となってしまいます。
どうすればいいのでしょう

0025nobodyさん02/11/23 00:16ID:TlwVHlkv
(-_-;)
0026nobodyさん02/11/23 00:51ID:???
>>23
$temp[0]の中身を'taro'に置換したんだからそれ以後はマッチしないかと。
0027nobodyさん02/11/23 00:56ID:???
なるほど。

$c =~s/\$(\w+)/${$1}/g; は止めて
print eval $c;
なら「taroJiroSabro」になりました。
でもこれって正しいやり方なんですかね
0028nobodyさん02/11/23 05:29ID:???
open(F, "+< xxx.txt");
だとxxx.txtは自動生成されないので直前に
open(F, "xxx.txt");
を入れようとしましたけど、その場合直後でcloseすべきですか?
となるとflockも必要ですか?
ていうか煩雑なのでもっとスマートなやり方はないですか?
0029nobodyさん02/11/23 08:44ID:???
>>28
open F, "+>>xxx.txt" or die;
seek F, 0, 0;
00301902/11/23 10:38ID:???
>>19
ttp://www.din.or.jp/~ohzaki/perl.htm#Date2WDay
の方法で use Time::Local; することにしました。
00312802/11/23 13:53ID:???
>>29
+>>なんて初めて見ますた。
flockを使う上で一番安全ぽいと思われたのでわざわざ+<を使っていたわけですが
+>>てのは具体的にどんな動作するんでしょか。
0032nobodyさん02/11/23 21:45ID:???
教えてください
CGIで、フォームのデータを%inにしまってあって、
それをJcodeモジュールで片っ端からコード変換したいのですが
全部のキーに対して変換をかけるとエラー吐かれますた…
んで、次にgetcodeでsjis、euc、jisの時のみ変換をかけるようにしたのですが
フォームの中にラジヲボタンとかがあり、配列のリファレンスに対して
getcodeしようとするとエラーを吐かれてしまい、困ってます

全部変換しようとする>エラー
日本語だけ変換>コードをゲトしる>エラー

これ以上おヴァカな自分には対処方が思いつきません、どうか御教授くださいませ…
0033rubyist@カラアゲうまうま02/11/23 21:49ID:???
エラーメッセージも書かずにお願いするのがperlユーザの典型
0034nobodyさん02/11/23 22:35ID:???
すみませんでした

ちょっと自分で検証ミスが有ったようで、なんかgetcodeはできるぽでした…
その後の処理が上手くいってないのかもです

[Jcode.pm:575:die] Not a SCALAR reference at C:/Perl/site/lib/Jcode.pm line 575, <DATA> line 1579.
上記のエラーが出てました…

ラジヲボタンのフォームとか場合によってリファレンスだったり普通の値だったりしてわけわかんない・゚・(ノД`)・゚・
0035nobodyさん02/11/23 22:54ID:zBuUfsU+
ファイル存在確認の
if (-e $a)
なんですが
ファイルをOpenするとかなりパフォーマンスは悪くなりますよね?
これも悪くなるのでしょうか?
0036nobodyさん02/11/24 00:05ID:???
>>32
%in に格納するときに変換する
0037nobodyさん02/11/24 04:22ID:???
>>35

ならない。stat(2) を使うから。

# open にしてもそれ程遅いわけではないと思うが。
0038nobodyさん02/11/24 15:36ID:???
>>32
>>36
cgi-lib.plかなんかを使っているのではないかと想像してみる。
まあ、自分のやったことを全部言わない>>32がアレなんだが。
■ このスレッドは過去ログ倉庫に格納されています