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

Perl コーディング初心者質問コーナー Part33

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

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

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0261nobodyさん04/03/09 18:31ID:???
>>258
あぁ そういうことか
ごめん勘違いしてた
単なるgzファイルをCGIから吐かせたいのね
それって根本的にContent-type: text/htmlじゃなくないか?
026225504/03/09 19:20ID:???
>>260
自動広告挿入無効の"x"ディレクトリに設置してみたところ動作しました。
普通に鯖側で圧縮して送る時は"x"ディレクトリじゃなくても動作するのに…
まぁ、そういう思いこみもあって盲点でした。
助かりました。ありがとうございます。

しかし今度は gzsend.cgi? の?以降になんか変なの書いたり何も書かなかった時に
何も指定されてません とか そんなファイルありません ってHTML吐くようにしてたのに
それが表示されなくなりました。
"x"ディレクトリに変える前はうまくいっていたのに…
エラー画面でなくてもさほど困らないしとりあえずこのまま使います。

>>261
Content-type: text/html; charset=Shift_JIS
Content-Encoding: gzip

なヘッダー書いてから.gzなファイル送ってやるとgzip圧縮転送と等価にブラウザにはHTMLで表示され
なおかつ圧縮済みだから鯖に負荷掛からない。
さらに以下みたいにして
<a href="gzsend.cgi?0001">表示</a> <a href="0001.html.gz">Download</a>
一つのファイルで表示用とダウソ用を兼ねる→(゚д゚)ウマー を狙ったんですよ。
0263へたれ04/03/09 21:51ID:vgAvuUAX
こんにちは、一般的な事なのでここに書き込んでいいのか良くわかりませんがとりあえず書いてみます。
掲示板を設置して、そこにアクセスしている端末のUSER_AGENTやアクセス数を解析したなぁ…って
思ったんですがCGIからCGIを呼び出すことって出来るんでしょうか?
掲示板のCGIの中で、端末解析用のCGI(手元にあるのはSSI動作のです)を呼べばいいんだろうと思うんですが
やり方がわからないんでうまくいかないんです。どうやったらいいんでしょう??
よろしくおねがいします。
0264nobodyさん04/03/09 21:52ID:vgAvuUAX
こんにちは、一般的な事なのでここに書き込んでいいのか良くわかりませんがとりあえず書いてみます。
掲示板を設置して、そこにアクセスしている端末のUSER_AGENTやアクセス数を解析したなぁ…って
思ったんですがCGIからCGIを呼び出すことって出来るんでしょうか?
掲示板のCGIの中で、端末解析用のCGI(手元にあるのはSSI動作のです)を呼べばいいんだろうと思うんですが
やり方がわからないんでうまくいかないんです。どうやったらいいんでしょう??
よろしくおねがいします。
0265nobodyさん04/03/09 21:55ID:vgAvuUAX
こんにちは、ヘタレですけどよろしくお願いします
掲示板を設置して、そこにアクセスしている端末のUSER_AGENTやアクセス数を解析したなぁ…って
思ったんですがCGIからCGIを呼び出すことって出来るんでしょうか?
掲示板のCGIの中で、端末解析用のCGIを呼べばいいんだろうと思うんですが
やり方がわからないんでうまくいかないんです。どうやったらいいんでしょう??
0266へたれ04/03/09 21:57ID:vgAvuUAX
すみません
表示されなくて何回も…やっぱりヘタレです
0267nobodyさん04/03/09 22:07ID:???
この、「ヘタレ」がっ!!
0268nobodyさん04/03/09 22:21ID:???
すいません。質問させてください。

あるフォルダに、.htaccessと.htpasswdによるアクセス制限を
掛けています。アクセスすると、認証ダイアログが立ち上がることになるのですが・・・。

これを、フォームか何かで入力して、cgiで受け取って処理して認証画面が
出ないようにすることは可能なんでしょうか?

ご存知の方おられましたら、よろしくお願いします。
0269nobodyさん04/03/09 22:47ID:4E/0UBZO
以下の処理で

<a href="test.html#hoge">

