トップページ⇒php
981コメント366KB

【Perl 】初心者コーナーPart6

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001undefさん2001/07/26(木) 00:40ID:???
初めて来た方、初心者はまずこのスレッドから始めよう。
尋ねる前に同じ質問がないかこのスレや旧スレ、及び>>2のリンクを一通り見てみよう。
案外答えはもう書かれているかもしれない。
0846名無しさん@お腹いっぱい。01/09/05 10:21ID:.KHO7txo
>>845
どう解決したか書かんかい(*゚Д゚)ゴルァ!
0847名無しさん@お腹いっぱい。01/09/05 11:37ID:wcZpsAAM
たぶんうまくギリシャ文字が出せたんだろう
0848名無しさん@お腹いっぱい。01/09/05 12:51ID:zxq1XBSQ
聞き捨て君ばっかだな、何だコイツら???
0849名無しさん@お腹いっぱい。01/09/05 12:55ID:MuDbSDcw
 あー礼言えとか逝ってんじゃねえよ、結果を書けっつてんの
同じような奴見てるかもとかは考えね訳??
それとも自分が分かった事は重要機密にしてえのか? w
まーどうでもいいや
0850名無しさん@お腹いっぱい。01/09/05 13:38ID:JJ49xIDw
ロックファイルを作るスクリプトを色々と書いているのですが、
以下のスクリプトだと『タイムアウト』が出力されません。
for文内のelse以下に別のif文として書くときちんと出力されるのですが・・・。
なぜなんでしょう?
この文だと『$lockfileがあって、なおかつ$maxが0なら』ということになるのか
な?うーん。混乱してきた。

$lockdir = "./lock";
$lockfile = "$lockdir/lockfile.txt";
$min = "0";

