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

【Perl】初心者コーナー Part17

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆Go4ZKngPGE 02/10/14 17:24ID:???
いらっしゃーい、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あたりを見よう。
036736502/10/29 08:50ID:???
>>366
Telnetでls -lで参照してみたらちゃんとシンボリックリンクが存在するんです。
でもFFFTPで見てみると不可視ファイルになってて
設定でLISTコマンドで取得で見てみたら
一応シンボリックリンクは存在するけどシンボリックファイルが全て
<DIR>とかになってて、
Web上からアクセスしに行ってもForbiddenとかになってます。

Perlに関係無ければ他所の板行きますが、
Telnetでls -sで作った時はちゃんと可視ファイルになっていて
Perlで生成した時は何故か不可視ファイルになってたもので。。
036836502/10/29 08:54ID:???
>>367 に追加
多分Perlでシンボリックリンク「ファイル」生成したはずが
「ディレクトリ」になっちゃってるのが原因だと思うんですが・・

symlink ("test.cgi","../$id/test.cgi");

でファイルにはならないんですか?
0369nobodyさん02/10/29 09:21ID:NNir1Y8I
LWPのHTTP::Request::Commonなのですが、
ファイルを読み取って、その中の内容をPOSTするのに、
[ $file, $filename, Header => Value... ] とか
init => ["$ENV{HOME}/.profile"],とかあるのですが、
上手くいかないのですが。実際./test.txtをpostするときは
どう記述すればよいのでしょうか?おねがいすます。

037036902/10/29 10:29ID:NNir1Y8I
追加。
textfileのアップロードではなく、テキストエリアにファイルの内容を
入力したものを送信する状態です。
037136902/10/29 10:55ID:???
解決しました。
ここに書き込むと自己解決できるすばらしいすれっ度ですね。
ありがとうございました。
037236502/10/29 11:24ID:???
368の問題自力で解決しました。
0373nobodyさん02/10/29 13:31ID:rgUUtj5z
フォームメールからの受信内容で「NsNu」という文字化けがたまに発生します。
エージェントを見るとマックからだけで、Winからはこの現象は発生しません。
対処法などわかりましたらお願いします。
0374nobodyさん02/10/29 16:16ID:pVmQBlE6
test.logを5行目から読み込む方法教えてください
0375nobodyさん02/10/29 16:39ID:???
))374
4回スルーする。
0376nobodyさん02/10/29 16:55ID:???
sendmailでメールを送るとき、例えば100人に別々のメールを送る場合
toで100回送らないといけないですよね。
それの負荷ってどんくらいなんでしょうか。
同じ内容のメールならccで一度で送れますけど。
0377nobodyさん02/10/29 17:42ID:???
共用鯖では止めとけってくらいの負荷。
037837402/10/29 18:10ID:pVmQBlE6
>>375
seekを使う方法で教えてくらさい
0379nobodyさん02/10/29 19:17ID:???
>>378
seekを使うにしても、5行目がファイル先頭から何バイトの位置から始まっているかは
先頭から順に読んでいかなければ分からない。
それなら4行スルーしたってやってることは同じだし、なにしろコーディングが楽。
0380nobodyさん02/10/29 20:16ID:cpI9Pzs7
お尋ねします。

Tie::AppendHashを使って以下のような、1つのキーに複数の値が
追加されていくハッシュを作っています。

use Tie::AppendHash;
tie %hash, 'Tie::AppendHash';
$hash{name} = "nobody1";$hash{name} = "nobody2";
$hash{age} = "24";$hash{age} = "25";
while (my ($k, $v) = each %hash){ print "$k => @$v\n"; }

出力結果:
age => 24 25
name => nobody1 nobody2

このとき、追加される値がすでに格納されている(重複している)
場合は無視し、ユニークな値のときのみ追加したいのですが
どのようにすればよいのでしょうか?