と同様の処理を行うには
どうしたらよいでしょうか?

--a.html--
<frame src="test.cgi" >
--end--

--test.cgi--
my ($html) = << "__END_HTML__";
<html>
<head>
</head>
<body>
<a name=hoge id=hoge>ほげ</a>
<body>
</html>
__END_HTML__

if (open(HTML, "test.html")) {
print $html
}
--end--

教えて下さい。
0270nobodyさん04/03/09 23:05ID:???
>>263
例えば同じディレクトリに hetare.cgi があったとして、

$a = `hetare.cgi`;

と書けば、一応 hetare.cgi を実行できんこともない。
いろいろ細かい制約もあるので、常に期待した通りに動くとは限らんが。


>>268
必ずしも質問の意図を正しく捉えていないかもしれないが、
「.htaccess で制限かけたディレクトリがあって、普段だとBASIC認証しないとアクセス不可だが、
 あるフォームからCGIにID/パスワードを送ると、BASIC認証に成功した状態になって、
 例のダイアログを経なくてもそのディレクトリ内のファイルにアクセスできるようになる」
ということをしたいのだったら、不可能だろう。

付け加えると、この質問は「WebProg 初心者の質問」スレの方がふさわしかった。Perl と関係ないから。


>>269
なにをしたいかよくわからないが、少なくともこのスレの範疇では無さそうだな。
なにをしたいかよくわからないので、どのスレに誘導していいかもわからん。すまん。
0271nobodyさん04/03/09 23:27ID:???
余裕でできるよ

http://id:password@servername/
027226804/03/09 23:34ID:???
>>270
ありがとうございます。やはり不可能ですよね・・。

>>271
先日までは、それでOKだったんですが、IEの2/2のパッチを当てると
URLを使った、BASIC認証が不可能になってしまったので・・・。
0273nobodyさん04/03/09 23:57ID:???
すみません。質問させて下さい。
今、アクセスカウンターを作っています。
カウント数のみ表示されるのはうまくいったのですが、
「sprintf」を使って数字の前に0を付けて桁数を揃えようと
修正したものが何度やってもうまくいきません。

for ($i=0; length($count)>$i; $i++){
$number=substr($count, $i, 1) ;
$dinumber=sprintf("%06d",$number) ;
print "<IMG SRC=$gifdir/$dinumber.gif $size ALT=$dinumber>" ;
}

これだと画像が表示されない上に数字の前に0がつかない状態です。
どこが間違っているのでしょうか?

ちなみにうまく動いていたときのプログラムです。

for ($i=0; length($count)>$i; $i++){
$number=substr($count, $i, 1) ;
print "<IMG SRC=$gifdir/$number.gif $size ALT=$dinumber>" ;
}
0274nobodyさん04/03/10 00:02ID:???
変更前のコードが何をしているかよく考えてみればわかりそうなものなんだが。
まずはそこから勉強した方がいいと思うぞ。
0275nobodyさん04/03/10 00:44ID:qF7ZudiB
#!/usr/bin/perl
$|=1;
use Fcntl qw(:flock);
$outfile = "outtmp.html;

print "Content-Type: text/html\n\n";

open(OUT,"> $outfile");
flock (OUT, LOCK_EX);
print OUT "aa";
close OUT;

print "Done";

たったこれだけなのに、outtmp.html;が作成されません。
なぜなのでしょうか・・・。凡ミスだとは思うのですが、数時間考えても分からず。。。
0276nobodyさん04/03/10 00:50ID:???
4行目
0277nobodyさん04/03/10 01:00ID:???
>273
ファイルが読み込めないのは単にファイル名が違うだけとかだったりしないか。
下(元)の奴だと0.gif〜9.gifを読み込むようになってるが
上(改造後)の奴だと000000.gif〜000009.gifを読み込むようになってるし。
027827504/03/10 01:17ID:qF7ZudiB
>>276