for ($max = "5"; $max >= $min; --$max) {

if ( -e $lockfile ) {

sleep(1);
print "$max\n";

} elsif ($max == "0") {

print "タイムアウト\n";
exit;

} else {

open(FILELOCK, ">$lockfile");
close(FILELOCK);
exit;
}

}
0851名無しさん@お腹いっぱい。01/09/05 14:00ID:ORFkPfok
>>850
>} elsif ($max == "0") {
ここじゃないかな?
0852名無しさん@お腹いっぱい。01/09/05 14:47ID:qCTwY1FI
$lockdir = "./lock";
$lockfile = "$lockdir/lockfile.txt";
$min = "0";

for ($max = "5"; $max >= $min; --$max) {
if ( -e $lockfile ) {

sleep(1);
print "$max\n";

if($max == "0"){

print "タイムアウト\n";
exit;
}
} else {

open(FILELOCK, ">$lockfile");
close(FILELOCK);
exit;
}

}
085385101/09/05 14:52ID:ORFkPfok
>852
うわ、ちゃんと見てなかった。
すんまそん。
0854名無しさん@お腹いっぱい。01/09/05 15:13ID:jJXUOw7Y
>>850
if-elseは、条件一致したらそれ以下のブロックを飛ばすでしょ。
今のif-else文だと、$lockfileがあって$maxが0の時(タイムアウトと出力したい時)は
一番はじめのifブロックで終わってしまってる。
085572501/09/05 16:17ID:r9VXJuCk
WebProg板の方々のおかげでだいぶんPerlの
謎が解けました。ありがとうございます。
そこで、また教えていただきたいことがあります。

たとえば、
-- a.pl
$val1 = 'イッテヨシ';
$val2 = 'オマエモナー';

-- b.pl
#!/usr/bin/perl
require './a.pl';
print "$val1\n$val2";
exit 0;
とすると

イッテヨシ
オマエモナー

という出力結果が得られます。ところが、use strict;を使って、
-- a.pl
my $val1 = 'イッテヨシ';
my $val2 = 'オマエモナー';
-- b.pl
#!/usr/bin/perl
use strict;
require './a.pl';
print "$val1\n$val2";
exit;
とするとエラーになってしまいます。どこが間違っているのでしょうか?
多分 my で局所変数宣言しているので、a.pl内で定義した変数が外に
出られないのだとはおもうのです。
他にやり方がある、または無いのでしょうか?
ご教授お願いします。
0856名無しさん@お腹いっぱい。01/09/05 16:33ID:69W8SPrg
-- a.pl
sub itteyosi {
my $val1 = 'イッテヨシ';
my $val2 = 'オマエモナー';
return ($val1,$val2);
}
1;

-- b.pl
#!/usr/bin/perl
use strict;
require './a.pl';
my @val = itteyosi();
print "$val[0]\n$val[1]";
exit;
0857( ・∀・)y━~~ 01/09/05 21:58ID:MQF/.FlQ
a.plの方ではmyを使わず、b.plの方で
use vars qw($val1 $val2);
ぢゃだめですか・・・?

今のperlなら
our ($val1,$val2);
かな。。

my使えないけど、myはそういうものだとあきらめておいらは深追いしていません。
085883501/09/05 22:11ID:MH.oUUAs
>#!/usr/local/bin/perl --
>↑ 一行目こうしたらどうなる?

bash : ファイル名 : command not found
と出ます。
0859名無しさん@お腹いっぱい。01/09/05 22:43ID:sW4ruaF.
>>857
外部ファイルから取り込むのは定数なんだろうから、

-- a.pl
use constant VAL1 => 'イッテヨシ';
use constant VAL2 => 'オマエモナー';
1;

--b.pl
use strict;
BEGIN { require './a.pl'; }
print VAL1."\n".VAL2;

って感じがいいと思うよ。
単純にダブルクォートに入れられないのは不便かもしれないけど。
0860名無しさん@お腹いっぱい。01/09/05 22:59ID:do.WshJo
ん?
そりゃパス間違えてるよ、つか -- を付けろって言ってるんだろ
後、出来たように見えて本当は7**になってないとか
-rwxr-xr-x こうなってるか?
実は/usr/bin/perl5 だったとか
とりあえずcatでもviでも良いからLinuxで書いてみ
プロンプトで cat >hoe.pl ってやって、

#!/usr/bin/perl
print "test";

これだけ入れる、終わったら Ctrl+z で終了。
chmod 755 ./hoe.pl
./hoe.pl
これで動かなきゃしらない。
0861名無しさん@お腹いっぱい。01/09/05 23:35ID:ZkxQdk2c
ホレ!http://chiba.cool.ne.jp/gedouhobby/
086283501/09/05 23:41ID:O0y3PBhM
>860
やっぱりダメでした。
お手上げです。何が原因かすら不明…
0863名無しさん@お腹いっぱい。01/09/05 23:46ID:EuQ8BRvI
とりあえず、>>835によると合ってるらしいが
$ which perl
の結果を書いてみ。念のため。
0864名無しさん@お腹いっぱい。01/09/05 23:58ID:niWMGH6k
>>835
それより、どんなエラーメッセージなのかを・・・・
0865名無しさん@お腹いっぱい。01/09/06 00:10ID:jxYvqj8.
Linuxつかえんなら大人しくWin使えよ。
0866名無しさん@お腹いっぱい。01/09/06 00:17ID:4627I8LA
if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $commandline, $ENV{'CONTENT_LENGTH'});
} else {
$commandline = $ENV{'QUERY_STRING'};
}

どうみても普通のアレなんですけど。。。

method="GET"だと$commandline は取れるのに、
method="POST" にすると$commandline に文字列が入りません。

なんでGETだと取れて、なぜPOSTだと取れないのでしょうか?
同じところでずっとはまっています。
何か悪いところがないでしょうか?よろしくお願いします。
086785001/09/06 00:43ID:ESQY.pDM
>>854
なるほど!

if文は評価式が真なら実行文を実行して終了し、偽なら実行文は実行せずに
elsif文を評価するということですね。逆に言えばif文が偽にならないとelsifは
評価されない・・・。

ありがとうございました。
0868名無しさん@お腹いっぱい。01/09/06 00:58ID:lkkYIUpY
use strictが使えないです・・。なんで?アパッチ入れないとやっぱだめ?

win98/ActivePerl/Httpd
0869名無しさん@お腹いっぱい。01/09/06 01:11ID:UxFZPp2o
>>868
そもそも「use strict;」が何なのかを学ぶと良いと思われ。
0870名無しさん@お腹いっぱい。01/09/06 01:30ID:4E8AwmEc
>>855

通常、そういうことをしようとするときは、Exporter を使う。

# a.pm
package a; use base Exporter; @EXPORT = qw($val1 $val2);
$val1 = 'イッテヨシ'; $val2 = 'オマエモナー'; 1;

