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

Perlコーディング初心者質問スレ Part 57

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/02/25(月) 19:25:51ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

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

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1189939783/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0367nobodyさん2008/04/21(月) 18:56:21ID:???
>>363
my $h = {name=>'john', mail=>'[email protected]'};
my $text =<<EOL;
name = $h->{'name'}
mail = $h->{'mail'}
EOL
print $text;

こんな感じ。
03683582008/04/23(水) 09:11:49ID:???
>>360, >>361, >>362

ありがとうございます。
remove_html、使いたいのですが使い方がわかりません...

# http://naoya.dyndns.org/~naoya/mt/archives/000611.html
sub remove_html {
my ($str) = @_;
my $ret;
if (defined $str) {
my $p = HTML::TokeParser->new( \$str ) or die "$!";
do {
my $plain = $p->get_text;
$ret .= $plain;
} while (my $token = $p->get_tag);
}
$ret;
}

を lib/RNA/AntennaTree.pm の最下部に追記して、
my $encoded_descript = encode($item->{channel}->{description});
の後に見よう見まねで
my $encodec_descript = &remove_html();
としてみましたが変わらずでした。
0369nobodyさん2008/04/23(水) 12:47:07ID:???
m_unit.plというライブラリがほしいんですがググっても出てきません
どこで手に入れる事ができるでしょうか?
0370nobodyさん2008/04/23(水) 13:05:00ID:???
>>369
ググっって出てくる奴とは違う物?
0371↑2008/04/23(水) 13:08:34ID:???
ごめんなさい間違えました(><)
0372nobodyさん2008/04/24(木) 18:43:40ID:???
ABCXXXDEF
という文字列から
ABCとDEFを削除してXXXのみを表示させたい場合はどうすればよいのでしょうか?

$moji = ABCXXXDEF;
$ans = $moji からABCとDEFを削除;

print "$ansです\n"

という具合でいいんでしょうか?
このABCとDEFを消す処理の部分がわかりません。
0373nobodyさん2008/04/24(木) 18:47:46ID:???
$moji =~ tr/ABCDEF//d;
print $moji;
0374nobodyさん2008/04/24(木) 18:48:17ID:???
>>372
$moji =~ s/ABC|DEF//g;
$ans = $moji
0375nobodyさん2008/04/24(木) 18:50:21ID:???
>>373>>374
ありがとうございました。
助かります。
0376nobodyさん2008/04/26(土) 13:15:07ID:flUVuiqJ
basenameでファイル名を取り出したいのですが、ブラウザが動いているOSの種類によって、
区切りが/であったり\であったりとまちまちです。
perlはLinux上で動いているので、デフォルトでは、/で区切られている場合しか、ファイル名を取り出せません。
\で区切られている場合でも、取り出せるようにするにはどのようにしたらよいのでしょうか?
fileparse_set_fstypeでMSWin32を指定してしまうと今度は、Unixからアクセスしてきた場合にうまくいきません。
0377nobodyさん2008/04/26(土) 13:19:19ID:???
んなもんアクセスしてきたOSの種類で使いわけりゃいい話だろボケ
こんなもん中学生でも分かるぞカス死ね
0378nobodyさん2008/04/26(土) 16:13:45ID:flUVuiqJ
もしブラウザがOSに関する情報を送ってこなかったらどうすればよいのでしょうか?
0379nobodyさん2008/04/26(土) 16:23:13ID:???
>>378
ファイルの有無を判断して、
どっちのデリミタで切るか、
判断したら?
0380nobodyさん2008/04/26(土) 17:01:10ID:???
アクセスしてきたOSは関係ない。
Perlが動いているサーバーのOSが関係する。
そして、basenameは動いているOSによって区切りを/か\か自動的に
判断してくれるので便利に使える。
サーバーがWindowsでもLinuxでもbasenameは正しく動いてファイル名を取り出せる。
取り出せない場合は、何か別の原因。
0381nobodyさん2008/04/26(土) 19:45:43ID:???
type=fileで送られてくるファイル名の話じゃないのか?
0382nobodyさん2008/04/26(土) 21:48:20ID:vQRq4Omz
だいたいみなさんの、perl普通にコード書き込みできるまでに要した
時間と日数おしえてもらえませんか?時間とか1日何時間くらいしてます?
0383nobodyさん2008/04/26(土) 22:09:54ID:???
意味が。
0384nobodyさん2008/04/26(土) 22:14:17ID:???
>>382
もっと、日本語を勉強した方がいいよ
0385nobodyさん2008/04/26(土) 22:49:57ID:???
>>382
皆さんは「週何日、1日当たり何時間」なんていう時間割みたいな方式で
取り組んできたわけじゃないので、そういうのはよくわかんないのです。
そりゃ、そんな方式で堅苦しく取り組んできた人もいるかもしれないけど。

