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

【Perl】初心者コーナー Part19

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/01/11 13:52ID:???
初めに→「perl」その物のスレです。

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

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

あとは>>2-10にまかせた。
0656nobodyさん03/01/29 01:29ID:???
日曜スクリプティングで、素人ながらも何とか基本的なコマンドを
使って掲示板くらいは1から自分で作れるレベルになったのですが、
まだ色々無駄があったりすると思うのです。

それで、コーディングが奇麗な、参考になる(初心者にも比較的読み
やすい)スクリプトは、どこかに公開されてないでしょうか?
0657nobodyさん03/01/29 02:51ID:???
KENT-WEB
0658nobodyさん03/01/29 03:04ID:HsIeKX/p
結構くだらない質問です・・・
下記の様にそれぞれの変数に、同じ文字列を連結して
$a.='<table border="0">';
$b.='<table border="0">';

途中で処理が加わり$a,$bに違う値が連結され・・・

最後に下記の様に連結して締めようかと思います。
$a.='</table>';
$b.='</table>';

質問というのは同じ文字列を違う変数連結する場合、
1行にできないのかという事です。
($b,$a).='<table border="0">'; #イメージ・・・$bにだけ連結して駄目でしたが・・・



0659nobodyさん03/01/29 03:30ID:KC7FDxMH
>>658
期待してる回答とは違うとは思うが
map {$_ .= '<table>'} ($stringA,$stringB);
とか。

あと、$a,$bは普段から使うの避けといた方がいいかもね。
sortで使うから。
0660nobodyさん03/01/29 09:25ID:???
>KENTの悪いところ
>1.スクリプトが冗長だから省略するのに慣れてる人には読みにくい
>2.メモリの利用効率が悪く、スクリプトも速くないからサーバに負荷をかける
>3.CGIは起動コストがかかるのでHTMLファイルを生成した方がよい

メモリの利用効率というのは、スクリプト書く時に
どういうことに気をつければ良いのでしょう?

掲示板なんかだと、出力は極力HTMLファイルとして細かに保存していった方が良いのでしょうか?
0661nobodyさん03/01/29 09:41ID:zyXgtkRr
http://www.agemasukudasai.com/bloom/
0662nobodyさん03/01/29 11:16ID:tPWI6izk
>KENTの悪いところ
>1.スクリプトが冗長だから省略するのに慣れてる人には読みにくい
>2.メモリの利用効率が悪く、スクリプトも速くないからサーバに負荷をかける
>3.CGIは起動コストがかかるのでHTMLファイルを生成した方がよい
↑ほんと難癖だなw

1.ある程度一般的な書き方だと思うし、もともとperlは制約が少ないんだから仕方ないべ。単に自分の書き方と違うから気に食わないだけだろw
2.ソースは?w
3.馬鹿の一つ覚えだな。
0663nobodyさん03/01/29 12:34ID:???
引用元はこの古い投稿です。
http://pc2.2ch.net/test/read.cgi/php/997199513/96
0664nobodyさん03/01/29 13:01ID:22PcLDQj
>>659
なるほど、なんとなくすっきりしました。
もっと一般的な簡単な方法があるのかなと思っておりました。