# b.pl
use a; print "$val1\n$val2";

>>855 >>857

my を使った変数をエクスポートする時は
*global = \$private;
とすると、実質 $private はレキシカルでなくなることを利用してimport を自分で書けば一応可能…かも?
というのも、??? の行を消すとなぜかうまくうごかなかったから。

# a.pm
package a; @EXPORT = qw($val1 $val2);

my $val1 = 'イッテヨシ'; my $val2 = 'オマエモナー';

sub import {
my $c = caller;
my @tmp = ($val1, $val2); # ???
foreach my $e (@EXPORT) {
my ($prefix, $e_sym) = ($e =~ /^([\$\@%*&]?)(.*)/); $prefix = '&' unless $prefix;
*{$c.'::'.$e_sym} = eval "\\$prefix$e_sym"; die $@ if $@;
}
}
1;

(改行が多すぎるらしいため、つめて書いてます)
0871名無しさん@お腹いっぱい。01/09/06 01:35ID:lkkYIUpY
>>868
なんなのかは知ってるけど、仕様の依存性とかのデータが見当たらないんですよぅ。
0872名無しさん@お腹いっぱい。01/09/06 04:57ID:ugAsC9SM
>>871
いやね、「Apacheがないせいでuse strictが使えない?」みたいなことを
書かれた時点で、こいつわかってんのかと思っちゃったりするわけですよ。
ま、そんなのはどうでもいいんだけど、
use strictが使えないって具体的に何がだめなん?
087383501/09/06 09:51ID:0KMUTKPI
原因が判明しました。
スクリプトを/usr/binにもっていってperlのあるところで実行すると大丈夫でした。
perlのあるところでしか実行できないところをみると
perlのパスが通ってないみたいです。
こんなこと初めてです。一応検索してはいるのですがそれらしきものにヒットしません。
どうすれば解決するんでしょうか?
0874名無しさん@お腹いっぱい。01/09/06 10:16ID:cEL2v6yw
>>873
多分違わないか?
835 で which perl や perl -v が期待した動作をしたと書いているの
だから perl が PATH の通ったところに無いとは思えないのだが
単純にスクリプトの起動のさせ方が間違ってると思うのだが
shell 上からスクリプトをどうやって実行させてる?
スクリプト名を hoge.pl (command prompt を >) として

> hoge.pl

で実行させようとして無いか?
0875名無しさん@お腹いっぱい。01/09/06 10:27ID:MMkqxmBg
./hoge.pl
087685701/09/06 11:01ID:uCOK.3Ds
>>870
そーゆーふーにやるんだ。今度から使うよ。ありがと〜ヽ(´ー`)ノ

後半のは、良く分からないし、やっぱプライベートな変数を外に出すのは不自然ってことで、気にしないで置きます。
多分>>855も想定しているのは定数だけを記述したファイルを用意したいのだろうし。
それでも外に出したい時は、Getほげほげ関数作ったほうが楽そうですからね(;´∀`)

>>859も、やりかたとしては勉強になりました。
が、""の中に入れられないのは痛い。。。
0877725(=855)01/09/06 11:15ID:rIfbk0F2
>>856 >>857 >>859 >>870