あなたが今までにちんちんを何ストロークしてきたかが不明なのと似てます。
0386nobodyさん2008/04/27(日) 00:52:54ID:G3KB/HmG
mod_rewriteでURLを書き換えた時に%2Fがあると404エラーになってしまうので
スラッシュをURLエンコードさせたくないのですが、可能でしょうか?どなたか助けてください・・
p://example.net/dir/index.cgi?name=<em>hoge</em>
このように、どうしてもタグが含まれてしまうURLなので困ってます。

見るからに初心者ですが、どうかよろしくお願いします。
0387nobodyさん2008/04/27(日) 01:20:29ID:???
>>386
不可能。
03883862008/04/27(日) 02:55:07ID:G3KB/HmG
>>387
そうですか・・
諦めて他に方法がないか試行錯誤してみます
ありがとうございました。
0389nobodyさん2008/04/27(日) 23:26:09ID:???
>>382
10時間ぐらいかな。
もっとも、Perl以前にawk, sed, C
などの下地があったわけだが。
0390nobodyさん2008/04/27(日) 23:35:33ID:???
普通がどの程度か全く分からないけど、とりあえず動く掲示板を作るのに1日1〜2時間ほど
コード書いて1週間かかった気がする

そんな自分は C (すっかり書けないけど、ポインタで躓くまでは書いてた)、VB (アプリをいくつか作ってた) の経験ありです。
0391nobodyさん2008/04/27(日) 23:39:03ID:???
Perlでバッチ処理を書くのはすぐ出来るけど、
Webアプリ(cgi)は時間がかかると思う。
0392nobodyさん2008/04/27(日) 23:44:48ID:???
そんな貴方にCGI.pmですよ
0393nobodyさん2008/04/30(水) 17:01:56ID:9OxUbc+M
あの、乱数についてなのですが、100~150までの間でランダムな数をスカラー変数に格納するにはどうすればいいでしょうか?
0394nobodyさん2008/04/30(水) 17:13:24ID:???
my $rndnum = rand(51) + 100

rand(51)
0 〜 51 未満を生成 (未満は 51 を含まないので 50 以下の数字が現れる)

+100
下限値である 100 を加えてやる


以上
0395nobodyさん2008/04/30(水) 17:14:49ID:???
int
0396nobodyさん2008/04/30(水) 17:19:40ID:???
my $rndnum = int(rand(51)) + 100;
0397nobodyさん2008/04/30(水) 17:19:49ID:???
忘れてたw
>>395
thx

my $rndnum = int(rand(51) + 100);
0398nobodyさん2008/04/30(水) 18:11:00ID:???
>>393の質問ではintなしの>>394が正解とすべきなんじゃないか?
質問者の質問が悪いところまでフォローして手取り足取りするのが役目?
0399>>3932008/04/30(水) 18:26:54ID:9OxUbc+M
皆さんどうもありがとうございます。
確かに>>398さんの言うとおりです。わざわざフォローして下さった親切なお二方に感謝します。
0400nobodyさん2008/04/30(水) 18:38:47ID:???
すいません。
どうも下記例のforeachのループの中で、さらにwhileのループを
回せないのですが、たぶん簡単な理由だとは思うのですが、
お助け下さい。

他にもこのようなforeachのループの中で、foreachのループも回せないと
思います。