$aはたまに使ってますね・・・
気をつけます。
0665nobodyさん03/01/29 13:28ID:???
メモリーの利用効率ねぇ・・・Perlで細かくメモリー管理ができるのかしら。
0666nobodyさん03/01/29 13:31ID:???
書き方どうこうよりクロスサイトスク(以下略
0667nobodyさん03/01/29 16:39ID:???
>>666
サーバサイド言語のスレでわざわざ語ることではないけどな。
0668nobodyさん03/01/29 16:54ID:XF7MERR2
CGIの出力でファイルを新規に作成した場合
FTPソフトなどで作成したファイルを削除・変更しようとしても
権限がなくて実行ができなくなってしまいます。

ファイルを新規作成するときに何か特別な処理が必要なのでしょうか
もちろん調べまくったのですが原因がよくわからないのです。
よろしければ教えていただけないでしょうか?
0669nobodyさん03/01/29 16:59ID:19DeFoXE
>>668
ファイルの所有者がnobodyとかapacheとかwwwとか、
とにかく自分のものではない場合CGIで作ったファイルはCGIで削除しないといけません。
0670nobodyさん03/01/29 17:05ID:v+6haFSn
flockがうまくいきません。教えてください。

if (open(MBOX, ">>".$votename)) {
 print "ファイルを開きました。<br>\n";
} else {
 print "ファイルを開けません。<br>\n";
 die "Can't open mailbox: $!";
}
if (flock(MBOX,$LOCK_EX)) {
 print "ファイルをロックしました。<br>\n";
} else {
 print "ファイルをロックできません。<br>\n";
}
この結果、
ファイルを開きました。
ファイルをロックできません。
になりました。
0671nobodyさん03/01/29 17:08ID:???
>>670
初回時ロックを解除しないで終了しました?
0672nobodyさん03/01/29 17:14ID:19DeFoXE
>>670
$LOCK_EX = 2;
が無い可能性大。
または、flock(MBOX,2)でどうよ
067367003/01/29 17:17ID:???
>>671
レスありがとうございます。
closeしてるから大丈夫だと思ってます。

ISPはinfoseekです。
067467003/01/29 17:20ID:???
よく見たらcloseしてませんですた
スレ汚しすまそ
067567003/01/29 17:22ID:???
>>672
レスサンクス、逝ってきます
0676nobodyさん03/01/29 17:27ID:XF7MERR2
お答えありがとうございます
全削除のCGIでもいそいそと作成します
0677nobodyさん03/01/29 18:00ID:???
正しくは、

use Fcntl qw(:DEFAULT :flock);
flock(FILE,LOCK_EX);

な。
LOCK_EXはおおえす依存だから、シソボルはインポートするのが良い。
0678nobodyさん03/01/29 18:16ID:zyXgtkRr
http://www.agemasukudasai.com/bloom/
0679nobodyさん03/01/29 22:35ID:???
外部から受け取った変数をファイル読み込みの変数に使うにはどうすればいいのですか?
$bufferという変数に"./hoge.dat"みたいな文字列を渡したのですが、
open(IN, "$buffer");
とやっても上手く開いてくれません
0680nobodyさん03/01/29 23:07ID:???
外部って何から入力するの?

環境変数なら %ENV、
コマンドライン引数なら @ARGV、
標準入力なら<STDIN>

お好きなのをどうぞ。
0681貧乏パーラー03/01/29 23:08ID:???
>>553 plala規制で亀レススマソ
シンプルcrond perl板、以下のUUEコードを開いてcrond.plが出来てるから
begin 666 crond.zip
M4$L#!!0````(`+.*.BZ8A!N!J`,``,8'```(````8W)O;F0N<&R555MOTT@4
M?HY_Q2$QQ%8=7](4[28UE(IRD1!")>*ES0K7GC2S./8P,Z98D/WM>\Y,'!)1
MJ<)JW9ES^<YW;N[@4=0H&=WP*A),EDZC&,SYFDVG[^H\*V'F",DK#:>G\[?S
M<[P.X`/:02[KJH#S%MZ$NO[":AC'\7&41,E3<`8KK<4TBN[N[D)V*^M&J#"O
MPW]%M.0E4]%%=3LZ-^'F7*CH1:-K<S"8$480B>$`+]D2\A7+O\!)VK),!I-T
M75?!<5ID;3!.5W4C@R1=\RJ(4\5R\AS#1YU)#1K]%[email protected]\8GCR8%@J
M&)49$)5K5[09OM8UOHIL"%P9>8O/>ET4Z*4TKVY]!,+'`!EB2F=K`=\RJ:9@
M==UC("&UMH:SP=\*D+U>!2989X.I'""0=M5LE29#`N"I]>=5HYDBD6)6A'D3
MA2LQ^8T?EH])ALW#O$=_G4SBF!(<)=N0X@3*^M:T1+"<+UM3GV?/#$Z(*I.V
M>+K`FDBE"10+JYB&5V\O/\XA=&@D'-7<P`>,^AH5/YS>N@6WP+ZEH%9\J7%B
M2.2YR#-PJ54N)A6XU$&7FNFVF?2MD2LTNE'G2IH]S[SI2GI2'J4$C9<'X%+8
MN7KHY\](>I0F?\?QC*SP2(@H))IFP)=>_W$\*?H[/F1WJ!V3%J5&BP'OT:+4
M:)'3/5J46F1^+S*WR-30W[4H):UDNI'5`^ECS3?.6:ETNBO#S''-=DG=+M/X
MX)8$]K+$B4H"N^W]5Z;C-`C751_X$AOXXO+UIZN31?I?](_I?X1\[E8X/5[B
M4^-5R9C`,[(\$X>Q>P3@L6_84Q=I75FL>+'PX1%.NI&+`[G_\Z>WH^4;_-XO
MFIA`;Q_ST!?2#M.(DGTTRG@+USNL2*\W&-A/AY!U3GK"90$M7T`K&=#6TK4.
M:,=QR+93[^T%.\9@,^O\P(1VSK&UW];]`BL^M5#CQ75%MA%Y16;@"&E*F%-"
MQ\YT7^<^;?W(;/WH4R:G1+"C:D@;^B81Q8P?Y7]#@V;(#X&V^`>XLJ05_#P,
M.P[;PV01#N'S#+KY>^[/-D-_!H335/@%43@A9]O"]ER6UP5+GV`$$VF;':&'
M_2[\'Y>HJ]%C2P)L%/B3:A&*&6;KRK[",!YVK/<'(K&VNY!PR;1LX3W[KO$+
MFZM?'\-P![RA]\:4A)7X;]2B%IQ!/Z]E582BA`LI:PG(>+S79>M/[OB+/TLT
M\5R.4^GR4]HE_'MTY%-_S/;P!?;(#CT>9QMG\S]02P$"%``4````"`"SBCHN
MF(0;@:@#``#&!P``"``````````!`"``MH$`````8W)O;F0N<&Q02P4&````
/``$``0`V````S@,`````
`
end
そいで毎朝8時に自分の携帯におはようメール送る例が以下
./crond.pl 2 8 'perl mailsnd.pl SMTPServer from-mailaddr "$pmo月$pda日おはよう" "8時です!"'
と打ってmailsnd.txtに自分の携帯メルアド入れとくこと
0682nobodyさん03/01/29 23:10ID:???
>>679
それだけじゃ分からんよ……

「外部」ってどこ?
「上手く開かない」って、どう上手く開かないの?
エラーが出てるならその内容も書いて欲スィ。
(Internal Server Error は書いても無駄なのでよろしこ)
0683nobodyさん03/01/29 23:34ID:Fxyvk81T
すまんです、
文字コードの変換のプログラムをいじくってたら
&jcode'sjis2jis(*value);
↑こんなのあったんですが、これってどういう意味ですか?

必要な情報が少ないかもしれませんがよろしくおねがいします。
0684nobodyさん03/01/29 23:40ID:???
>>683
http://www.mikeneko.ne.jp/~lab/kcode/jcode.html#h2-3
068567903/01/29 23:41ID:???
すみません、外部というのはFLASHのことです。
FLASHがCGIを呼び出す時に"./hoge.dat"という文字列を渡し、
それをCGIが$bufferという変数に受け取ったのですが・・・。
下のようにしてFlashにmyDataとmyBufferという変数を返してみると、
myDataの中身は空っぽでmyBufferの中身は"./hoge.dat"という文字列でした。

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
open(IN, "$buffer");
$toFlash = <IN>;
close(IN);
print "Content-type: text/plain\n\n";
print "myData=$toFlash&myBuffer=$buffer";


ちなみに下のようにPerlに直接ファイル名を書けばちゃんとmyDataにファイルの一行目が表示されました。
$buffer = "./hoge.dat"
0686nobodyさん03/01/29 23:42ID:???
jcode.pl(だと思うが)で $value を sjis から jis に変換している。
0687nobodyさん03/01/29 23:48ID:???
>>685
>$toFlash = <IN>;
を
$toFlash = join('', <IN>);
にしてみる。
0688nobodyさん03/01/29 23:48ID:???
>>684
>>686
ありがとうございますー!
0689nobodyさん03/01/29 23:53ID:???
>>688
ahoka
0690nobodyさん03/01/29 23:55ID:???
>>685
FLASHからのCGI呼び出しがいまいちよくわかんないけど、
GETメソッドで来てるってことはない?
そのソースだとPOSTでしか受け取れないよ。
$ENV{REQUEST_METHOD} の中身はどうなってる?
069167903/01/30 00:08ID:???
>>687
やってみたのですが相変わらず何も返ってきませんでした…。
>>690
POSTで送りました、$ENV{REQUEST_METHOD}の中身もPOSTになっていました。
0692nobodyさん03/01/30 00:18ID:???
>>685
>myDataの中身は空っぽでmyBufferの中身は"./hoge.dat"という文字列でした。
>print "myData=$toFlash&myBuffer=$buffer";
$bufferの内容はカラだったの?
0693nobodyさん03/01/30 00:31ID:???
$bufferの内容:myBuffer=./hoge.dat
なら、
(undef, $buffer) = split(/=/, $buffer, 2);
かな。
Flashの仕様が判らないんで、すまそ。
(そうだとしたら、きちんと処理した方がいいと思う。)
069467903/01/30 01:25ID:???
>>692
>>693
$bufferの内容:./hoge.dat
です。
すみません、実はCGIは勉強し始めてまだ数日なので基礎からなっていません。
もう少し自分でなんとかしてみます。
暫くは適当な値を送ってそれをCGIでif(あればcase)で判定し
その中に直接ファイル名を書いておきます。
(これだとファイルを加えたり名前を変えるたびにPerlを書き換えないといけないのですが・・・)
0695nobodyさん03/01/30 01:28ID:???
chomp;
0696nobodyさん03/01/30 01:37ID:???
chomp $buffer;
0697nobodyさん03/01/30 06:56ID:???
改行がついてるという可能性もあるかもね。
(>>695,696はそれが言いたいはず)
表示して確認するときは、前後に " なんかをつけてみるといいかも。
非表示文字がついてるかもしれないから、length で長さを表示して
見た目の長さと一致するか確認するという手もある。
0698nobodyさん03/01/30 07:02ID:???
$tmp = "./hoge.dat"
として、$bufferと比較してみては
if($tmp eq $buffer){print "OK<br>";}
else{print "NG<br>";}
0699nobodyさん03/01/30 13:25ID:???
なんか、かわいいな<>>695,696
0700nobodyさん03/01/30 14:28ID:NtdcRjvu
くだらない質問かもしれませんが、
変数名とかハッシュ名を変数で与えることって出来るんでしょうか?

for($i=0;$i<=$#avs;$i++) {
if ($avs[$i] =~ /^###(.+)_PROCESSING$/) {
$process_id = $1;
$process_id2 = "\L$process_id\E";
$avs[$i] = "${$process_id}{${$process_id2}}\n";
}
}

みたいな感じで、

###DEDOT_PROCESSING っていう行を、

$DEDOT{$dedot} で置き換えたいんですが、うまくいかないです。
何か根本的に勘違いしてますでしょうか?
jperl 5.005 です。
0701nobodyさん03/01/30 14:45ID:???
$avs[$i] = "\$${process_id}{\$$process_id2}\n";
070270003/01/30 18:34ID:tRX1dMh1
>>701
それだと $DEDOT{$dedot} っていう「文字列」にしかならんのでは...
私の書き方もアレでしたが、%DEDOT の $dedot の値で置き換えたいわけで....
070367903/01/30 18:46ID:???
解決しました。
lengthで$bufferを調べてみたところ、
"./hoge.dat"だから10でなければいけないのに16になっていました。
chompを使ってみたのですが値は変わらなかったので、substrで1文字目を削ってみると
"2E/hoge.dat"という値が返ってきました。もしかしたらと思い4文字目までを削ると
"2Fhoge.dat"が、11文字目までを削ると"2Edat"が返ってきました。
どうも"."は"\2E"、"/"は"\2F"としてFLASHから送られていたようです(最初の文字が\かどうかは分かりませんが…)。
結局FLASHからは"hoge"だけを送り、CGIで
$buffer = "./$buffer.dat";
とすることで正常にファイルを読み込むことが出来ました。
本当にどうもありがとうございました。
0704nobodyさん03/01/30 20:53ID:XHYONXXP
CGIを使ってWebからサーバの管理をしてるんだが、
CGIで行ってる処理が重すぎて処理が終わるまでに
ブラウザがタイムアウトしてしまいます。

そのためブラウザがタイムアウトしないように、
CGIで処理をしている間、ブラウザに30秒に1回データを送るとか
そんな方法でブラウザがタイムアウトするのを防げないですか?
0705nobodyさん03/01/30 20:57ID:???
>>704
作ってみれば?
0706nobodyさん03/01/30 21:01ID:???
>>705
処理が重いところってsystem関数でOSのコマンドを実行してて、
この1回のsystem関数を実行してる間にブラウザがタイムアウトするんです。
で、system関数でOSコマンド動かしながら同時にブラウザにデータ送れますか?
わかんないね!
0707nobodyさん03/01/30 21:24ID:???
>>706
fork pipe nph-
0708nobodyさん03/01/30 23:30ID:???
>>702
$hashname="myhash";
$keyval="key1";
%myhash=( key1=>"key1value",);
$val = "${$hashname}{$keyval}\n";
print ":$val";

で 
:key1val
と表示されたがこれじゃダメなのか?
0709nobodyさん03/01/30 23:54ID:???
>>700
シンボリックリファレンスを使いたいっていうことだね。

まず、これを理解しろ。
$a = 'DEDOT';
${$a}{key} = 1;
print $DEDOT{key};

で、本題に戻ると、$dedotが正体不明なんだけど、
$avs[$i] =~ s/^###(.+)_PROCESSING$/${$1}{lc $1}/;
もしかしてこうしたいとか?激しく意味不明だけど
0710nobodyさん03/01/30 23:56ID:???
>>702
それより気になるのがその処理内容なんだが……。
1つのハッシュに1つのキーしか入れないのでは、ハッシュの意味がないと思うんだけど。
あくまで例としてなら別にいいんだが、そうじゃないなら処理内容を見直したほうがいいかもよ。
0711 03/01/31 04:10ID:???
翻訳掲示板を作っています。書き込みは、例えば日本側なら英語訳、英語側なら
日本語訳も記録して、日英かかわらず全ての投稿を母国語で閲覧でき、コミュニ
ケートできる、というような感じのものです。

で、掲示板スクリプト自体は簡単にできるのですが、やはり翻訳がネックとなって
います。自分で翻訳ソフト用意して、高価なサーバーをレンタルしたり、自宅で
専用線でサーバー立てたりすると、かなりの金額がかかってしまうと思うのです
(非商用の個人サイト運営程度には)。

できれば、オンラインの翻訳サービスを自分のスクリプト内で利用したいのですが、
個人で翻訳機能だけレンタルすると幾らくらいかかるんでしょう? 無料でウェブ
翻訳、テキスト翻訳を公開しているところもありますが、そういう用途に
使うのは断り書きを出してもやはり不味いですかね?
0712nobodyさん03/01/31 06:28ID:/ObcG1bj
>>711
全然Perlと関係ないじゃん。
AMIKAIが翻訳サービスOEMの老舗だけど相当高そうだね。
自分で翻訳ソフト買ってもサーバとして使うにはライセンス料が
えらく高くなる。
結局のところ掲示板を見てもらうときにexcite翻訳を通して見てもらう
しかないのでは?掲示板に入る時にexcite翻訳へのリンクを作るとか。

自作CGIで勝手にexcite翻訳を使って翻訳することも可能だけど、
exciteの広告が表示されない利用方法は問題があるからやめた方がいい。
0713nobodyさん03/01/31 07:08ID:6uKSmBl3
★http://www6.ocn.ne.jp/~endou/index2.html★
      ★こんなサイト見つけました★
0714 03/01/31 07:52ID:???
>>712
すいません。掲示板自体はperlで作っていたもので。
私の方では無論、広告やそのサイトのバナーを掲示板に表示させることは
まったく構わないのですが、向こうの方でそういう利用法を了承するかは、
やはり難かしいですかね。

翻訳は、例えばフリーのテキスト翻訳サービスを利用すると、form getを
使ってurlに投稿文を含ませたのを送って(trans.cgi?text=$body&lang=....)、
帰って来た翻訳をまたPERLで処理して出力する、という感じです。
単なる個人サイトなので、値段が年1万円を超えるようだと少し辛いです…

好きな様に利用できる本当にフリーの翻訳サイトは何処かに無いでしょうかね。
企業が無料公開しているようなのではなくて、教育機関や個人がGNUライセンスで
作ったような…
0715nobodyさん03/01/31 07:58ID:0xsv6W8Z
http://www.kenmon.net/
↑
これってアリ?


0716nobodyさん03/01/31 08:00ID:/ObcG1bj
>>714
http://www.excite.co.jp/world/agreement/
他のサービスでもたぶん同じ規約でしょう。

韓日混在の掲示板というのは見たことあるから、英日混在っていいうのも
探せばあるかも。そこがどういうやり方でやっているか。
技術的には易しいけど、翻訳サービスを安く利用するというのが難しそう。
071771203/01/31 08:05ID:???
>ユーザーは当該私的利用の範囲を超えて、例えば営利目的のために
>本サービスによる翻訳結果を公表、引用、改変等により使用する
>ことはできません。

勿論、「営利目的」ではないですが、個人サイトの掲示板で使用するというのは
「私的利用」の範囲を超えるのか…個人利用する分にはCDコピーはいい(?)けど、
Napsterとかで公開するのはまずい、という感じに近いのか…。
071871203/01/31 08:29ID:???
http://www.amikai.com/company/customers.jsp
あ、スタンフォード大学にもありますね。
教育機関だし、どんなもんかな、、、
0719nobodyさん03/01/31 08:35ID:???
>>704
CGIでサーバ管理するな。
0720nobodyさん03/01/31 10:13ID:NKGtpjno
掲示板を作っているのですが、
&を&amp;に変換したいんですよ。

でもそうすると、&hearts;とわざわざ入力したときに
&amp;hearts;となってしまいハートとかを出せなくなってしまう。

どういう変換方法にすれば、
&→&amp;
>→&gt;
<→&lt;
&hearts;→&hearts;(変換されない)

こういういい感じになるんでしょうか?

ちなみに2ちゃんはどうなってるんのかわかりますか?

よろしくお願いします。
0721nobodyさん03/01/31 10:20ID:???
>>720
s/&\[^([a-zA-Z].;)]/&/g
0722nobodyさん03/01/31 10:21ID:???
>>721
s/&\[^([a-zA-Z].;)]/&amp/g
0723nobodyさん03/01/31 10:21ID:???
s/&\[^([a-zA-Z].;)]/&amp/g
072472003/01/31 10:31ID:???
はげしくどうもです!
あまりにスマートな回答に感動しました。
私はまだまだ修行がたりないようです。

またどうしてもわからなくなったら相談させてください。
0725nobodyさん03/01/31 10:45ID:???
>>724
試してないからテストしてね。
0726nobodyさん03/01/31 10:46ID:???
ごめん、&の後ろの¥もいらない。

2chの特殊文字変換に翻弄されまくっている私。
0727nobodyさん03/01/31 11:16ID:5ww5eJFm
ここの
http://www.salut.ne.jp/bf/wmh/seminar/c010/index.php3
この
http://www.salut.ne.jp/bf/wmh/seminar/c010/enquetesys.txt

このプログラムを動かしたのだが、シンタックスえらーがでて困ってます。
072872003/01/31 11:17ID:???
?
じゃぁつまり、
$value =~ s/&[^([a-zA-Z].;)]/&/g;

でOKですか?
セミコロンはエスケープしなくていいんですよね?

聞く前にとりあえず試してみます。
072972003/01/31 12:10ID:???
すいません・・・

動きません。

これでは
$value =~ s/&[^([a-zA-Z].;)]/&amp;/g;
エラーになります

&^([a-zA-Z].;)
だとエラーになりませんが変換されないし・・・

さっぱりです。
073072003/01/31 12:12ID:NKGtpjno
↑は一応しつもんなのでageさせていただきます
0731 ◆PerlqhxPVA 03/01/31 12:21ID:???
>>729
$value =~ s/&(?![\#0-9a-zA-Z]+;?)/&/g;
でどぉだ?
0732 ◆PerlqhxPVA 03/01/31 12:23ID:???
>>731
$value =~ s/&(?![\#0-9a-zA-Z]+;?)/&amp/g;
エスケープ忘れスマソ
0733 03/01/31 12:33ID:???
Strictを使った時にエラーが出ない様に、
冒頭でour ($aaa,$bbb)って感じで大量に
global variablesを列記してるのですけど、
これってやる意味あるのでしょうか? 
書かなくてもStrict外せばscript自体は動くのですが。
073472003/01/31 12:37ID:???
>>732
完璧です。泣ける。
すでに私には理解できない正規表現になっちゃってますが・・・。
勉強してきます。

ついでに、こういうときって、不明な実体参照をいれても
もちろんそのままになりますよね。

これは掲示板の仕様として正しいのでしょうか?

それともちゃんとした実体参照なのかどうかのチェックをいれてあげる
べきなのでしょうか。

ちょっとスレ違い気味の質問かも。
0735nobodyさん03/01/31 12:57ID:???
>>733
グローバル変数を極力使わないようなコーディングを心がけるべし。
0736nobodyさん03/01/31 13:14ID:???
>>732

a = j&p;

0737 03/01/31 13:38ID:???
くだらない質問ですが
「data」に書きこむ際に「http://〜」の文字を送ると「http//〜」のように「:」が抜けて
「data」に書きこまれるんですがなんでかわかりません。どうしてでしょう?
0738nobodyさん03/01/31 13:39ID:???
>>737
それだけで分かれと言う方が無理。
0739nobodyさん03/01/31 14:03ID:???
>>737
まぁ、データのセパレーターか何かでコロン使ってるんじゃないの?
スクリプト中で消されてるんだろ。
0740nobodyさん03/01/31 14:14ID:???
>>737
そもそも "data" って何だ?ファイル名か?ファイルハンドルか?
ファイルハンドルは大文字使ったほうがいいぞ。
ただし DATA ファイルハンドルは予約されてるから注意な。

とりあえずソース晒せ。
0741nobodyさん03/01/31 14:20ID:???
お前ら、このアホがPerlなんぞ書けるとでも思ってるのか?
0742nobodyさん03/01/31 14:27ID:Q0yPIF7u
MS-DOS上でPerlを動かしているのですが、
My Documentsのようにスペースの入ったフォルダのなかまでglobでファイル一覧を得ることはできないのでしょうか?
なるべくならワークディレクトリを移動せずに相対パスで指定したいのですが。

print glob("dc\\My Documents\\*");
0743nobodyさん03/01/31 14:40ID:???
>>742
ファイル名をMS-DOS形式で記述してみては?
My Documents → MYDOCU~1 とか。
0744nobodyさん03/01/31 14:48ID:???
すいません…
やってみましたが、WinMEなのでプロパティにはDOS形式のファイル名が表記されていませんでした。
あと、深いディレクトリまで自動探索していくバックアップ系ツール(のヘタレ品)なので、globで得たディレクトリ名を自動的にDOS形式のファイル名に変換するというのも漏れの技術では少々難ありです…

なんでか、ロングファイル名でglobに引っかかるんですよね。
0745nobodyさん03/01/31 14:51ID:???
>>744
dirコマンドのオプションを確認。
074674403/01/31 14:56ID:???
>>745様
globでdirコマンドのオプションが使えるということでしょうか?
dir /? してみたところ、 /p w a o s b l v 4 の各オプションがあるようですが、旧ファイル名で表示するオプションは見当たりませんでした…。
0747nobodyさん03/01/31 14:56ID:6uKSmBl3
★http://www6.ocn.ne.jp/~endou/index2.html★
      ★こんなサイト見つけました★
0748 03/01/31 15:02ID:???
>>735
ああ、つまりglobal関数は極力控える方が良いコーディングになる
ということなんですかね。
0749nobodyさん03/01/31 15:03ID:???
>>744
globじゃなくて、readdirでディレクトリ内を取得してみたら?
これでディレクトリを移動する処理を組んだけど、スペース入りディレクトリも
ちゃんと辿っていけたよ。
075074403/01/31 15:05ID:???
なるほど!!readdirですか!Σ( ̄Д ̄;)
さっそく試してみます。ありが沌でした!
0751nobodyさん03/01/31 20:42ID:???
>>734
すべて変換して実態参照を無効化する。必要なものは元に戻す。ってすればいい。

つまり、
s/</</g;
s/>/>/g;
s/&/&/g;
s/&hearts;/♥/g;

&hearts(セミコロンを忘れたもの)は無効なものとして処理しておけばいいじゃろう。
0752nobodyさん03/01/31 20:48ID:???
>>751
で、すべての実体参照にその論理で対応するわけか。ブルーだな。
0753nobodyさん03/01/31 21:09ID:???
>>752
そのぐらい工夫してよ。。
一番簡単で安全だと思ったから書いたんだけどー、
自分では分からなかったから悔しいのかな?

$text =~ s/</&lt;/g;
$text =~ s/>/&gt;/g;
$text =~ s/&/&amp;/g;

@allow = qw(hearts ... ...);
foreach my $str (@allow) {
 $text =~ s/&amp;$str;/&$str;/;
}
0754nobodyさん03/01/31 21:21ID:???
>>753
>@allow = qw(hearts ... ...);
これがダサいと言ってるんだが・・・。
0755nobodyさん03/01/31 21:27ID:???
じゃあ速くて格好いいのを書いてください。
075672703/01/31 21:49ID:5ww5eJFm
require 'cgi-lib.pl';
&ReadPlarse(*form);
require 'jcode.pl';
&jcode'convert(*form,'sjis');
$data = $form{'name'}\n$form{'mail'}$form{'sex'}\n$form{'ryori'}\n$form{'message'}\n\n
open(ENQ, ">>$enqdata.dat")||do{print "ERR";exit;};
#flock(ENQ, 2);
print ENQ $data;
#flock(ENQ, 8);
close(ENQ);
print "Content-type:text/html\n\n";
print >> "END_OF_HTML";
<HTML>
<HEAD>
<TITEL>有難う御座いました</TITLE>
</HEAD>
<BODY>
アンケートは送信されました!<BR>
またのお越しをお待ちしています
</BODY>
</HTML>
END_OF_HTML

これを動かしたらシンタックスえらーがでたけどなんで?
公開されているプログラムなのに。
http://www.salut.ne.jp/bf/wmh/seminar/c010/index.php3
■ このスレッドは過去ログ倉庫に格納されています