あれ・・・おはずかしい。ありがとうございます。
しかし、これでも500エラーにはならないんだ。。。
0279nobodyさん04/03/10 04:10ID:???
500エラーて。。
まずコマンドからコンパイルエラーメッセージと変な記述の警告をあてにしようよ。
0280nobodyさん04/03/10 04:45ID:???
500エラーなんてものに頼っていては、凡ミスはなくならない。
エラーログ見るとかCGI::Carp使うとか、とにかくPerl自体のエラーを見られる環境を
作ってからいじるべし。できれば use strict; と -w オプションも使うのが望ましい。
数時間考える暇があるんならこっちに時間をかけれ。
0281nobodyさん04/03/10 10:09ID:???
274さん、277さん回答ありがとうございました。
length関数とsubstr関数についてはもう一度調べなおしてみました。

forの部分で$countの長さを取り出し、それを0番目から1文字分
抜き出すという事でよいですよね?ということは、この$count自体を
先に整形する必要があるのかと思い、先にsprintfで数字の前に
0をつけてからfor文で処理するようにしました。
これは今日帰ってから試してみます。

$gcount = sprintf("%06d",$count);

for ($i=0; length($gcount)>$i; $i++){
$number=substr($gcount, $i, 1) ;
print "<IMG SRC=$gifdir/$number.gif $size ALT=$number>" ;
}
0282nobodyさん04/03/10 10:14ID:SqQ9bd0u
tie関数について質問させて下さい。
下のプログラムは、PRINTメソッドが無いよ〜って怒られてしまいます。
mainパッケージは触らず、
PRINTやREADといったメソッドを定義せずに済む方法はありませんか?
よろしくお願いします。

#!/usr/bin/perl

package main;

open(F,">hoge.txt");
tie *F , 'tieHandle' , *F;
print F "test\n";
close F;


package tieHandle;

sub TIEHANDLE {
    bless \$_[1];
}

sub CLOSE {
    my $fh = shift;
    *FILEHANDLE = $$fh;
    print FILEHANDLE "\n","=== CLOSE method called. ===","\n";
    close FILEHANDLE;
}
0283ヘタレ04/03/10 10:50ID:huq9wT6V
>>270
ありがとうございます、でも$a = `hetare.cgi`;としてどうするんでしょうか?
変数に設定したあとどんなスクリプトを書けばいいんでしょうか?
また、制限ってどんな事があるんでしょうか?
もし参考になる文献とかありましたら調べてみますんで教えていただけないでしょうか
質問ばっかりで申し訳ありません。
0284nobodyさん04/03/10 12:13ID:???
>>283
`hetare.cgi`; と書くだけで hetare.cgi が実行される。
$a = `hetare.cgi`; とすると、hetare.cgi を実行した出力結果が $a に入る。

ポイントは、' (シングルクォート) でなく ` (バッククォート) を使うところにある。
「perl バッククォート」で google 検索かけてみそ。

制限だが、今回はアクセス解析CGIだということなので、たぶん問題は無い。
しかし、環境変数やカレントディレクトリは呼び出し元プロセスのがそのまま使われるとか、
CGI引数を渡したい場合にはちょっと知恵がいるとか、
そういうことがあるので、便利だからと言ってほいほい使っていると後でハマる。
0285nobodyさん04/03/10 12:27ID:???
>>280
動かない→悩む→ココで質問な人が多いようですね。
チェックの仕方知らない人も結構いるんじゃないかな?

自分がやってるチェック法を紹介しておきます。

−−以下−−
cmd /k perl -c %1
−−以上−−

って内容のバッチファイルを作り、それのショートカットにソースファイルをドロップ。
ローカルの環境です。Perl は Active Perl です。

use strict; と -w は今のところ使ってません。

ここに、Perl Checker ってのもあります
http://www.kent-web.com/utility/index.html