foreach $number(@number){


while (<F2>) {
print "$number\n";
if (/$number/)
{
print "マッチしました\n";
print F3;
}
}
}
0401nobodyさん2008/04/30(水) 19:09:01ID:???
>>400
<F2>で同じ行数を複数回とりだしたい感じ?
だとしたらヒント:seek
0402nobodyさん2008/04/30(水) 19:10:23ID:???
>>400
1回目のforeachが終わったときに<F2>が空になる
0403nobodyさん2008/04/30(水) 19:48:00ID:???
whileに入る前に開きなおすのも手だな
0404nobodyさん2008/04/30(水) 20:17:59ID:GavbPT5W
一回目のループで開いてるファイルのファイル位置が終端にあるため
2周目はファイルを読み込むループが発生しません

解決法は2つ
・While の直前でファイルを開くようにする
・While の直前で seek を使ってファイル位置を先頭に戻す
です。
負荷は後者の方が幾分か軽いです
0405nobodyさん2008/04/30(水) 20:28:06ID:???
my @lines = <F2>;

場合によってはこれもありかなと思った。無駄にメモリ食うけど。
0406nobodyさん2008/04/30(水) 20:47:41ID:???
whileの中でforeachじゃ駄目なん?
04074002008/04/30(水) 23:43:57ID:???
すいません。seekというのは初めて知りました。
1回目のforeachが終わったときに<F2>が空になる ってマジですか。
例のループにseekを追加して、動くようにしていただけませんか?
お願いします。
0408nobodyさん2008/05/01(木) 01:39:53ID:???
>>400
初めてのPerlと続・初めてのPerl買えばいいよ。
0409nobodyさん2008/05/01(木) 12:48:54ID:???
コストの高い I/O をメインにループさせたほうがいいっすね

open(F2, "hoge.txt");
while (<F2>) {
  foreach $number(@number){
    〜
  }
}

close(F2);
0410nobodyさん2008/05/01(木) 13:18:21ID:???
>>407
自分でやれ。
できないなら金払って業者つかえ。
代行するところじゃなく、自分で作るためのヒントを与えるところだ。
ここまでヒントがそろったらあとは調べながらできる。
0411nobodyさん2008/05/01(木) 13:51:56ID:???
あとね、初心者なんだから記述を略すな
ちゃんと意味がわかってから略すように汁
04124002008/05/01(木) 23:38:01ID:???
>409 Thx 明日試してみます。seek(F2, 0, 0)では動かなかった。
>410 GW中くらい、自宅警備を止めてみたら?
>411 省略ハァ? 汁?
0413409,4112008/05/01(木) 23:46:36ID:???
そういう口調ならてめぇで解決しろよ能無しチンカス糞野郎
0414nobodyさん2008/05/02(金) 00:07:00ID:???
> 省略ハァ? 汁?
ワロタ
0415nobodyさん2008/05/02(金) 05:46:04ID:???
まあ、なんだ
「ものを学ぶ姿勢」ってやつを身に着けないと成長できないよね
0416nobodyさん2008/05/02(金) 08:12:32ID:???
きっとこの人はこれからさきの人生も困ったら自分の力で解決しようとせず人を頼りにして生きていくんだろうな。
これ10代だったら笑って流せるけど、20代以上で本気で言ってたら深刻ww
0417nobodyさん2008/05/02(金) 10:22:44ID:???
定期的に沸くから慣れろwww
0418nobodyさん2008/05/02(金) 10:32:20ID:???
自分の書いてるのが略記だって事すらも気がついてないんだろうな