どうもありがとうございました。
教えていただいた方法でやってみます。
0878名無しさん@お腹いっぱい。01/09/06 12:00ID:WXMJq9Po
>>858
#! /usr/bin/env perl
でも同じでしょうか
0879名無しさん@お腹いっぱい。01/09/06 12:35ID:I8HVXYHg
要素数が同じ配列が2つあって、その内容が同じかどうか調べたいんですけど、
今は
if ((join "\t", @a) eq (join "\t", @b)){
  なんか処理
}
ってやってます。
各要素にタブ文字を使っていなければこれで十分ですか?
if ($a[0] eq $b[0] && $a[1] eq $b[1] && ...
は見にくいからあんまりやりたくない・・・・
0880名無しさん@お腹いっぱい。01/09/06 13:35ID:cGMUUJcs
>>879
十分と思われます。ただ、配列のサイズがでかいと巨大な文字列が
生成されることになるので、一個一個調べたほうがいいかもね。

for ($i=0; $i<=$#a; $i++) {
unless($a[$i] eq $b[$i]) { 違ってた場合のなんか処理; }
}
0881名無しさん@お腹いっぱい。01/09/06 14:29ID:6hy8D4ok
>>879
順番も一緒か調べたければ
if ("@a" eq "@b") {
hogehoge;
}
が一番簡単かも…。ちなみに要素が同じかどうか調べるなら、
joinする前にsortする必要あり!
0882名無しさん@お腹いっぱい。01/09/06 14:33ID:8PdBtivg
それじゃ
('aaa', 'bbb') と ('aa', 'abbb') が
一緒になっちゃう
0883名無しさん@お腹いっぱい。01/09/06 14:35ID:813rKJ7s
join($;, @a) eq join($;, @b)
が少なくともスペースやタブよりはましかと。
0884名無しさん@お腹いっぱい。01/09/06 14:38ID:4d/uz2yQ
>>882

要素にタブが含まれない配列のタブで結合するんだから大丈夫だべ。
088588201/09/06 14:43ID:8PdBtivg
882は嘘だった。知ったかぶりスマソ。
0886725(=855)01/09/06 15:20ID:rIfbk0F2
>>876

>多分>>855も想定しているのは定数だけを記述したファイルを用意したいのだろうし。

そうです、その通りです。
a.plの変数をb.plとc.plで共有したいなぁと考えていたのです。
教えの通り、hoge.pm作って、use hoge;で上手く行きました。
ありがとうございました。
088787901/09/06 15:51ID:I8HVXYHg
みなさんありがとうございます。
ちょっと調べたら、>>883 の通りに join $; , @a; の方がいいみたいですね。
文字列は結合後でも500bytesくらいだから大きすぎってことはないと思いますが
joinよりいい案ってあんまりないですか?
0888名無しさん@お腹いっぱい。01/09/06 19:00ID:lOmO3j1c
fork で生成出来る子プロセスの最大数はいくつでしょうか?
ウチの環境(Windows2000 + Active Perl v5.6.1)ではデフォルトで64なのですが、
これはOSまたはperl処理系の仕様上の上限なのですか?
それとも、再定義でもすれば増やせるのでしょうか?
0889888ゲット!01/09/06 19:04ID:lOmO3j1c
↑
あ、同時に、という意味です。
0890core01/09/06 19:36ID:n.BZs/nc
今Linuxでperlやってますが実行するときに必ず
./hogehoge.plというように./をつけないとうまく機能しません。
./をつけなくても機能するようにはできないでしょうか?
使っているのはRedHatLinuxでperlは5.6です。
0891名無しさん@お腹いっぱい。01/09/06 19:53ID:gTPPtJlU
>>890 このスレでPerlスクリプトがうごかねぇって騒いでた人?
0892ひまぢん01/09/06 19:59ID:ji/LQ9h6
takoが怪しいからちょっとミラーしてみたよ。
他にも良いスレ探して適当に置いとくんでよろ
>>890
パスを通すってやつ、bashだっけ?の.profile辺りをいじるべし
検索すればFAQごろごろ、但しセキュリティー上よろしくないのでよろ

Part1
http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2
http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3
http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4
http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5
http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0893$PATH01/09/06 20:01ID:7zClg5yE
DOS窓じゃないんだから諦めな
0894名無しさん@お腹いっぱい。01/09/06 20:06ID:8PdBtivg
Slackwareだとデフォルトで「.」が$PATHに入ってた。
(root以外の場合ね。)最近インストールしてビクーリ
したよ。というわけで >>890 はSlackwareに乗り換え
を推奨。
0895名無しさん@お腹いっぱい。01/09/06 20:49ID:hH7VhveI
>>888
ActivePerlでperldoc perlforkを見たら、forkの最大数は
システムのいろいろな制限で上限が決まる、とかなんとか書いてあったよ。
WinNTだとスレッドの最大数が64て制限があったかもしれない。
0896名無しさん@お腹いっぱい。01/09/06 21:43ID:???
# vi ~/.bashrc

PATH="$PATH":.

# source ~/.bashrc
089788801/09/06 22:12ID:lOmO3j1c
>>895
ドキュメント見ました。
perlのみでの変更は出来そうも無いですね。
ありがとうございました。
0898名無しさん@お腹いっぱい。01/09/07 04:45ID:???
>>892 過去ログアップ乙カレー。
新スレ立てるときに参考リンクに入れましょー。
0899超超初心者01/09/07 10:08ID:24e7eVxc
Perlの超超初心者です。
今やりたいことはUNIX環境上にあるファイルを開いて半角カタカナを
全角カタカナにしようとすることです。
そういう質問はこちらで聞いても構わないでしょうか?

またもし過去ログに同質問があったらごめんなさい。
過去ログ見たのですが、なかったように見えましたので.....。
レスお待ちしてます。
0900名無しさん@お腹いっぱい。01/09/07 10:24ID:???
>>899
http://www.din.or.jp/~ohzaki/perl.htm#JP_HK2ZK
この辺。
0901初心者01/09/07 12:25ID:pn62mP8w
Perl初心者です。

ある変数に入っている文字列が「全角カタカナ」のみという
正規表現の書式を教えてください。

「全角ひらがな」はいろいろと検索してでてきました。
$hoge =~ /(?:\x82[\x9F-\xF1])/
でした。
0902名無しさん@お腹いっぱい。01/09/07 12:35ID:???
>>901

1に「>>2のリンクを一通り見てみよう。」と書いてるのが見えませんか?
0903わからず01/09/07 18:01ID:???
サブルーチンへ引数を渡すところで困ってます。
配列とハッシュの混在したものを渡して、
それぞれを使うということはできないのでしょうか?
グローバル変数にしてしまえば、、とも思ったのですが。どうしてもローカル変数でやりたくて。
リファレンスや型グロブのあたりを調べたのですが、正直わかりませんでした。
解決の手ほどきをお願いします。


↓こんなことをしたいです。

@list = &getList;
%hash = &getHash;
$str = &routine(@list, %hash); # これがやりたい

sub routine {
my(@list, %hash) = @_; # これも希望
my(@keys) = keys(%hash);
my ($a, $b, $s, $str);
foreach $a (@list){ # こんな感じで使いたい
foreach $b (@keys){
$s = $a + $b;
}
$str .= $s;
}
return $str;
}
0904わからず01/09/07 18:03ID:3Gw2HsKo
再送

@list = &getList;
%hash = &getHash;
$str = &routine(@list, %hash); # これがやりたい

sub routine {
my(@list, %hash) = @_; # これも希望
my(@keys) = keys(%hash);
my ($a, $b, $s, $str);
foreach $a (@list){ # こんな感じで使いたい
foreach $b (@keys){
$s = $a + $b;
}
$str .= $s;
}
return $str;
}
0905名無しさん@お腹いっぱい。01/09/07 18:29ID:???
>>904
routineを呼ぶとき、リファレンスを渡す形でいい?
それでよければこんな感じで。

$str = &routine(\@list, \%hash);

sub routine {
my($list_ref, $hash_ref)=@_;
my @keys=keys(%$hash_ref);
foreach my $a (@$list_ref) {
:
以下略
0906わからず01/09/07 18:48ID:???
>>905
仰せの通りでした!できました!!
サンプル見てがんばってたとき、「@$hash_ref」とやっていました。(サンプルがそうだったので・・・)WebProgしかやったことないので、リファレンスとかポインタとか微妙にわかってません・・・。
勉強します!!

ありがとうございました!
0907Ne! Perl01/09/07 20:41ID:???
今、入れようとしているCGIなんですけど

> これは、いくつかのperlモジュールを利用して動きます。
> それらは全てフリーで配布されているものです。
>
> Mail::POP3Client;
> Mail::Sendmail;
> MIME::QuotedPrint;
> MIME::Base64;
> CGI;
> 'jcode.pl';

って書いてあります。
共有サーバーなんですけど、どのフォルダに入れればいいんですかね?
パーミッションはいくつに…?
もろ、初心者質問でスマソ。
0908なー01/09/07 21:08ID:LmWrXSYQ
てすと。
0909maji?:res01/09/07 21:21ID:jyahklrM
>907
どこでも突っ込んでパスを叩いてください。
パーミッションはそれぞれの指定に従って。

この感じだとメールフォームだと思うけど
そもそもsendmailは使用可能かどうかも調べてね。
0910名無しさん@お腹いっぱい。01/09/07 23:30ID:???
2chのリンク貼り方みたいな正規表現
>>2-3
というようなのURLみたいに変換するのどーやればスマートに書けますか?
初心者なんで解説付だと嬉し。
0911名無しさん@お腹いっぱい。01/09/07 23:50ID:???
http://www.din.or.jp/~ohzaki/perl.htm#httpURL
ここに行って何も考えずにソースをパクリましょう。
後、自動リンク、正規表現、とかで検索すれば色々出てくるので
これも又何も考えずにそのままコピペして下さい。
とにかく解ろうとしない事です、正規表現メモなんで見るもんじゃないよ
0912名無しさん@お腹いっぱい。01/09/08 00:01ID:???
s/(http[^\s]*)(.*)/<a href=\"$1\">$1<\/a>$2/;
これでいいだろ  (ワラヒ
0913名無しさん@お腹いっぱい。01/09/08 14:21ID:???
折衷案でこんな所でどうだろう。
$comment =~ s|(http://[\~\./\?\=\&\:\-\%\w\$\#]+)|<a href="$1">$1</a>|;
上とかこれを参考に自分で変えていけば面白いと思うよ。
091491001/09/08 17:39ID:???
>>911-913
ありがとうございます。
911のリンク先には人間が書いたとは思えない
正規表現とかもありますね…(汗
if (index($str, $keyword) > -1) {正規表現 }とindex使うとスピードUPするなど勉強になりました。
URLのリンクではなくてスレッド内レスへのリンクで
>>911と>>911-913
というような2種類をひとつの正規表現で書けるのかな?
僕はどうしても>>911マッチ後-913がついているヤツをマッチと2つ書かないと
うまく出来ません。
0915名無しさん@お腹いっぱい。01/09/08 18:34ID:???
質問させてください。

@INCに付いてなのですが、任意のディレクトリを追加したいと考え
push (@INC,"./module/")  などとしても全くダメな様です。
これはPerl自身が叩かれた時にセットしなければならないのでしょうか

それともう一つ、strictモジュールなのですが何故か、Perl5.6 on Cygwin
な環境では一切機能しない様です。'vars'としても何事もなく危険な構文が
通ってしまいます。  5.0 FreeBSD では問題無く動いているのです。
一応ソースを見てみたものの、短いけれど理解出来ませんでした。。
他の標準モジュール(Cwdなど)は全く問題無く動いています。

ヒントを頂けたらとても嬉しいです。
0916名無しさん@お腹いっぱい。01/09/08 19:01ID:???
>>914
| >>911と>>911-913
| というような2種類をひとつの正規表現で書けるのかな?
うー。俺もかけません。正規表現の中で条件判断とかするのかな。
正規表現道場スレに移って偉い人に聞いてみるか?

>>915 前半
@INCはperl起動時に設定しないといけないので、そういうのは
BEGINブロックに入れるんだと思った。
BEGIN { push (@INC,"./module/"); }
0917名無しさん@お腹いっぱい。01/09/08 19:01ID:???
>>915
BEGIN{ unshift(@INC, "$ENV{HOME}/perl5lib") }
#or
use lib "$ENV{HOME}/perl5lib";

cygwinのPerlでもstrictは普通に動くが?

$ perl -Mstrict -e 'print $var'
Global symbol "$var" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
$
0918>91401/09/08 19:41ID:???
>>>911と>>911-913
>というような2種類をひとつの正規表現で書けるのかな?
たとえば、
$subject =~ s|>>(\d+)(-(\d+))?|qq(<a href="$this_script?bbs=$board&key=$key&st=$1&to=).($3 or $1).qq(&nofirst=true" target="_blank">>>$1$2</a>)|eg;
とか・・・。
091991801/09/08 19:42ID:???
ありゃ、&gt;とかが潰された(w
0920名無しさん@お腹いっぱい。01/09/08 20:18ID:???
>>916 >>917さん
どうも、即レス感謝です。勉強になります。なるほど!
BEGINブロックとENDブロックは特殊な読まれ方をするんですね。

>>BEGIN ブロックは即座に実行されるため、
>>サブルーティンなどの定義を他のファイルから読み込んで、ファイ
>>ルの残りの部分から見えるようにすることができます
と書いてるので、これは他にも便利そうです ^^

>$ perl -Mstrict -e 'print $var'
あれ??? 僕も今やり直したらちゃんと動いています。 おかしいな。。
確かに同じソースを、Freeにアップして両方catして確かめた筈なのですが、、
ごめんなさいです、今はちゃんと怒られています。
一々FTPで上げてるから分からなくなったのかな、、環境を考えないと。。。

勉強になります、ありがとう御座います。
0921名無しさん@お腹いっぱい。01/09/08 20:27ID:???
>>914
えっと、僕も2ch型のソースを見てみました。
2段階に分けてる様です。

ログに吐き出す操作では。。。
bbs.cgiで ('>>\d' 形式は変換、http〜はそのまま)→ログに書き込み→
→読み出し時に (read.cgiでhttp〜を自動リンク)

index2.htmlの生成では。。。
bbs.cgiで、まず('>>\d')形式を変換、次に(http〜)形式を変換→print

としてる様です。2回正規表現くぐってるんですね。
何故 '>>\d' を変換してログに書くのかが謎ですが、、
多分後から追加された機能だから、read通す時にまずい事になるのかな。。。
092292001/09/08 22:02ID:???
>>917さん、
何だかマヌケですが原因が分かりました (-_-
perl -Mstrict -e 'print "$a";'
だとダメで、、
perl -Mstrict -e 'print "$hoge";'
だとちゃんと動いてます。

Cygwinの方はコマンドを叩いて($aを良く使ってしまうんです)、
BSDの時はスクリプトを実行してたのが原因でした。(あほだ、、

aって何なんだろう。。特殊変数じゃない筈だし、、、、
勉強します。 strictのソースかなぁ
しかし、aとfooなんて一緒と思うから理解するのに1時間位かかった(鬱
0923名無しさん@お腹いっぱい。01/09/08 22:03ID:???
>>920
$aと$bはsortの時に使う特殊変数になっているはず。
092492001/09/08 22:06ID:???
ああ、bも予約されてるぅ。。cからが空家なのか
段々恥かしくなって来た、ROMに戻るです。
092592001/09/08 22:10ID:???
>>923 う、sortだたですか。 はずかしっ
ありがとう御座います。 アルファベットは空だと思ってた
消えますぅ  。。。。(^ ^ )サササッ
0926use Net::SMTPについて01/09/09 02:43ID:he2Uykuk
教えて下さい。
NTサーバで動いているプログラムで、use Net::SMTPを使って
サイト上のメールフォームからメールを送信させています。
最近、ファイヤーフォールを変えたらしいのですがその直後から
フォームからのメール送信ができなくなってしまいました。

use Net::SMTPはファイヤーウォールの設定によっては使えなくなったり
するのですか?またその場合、どの部分の設定をどう変更すればいいのでしょうか。

何もわからない哀れなカエルに知恵を授けて下さい
0927体育祭の名無しさん ◆B6fYuXhU 01/09/09 19:15ID:PuCsmJ7M
どうも、初めまして。

perlをつかって、cookie認証が必要なページを取得しようとしているのですが、
どうすれば用でしょうか?

普通のページの場合LWP::Simple を使用して、
get("http://〜");

などして取得できるのですが、cookieを使用する場合どうすればいいのでしょうか?

具体的には、Aページで、cookieAを取得し、
次に、Bページで、そのcookieを使用して、認証したいのです。

自分なりに書いてみたのですが、
どうすればいいのでしょうか?
http://blue.ribbon.to/~atu/TestScript.txt

よろしくお願いします。
0928名無しさん@お腹いっぱい。01/09/09 20:00ID:???
>>927
リクエストヘッダーにぶち込めば良いと思われ。
LWPにそういった機能がありそうだけど
rfc見て自分でカスタマズしてもそんなには難しくないと思われ。
http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2109.html
0929名無しさん@お腹いっぱい。01/09/10 19:02ID:mDibE0X6
>>927
LWPを使うときは、そのスクリプトで基本的に問題ないみたい。
UserAgentにcookie_jarをセットすると、あとは自動的に
クッキーの読み込みも書き出しもやってくれるらしい。

↓このスクリプトでちゃんとPageAで得たクッキーをPageBに渡せたよ。
use LWP::UserAgent;
use HTTP::Cookies;
my $PageA = "http://www.my.domain/";
my $PageB = "http://www.my.domain/hoge.cgi";
my $ua = LWP::UserAgent->new;
$ua->cookie_jar(HTTP::Cookies->new);
$ReturnA = &HttpGet($PageA);
$ReturnB = &HttpGet($PageB);

ただしクッキーを読み書きするときは
ドメイン名に少なくともドットが2個ないとエラーになる。
だから最初 "http://localhost/" でテストしたとき
全然うまくいかなくて悩んだ。
0930ひきこもりたいっ01/09/10 23:49ID:???
色んな配布スクリプトなんかを改造したりしてるんですが
良く上の方にある
$script... #-- スクリプトの名前
こんな感じの大域変数の扱いに困ってます、酷いのになると50個位あったり
して、こんな正確なので出来れば閉じ込めたいんですが、自分で考えたのは
全体を sub SETTING とかで囲んで、参照したい時は &SETTING(script)
で使うという感じです。
もっと他に良いやり方はありますか?
0931名無しさん@お腹いっぱい。01/09/11 00:19ID:???
・%Configに入れる。名前で参照[$Config{hoge}]
・@Configに入れ、enumを使って定数列を作成。名前で参照[$Config[HOGE()]]
・use constantまたはsub name(){ value }で定数を作成し参照[HOGE()]
・変数を全て大文字にするだけで済ませる[$HOGE]
0932名無しさん@お腹いっぱい。01/09/11 00:44ID:???
・パッケージに入れてour宣言つーのは?
package Setting;
our $script = "hoge.cgi";
package main;
print "$Setting::script\n";
0933名無しさん@お腹いっぱい。01/09/11 18:45ID:.epadQJg
初心者です。

TwnLounge Faith editionというスクリプトにクッキーを発行させたくて
悪戦苦闘しています。KENTさんのスクリプトのクッキー発行・取得の部分をとってやって見たのですが
うまくいきません。どなたか教えていただけるとありがたいです。

http://www.hpfree.com/giants/lng.txt
↑実際使っているサーバーはCGI可です。
0934名無しさん@お腹いっぱい。01/09/11 19:48ID:???
>>933
スレ違いです。
http://corn.2ch.net/test/read.cgi?bbs=php&key=988808396
どういう値をcookieで渡したいのかを明記すれ。
0935名無しさん@お腹いっぱい01/09/11 20:24ID:???
全体を見てないけど、クッキーのフォーマットは多分あってる
(つーか解らなかったらAskaのをそのまま使いなよ)
                      ~~~~~~~
んで何故ダメかと言うと多分
printする場所が間違えている(Content-typeを指定した後で吐いている)
不幸にも Set-Cookie させてくれないServerを使っている
ブラウザのクッキーがOFFになっている(・∀・)
この辺かな、確認用のスクリプト書いてみる事をおすすめする
0936名無しさん@お腹いっぱい。01/09/11 22:13ID:dnQFE/9w
他の掲示板等ではクッキーがきくし・・・

やっぱりスレ違いなのかな・・・
0937名無しさん@お腹いっぱい01/09/11 22:17ID:???
もうちょっと細かく書けよ、SET出来てないのかGET出来ないのか
渡した奴が化けるのかって感じで それ書いたらソース見る事にするわ
0938名無しさん@お腹いっぱい。01/09/11 22:29ID:???
>↑実際使っているサーバーはCGI可です。

ドコ?トクトクだったらブトバスー
0939名無しさん@お腹いっぱい。01/09/11 22:39ID:dnQFE/9w
GETできてません。
SETはできてるのかわかりません・・・

サーバーはトクトクじゃないです。(無料じゃありません。)
0940名無しさん@お腹いっぱい。01/09/11 22:55ID:dnQFE/9w
すいません逆でした。

SETできてません。
GETはできてるのかわかりません・・・
0941名無しさん@お腹いっぱい。01/09/11 23:31ID:lMfDpcz2
ビルが無くなったYo
094294101/09/11 23:35ID:???
誤爆。貿易センターねらったつもりが
両国国技館につっこんでしまったようなモンだな
0943名無しさん@お腹いっぱい。01/09/11 23:48ID:???
>>942
意味がよく分からんけど、俺も興奮してるから激しく同意!!
0944名無しさん@お腹いっぱい。01/09/12 02:09ID:???
そろそろ新スレッドの時期。
950を踏んだやつが新スレを立てる、ってことでいいっすか?
0945名無しさん@お腹いっぱい。01/09/12 02:18ID:???
>944
初心者が書き込みしづらい状況になりうると思うから反対。
もしくは何も知らない初心者が踏んでも困るだろ。
逆に950を踏みたくないが為に初心者に対するレスが出なくなるのも困る。
これ以降の人で誰か有志が立ててくれ。
レス数が900を超えています。1000を超えると表示できなくなるよ。