open(PROC,"perl -c $file 2>&1 |");
なんて事やってるだけだけど。
0286ヘタレ04/03/10 13:31ID:huq9wT6V
>>284さん
ありがとうございますm(_ _)m実は簡単に出来るんですね、
print"<!--#include ....とか、変な事やってました、恥ずかしいです。
ありがとうございました。
0287nobodyさん04/03/10 15:29ID:???
質問です。
$input = 10;
としまして、
@dataに1,2,3,4,5・・・と数字が入っていまして、
$inputの値がこの配列の中に入っているかどうかを調べるのはどのようにすればいいのでしょうか?
配列に対してindexは使えないですよね?
028825104/03/10 15:32ID:???
>>257
遅レスですがありがとうございました。
0289nobodyさん04/03/10 15:38ID:???
>>287
grep
0290nobodyさん04/03/10 15:42ID:???
初心者にありがちな誤り

>何と言っても最大の誤りは、さまざまなエラーを指摘してくれる -w スイッチを
>指定し忘れるというものである。
>2番目に大きな誤りは、use strict を使うべきところで使わないというものである。

とにかく、error.log(デフォルト設定)に出されたエラーの内容を把握する事が、
バグを取り除く為に最も効率の良い手段。

もしエラーの内容がわからなければ、らくだ本の9章に載せられている解説を読めば良い。
らくだ本を持っていなければ、エラーの一部分で検索してみるとか、
或はここで聞けば誰かが教えてくれるかも知れない。
0291nobodyさん04/03/10 15:58ID:???
しかし致命的ではないエラーまで出るからややこしくなる諸刃の剣。
0292nobodyさん04/03/10 15:58ID:???
>>289
grepだと、上の例なら
配列内に1 ・・・ 100ってあって、
$inputが1だったら、凄まじい量が出てくると思われ。
029328704/03/10 15:59ID:???
>>289
すいません、grepを今使ってみたのですが、
$input = 5;
@match = grep (/$input/,@data);
 foreach (@match) {
  print "$_ ";
 }
@dataが1から30までなのですが、
5だけでなく、15や25も出てきてしまうようです。
この場合ですと5だけを取り出したいのです。
0294nobodyさん04/03/10 16:20ID:???
@match = grep{/^$input$/}(@data)
@match = grep{$input eq $_}(@data)#数値比較なら ==
0295nobodyさん04/03/10 16:23ID:fPcyCnVN
use strictやらmyやら使わなきゃだめみたいなこと
くどく言ってる香具師がいるけど、初心者は、そんな
ことより、正確なコーディングに集中すべし。

例えば、>>293のだって、いちいちそんなことしている
必要はないだろ。strict厨、my厨引っ込め!
0296nobodyさん04/03/10 16:30ID:???
っていうか調べたいだけなら
(grep{$input eq $_}(@data))? print 'match': print 'unmatch';
で良い気がs

