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

【Perl】初心者コーナー Part14

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

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

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

CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0487nobodyさん02/07/27 22:23ID:???
>>478
実際にやっていないことがすぐに分かる文だな(w
白痴なんだから無理しなくていいよ。
0488jjcocodede02/07/27 22:32ID:KJ5wNO6P
jcode.pl使ってます。
別ファイルのままrequireするのが嫌なので、
ソース最下にコピーしてみました。

ローカルでソース内の文字をgetcodeするとSJISになりました。
サーバーに上げてから、getcodeをするとJISになりました。
ソースはSJISです。
なぜJISになるのでしょう。というかSJISになるようにアドバイス希望します。
048948602/07/27 22:35ID:???
おお! 5.8て全OS共通なんだな、初めてしったよ
と言うわけでBCC5.5.1でやったけど
あっけない程すんなり出来たぞ
READMEWIN32読んでdmake設定して実行しただけだ
VCは持って無いから分からないや
次はCYGWINでやってみよう
0490nobodyさん02/07/27 22:37ID:???
VC++では、win32ディレクトリでnmakeするだけで終わります。
Perlのコンパイルもロクにできない >>478は消えてください。
0491 ◆JAPH9PWA 02/07/27 22:41ID:???
>>484
XSってそんな使いにくいかな。
まぁ確かに構文は独特だし奇妙な癖はあるしPerlAPIは難しいけど、別に必死というほどでもないような。
ポインタIVに変換してをblessするとC+ガベコレってな感じで結構面白いし。(遅いけど)
私は好きだな、XS。

Parrotネタはサッパリ分からないなぁ…_g...たん来てくれないかなぁ。
0492nobodyさん02/07/28 01:12ID:???
>>488
以下の文字列でJISと判断してるだけのこと。

$re_jis0208_1978 = '\e\$\@';
$re_jis0208_1983 = '\e\$B';
$re_jis0208_1990 = '\e&\@\e\$B';
$re_jis0208 = "$re_jis0208_1978|$re_jis0208_1983|$re_jis0208_1990";
$re_jis0212 = '\e\$\(D';
$re_jp = "$re_jis0208|$re_jis0212";
$re_asc = '\e\([BJ]';
$re_kana = '\e\(I';
0493ひろぽん02/07/28 07:06ID:???
こんしゅうのひろぽんはたいへんなのれしゅ!
ぱぁるをはじめたんでしゅがえいごばっかりでよめないれしゅよ〜!
どちたらいいんでしゅかねぇ

あびゃ
0494nobodyさん02/07/28 10:28ID:NWB5Q2O0
配列の長さの取得の方法を教えて下さい。
おながいします。
0495nobodyさん02/07/28 11:40ID:???
>>494
@manko=("tinko","kuso","onani");
$aho494=@manko;
print $aho494;

次あげたら殺す
0496nobodyさん02/07/28 11:44ID:???
scalar
0497nobodyさん02/07/28 12:06ID:???
ありが�d
0498nobodyさん02/07/28 17:05ID:???
リンク張るのはこれでいいですかな?

$message =~ s/(https?|ftp):([\x21\x24-\x3B\x3D\x3F-\x5A\x5F\x61-\x7A\x7E]+)/<A href="\1:\2">\1:\2<\/A>/g;
0499nobodyさん02/07/28 17:27ID:???
>>498
>>1をよく読め。
0500nobodyさん02/07/28 17:37ID:???
そんな感じ、微妙に間違えてるけど
s#(https?|ftp)://([^ ]+)#<a href="$1://$2">$1://$2</a>#g;

http://www.din.or.jp/~ohzaki/perl.htm
050149802/07/28 18:37ID:???
>500
http://openlab.ring.gr.jp/k16/htmllint/explain.html#excluded-url

ここを参考にして使ったらいけない文字以外にマッチさせるように書きますた。
あとm//内では$1は\1というふうにもかけます。
0502nobodyさん02/07/28 18:44ID:???
後方参照するとき \1 とかって使えたっけか。
0503nobodyさん02/07/28 19:36ID:???
>501
>あとm//内では$1は\1というふうにもかけます。

は?、オメーの書いてるのは s だろが糞ハゲ
第一宇宙速度で壁に激突して師ね!
0504nobodyさん02/07/28 19:37ID:???
スラッシュも無いからどうせリンクにならねーんだよ
糞ハゲ異臭バカが
0505nobodyさん02/07/28 19:55ID:NiNmHVdY
拡張子判別で
raとrarの区別ってどうするんですか?
拡張子はにててもかなり違うんですが、、、。
0506nobodyさん02/07/28 19:56ID:???
>>505
ウ  ザ  イ   ! !
消  え  ろ   ! !
050750502/07/28 19:58ID:???
やっぱり夏ですか。
できたんでもういいです。
0508nobodyさん02/07/28 19:59ID:???
>>507
君が  【夏厨】   なの!
OK?
050950502/07/28 20:02ID:???
>>508
てめぇは夏だからって調子に乗っとんなよ
0510nobodyさん02/07/28 20:03ID:???
>>509
君の存在そのものが【猿】なの!
U see ?
051150502/07/28 20:04ID:???
>>510
君ういてるね。
猿は自分じゃん。
0512nobodyさん02/07/28 20:05ID:???
中卒塗装工は中卒らしく珍走でもやってなさいって
苦手な脳みそ運動は苦痛でしょう
right?
051350502/07/28 20:06ID:???
>>512
生ごみはとっとと処分されてね。
じゃ。
0514nobodyさん02/07/28 20:07ID:???
>拡張子判別で
>raとrarの区別ってどうするんですか?
>拡張子はにててもかなり違うんですが、、、。

この質問の頭の悪さはTNT火薬500万トン級の破壊力があります
そんな君は絶滅危惧種並みの、イッツ馬鹿モンキーなんですよ
OK?
0515nobodyさん02/07/28 20:08ID:???
>raとrarの区別ってどうするんですか?

もう見てるコッチが恥ずかしくなってしまう。
おまけに逆切れ
バカな事をバカだと指摘してあげたのに
「夏ですね」だって  (惨
ああ、バカのココナッツパラダイス
バカのオナニーは永遠に続くのであった
0516nobodyさん02/07/28 20:10ID:???
>>515
痛いクソ野郎がほざくなYO!
0517nobodyさん02/07/28 20:13ID:???
>>513
生ゴミに失礼です、生ゴミはエネルギーも再生資源にもなり得ます
2chで
>raとrarの区別ってどうするんですか?
と聞くホームラン馬鹿には再生の余地も有りません
絶望的です

>>516
痛いクソ野郎に失礼(略
0518nobodyさん02/07/28 20:25ID:???
rar$
ra$
0519( ´,_ゝ`)02/07/28 20:28ID:???
505 :nobodyさん :02/07/28 19:55 ID:NiNmHVdY

拡張子判別で
raとrarの区別ってどうするんですか?
拡張子はにててもかなり違うんですが、、、。
0520nobodyさん02/07/28 20:32ID:???
痛い質問に対しては、放置するか、やんわりたしなめる程度に抑えた方が。
いちいち煽ってレスが流れるのは勿体ない。
0521nobodyさん02/07/28 21:04ID:ODyMXFdC
>503
s///でした。

>504
スラッシュは含まれています。アスキーコードを勉強してください。
0522nobodyさん02/07/28 21:16ID:???
>>521
うるせーっつってんの 恥さらし犬畜生が
http:www.hoge
なんてURLはアルツハイマーのお前の脳内にしか存在しないの
ここは現実世界のBBSですよ
妄想の旅に帰りなさい
0523nobodyさん02/07/28 21:18ID:???
クソの分際で生意気なチンポ猿だな全く
ムカつくぜ
0524nobodyさん02/07/28 22:05ID:???
           ___
    .      |(・∀・)|
     .      | ̄ ̄ ̄   ジサクジエン共和国
         △
        △l |
   __△|_.田 |△_____
      |__|__門_|__|_____|_____
0525nobodyさん02/07/28 22:31ID:???
>501
http://www.din.or.jp/~ohzaki/perl.htm
折角書いたんだからリンク先を良く読むように
もし本当に存在するURIのみを抽出したいのであれば
498では全く不完全。
どうせ不完全なのだから、500では簡単の為に書いた

あと、¥1はこの場合あなたの望んだ動作をしないと
思ったので、間違えてると書いた
分かってるなら聞くなよっつー事だ
0526nobodyさん02/07/29 02:02ID:3jabpJuB
755とか777とか言うの
これどうやって変えるの?
出来るだけくわしく頼むよ
0527nobodyさん02/07/29 02:08ID:???
板違い
0528nobodyさん02/07/29 02:24ID:3jabpJuB
PERLだっつーの(ワラ
0529nobodyさん02/07/29 02:26ID:???
キチガイ。
0530nobodyさん02/07/29 02:26ID:yQQSPnn5
http://js-web.cside.com/index.html
0531nobodyさん02/07/29 02:26ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0532nobodyさん02/07/29 02:29ID:3jabpJuB
だから

755とか777とか言うの
これどうやって変えるの?
出来るだけくわしく頼むよ

だってのに(ワラ
0533nobodyさん02/07/29 02:34ID:???
http://tohoho.wakusei.ne.jp/wwwxx012.htm
0534nobodyさん02/07/29 14:09ID:???
念じろ
0535nobodyさん02/07/29 14:18ID:???
>>532
s///;使って置き換えれば?
0536nobodyさん02/07/29 15:32ID:???
>>535
ありがと。おかげで777に変えることができたよ。
0537nobodyさん02/07/29 18:20ID:???
掲示板をつくっているのですがどうも%FORMの中に書き込みデータが入ってないんです
原因がわからずこまっています以下がそのコードの一部です

<table border="2" cellpadding="10" bgcolor="#FFFFFF" width="100%"><tr><td>
<b>新規記事作成フォーム</b>
<form method="POST" action="$script">
<input type=hidden name=cmd value="write">
<table width="550">
<tr><td align="left" width="50">名 前</td>
<td align="left" width="100"><input size="40" type="text" name=name></td></tr>
<tr><td align="left" width="50">E-mail</td>
<td align="left" width="200"><input size="40" type="text" name=email></td></tr>
<tr><td align="left" width="50">題 名</td>
<td align="left" width="100"><input size="40" type="text" name=title></td></tr>
<tr><td align="left" width="50">U R L</td>
<td align="left" width="200"><input size="40" type="text" name=url></td></tr>
<tr><td>コメント</td><td align="left" colspan="3">
<textarea name=message rows="5" cols="61"></textarea><br>
<input type=submit value="新規投稿"></form>
</td></tr></table></td></tr></table>
0538nobodyさん02/07/29 18:22ID:???
そしてプログラムのトップのほうに

if($FORM{'cmd'} eq 'write') {&write;}

としてるんですが新規投稿ボタンを押しても&writeに飛んでくれないのです

ためしにprint "$FORM{'cmd'}";とやってみましたが空白でした。
0539nobodyさん02/07/29 18:24ID:???
何が原因なのでしょうか?
0540nobodyさん02/07/29 18:47ID:???
>>537
フォームから送られてくるデータはどんなふうにばらしてるのよ
0541FLASHのNOWLOADINGのような動作したい02/07/29 19:38ID:Ph2A5ZX/
顧客名簿のメールアドレスへ順番にメールを送信するスクリプトを作っています。
メール送信の方法としては、メールアドレスが入った@MAILという配列に対して、
foreach $mail @DATA{
#$mailに対してその都度sendmailをオープンして送信
#1秒スリープ
}
という感じです。
サーバーの規定でsendmailは多くとも1秒に一通の割合で、という注意があるため、
1秒スリープしています。

流れとしてはメール本文編集画面から、送信ボタンを押すと上記のように
メール送信を始めて、全部終わったところで「送信完了しました」という画面を出すのですが、
送信件数が少ないうちはいいのですが、件数が多くなってくると別にエラーが起きているわけでもないのに、
タイムアウトになるのか、「送信完了しました」画面が出ません。
(エラーならinternal servererrorになりますが、画面はタイムアウトの時と同じ画面です。)

そこで、とりあえずFLASHで良くやるNOW LOADING...見たいな感じで、
「現在送信中」の画面を出しといて、バックで送信処理を続けて、送信が終わったら「送信完了しました」
という画面に移動したいのですが。

現在やり方が全く思いつきません。
0542FLASHのNOWLOADINGのような動作したい02/07/29 19:41ID:Ph2A5ZX/
foreach $mail @MAIL{
#$mailに対してその都度sendmailをオープンして送信
#1秒スリープ
}

配列の名前間違えました。
0543FLASHのNOWLOADINGのような動作したい02/07/29 19:47ID:Ph2A5ZX/
この処理を行うブロックにきたら、

print "Location: nowloading.html";
でとかにとばして「送信中」と書いたHTMLに飛ばして、

foreach $mail @MAIL{
#$mailに対してその都度sendmailをオープンして送信
#1秒スリープ
}
とやって、そのあとに

「送信完了」画面を出す。

でいけるかな?ちょっとやってみますが。

0544FLASHのNOWLOADINGのような動作したい02/07/29 20:00ID:Ph2A5ZX/
nowloading.html
が表示されたまま。
無理でした。
0545nobodyさん02/07/29 20:05ID:???
>>541
あげんな。
思うのはここへきてる人間がもしあなたにそれを教えてさ
あんたが儲かるわけでしょ?バイトか仕事かしらんけど。
露骨過ぎだよ、、アホだ。あんたが俺になんかしてくれるのか?
なら答えてやるぞ。
それともネタか?違うだろうなあげてるもんな。
0546スレ違いだよな02/07/29 20:39ID:???
Nowloadingでセッション閉じるから無理だよ
メタタグ入れて読ませたり出来るけど、共用してるだろから
ユニークIDとかトランザクション辺りでカッコ悪くなるでしょ
それがCGIの限界。
と言うわけで、Nowloading.htmlの推奨内容
どうせsendmailの先で死ぬ事も有るんだし  (笑

メールを送信しました、上手く行くかどうかは分かりません (^o^)/~~
0547nobodyさん02/07/29 20:49ID:???
>>540

my($name,$email,$url,$title,$message) = ($FORM{'name'},$FORM{'email'},$FORM{'url'},$FORM{'title'},$FORM{'message'},);

こんな感じですがこれ以前に

if($FORM{'cmd'} eq "write")に反応しないんです
0548nobodyさん02/07/29 20:54ID:???
>547
どうやって$FORM{'cmd'}に入れてるんだ?
勝手に入るとか思ってたりはしないよな?
まさかそこまで馬鹿じゃないよな?
夏とは言えそこまで馬鹿はいないと信じたいな。
0549nobodyさん02/07/29 21:21ID:zYJTXqe4
perlで書いたcgiの中でファイルを作成すると、
所有者がapacheとなります。この所有者は好きなのに変えられないのですか?
055047402/07/29 22:10ID:???
>>475
マニュアルはperldocやweb等いろいろと見てみたのですが、全然ロックに関する
記述が無いんです。(T_T
しかし、dbと名が付いているくらいだからロックくらいはしてくれるだろう、
ということでとりあえずsdbmでやってみようかな、って思ってます。
でも微妙に気になる。(w
0551nobodyさん02/07/29 22:15ID:???
>>547

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
local(@pairs) = split(/&/,$buffer);
foreach $pair(@pairs){
local($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([\dA-Z]{2})/pack("H2", $1 )/eg;
$FORM{$name} = $value;
}
0552nobodyさん02/07/29 22:45ID:???
>>545
振込先でも晒しとけば
0553nobodyさん02/07/29 22:45ID:7AOu/QAw
$right =~ s/</&lt;/g;
をウマーク変えて
□□□(文字列)→<font color="#ff0000">★</font>
な感じに出来ないでしょうか?
0554nobodyさん02/07/29 22:47ID:???
出来るよ。
0555nobodyさん02/07/29 22:50ID:7AOu/QAw
>>554
やり方を教えて頂ければこちら側としては非常にありがたいのですが…
0556nobodyさん02/07/29 22:52ID:???
>>545
漏れに金くれるんならいい案提示してやるぞ!
print ".";
0557nobodyさん02/07/29 22:53ID:???
>>541だった。すまん。
0558nobodyさん02/07/29 22:54ID:???
>>555

$right =~ s/□□□/<font color="#ff0000">★</font>/g;
0559nobodyさん02/07/29 22:55ID:???
>558
いんたーなるさーばーえらー
0560nobodyさん02/07/29 22:57ID:7AOu/QAw
>>555
ありがとうごだいます。
試してみます。
056155502/07/29 22:58ID:7AOu/QAw
>>559
だめなんですか?

↑のは>>555じゃなくて>>558だ
0562nobodyさん02/07/29 22:59ID:om5W19We
Perlでプログラミングを勉強してます。
本はリャマ第2版、 Vine2.5+Bashでしゅ。
第三章の問題1ですが、要は、キーボードから
111
222
333
(C-d)←EOFを入れる。
と入力したら、
333
222
111
と表示するプログラムを書け、という主旨だと思います。
解答は、
print "Enter the list of strings\n";
@list = <STDIN>;
@reverselist = reverse @list;
print @reverselist;
となってます。オイラの答は、
@strigns = <STDIN>;
@result = reverse(@strings);
print "@result";
です。変数名と1行目は本論でないので置いとくとして、問題はこれを実行すると、
333
222
111
と2行目以下、行頭にスペースが入ってしまうことです。
違いは、print のトコで、" " で括るか、括らないかの違いなんすが、
この例では、" " はどのような役目を果たしているのでざんしょ?
それと、reverseの引数はカッコ無しでも有りでも変わらないようなのですが、
あっても無くてもいいのでしょうか?
よろしこおながいします。
0563nobodyさん02/07/29 23:06ID:???
>>561
わりぃ。
間違えてた。

$right =~ s/□□□/<font color="\#ff0000">★<\/font>/g;
056455502/07/29 23:08ID:7AOu/QAw
>>563
再度トゥライしてみます。
056555502/07/29 23:19ID:7AOu/QAw
>>563
出来ました。
本当にありがとうごだいました。
0566nobodyさん02/07/29 23:20ID:???
>>562
と言うか、配列を ” で囲んでprintfに投げると
デフォルトの区切り子を挿入しちゃうんですよ。
$. と $” だったかを弄って見れば分かる筈

@list = qw(hoge foo bar);
print @list;
print "\n";
print "@list";

0567nobodyさん02/07/29 23:23ID:???
>>562

"" は普通の文字列の書き方。変数展開とか \ のエスケープとか有りの。配列
変数も展開してくれるそうで。

3.7 配列を文字列中に展開する
「同様に、配列変数から…間にスペースをはさんで、順番に展開されます」

だそうです。実際には、特殊変数 $" の値で区切られるはず。"" で囲まずに
print する場合には、$, (デフォルトは空文字列) で区切られます。

> それと、reverseの引数はカッコ無しでも有りでも変わらないようなのですが、
> あっても無くてもいいのでしょうか?

この場合には無くてもいいけど、必要な場合もあるらしい。この辺は、漏れも
よく分らない。考えるのが面倒なので、大抵 () を付けるようにしてるけど。
056856202/07/30 00:12ID:hgHyxKDS
>>566-567
なるほど。
$" と $, はまだ勉強していないのでよく分からないけど、
" " の有無による違いは何となく分かりました。
引数のカッコ、とりあえず付けとけば問題無し、ということで
原則かっこ付きで逝きます。
どうもありがとうございました。
0569nobodyさん02/07/30 10:04ID:???
記事noを取り出したいとき
@dataに

2<>名無しさん<>mail@***.com<>http://www.***.com/<;>てすと<>てすと<>
1<>名無しさん<>mail@***.com<>http://www.***.com/<;>てすと<>てすと<>

の2行がはいっていて1行目の「2」だけを取り出したいのですが

$no = (split(/<>/,$data[0])[0]);

とやってもできませんでした。どうやればいいのでしょうか?
0570nobodyさん02/07/30 10:07ID:nD+VMZzM
http://www.ruitomo.com/~gulab/index.html
ここでスレを調べなされ
0571nobodyさん02/07/30 10:16ID:???
perlで書いたcgiの中でファイルを作成すると、
所有者がapacheとなります。この所有者は好きなのに変えられないのですか?
0572nobodyさん02/07/30 10:48ID:???
>>571
変えられない。
0573nobodyさん02/07/30 10:56ID:???
配列から別の配列に同じ物を一気にぶち込みたいときは、
@new = @old;
でいいですか?
試したら一応出来ましたけど。
0574nobodyさん02/07/30 11:22ID:???
$hoge =~ s/\Q$pair\E/<b>$pair<\/b>/g;
これの \Q \E の意味が良くわからないです。
0575nobodyさん02/07/30 11:30ID:???
>>571
基本的に変えられませんが、mo-musu だったら変更可です。

やり方:
  `chown mo-musu.mo-musu filename`;
0576nobodyさん02/07/30 11:50ID:???
全角英数字を半角英数字に変えたいので↓にあるのを引用して
www.kiwi-us.com/~mizusawa//penguin/DATA/dlcount/dlcount.cgi?file=macwwwsrch3097_fol.zip
&jcode'convert(*word, "sjis");
こうやったんですけどうまくいかないです。
0577nobodyさん02/07/30 11:58ID:???
>>576
&jcode'convert(*word, "sjis", "", "mo-musu");
0578nobodyさん02/07/30 12:27ID:???
>>576
perlメモ見れ
ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Z2H
0579nobodyさん02/07/30 12:43ID:???
>>575=577
氏ね氏ね氏ね氏ね氏ね
058057602/07/30 13:37ID:???
perlで日本語を使う時の注意がわかってきました。
で、今は普通にSJISでperlを書いています。
>perl スクリプトを EUC-JP で書き, 漢字コードが EUC-JP である日本語を処理するというのが、
>perl で日本語を扱うときに一番問題が起きにくい方法です。
という事はスクリプトを保存する時のコードをEUCに変更した方がいいんでしょうか。
FORMのデコードも全部EUCに変換しなきゃいけないですよね。
0581nobodyさん02/07/30 13:51ID:???
>>580
調子に乗るな! >>1を読め!
058257602/07/30 13:59ID:???
す、すいません!調子に乗ってしまいました!!
0583nobodyさん02/07/30 14:39ID:???
>>582

キエロ

二度と来るなよ

来たらおまえのサイト荒らすべ

0584nobodyさん02/07/30 19:11ID:???
掲示板で

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

と長い半角文字を入力すると記事を表示する枠が勝手に広がってしまいます。
どうすれば枠の幅はそのままで記事は改行されてきれいに収まるように出来るでしょうか?
0585nobodyさん02/07/30 19:22ID:???
>>584
cssつかえ
0586 ◆FANY.jpg 02/07/30 20:39ID:???
画像ファイル(*.jpg)を開くと、画像毎に見た人の数をカウント
したり、見た人のホスト名を記録するフリーのPerlを探してます。
どこかにありませんか?教えてください。

プログラムは組めませんが、設置する基本的な知識はあります。
よろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています