【Perl】初心者コーナー Part19
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/02/09 00:24ID:s0tpWWxg1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 9
http://pc.2ch.net/test/read.cgi/php/1041530204/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
あとは>>2-10。
0514502
03/03/02 17:57ID:???おかげでできそうです
初めてなんですけどここの板の人って親切ですね
また何か困ったことがあったらよろしくお願いします。
0515nobodyさん
03/03/02 18:29ID:???0518nobodyさん
03/03/03 00:20ID:???$b="b";
@a[0]="a";
printf("[%s]",$b);
### [a]と表示
0520nobodyさん
03/03/03 00:58ID:???@a[0]と$bを同じ変数として扱う方法はありますか?
という質問です。
@a[0]="a";によって$b="b";が上書きされるという事を表現したかったんです。
説明不足で申し訳ありません。
0522nobodyさん
03/03/03 01:04ID:pK+Ijnrw0524nobodyさん
03/03/03 01:30ID:???local *b; # 動的スコープに注意
*b = \$a[0];
$b = 'b';
$a[0] = 'a';
print "[$b]";
0525nobodyさん
03/03/03 01:34ID:???0527nobodyさん
03/03/03 01:36ID:???local *b; # 動的スコープに注意
*b = \$a[0];
$b = 'b';
$a[0] = 'a';
print "[$b]";
my @a;
local *b; # 動的スコープに注意
*b = \$a[0];
$b = 'b';
$a[0] = 'a';
print "[$b]";
my @a;
local *b; # 動的スコープに注意
*b = \$a[0];
$b = 'b';
$a[0] = 'a';
print "[$b]";
my @a;
local *b; # 動的スコープに注意
0530nobodyさん
03/03/03 03:24ID:MIMHRhQC記事削除のやり方がワカランチンです。
投稿に記事ナンバーをつけ、削除のフォームに記事ナンバーを入力して
削除って形をやりたいんですが・・・
よかったら上記の簡単なコードの流れを教えて下さい。お願いします。
0532nobodyさん
03/03/03 04:11ID:???管理人削除とか既にできてるならそれの応用で。
0533nobodyさん
03/03/03 04:18ID:???∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´Д`)// < 先生!こんなのを発見シマスタ!
/ / |
/ /| / \ http://saitama.gasuki.com/hiroyuki/
__| | .| | \
\  ̄ ̄ ̄ ̄ ̄ ̄ ̄\ \_____________
||\ \
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
.|| ||
0534nobodyさん
03/03/03 14:30ID:yTVIkXIk使いたい場合、(例1)引数としてハッシュ丸ごと渡してサブルーチンで
取り出すのと、(例2)呼び出し前に取り出して一つだけを引数として
渡すのでは、呼び出し以降の効率の違いはあるのでしょうか?
例1
&shori (%DATA);
sub shori {
my %DATA = @_;
$DATA{'name'} を処理
}
例2
$name = $DATA{'name'}; ← これは既に得られているものとする
&shori ($name);
sub shori {
my $name = @_;
$name を処理
}
0535nobodyさん
03/03/03 16:30ID:???引数にハッシュを指定すると、ハッシュの各要素がすべて展開されて渡されるから
効率は悪いかもしれない。特にサブルーチン側で別のハッシュにコピーするのは
ちょっと良くないんじゃないかな。
&shori(%DATA) → &shori('key1','value1','key2','value2', ... )
使う値が1つだけであれば、例2のように1つだけ渡すのがいいと思う。
またはリファレンスを使うとか。
&shori(\%DATA);
sub shori {
my $hashref = shift;
# $hashref->{name} または $$hashref{name} のように参照する
}
0537nobodyさん
03/03/03 20:33ID:F3LmFaEYhtmlからcgiを呼び出すときに、IMGタグを使って呼び出すには
どうすればいいのでしょうか?
イメージタグを出力するだけでは駄目なんですね。
ご存知の方いらっしゃいましたら、お願いします。
0538nobodyさん
03/03/03 20:35ID:???0539nobodyさん
03/03/04 00:02ID:???フリーのアクセスカウンター使ってろ。
それの仕組みが理解できるようになってから自作とかほざけ。
それに、ここはPerlのスレであってCGIのスレじゃねえ。
0540nobodyさん
03/03/04 00:43ID:???>それに、ここはPerlのスレであってCGIのスレじゃねえ。
はプログラム板のこっちだと思われ。
Perlについての質問箱 3箱目
http://pc2.2ch.net/test/read.cgi/tech/1041205885/l50
晒しageとくな。
0541nobodyさん
03/03/04 02:26ID:???0542nobodyさん
03/03/04 09:56ID:???ええと、時間なのですが、昨日の時間などとか、イロイロ出したいのですが一番手っ取り早い方法はなんでしょう。
今考えた方法は、現在時刻
2003/03/04/01:01.00
(年/月/日/時:分.秒)
から引いたり足したり、繰り上げたりするのを考えたんですが、非常に効率悪くて作りにくいです。
特に、繰り上がったり繰り下がったりするのが大変です。
しかもうるう年とかよく分からないし。汗
超初心者な事やってますか?俺
どうやれば手っ取り早く出来るのでしょうか?
0543nobodyさん
03/03/04 10:27ID:???で増減分を$hogeにつっこむ。
0544542
03/03/04 10:47ID:???ありがとうございます。
あまりに俺が房だったようですね…。
単位は秒ですよね?秒でやってみます。
m(_ _)m
0545nobodyさん
03/03/04 16:01ID:gscrXgmOmkdir('./testing',705);
open (NTT,'./vcount/vcount.cgi')|| die "ファイルを開けません :$!\n";
@nt = <NTT>;
close (NTT);
open (VVT,'./testing/vcount.cgi');
print VVT "@nt";
close (VVT);
exit();
"./vcount/vcount.cgi"の内容を"tester"ディレクトリの作りその下に"vcount.cgi"で作りたいのですが
上の記述ではフォルダが作られても中にファイルが生成されません。
どうしてでしょうか。要はあるディレクトリ内のファイルを全て別のディレクトリに自動コピーさせたくて
とりあえず1ファイルに絞って書いてみました。どうすれば内容を自動コピーできるんでしょう。
環境はWin98とActive Perl、An HttpdをオンラインでダイナミックDNS経由で自分のPCのC
GIを実行しています。
0546nobodyさん
03/03/04 16:06ID:???open (VVT,'>./testing/vcount.cgi');
それから print VVT "@nt"; だと期待と違った結果になるので注意。
print VVT @nt; のように汁。
0547534
03/03/04 16:19ID:???0548nobadyさん
03/03/04 16:44ID:???チェックが入ったままにするにはどうしたらよいでしょうか?
個人データを扱う物で、複数回内容を書き換える事を前提にしています。
ご存知の方いらっしゃいましたら宜しくお願いします。
0549nobodyさん
03/03/04 16:49ID:gscrXgmOありがとうございます!!きっちり生成されました!!
助かりました!
0553552
03/03/04 18:20ID:???で、checked属性にブール値を設定する
0555nobodyさん
03/03/04 20:24ID:???をPerlで読み込む場合はopen関数ではないんでしょうか?
ペーペーにはまだまだ手の出ないコードでしょうか?
同ディレクトリとかつながっているディレクトリのデータを読み込む事を
やっていて、ふと思ったので。
0556T女の竹田
03/03/04 20:27ID:???もうその質問何十回目だろう(笑
FAQでも作るべきかな?
LWP::Simpleってので調べてみるといいよ。
WinのActivePerlなら最初から入ってるはず。
0557nobodyさん
03/03/04 20:37ID:???例えば、<em>mona>/strong>や
終了タグの閉じ忘れでエラーがでる
のですが、具体的にどうすればよいのかさっぱりです。
何がいい方法があれば教えて頂けないでしょうか。
0558nobodyさん
03/03/04 20:40ID:???validatorにかけてみる。
http://validator.w3.org/
0559557
03/03/04 20:44ID:???>>558
例えば掲示板の投稿時なんかに最低限のチェックをしたいだけなのでvalidatorはちょっとです。
0561577
03/03/04 20:58ID:???>>560さん
タグは属性をもつものや空要素も含めて全て許可しています。
最低限属性を持たないタグの整合性だけでもチェックしたいのですが。
0565validator厨
03/03/04 22:15ID:???0566nobodyさん
03/03/04 22:35ID:???0567T女の竹田
03/03/04 22:50ID:???タグの中で'<'や'>'が書けないのは仕様です。
my $temp = $to_check;
$temp =~ s|<!--.+?(-->)||sg;
$temp =~ s{<(script|style).*?(</\1>)}{}sgi;
$temp =~ s{</?(br|p|li|hr|meta|input|img|base)[^>]*>}{}sgi; # 閉じないことを許可するタグ
while ($temp =~ s|<(\w+)[^>]*>[^<>]*(</\1>)||si){}
error() if $temp =~ /[<>]/s;
>>566 気づかなかった。
0568561
03/03/04 22:53ID:???取りあえずこんなの書いてみますたが
$data = "<a><b>a</b></a><c /><d></f>";
my(@stack) = ();
while($data =~ /<\/?(\w+)\s*.*?>/){
if($data =~ /<(\w+)>/){
push(@stack,$1);
}elsif($data =~ /<(\w+)\s*\.*?\/>/){
;
}elsif($data =~ /<\/(\w+)>/){
$tmp = pop(@stack);
if($1 ne $tmp){die "不整合";}
}
$data =~ s/<\/?(\w+)\s*.*?>//;
}
print "end\n";
なんかスマートじゃないですね。というかそれ以前に正規表現が怪しい。
属性がつくともうだめぽ
>>565
きっと誰も従いませんよ(w
0570T女の竹田
03/03/04 23:03ID:???どっちにしても役に立たなさそうだけど。
$temp =~ s|<!--.+?(-->)||sg;
$temp =~ s{<(script|style|pre|textarea)(\s[^>]*)?>.*?(</\1>)}{}sgi;
$temp =~ s{</?(br|p|li|hr|meta|input|img|base)(\s[^>]*)?>}{}sgi; # 閉じないことを許可するタグ
while ($temp =~ s|<(\w+)(\s[^>]*)?>[^<>]*(</\1>)||si){}
0571nobodyさん
03/03/04 23:22ID:TX/Dujet$str2="2003年03月04日" を生成したいのですが
どうすればよいですか?
0573561
03/03/04 23:24ID:???正規表現雑技の方は$(の辺りが今一解読できてませんが。
>>570さん
役に立たないなんてそんな。
\数字は目からウロコでした。さっき書いたコードが恥ずかしいです。
当面の間このコードを借用させて頂きます。ありがとうございました。
0575nobodyさん
03/03/05 01:23ID:???それは $str1 の内容も書き換えるので
($str2 = $str1) =~ s/(\d{4})(\d{2})(\d{2})/$1年$2月$3日/;
0576nobodyさん
03/03/05 23:48ID:LLn1UqDhぜんぜん勉強法が見えてきません。“ Perl で”っていう時点で、もう駄目なのかなあ・・・やっぱ PHP なんですかね?
もし宜しければ、オススメのサイトや参考書を教えて頂きたいのですが。
0578nobodyさん
03/03/06 00:04ID:/oqmBN820579nobodyさん
03/03/06 00:09ID:???newでの変数初期化がされない現象が起こるのですが、これはperlの仕様ですか?
↓-------------------- a.pl
package a;
sub new{
my $this=shift;
my $a=0;
my $obj{'obj'=>$a};
bless $obj,$this;
return $obj;}1;
↓--------------------- b.pl
package b;
require('./a.pl');
sub new{
my $this=shift;
my $b=0;
my $obj{'obj'=>$b};
bless $obj,$this;
return $obj;}
sub test{
my $a = new a;
print "a=$$a{'obj'}";}1;
↓--------------------- main.cgi
require('./b.pl');
sub test
{my $b = new b;
$b->test();}
-------------------------------------
結果:a=
(何も表示されない)
0580nobodyさん
03/03/06 00:13ID:???まずは道具をインストールする。
で、SQLを適当に理解する。
あとは、
connect prepare execute fetch finish disconnect
0581nobodyさん
03/03/06 00:13ID:???0583nobodyさん
03/03/06 00:18ID:???前置(?)のnewは、コンパイルするときに、それが関数か、
メソッドかを決定しないといけない。
で、newっていうサブルーチンがある(ように見える)から、関数になった。と。
a->new()でどうだ。
0584579
03/03/06 00:22ID:???あい、それは承知してます。
newでオブジェクトのメンバを初期化したいという意味でした。
>>579の場合だと、a.plで
$a=0;
・・・
$obj={'obj'=>$a};
としているのに、bから作成したときは$a->{'obj'}に0が入っていないのです。
(0以外でも同様。main.cgiから直接作成した場合は初期化される)
これがバグなのか、仕様なのかどこにも説明してないので設計に困ってます。
0586nobodyさん
03/03/06 00:26ID:???http://www.geocities.co.jp/SiliconValley/5634/t82E2_0001.html#1941
http://www.geocities.co.jp/SiliconValley/5634/t82A2_0003.html#2203
0587nobodyさん
03/03/06 00:28ID:???0589nobodyさん
03/03/06 01:02ID:???0590nobodyさん
03/03/06 11:24ID:rJoYB8KP0592nobodyさん
03/03/06 12:35ID:nlUIeg7X日本語を交えて変数を作りたいのですが、
「全部」ハッシュにしたらアホでしょうか?
$file{'ログファイル'}
$file{'登録ファイル'}
やっぱ重くなりますか?
アホ丸出しのような気がしますが、この方が作りやすいんです。
0595nobodyさん
03/03/06 13:28ID:???0597nobodyさん
03/03/06 15:09ID:???そでつ
0598nobodyさん
03/03/06 16:25ID:???Unicodeでなんとかならんか?
0599nobodyさん
03/03/06 16:42ID:???別にいいんじゃない?
ハッシュの構造上、考えてるほど重くはならないよ。
ただ、他人がそのソースを見たら( ´,_ゝ`)プッ とは思うかも。
0600nobodyさん
03/03/06 18:20ID:mX/0qgeVそんなあなたにPerlのオブジェクト指向文法!
$this->{field} = 'test';
$this->{公安二課課長補佐} = undef;
主な利点:日本語がちょっとだけ目立たない。
0601nobodyさん
03/03/06 18:25ID:???> use encoding "euc-jp"; # スクリプトと同じ文字コードを指定
> use utf8;
> my $人 = 1;
> $人++; # 私たちは繁殖している!
0602601
03/03/06 18:26ID:???0604nobodyさん
03/03/06 20:58ID:+0RpBVtXppm> install win32-api
Error: no suitable installation target found for package win32-api.
と表示されインストールできませんでした。
ppm>sarch win32-api
ppm> search win32-api
Searching in Active Repositories
1. Win32-API-OutputDebugString [0.03] OutputDebugString Win32 API support
ppm> install 1
Package 1:
Error: no suitable installation target found for package
Win32-API-OutputDebugString.
サーチをかけてインストールしてもパッケージがないと言われます。
また、
no suitable installation target found for package
の一文で検索をかけても英語圏HPしかでてこず、多分どこかにパッケージを
ぶち込んだらOKだと言う解釈なのですがどうにもヘタレ読解力ではキビシイです。
アドバイスお願いできないでしょうか?
0606nobodyさん
03/03/06 21:13ID:+0RpBVtX0607nobodyさん
03/03/06 21:46ID:+0RpBVtX環境はXPproでc¥perlにperlをインストールしています。
0608nobodyさん
03/03/06 22:41ID:???川o・-・)ノ <先生!こんなのがありました!
__/ / /
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/shinagawa/
0609592
03/03/07 12:00ID:???分かりました。ありがとうございます。
別に
アホ丸出しだろうが
( ´,_ゝ`)プッと思われても構わないので
今後は全部ハッシュで作ろうと思います。
0610nobodyさん
03/03/07 16:16ID:o/kX6MY9逆の「特定のホストからのアクセスをはじく」アクセス制限のCGIしか見つけられず
そこで、これを改造したら使えないかなあと考えました。
が、どこをどういじって良いのか見当がつきません。どなたかお知恵を貸してください・・。
@deny = ("*.co.jp","*.hoge.net");
sub get_host {
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
# gethostbyaddr関数を使用する場合は1
$gethostbyaddr = 1;
if ($gethostbyaddr) {
if ($host eq "" || $host eq "$addr") {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
}
if ($host eq "") { $host = $addr; }
}
sub axs {
# ホスト名を取得
&get_host;
if ($deny[0]) {
local($flag)=0;
foreach (@deny) {
if ($_ eq '') { last; }
$_ =~ s/\*/\.\*/g;
if ($host =~ /$_/) { $flag=1; last; }
}
if ($flag) { &error("許可されていないアクセスです") }
}
}
0612610
03/03/07 16:20ID:o/kX6MY9sub axs {
&get_host;
if ($_ ne "@deny"){ &error("許可されていないアクセスです")}
}
0613610
03/03/07 16:21ID:o/kX6MY9■ このスレッドは過去ログ倉庫に格納されています