>295
煽りなのかネタなのか、単に勘違いしてるのか良く判らんが、
「正確なコーディングに集中す」るのに my や use strict はこれ以上なく有効だぞ。
そもそも、何故相手を厨と罵ってまでこれらを使いたくないかの方が意味不明(´ω`)
0297nobodyさん04/03/10 16:45ID:fPcyCnVN
>>296
はぁ?
普通の入門書の最初のほうには、strictやmyを
使ったスクリプトは出さないのだが、それだけのことが
分からず、まだ、stりctやmyにこだわってるから
厨になるんだよ。


0298nobodyさん04/03/10 16:50ID:???
>>297
普通の入門書の最初の方にstrict やらmyやら-wやら-Tやら、
出さないわけを想像もできんの?
0299nobodyさん04/03/10 17:01ID:???
もし真面目に言っているのなら、
それでもやはり特殊な事情が無い限り use strict を使う事を奨める。
と言うかこのスレでも使った方が良いと言う理由は出てるんだけどな。

初心者にとって、むしろ初心者であればあるほど、
正確な、バグの無いスクリプトを書く手段として
最もお手軽で良い方法が use strict だと言う事だ。

#勿論、my 変数についての理解はある程度必要だが
#これは現在の Perl の基本中の基本の一つなので早めに学習しておく事

もし俺みたいな匿名が言うのが気に食わないのならば、
Larry が使った方が良いと言っているよと教えておこう。
0300nobodyさん04/03/10 17:03ID:???
>>298
やさしくするためだよ。無駄な負担を減らすために名。
stりctやmyはずっと後で出てくる。
最初からstりctやmyを使えって主張を取り消しますか?
0301nobodyさん04/03/10 17:05ID:???
stりctやmyなんていつになっても出てきません。
0302nobodyさん04/03/10 17:26ID:fPcyCnVN
>>299
>Larry が使った方が良いと言っているよと教えておこう。
問題は、どの段階かからだ。
さぁ、Larryがc言語の知識もプログラミングの知識もない
まっさらな素人に最初からmyやstrictを使えって言っている
箇所を引用してもらいましょうか。
0303nobodyさん04/03/10 17:42ID:???
デフォルトでuse strictではないということから察するに、
Larryはstrictを知らない人にまでstrictを強要しないということなのかもしれない。
0304nobodyさん04/03/10 17:45ID:???
-wでも出るし、エラーの場合は、デフォールトで標準出力に
何行目のどの辺がおかしいか出てくるんだよ。最初は、それで
十分。
0305nobodyさん04/03/10 17:54ID:???
気楽なプログラミングには制限がきつすぎることもある
と書いてあります。
0306nobodyさん04/03/10 18:26ID:XGcN6IuW
use strict; している状態で

$title='掲示板';
1;

等と書いた設定用plなどを
requireしてやるとうまく読み込めないんですけど、
読めるようにする事はできますでしょうか?
0307nobodyさん04/03/10 18:31ID:???
no strict;で一時的に制限解除するとか?
0308nobodyさん04/03/10 18:32ID:???
>>306
$main::title = '掲示板';

で、だめ?
030930604/03/10 18:43ID:???
>>307,308
返答ありがとう御座います。
解除すると問題なく動作するのですが、
strictしたままでの方法は無いものかと疑問になりまして。

>>308
試してみましたけどダメでした_| ̄|=○
0310nobodyさん04/03/10 19:05ID:???
#スレ違い談義がここまで進むとは思わんかった

>302
なんで、そう極端な例を出すのかわからない。
少なくとも、初心者の誤りとして Larry は>290が引用したところの文を挙げている。
「使うべきところで」使わないのは誤りだと。
そして、Perl ではつまらないエラーをなくし、正しいプログラミングをする為に
use strict は「特殊な事情が無い限り使うべき」。

余談だが、俺の言ってる初心者の定義は少し広いかもしれない。
言葉ではやや説明し難いが、貴方の言っている完全な素人の範囲には留まらない。

もし、最初からそのような完全な素人の事だけを初心者と言っていたのであれば、
こちらの言っている事はある程度撤回しよう。
それでも、出来る限り早い段階からレキシカル、グローバルを意識したプログラミングを
覚えて置くべきだとは主張する。
#因みに、Larry もラクダ本ではループ等と同じくらいの章(2.6)と比較的早い段階で教えている
0311nobodyさん04/03/10 19:13ID:???
>>308
それだけなら
設定ファイル
package MyConfig;
$title = '掲示板';
1

本体
use strict;
print (HTTPへっだ);
print $MyConfig::title;

でやれないかな。
0312nobodyさん04/03/10 19:13ID:???
>>311
>>306だった。
0313nobodyさん04/03/10 19:44ID:???
やっぱuse strictとかするべきなんかなぁ

俺は、結構大きなもの作る(といってもたかがしれてる)。
今までで一番時間かけたのは、DBを使った成績の管理かな。
成績入力、平均算出、順位順に並び替え、などなど。

全部グローバル変数でやりましたよ。
一人でやるなら、全体が把握できてるから構わないけど、チームでプロジェクトをやるときにはmyで局所化したほうがいいってことだ、と思い、毎日グローバル変数でがんばっております。
0314nobodyさん04/03/10 19:58ID:???
変数をきちんと把握出来るならばそれでも良いんじゃない。

殆どの人は使うべきとか使った方が良いとは言ってるが、
何が何でも使えと言ってる人は逆に少数だろう。

要は、さまざまな利点が自分にとって意味がない思うのならば使う必要はないし、
そうでなければ使った方が良いんじゃない? 程度の事を主張しているに過ぎないのだと思う。
0315nobodyさん04/03/10 20:38ID:???
誰でも最初は全部グローバル変数で作りたいのは当然だと思うよ。
でも、そのうち気づくさ。
0316nobodyさん04/03/10 20:42ID:???
初心者ってこんなことにいつまでもこだわるんか?
0317nobodyさん04/03/10 20:46ID:???
use strictより、4.01strictの方が難しいと感じるのは漏れだけでつか?
0318nobodyさん04/03/10 20:56ID:???
StrictHTMLはほとんど原理主義的な意味合いが強いからなあ
俺はTransitionalで妥協。
0319未承諾広告※ ◆TWARamEjuA 04/03/10 21:35ID:???
>>317
慣れれば簡単。tu-ka、文章の意味づけが理解できるようになる。
SEO 対策にも使えるんだけどねぇ(哀)@相変わらずtable厨不思議マークアップな職場
0320nobodyさん04/03/10 21:46ID:???
( ´,_ゝ`)プッ
0321nobodyさん04/03/10 22:00ID:???
%ENVの値を例えば
$QUERY_STRING = $ENV{'QUERY_STRING'}
のように代入してるスクリプトを良く見かけるのですが、
単に読み込むだけなら代入する必要はありませんか?
0322へたれ04/03/10 22:03ID:huq9wT6V
>>284さん
にCGIの中でCGIを呼び出すのはバッククォートで出来るって教えていただいたんですが
実際にbbsのCGIからアクセス解析のCGIをにやってみたらダメでした、同じディレクトリに呼ぶCGIを
おいてやってもダメでした。dopvCOMETを`dcw.cgi?md=s&&pg=indexx`;
ってやって呼んだんですがウンともスンとも…やり方が間違ってるんでしょうか?
ご存知の方居られましたらお助けください。
0323nobodyさん04/03/10 22:40ID:QACy8cAZ
`fetch http://servername/path/to/dcw.cgi?md=s....`
0324nobodyさん04/03/10 23:39ID:???
>>323
それだとアクセス解析にならんぢゃろな。アクセス元とかrefererとか集計したいんだろうし。