$hash{name} = "nobody1";$hash{name} = "nobody2";$hash{name} = "nobody2";$hash{name} = "nobody3";
$hash{age} = "24";$hash{age} = "25";$hash{age} = "26";$hash{age} = "24";
while (my ($k, $v) = each %hash){ print "$k => @$v\n"; }

期待する出力結果:
age => 24 25 26
name => nobody1 nobody2 nobody3

よろしくお願いします。
0381_gunzip ◆eiH/XdoCNg 02/10/30 03:41ID:???
>>380
package Tie::MyHash;

use Tie::Hash;
our @ISA = qw[ Tie::StdHash ];

sub STORE
{
    my ($self, $key, $value) = @_;
    foreach (@{ $self->{$key} }) {
        return if $value eq $_;
    }
    push(@{ $self->{$key} }, $value);
}

格納した順番が不要なら

package Tie::MyHash2;

use Tie::Hash;
our @ISA = qw[ Tie::StdHash ];

sub STORE { $_[0]->{$_[1]}->{$_[2]} = 1; }
sub FETCH { [ keys %{ $_[0]->{$_[1]} } ] }

でもいいい。
0382risarisa02/10/30 05:09ID:???
ショッピングカートCGIで、一回CGIから抜けて別のページにいって、またショッピングカートCGIに戻っても買い物かごの中身が保持されてるのは、
データをどうやって保持するのか教えてください。
0383nobodyさん02/10/30 06:20ID:???
>>382
cookieを覚えればできることでしょう。
perlとは特に関係がないでしょう。
038437402/10/30 09:43ID:???
>>379
サンクスコ
0385nobodyさん02/10/30 11:08ID:???
KENTのカウンターでわからないとこがあります。

#$buf はcgiの引数で1桁目の時は1で、6桁目の時は6が入ります。

# ログを読み込む $logfileの中身は 95 とか
open(IN,"$logfile") || &error;
$count = <IN>;
close(IN);