あと、これはおそらくは宿題だなw
0419nobodyさん2008/05/02(金) 11:18:57ID:???
延々と質問者を叩く・・・キモッ
とっくに質問者は消えてることに気づけよ禿げ
0420nobodyさん2008/05/02(金) 12:28:02ID:???
>>419
僕の予想が確かなら、質問者なら君のパソコンのモニタの前に居るよ。
0421nobodyさん2008/05/02(金) 12:37:17ID:???
>>420
はぁ?俺か?
ちゃうっちゅーねん
あほか
0422nobodyさん2008/05/02(金) 13:12:28ID:???
ノリが一緒でわろたwww
0423nobodyさん2008/05/02(金) 13:34:20ID:???
お前の粘着っぷりのほうがおもろい
医者いったほうがええんちゃうかw
リアルでアレかw
0424nobodyさん2008/05/02(金) 13:43:58ID:???
日本語が変でござるよ
0425nobodyさん2008/05/02(金) 14:15:25ID:???
ネット上での似非関西弁って餓鬼が凄む時に巻き舌になるのに似てる
0426nobodyさん2008/05/02(金) 14:47:41ID:???
それは言わないのが優しさだったのに・・・
0427nobodyさん2008/05/02(金) 15:08:52ID:???
質問者以外が必死になる理由が見つからない
0428nobodyさん2008/05/02(金) 18:44:35ID:???
ぼくが一番、perlをうまく操れるんだ!
0429nobodyさん2008/05/02(金) 23:07:56ID:???
>>427
思い込み激しいとか言われへん?
回りに迷惑かけても気づかないタイプだな
回答もしないのに罵倒するのはお前だけやろ
頭変すぎてわからんかw
0430nobodyさん2008/05/02(金) 23:28:43ID:???
>>429
そんならお前が回答してやれよ。 出来るもんなら。www
0431nobodyさん2008/05/02(金) 23:45:27ID:???
>>429
なんでそんなに必死なん?
0432nobodyさん2008/05/02(金) 23:59:11ID:???
GWで暇なんだろ
0433nobodyさん2008/05/03(土) 02:50:47ID:???
GW、通勤とか会社の中とか人が少なくていいよね。
0434nobodyさん2008/05/03(土) 03:07:39ID:???
いいですよね。客からの電話も鳴りませんし。
0435nobodyさん2008/05/03(土) 10:04:09ID:???
泣いてませんか?
0436nobodyさん2008/05/03(土) 18:44:15ID:???
内線もならないよね。
0437nobodyさん2008/05/03(土) 19:02:10ID:???
でもトイレに花子さん居るよね。
0438フー子2008/05/04(日) 19:36:48ID:798fbSDd
Perl の CGI::Base とか CGI::Request モジュールって、
何のためにあるの?どうやって使うの?
0439nobodyさん2008/05/04(日) 19:50:31ID:???
>>398
初心者質問スレで何言ってるんだ。
0440 ◆TWARamEjuA 2008/05/04(日) 20:01:51ID:????2BP(7082)
>>438
君かわいいね。

・・・ぶつ森のスレかとオモタorz...

ttp://search.cpan.org/~mrjc/cvswebedit-v2.0b1/cvs-web/lib/CGI/Base.pm
ttp://search.cpan.org/~mrjc/cvswebedit-v2.0b1/cvs-web/lib/CGI/Request.pm
を眺めてみればよろしいかと。

例文を眺めればだいたい何がしたいのかが見えてくるかと。
英文は無理に読まなくてもよろしいかと。
0441nobodyさん2008/05/04(日) 20:22:15ID:???
pmという拡張子、ガクブル
0442nobodyさん2008/05/05(月) 14:08:42ID:GD7pTJpy
CGI掲示板を自作していますが、書き込み送信メールのSendmailによる送信処理でつまづきました。

以下のように記述すると、管理人である自分には登録メールが送られますが、
管理人以外に、書き込みした人にも登録確認メールが送られるようにしたいんです。

#Sendmailによる送信処理
if (open(MAIL,"| $sendmail -t")){
print MAIL "X-Mailer:legend2\n";
print MAIL "To: $administrator\n";
print MAIL "Errors-To: $administrator\n";
print MAIL "From: $administrator\n";
print MAIL "Subject: $subject\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "$mail_comment\n";
print MAIL "\n";
close(MAIL);
}
}

以下のどれかを使うのでしょうか?

print SENDMAIL "From: $sender <$from>\n";
print SENDMAIL "To: $to\n";
print SENDMAIL "Cc: $cc\n";
print SENDMAIL "Bcc: $bcc\n";


どうすれば良いか御教授下さい。宜しくお願いします。

0443nobodyさん2008/05/05(月) 14:20:17ID:???
>>442
# CGIは板違いだが、この処理自体はCGIと関係がないので。
if文のブロックを、Toヘッダだけ「書き込みした人」のアドレスにしてもう一度処理するか、
Toを「書き込みした人」のアドレス、CcまたはBccを「管理人」のアドレスにするか。