>>322
えーと
>CGI引数を渡したい場合にはちょっと知恵がいるとか、
の制限に引っかかっちょるんぢゃよ。
バッククォートでやる場合は、?以降の引数をそのまま引き渡すことはできない。
環境変数を使って渡さなきゃいかんのだが、ちょっと修行がいる。
0325nobodyさん04/03/11 00:03ID:???
>>268
フォームからCGIにパスワード渡したらCGIがアクセス制限掛かってるフォルダの
ファイルと等価の内容を吐く用にするじゃ駄目?
0326nobodyさん04/03/11 02:35ID:YAYdGisP
今日からperlな者ですが質問です。
http://XXX/test.cgi
とアドレスバーに入れたときに「ファイルのダウンロード」となるときがあるのですが
どうしてでしょうか?本当に分かりません。
0327へたれ04/03/11 02:45ID:X5d27yF/
>>324
その修行ってどうやればいいでしょうか?
いい参考書みたいなのってあるんでしょうか?
0328nobodyさん04/03/11 02:59ID:???
>>326
コーディングと関係ないです。
Apacheスレあたりを当たってください。
032932604/03/11 04:15ID:???
>>328
スレ違いでしたか。申し訳ない。
0330nobodyさん04/03/11 04:22ID:???
「気」という文字をURLエンコードすると%8bCとなってしまいます。
正確には%8b%43ですよね?以下がコードです。おかしなところは無いと思うのですが、
&url_encode("気");

sub url_encode{
$str = shift;
$str =~ s/(\W)/'%'.unpack("H2", $1)/eg;
$str =~ tr/ /+/;
       print $str;
}
0331nobodyさん04/03/11 04:41ID:???
>>330
\W は [^0-9A-Z_a-z]
'C' (\x43) はこの正規表現にマッチしない。