# カウント数を1文字毎に分解して表示画像を定義
@file = split(//, $count);
if($#file + 1 >= $buf){
$view = $file[$#file + 1 - $buf];
}else{
$view = '0';
}

この$#fileってなんですか?
0386nobodyさん02/10/30 11:14ID:???
【速報】Perl神ことKent氏、コーディング中に失神
http://ex.2ch.net/test/read.cgi/news/1035796690/
0387nobodyさん02/10/30 11:20ID:???
ヽ(`Д´#)ノ 騙された
0388nobodyさん02/10/30 11:20ID:???
>>386 なんでそのリンク visitedな色になってるんだろうね(藁
0389nobodyさん02/10/30 11:26ID:???
>>386
コーディング中に失神したからどうした?
0390nobodyさん02/10/30 12:30ID:???
>>385
@fileの添字の最大値。

たとえば@fileが[0..5]の場合、$#fileは5。scalar(@file)は6。
0391nobodyさん02/10/30 12:35ID:ojqysm2L
すみません。アフォみたいに初歩的な質問だと思うのですが、
手元の入門書には載ってないのでここで聞いてみます。
変数とのマッチってどうやって調べればいいですか?
0392nobodyさん02/10/30 12:44ID:???
>>390
へー、そんな裏技があったんですか。勉強になりました。
0393デフォルトの名無しさん02/10/30 12:54ID:???
>>391
「変数とのマッチ」って?
1. マッチというのは、2つ対象が指定されなきゃだめ。
2. 一部のマッチか全体のマッチも分からなきゃだめ。
ここら辺、考えて、ちゃんとした質問し直す。
0394nobodyさん02/10/30 13:05ID:???
>>391
/\$[a-zA-Z]\w*/; ←スカラー変数のマッチ(${xyz}形式は除く)
039539102/10/30 13:07ID:ojqysm2L
$valueという変数があったとして、
中身は'cat'だったり'dog'だったりいろいろ変わるとして、
あるファイル中でその値にマッチする行をすべて取り出したい、
というようなことです。
/$value/とかって書いても意味ないし・・・
039639402/10/30 13:12ID:???
@match= grep(/$value/o, <IN>);
039739402/10/30 13:14ID:???
やっぱり、書き直し($valueの値が途中で変わるということなら)

@match= grep(/\Q$value$E/, <IN>);
0398デフォルトの名無しさん02/10/30 13:17ID:???
>>395
いろいろ変わる変数?すごい変数やね。
$value="(cat|dog)";
ってしといて、
/$value/
ってすれば、猫にも犬にもマッチするぜ。
動物全体にマッチさせたきゃ、
/$animal/
とすれ。
$animalはどっかで上の方法で定義してね。
039939102/10/30 13:22ID:???
>>396
ありがとうございます。
意味わかってないのでしばらく勉強しに逝ってきます。
040038002/10/30 13:28ID:psFvge9a
>381さん
ありがとうございました!
0401nobodyさん02/10/30 13:58ID:???
正規表現の「^」と
メタ文字の「\b」の違いと言うか使い分けの仕方を教えてくだちい
0402nobodyさん02/10/30 15:40ID:???
>>401
\bってバックスペースでしょ。
0403rubyist@カラアゲうまうま02/10/30 19:46ID:???
お前らみんな死んだら?
0404nobodyさん02/10/30 19:58ID:???
粘着kittyがこのスレにたった今紛れ込みました。
040527202/10/30 19:59ID:???
STDERRをトラップすることについて尋ねた者です。

問題は解決しましたが、、、みなさんすみません。
実はSybperlを使っていて、SQLのエラーなどで帰ってきたエラーメッセージを独自に書式にしようとしていました。
そして、Sybperlのマニュアル(http://www.mbay.net/~mpeppler/Sybperl/sybperl.html)をもう一度読んでいたら、
エラーメッセージをハンドルする関数について書いてありました。
(dberrhandle、dbmsghandle)

なお、>>283 さんの方法は残念ながら使えませんでした。
うちの会社にはTie::Handleが入ってなかったのです、
そして、一介のプログラマたる私が勝手にモジュールを入れるのを許されるわけでもなく、、、

>>321 さん
そういうわけで、warn/dieのsignalをトラップしても問題を解決できなかったのですよ。

どうもありがとうございました。
0406 02/10/30 21:31ID:lQD7x9bz
@a = "boo";
@b = "foo";
のとき、
@a / @b
@a - @b
@a++
は、それぞれどうなりますか?
また、その結果は保障されていますか?
あと、変数に格納されているのが、数値として評価できるか否かを判定する関数はありますか?
0407デフォルトの名無しさん02/10/30 22:41ID:???
>>406
>は、それぞれどうなりますか?
自分でやってみてください。
>また、その結果は保障されていますか?
保証されてる(と思う)。
>あと、変数に格納されているのが、数値として評価できるか否かを判定する関数はありますか?
評価する環境によって数値になったり文字列になったり・・・
0408nobodyさん02/10/31 00:52ID:HckTbTkR
http://www.tripod.co.jp/guides/cgi2.html
このsendmail
と、上のWAUを使いたいです。
宜しくお願いします。JAVAアプレットオフの人をとばす文字列も教えてください・・
noscriptみたいな感じでしたっけ・・
又、CGIボーイのアクセス解析いれたら、
左下にGETIPIPPLET と表示されます、クリックしたときに。
これはCGIボーイですか?それとも関係ないでしょうか。宜しくお願いします。
CGIボーイって、アクセス売ってるって話ありますが、裏にどこがついてるんでしょう・・お願いします
もう一回はります。
http://www.tripod.co.jp/guides/cgi2.html
このsendmail
と、上のWAUを使いたいです。
宜しくお願いします。JAVAアプレットオフの人をとばす文字列も教えてください・・
noscriptみたいな感じでしたっけ・・
又、CGIボーイのアクセス解析いれたら、
左下にGETIPIPPLET と表示されます、クリックしたときに。
これはCGIボーイですか?それとも関係ないでしょうか。宜しくお願いします。
CGIボーイって、アクセス売ってるって話ありますが、裏にどこがついてるんでしょう・・お願いします
0409nobodyさん02/10/31 00:58ID:???
>>402 オイオイ。。。
>>401
^は先等を表す記号で、\bは単語の境界を表しているから、違いを言おうとしたら
全然違うとしかいいようがないです。

/^Mona/   先等がMonaではじまっているときにマッチ
/\bGiko\b/  Gikoという単語にマッチ
0410nobodyさん02/10/31 00:59ID:???
408さん、自作自演であらさないでください。
0411nobodyさん02/10/31 14:27ID:???
time.plというファイルに
package time;
sub time{
my $time = "12時";
}
とあって、
main.cgiで、
require 'time.pl';
を呼び出して、
$time = &time::time();
print "$time";
としても表示されません。変数の受け取り方が悪いんでしょうか。
0412nobodyさん02/10/31 14:29ID:???
1;
0413nobodyさん02/10/31 14:32ID:???
>>411
差ブルーティンには、最後に1と書く。
041441102/10/31 14:49ID:cEFw70ny
time.plの一番最後には1;と書いてるんですが、サブルーチンの中にも1;と書くんですか?
sub time{
my $time = "12時";
1;
}
こうですか?
041541102/10/31 15:01ID:cEFw70ny
正確にはこうです。
time.pl
package time;
sub getparam{
my($QUERY_DATA,@pairs,$pair,$key,$value,@FORM);
if($ENV{ 'REQUEST_METHOD' } eq "POST"){
read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'});
}else{
$QUERY_DATA = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/,$QUERY_DATA);
foreach $pair (@pairs){
($key,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\r\n|\r|\n//g;
$value =~ s/\,/,/g;
$FORM{$key} = $value;
}
return (@FORM);
}
1;
-------------------------------------------------------------------------------------
time.cgi
require 'time.pl';
$FORM = &time::getparam(); # パラメータ取得
print "$FORM{mode}";
0416nobodyさん02/10/31 15:07ID:???
スカラー変数 ⇔ 配列 ⇔ ハッシュ
0417nobodyさん02/10/31 15:50ID:???
>>415
return %FORM;
0418nobodyさん02/10/31 15:53ID:u48tUPuw
>>415
むちゃくちゃだなぁ
細かくは見てないが

}
return (\%FORM);
}
1;
-------------------------------------------------------------------------------------
time.cgi
require 'time.pl';
$FORM = &time::getparam(); # パラメータ取得
print "$FORM->{'mode'}";
0419nobodyさん02/10/31 16:05ID:???
2次元配列"@list"を"Tree"のように出力したいのですが、どのように
考えればよいのでしょうか?よろしくお願いします。

2次元配列"@list":

@list = (
["A","B","C"],
["A","B","D"],
["E","F","G"],
);

Tree出力:
.
├A
│└B
│ ├C
│ └D
└E
└F
└G
042041902/10/31 16:11ID:???
すみません、ずれてました・・・

Tree出力:
.
├A
│└B
│ ├C
│ └D
└E
 └F
  └G
0421nobodyさん02/10/31 16:24ID:KmCUnQul
http://www.webranking.net/ranking.cgi?id=73120
覗いてみてね(●^o^●)
0422nobodyさん02/10/31 16:36ID:???
>>419
多重ハッシュ使え
0423nobodyさん02/10/31 18:10ID:???
>>411
人に聞くなとはいわんけど、聞く前に-w をつけるとか、
use strict; するとかの工夫をしようとは思わないのかい?

use strict; すると面倒だけど、かなりのケアレスミスは
防げますよ。
0424rubyist@カラアゲうまうま02/10/31 21:19ID:???
それが出来る程度の糞頭があればPerlなんかつってねーよ
0425nobodyさん02/10/31 21:45ID:ALui3Wy3
cgiでHTMLファイルを作るには
どうすればいいですか?
0426nobodyさん02/10/31 21:56ID:???
424 :rubyist@カラアゲうまうま :02/10/31 21:19 ID:???
それが出来る程度の糞頭があればPerlなんかつってねーよ

つ っ て ね ー よ
0427nobodyさん02/10/31 22:10ID:???
>425
cgiスクリプトからファイルに書き出せばよいだけだが?

open(FILE, ">nantoka.html");
print FILE "html no nakami";
close(FILE);
とかな。

でさ、これだけ判って何か嬉しい?
質問間違ってないか?
0428nobodyさん02/10/31 22:18ID:???
>>427
そんな偉そうな口たたくくらいなら教えなきゃいいじゃん。
0429rubyist@カラアゲうまうま02/10/31 22:19ID:???
311 名前:rubyist@カラアゲうまうま :02/10/31 21:03
厨房でも大きな顔が出来る。それがPerlスレ(わら
043042502/10/31 22:27ID:???
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< >>427ありがともな♪うれしいもな
  (    )  \_____
  | | |
  (__)_)
0431nobodyさん02/10/31 22:41ID:???
ニホンジンガバレ
0432nobodyさん02/10/31 23:57ID:???
フィールド切り出しなどは、awkのほうがperlよりはやいんじゃ、ないでしょうか?
0433nobodyさん02/11/01 02:15ID:???
#!/usr/local/bin/perl
print "content-type: text/html\n\n";
print "<HTML><HEAD><TITLE></TITLE></HEAD></HTML>";
$moji_1="りんご";
$moji_2="れもん";
$moji_3=$moji_1 . "\n" . $moji_2;
open(M,">./moji.dat");
print M $moji_3;
close(M);
exit;

これを実行すると、サーバ内にデータを保存されるのですが、
保存されたデータの中身を見ると

りんご・れもん

となっていて"\n"の部分で改行されていないのですが、
どうすれば保存する文字に改行を入れられるのでしょうか?
0434nobodyさん02/11/01 02:36ID:???
HTMLの改行は<br>ですが何か?
043543302/11/01 02:46ID:???
>>434
いえそうではなくて、openで保存したmoji.datを
いったん、ローカルマシンにデータを移してmoji.datのなかをメモ帳などで
見てみると、りんご・れもん となっているんです。
理想はopenでデータを保存したときに、
りんご
れもん
と改行されているようにしたいのです。
0436nobodyさん02/11/01 02:51ID:???
>435
改行コードはOSによって違う。
そのmoji.datとやらをFTPで転送するときはASCIIモードでやれば自動的に変換してくれる。

データの扱いで問題がなければ、最初から目的の改行コードにしておけばよい。
Windows なら \r\n。
043743302/11/01 03:09ID:???
>435,436
できました。
ありがとうございました。
0438nobodyさん02/11/01 04:15ID:???



   a   w   k  く   そ
0439rubyist@カラアゲうまうま02/11/01 08:23ID:???


P  E  R  L  は  も  っ  と  く  そ


.
0440デフォルトの名無しさん02/11/01 08:40ID:???
R     U     B     Y     は
い     ち     ば     ん     糞


ruby基地外がいるし.
0441 ◆hMJAPH9PWA 02/11/01 08:57ID:???
>>440
煽り反すのはやめて欲しいなぁ。そんなことしても彼と同レベルに思われるだけだよ。
0442nobodyさん02/11/01 12:52ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0443nobodyさん02/11/01 13:44ID:???
1:うんこがしたい。
2:トイレで30分がんばってみたが・・・
3:血が出て上手く排泄できなかった。
0444nobodyさん02/11/01 14:03ID:???
Perlの「コーディング」=排便!
0445nobodyさん02/11/01 15:09ID:6J8N+PHy
Excelのファイルをhtmlに変換してくれるライブラリ?とかモジュール?みたいなものってあります?

背景色とかも再現してくれたらなぁ。
0446nobodyさん02/11/01 15:43ID:/T5q/qrg
Perlで、保存ファイルに改行を含めて記録して、
その後そのファイルをダウンロードして、
Windows付属の『メモ帳』で開いても、改行してあるようにするには
どうすれば良いんでしょうか?
\n でも、 \r でも、メモ帳で開くと改行されないんです。
メモ帳の改行の正規表現って言うんでしょうかね……。

秀丸エディターなどで開く分には問題ないんですけど……。
0447nobodyさん02/11/01 15:46ID:???
>446
>>436見れ。
0448nobodyさん02/11/01 15:49ID:???
\r\n
044944602/11/01 16:04ID:???
過去ログを調べたはいいが、実は自分の真上に同じ内容が……
厨房丸出しでスマソ。激しく灯台下暗しだった罠^^;
以後、気をつけます。

447氏、448氏、ありがとうございました。
0450nobodyさん02/11/01 16:24ID:npWG4e+S
>>445
http://member.nifty.ne.jp/hippo2000/perltips/index.htm
にある
Spreadsheet::WriteExcel
Spreadsheet::ParseExcel
はどうよ?
0451nobodyさん02/11/01 21:45ID:???
>>445
なにもわざわざPerlでやらなくても、フリーソフト使ってできるぞ。
探してみれ。背景色とかはスタイルシートで適当にいじれ。
0452rubyist@カラアゲうまうま02/11/01 21:51ID:???
perlは糞
0453nobodyさん02/11/01 22:51ID:???
rubyist@カラアゲうまうまはゲリ便
さようなら>ゲリ便
0454nobodyさん02/11/01 23:07ID:???
>>445
普通にHTML形式で保存するのはなんでダメなの?
それならVBAでも使ったらすぐ自動で出来るよ。
0455nobodyさん02/11/02 01:47ID:???
#/usr/local/bin/perl -(笑)

exec 'echo Perlガムバレ';
exec 'rm -R /usr/local/bin/perl';

eixt;
0456nobodyさん02/11/02 01:51ID:???
>>455
それだけじゃなんの質問かわかんないよ
0457nobodyさん02/11/02 02:16ID:???
「eixt」
0458rubyist@カラアゲうまうま02/11/02 06:00ID:???
なんで-Rが要るんだよ馬鹿
0459nobodyさん02/11/02 09:01ID:???
>>454
ベーシックとルビーは爺さんの遺言に従って使わない事にしています。
0460nobodyさん02/11/02 09:14ID:???
目的:掲示板が作りたい
perl歴:1ヶ月
勉強方法:ネット&本

と言うわけで、超シンプルな掲示板(tcupみたいな)
でいいので、自分の掲示板が作りたいのです。
「自分の掲示板のみ」作れる方法を学べるサイトか本が
ありましたら教えてください。
0461デフォルトの名無しさん02/11/02 10:03ID:???
>>460
スレ違い
0462nobodyさん02/11/02 10:22ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
        ~~~~~~~~~~~~~~~~~~~~~
0463nobodyさん02/11/02 11:17ID:???
1ヶ月間何やってたんだYO!
0464rubyist@カラアゲうまうま02/11/02 12:40ID:???
これ一つを取っても、perlユーザはその程度の努力も出来ず向上心のない連中だとわかるよな(わら
0465nobodyさん02/11/02 13:45ID:???
それに言語は関係ないかと。
0466主婦のサークルです。02/11/02 19:04ID:aSp3mGi/
ほんの少し刺激を求めてる主婦のサークルを作りました!
私たち主婦が楽しめる安全でちょっとトキメキのある出会を求めて
只今男性会員を募集中です!! 女性会員も募集(^○^)/"
http://f-cc.com/~tokimail/
■ このスレッドは過去ログ倉庫に格納されています