Errors-Toヘッダはobsoluteだった気がします。
envelopeアドレスを指定するべし。sendmailに-fオプションに続けてアドレスを指定する。
ttp://sonic64.com/2004-11-07.html
0444nobodyさん2008/05/05(月) 16:36:56ID:???
つーか、今時、open(MAIL,"| $sendmail -t")やErrors-To:とか前世紀に
書かれた古文書を元にCGI作るな。めーわくだ。
0445nobodyさん2008/05/05(月) 18:19:44ID:???
批判だけならゾウリムシにもできる
例文または参考 URL ぐらい提示すればいいじゃない
0446nobodyさん2008/05/05(月) 19:20:18ID:???
ただでは断る。
0447nobodyさん2008/05/05(月) 20:15:30ID:???
>>446
しね
0448nobodyさん2008/05/05(月) 21:17:57ID:???
役立たずなテキストに騙される処を指摘してやったのに随分な言い草だな。
0449BEET2008/05/05(月) 21:36:20ID:???
http://z-z.jp/index.cgi ここのスクリプト抜きたいんですけど、どうしたらいいのですか?
0450nobodyさん2008/05/05(月) 21:39:44ID:???
>>449
むり
0451nobodyさん2008/05/05(月) 21:57:12ID:???
>>449
ハッキングすればできるかもしれない。
0452nobodyさん2008/05/05(月) 22:16:06ID:???
スクリプト抜くってどういう意味なんですか?
0453nobodyさん2008/05/05(月) 22:44:54ID:???
ハァハァするんじゃないかな。
0454nobodyさん2008/05/05(月) 23:21:45ID:V/xhfGfA
ftpで接続しないとスクリプトは抜けないでしょう
0455BEET2008/05/06(火) 00:42:09ID:???
回答ありがとう。 ハッキングって.. 簡単なのかな? ソフトはできるだけ使いたくないな
0456BEET2008/05/06(火) 00:45:09ID:???
追記なんですけど
このレンタル掲示板の管理パスをクラックされて、改竄されたんだけど、どうやってクラックしてるのかな?
0457nobodyさん2008/05/06(火) 00:49:33ID:fJq/GBDg
(`・ω・´)??
0458nobodyさん2008/05/06(火) 00:50:15ID:???
>>455-456
>>1を100回声を出して読め。
読み終わったら610と三ポールのミックスカクテル飲め。
0459nobodyさん2008/05/06(火) 00:51:09ID:fJq/GBDg
(`・ω・´)ソフト使ってるだろww
0460nobodyさん2008/05/06(火) 09:09:26ID:???
Windowsローカルに入れたActivePerlで
cpan > install XML::ATOM::Feed
したのに、それを500エラーになってしまいます
(useしてるところをコメントアウトすると通る)
moduschで見たら「存在しないか、ロード出来ない」っぽい
なぜでしょうか…?
0461nobodyさん2008/05/06(火) 16:59:23ID:???
>>442
BCCで目的は達成できると思うけど、
自分のメールアドレスを、スパムを送りたい先などにされると
簡単にスパムの踏み台になるから気をつけてね。
0462nobodyさん2008/05/06(火) 22:50:17ID:wGWcI8Lv
AUTOLOADってのを初めて使ってみたんです。
未定義の関数を読んだら無事AUTOLOADが呼ばれたんですが、
変数$AUTOLOADを参照するとGlobal symbol〜っていうエラーが出てしまいます。
AUTOLOADを使う場合はno strictしていいものでしょうか。
0463nobodyさん2008/05/07(水) 00:05:35ID:???
use strict;
use warnings;

sub AUTOLOAD {
  our $AUTOLOAD;
  print $AUTOLOAD;
}

foo();
0464nobodyさん2008/05/10(土) 23:18:32ID:???
URL転送なんだけど今こうしてます↓

#!/usr/bin/perl
print "Location: http://*****\n\n";

これに転送するまでHTMLの<meta content="x">みたいに
一定時間ウェイトかける事って出来るのでしょうか?
0465nobodyさん2008/05/10(土) 23:19:01ID:???
いいえ
0466 ◆TWARamEjuA 2008/05/11(日) 01:16:36ID:???
転送するまでひと寝入りする。
■ このスレッドは過去ログ倉庫に格納されています