http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html
0332nobodyさん04/03/11 11:20ID:rL/aIPwV
どうしてもわからないので教えてください。
自宅サーバ設営のため、Kent Webさまよりyybbsをダウンロードしました。参考書
(Mac OSX Unix的活用講座)の指示通りperlの居場所を指定し直し、アクセス権を
設定しましたが、「Internal Server Error」となって動きません。KentさまのFAQ
をみてチェックしましたが、いちおう問題なく設定されているようにおもえます。
いったいなにがダメなのでしょうか?Askaのほうはうごくのですが・・・
環境はサーバもクライアントもMac OS X 10.3.2です。
0333nobodyさん04/03/11 11:26ID:???


 * こ こ は コ ー デ ィ ン グ の ス レ で あ り 、 設 置 云 々 は ス レ 違 い な の で 悪 し か ら ず  *

                                        
0334nobodyさん04/03/11 11:30ID:???
>>332
>Kent Webさまよりyybbsをダウンロードしました
これはどーでもいい。

perlpass->perlのコンパル->httpd->実行の確認
の順番で確認しろ。

あと完全にスレ違いだから。これ。
0335nobodyさん04/03/11 12:42ID:???
>>334
perlpassとperlのコンパルについて教えてください。初耳なので。
0336nobodyさん04/03/11 12:57ID:???
>>335
スレ違いだっつってんだろボケ
0337nobodyさん04/03/11 13:32ID:qdK0the5
変数を別ファイルに設定ファイルとしたいんだけど
ラクダvol2のdo関数の項目でdoを使うとよいとかいて
あったけど、use strictを使うとaborted due to compilation error
と怒られました。use varsで変数を宣言しても同様です。
<main.pl>
use strict;
do './ini.pl';
print $aa;
<ini.pl>
use vars qw/$aa/;
$aa='aa';
スコープの問題だと思うけどuse strictを使って
exporterやファイルopenして処理する方法以外でよい方法は
ない?設定ファイルは簡潔にしたいので。。
0338nobodyさん04/03/11 13:34ID:???
>>337
http://pc2.2ch.net/test/read.cgi/tech/1074151549/
こちらでどうぞ
033933704/03/11 13:42ID:???
>>338
はい
0340nobodyさん04/03/11 15:21ID:???
>>335
ぼくも、perlpassについて知りたいでつ。
0341nobodyさん04/03/11 15:39ID:???
先頭のPerlのパスの事なんじゃないの?
0342nobodyさん04/03/11 15:47ID:???
>>335 = >>340なんだから、いちいち反応せんでもよし。
しかも、パスなんざ環境でいくらでも変わるっちゅーに。

・・・。
そんな餌でオレ様がクマー(
0343nobodyさん04/03/11 16:57ID:GX3EcYk6
hogehoge.cgi/www.domain.com/
などでアクセスした場合の$ENV{"PATH_INFO"}の先頭のスラッシュを取り除きたいのですが、
$file=$ENV{"PATH_INFO"};
$file =~ s/^\///;
これだけでいいのでしょうか?
0344nobodyさん04/03/11 17:54ID:???
perl -w でバグ?取りをしてるんですけど、
QUERY_STRINGが必要な部分のエラー項目を-wで見ようとすると、
?mode=などがオプション扱いされて、参照できないのですが、
他にエラー項目を参照する方法ってありますか?
0345nobodyさん04/03/11 18:33ID:Jy84bKJO
変数って使い回した方がいいですか?
それとも各処理毎に分けたほうがいいかな?

$name = 'ほげ';
print "名前$name"; # $name = 'ほげ'; は以後不要

$name = 0;
if (〜eq〜) { $name = 1; }


みたいな感じで

0346nobodyさん04/03/11 18:54ID:???
>343
$ENV{"PATH_INFO"}の内容が / で始まるならそれで良いと言うか
試せば直ぐ判りそうな気が。

>344
良く解らんかった……。

>345
普通、同一ブロック内なら変数名は処理毎に変える方が良いと思う。
0347nobodyさん04/03/11 18:55ID:???
>>344
http://altba.com/bakera/hatomaru.aspx/glossary/004300470049

a. 先にシェル上で環境変数 QUERY_STRING を定義してから
  スクリプトを実行する。
b. QUERY_STRING と引数 (@ARGV) の両方でパラメータを
  受け取れるようにスクリプトを改造する。
c. 実験用の Web サーバで実際に CGI プログラムとして動かし
  デバッグする。

お好きな方法を。

>>345
{
  my $name = 'ほげ';
  print ...
}
{
  my $name = 0;
  ...
}
0348nobodyさん04/03/11 18:59ID:???
ハッシュへの配列によるキーと値の追加方法について。

今は

@temp = %hash;
push @temp, @_;     #@_内は key1,value1,key2,value2 以下略
%hash = @temp;
undef(@temp);      #気分的に

とやっているのですが、これを余分な変数を介さず
直接追加する方法は無いのでしょうか。

%hash .= @_;
とかやってみたのですが駄目でした。
0349nobodyさん04/03/11 19:15ID:???
>>348
%hash = (%hash, @_);
0350nobodyさん04/03/11 20:22ID:???
>>341
マジレスすると、パスはpath
0351nobodyさん04/03/11 21:24ID:AiFNJNW+
1: 自分はこう言う事がしたい。
sendmailを使って、特定のアドレスにフォームの内容を送信したい。
2: それでこんな風にやってみたが・・・
CDRにあったスクリプトを、パスを適正にかえて用いた。
3: こんなエラーが出て上手く行かなかった。
メアドによっては成功する。メアドに'ne'を含むものは、演算子とみられるせいかダメ。\n\eとしてもダメ。
変数にいれてみてもダメでした。
成功するメアドは、変数操作でもうまくいきます。この板に来たのは初めてですが、失礼なことがあったらすいません。
よろしくおねがいします。
0352nobodyさん04/03/11 22:07ID:???
「こんな風にやった」というのは、自分で書いたコードを見せろという意味。
人の書いたやつを意味も分からずいじっただけなら、改造スレにでも行ってくれ。
0353nobodyさん04/03/11 22:51ID:???
>>352
分からないなら余計なことを書き込むな。
0354nobodyさん04/03/11 22:57ID:???
CDRって何?
くだー?
035535304/03/11 22:57ID:AiFNJNW+
さすがに新参者には厳しいですね。
意味もわからずにいじってるわけではありません。じゃヒアドキュメントのところを。

 $message = <<END_OF_MAIL;
 To: *****.home.ne.jp

 Subject:テスト
 Reply-To: $in{"mail"}

 <名前>
 $in{"name"}

 <アドレス>
 $in{"mail"}

 <感想>
 $in{"comment"}
 END_OF_MAIL
0356nobodyさん04/03/11 22:59ID:???
>>351
とりあえず「メアドによっては成功する」のなら"ne"が演算子と見られているという可能性はない。
もし以下のようにしているのなら、"@"をエスケープしていないのが原因かもしれない。
$mailaddress = "[email protected]"; # -> "foo\@bar.com" or '[email protected]'

>>351の文面から*推測*できることはこのくらいだ。

>>353
消えろ
035735304/03/11 23:01ID:???
>>355
騙るな
0358nobodyさん04/03/11 23:05ID:???
>>351
えーとですね、
「3:こんなエラーが出て上手く行かなかった」というのは、
「ダメだった」と書かれてもそれじゃどうしようもなく、
ダメだったときのエラーメッセージなりログなりを提出せよ、
と、そういうことなんです。

それがないと、何が起きているかわからない。

会社の後輩でも、毎回「まず error_log を見てから俺に相談しろ」と口を酸っぱくして言ってるのに
全然憶えないやつがいるんだけど、なんでみんなああなのかね。
035935304/03/11 23:08ID:AiFNJNW+
>>356
おそれいります。
文字列'ne'を含まないアドレスについては、うまくいくという意味です。
@のエスケープに関しては、すべて行っています。
0360nobodyさん04/03/11 23:10ID:???
>>359
お前は353ではなく351
■ このスレッドは過去ログ倉庫に格納されています