【Perl】初心者コーナー Part13
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
02/05/30 13:06ID:R2kt1mTx1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【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あたりを見よう。
HTTPを使う限り、それを消す方法は無いよ。
単に無視するだけなら可能だけどね。
その場合は最初の空行までを読み飛ばせば良い。
>>892
パーミッションがあれば、相対でも絶対でもいけると思うけど。
0894nobodyさん
02/07/16 08:49ID:???0895852
02/07/16 09:20ID:mWVjtM4S送信ボタンに、onMouseUPで新規ウィンドウを開き、そこにデータを受け取った後の結果を表示させるようにCGIにリンクさせてるんですが、
そのjavascriptをいれてると、データが送信されてないみたいです。
試しに投票フォームと同じウィンドウ上で結果を表示させると、うまくいきました。
submitボタンにビヘイビアを仕込むとダメなんでしょうか?
0896ぽよぽようんこ(本物)
02/07/16 13:47ID:???0897chmod
02/07/16 14:34ID:2idpGCxqでファイルがブラウザから見られるのに
$de="0755";
chmod $de, $filename;
でにするとファイルが見られなくなります。
chmod($de, $filename);
もダメです。
どなたか変数で指定する方法を教えて下さい。
0898chmod
02/07/16 14:36ID:2idpGCxqあれ文字化け?してるけど、
コロンでなくカンマです。
0899ぽよぽようんこ(本物)
02/07/16 14:43ID:???0900chmod
02/07/16 14:46ID:2idpGCxqchmod($de,$filename);と755を751にしたらでできました。
しかしFTPプログラムでこのファイルを見るとなぜか
-wxr-xrwxになっています。どうしてでしょう。
0902nobodyさん
02/07/16 15:11ID:???0903nobodyさん
02/07/16 15:12ID:???0904nobodyさん
02/07/16 15:37ID:2idpGCxqumask(0)です。
$de=0755;とかにするとその時点で正しく数字が入りません。
やはり変数を使って設定をするとパーミッションがぼろぼろになります。
Perlの仕様ということで考えます。
0905nobodyさん
02/07/16 15:46ID:???$de_octet = oct($de);
perldoc dhmod
0906885
02/07/16 15:52ID:???ありがとうございました。
srand(time() ^ ($$ + ($$<<15)));
0908nobodyさん
02/07/16 16:07ID:???0909852
02/07/16 16:53ID:???0910nobodyさん
02/07/16 18:06ID:AR5JuM+5今までの出会い系サイトとは一味もニ味も違うサイトです。バーチャルタウンを実際に体験できます!!!
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
0911nobodyさん
02/07/16 18:13ID:XozL7fM5■■■バカ名言■■■
バカって言うだけの奴ほど役に立たないものはない。
助けるか、無視するかをしなさい。
バカというだけというのは、助けもせず、無視もせず、
レスを余計に増やし、雰囲気を悪くする。
そういうのに限って突っ込まれれば適当にごまかしたり、逃げていく。
■■■どうせ六でもない奴だろうが■■■
0912nobodyさん
02/07/16 21:41ID:???陸でもない/碌でもない
バカって言っていいですよね?
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
バカハケ━━━━━(゚∀゚≡゚∀゚)━━━━━━ソ!!!!
0913nobodyさん
02/07/16 23:36ID:???0916nobodyさん
02/07/17 06:20ID:???0917nobodyさん
02/07/17 07:08ID:???$x = qq{<a href="http://www.yahoo.co.jp/">Yahoo! Japan</a>};
$x =~ s/<.+>//g;
のようにすると、最初の < と最後の > で全部消えてしまいそうな気がします。
最短マッチとかを使えばいいんでしょうか、使い方がわからないので教えてください。
(Perlメモを読んだところEUCしかできない方法らしいので
SJISでもやりたいので質問です)
0918nobodyさん
02/07/17 07:41ID:???0919nobodyさん
02/07/17 07:52ID:SEvMu7le$x =~ s/<[^>]*>//g;
>>918
年月日時秒を分解して
(年は-1900してから)全て秒に直して足せば良いんじゃないの?
0920nobodyさん
02/07/17 07:53ID:???timelocal();
0921nobodyさん
02/07/17 07:53ID:???0922919
02/07/17 08:08ID:???0924nobodyさん
02/07/17 12:49ID:???ってやるとunix/perlでは成功するんですが
ActivePerlじゃ成功しないんです。
rename("onefile","pict\$hensuu");
うえのようにしてもだめでした。たすけてちょんまげ
…普通に成功してるけど?
というか、失敗したら$!を見る癖をつけよう。
rename(...) or die $!;
0926nobodyさん
02/07/17 14:25ID:tZJ3+xnSエスケープしなきゃ駄目だよ
pict\$hensuu
↓
pict\\$hensuu
0927nobodyさん
02/07/17 14:52ID:tZJ3+xnSでも動く所がActiveperlさんの偉い所だったり
MACだとこうは行かないそうで
0928nobodyさん
02/07/17 16:15ID:???MACのPerlってどんなんなんですか?
OSXで動くならまぁわかるんですが。
PerlでIriaみたいなの作ったら需要ありますかね?
Macでダウソマネージャーってありましたっけ?
0929nobodyさん
02/07/17 16:28ID:???WWWcp
両方で検索してみれ。ただWWWcp最後にいつ使ったか
忘れたけど俺が使ったバージョンではマルチホーミングに
対応してなかった気がする。
つーか需要も何も難しくないからめずらしくも無い。
0930924
02/07/17 17:45ID:???perl -e 'print $^O;'とかできないんですけど、、
ほかにもいろいろ違うのかな?
0931nobodyさん
02/07/17 17:48ID:???MSWin32
C:\>
ちゃんとなるよ。
0932nobodyさん
02/07/17 17:49ID:???linuxの使い方は必須で覚えないとダメですか?
0933nobodyさん
02/07/17 17:50ID:???0935nobodyさん
02/07/17 18:02ID:0WM/CdU+Perlでこれは可能ですか?
あるソースの保守をやっているんですが、ファイル名をパスの階層ごとに変数にしてて
もうわけがわかりません。変数展開したソースがホスィのです。
こんな感じ
open ("< /foo/bar/giko");
を、わざわざ
$FOO_dir = '/foo';
$BAR_dir = "$FOO_dir/bar";
$GIKO_file = "$BAR_dir/giko";
open ("< $GIKO_file");
としている。こんなのが何十個もある。
残念だけど、プリプロセッサは無いよ。
その目的なら、デバッガが適当かなぁ。
perldoc perldebug
日本語ドキュメントなら、不完全だけど河馬屋のがあるよ。
http://member.nifty.ne.jp/hippo2000/perltips/perldbg.htm
0937nobodyさん
02/07/17 23:14ID:0q/AG7/8超初心者的質問ですが、探しても答えが見つからなかったので質問させてください。
flockでロックしたファイルは、他のcgiからの書き込みに対しても有効ですか?
あるCGIスクリプトでflock中のファイルについて、他のCGIスクリプトからの書き込みも防ぐことができるのでしょうか。
flockは、ファイルハンドルを指定して行うので、1つのCGIスクリプトでしか効果がないのかも知れないと心配になりました。
申し訳ありませんが、どなたかご存じの方、ご回答いただければ幸いです。
0938コギャル&中高生
02/07/17 23:23ID:q1y9WZogお役立ちリンク集
必ず役立ちます
コギャルとH出来るサイトはここ
ヌキヌキ部屋へ直行便
↓
http://kado7.ug.to/wowo/
http://kado7.ug.to/wowo/-a.htm
0939nobodyさん
02/07/17 23:37ID:/oUfi8FN今までの出会い系サイトとは一味もニ味も違うサイトです。バーチャルタウンを実際に体験できます!!!
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
一つのスクリプトでしか効果ないとしたら、
全く同じ二つのスクリプトがあったらどうなると思う?
1バイトだけ違って他は同じスクリプトがあるとしたら?
そんなんじゃ困るでしょ。
当然だけど、他のあらゆるスクリプト、プロセスに対して有効だよ。
ただし、flockの仕様上「書き込みを防ぐ」ことは出来ないから注意してね。
0941nobodyさん
02/07/17 23:47ID:???全部のスクリプトが正しくflockしてれば排他処理はうまくいく。
flockは紳士協定だから、flockせずにいきなり書き込むような無法者がいると破綻する。
そのファイルにアクセスするのが自作CGIのみなら大丈夫だろ。
0942937
02/07/17 23:48ID:NR9AAdwqまた、flockは書き込みを防ぐのではなく、オープンを防ぐのですよね。
こちらもご指摘ありがとうございました。
0943937
02/07/17 23:51ID:NR9AAdwq>>942さんもありがとうございました。
自作スクリプトだけなので、大丈夫そうです。
安心しました。
本当にありがとうございました。
・・・あ、もちろん、ファイルハンドルは毎回違っても大丈夫ですよね?
>>940さんがあらゆるプロセスに対して有効って言ってくださっているので、
そういうことですよね。
では、頑張ってつくります!
ありがとうございました!!
0944937
02/07/17 23:52ID:NR9AAdwq>>941さんでした。
本当にありがとうございました。
0946nobodyさん
02/07/18 00:21ID:???flockの仕組みってのは信号機みたいなもんなんだよ。
"赤だったらちょいと立ち止まってくれ"という合図に過ぎない。
だから、無視しようと思えば無視できるんだよ。
無論、そんなことをしていればいつか事故が起こるのは必至だけど。
…てな説明を何処かで読んだよ。
0949nobodyさん
02/07/18 03:09ID:ES5M+zj/0950nobodyさん
02/07/18 03:19ID:???これ完璧だと思うけど、違うの?
open(OUT, "+< outfile.txt");
flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT "........";
close(OUT);
0951nobodyさん
02/07/18 03:24ID:???それのどこが完璧なのか聞きたい。
tu-ka,ファイルロックスレに逝って叩かれてこい。
別に問題ないのでは?
>openとlockの間に他プロセスからのopenが来たらどうするつもりなんだろう・・・。
とのことだけど、ファイルを破壊しているわけじゃないので無問題でしょ。
「他プロセスからのopen」がファイルを破壊したりflockを伴わなかったりしたら
そりゃ問題だけど、そんな赤信号を無視して突っ込んでくるヤツを止めることは出来ないし。
0954バカです
02/07/18 11:38ID:w/uBOa7pmySQLとPerl使っているのですが,ハッシュのことがよく分かりません。
while(@res = $st->fetchrow_array) {
$data{$res[0]}=1;
}
こうすると、ハッシュdataに何も入って無いのですが、↓の様にすると
ちゃんと、ハッシュに格納されます。何故ですか?
$i=0;
while(@res = $st->fetchrow_array) {
$data[$i]=$res[0];
$i++;
}
foreach(@data){$data{$_}=1}
0955nobodyさん
02/07/18 13:17ID:pqv4qZv6sub A{
$a = "aaa";
&B;
}
sub B{
print $a;
}
&A;
サブルーチンAの中にサブルーチンBがある時、
Bの始めに引数の取得をしなくてもBの中で$aって使えるんでしょうか。
というか、今やったら出来たんですけど、どうしですか?
引数は必ず受け取らないとダメなんですよね?
0956nobodyさん
02/07/18 13:19ID:pqv4qZv6>Bの始めに引数の取得をしなくてもBの中で$aって使えるんでしょうか。
Bの呼び出しの時に引数を与えなくてもBの中で$aって使えるんでしょうか。
0957nobodyさん
02/07/18 13:20ID:???だって、$aはmyなりlocalなりしてないのでスコープがグローバル。
もっともやってはいけないコーディング法の一つです。
0958nobodyさん
02/07/18 13:21ID:???Perlはデフォでグローバル変数扱いになるから使える。
0959nobodyさん
02/07/18 13:25ID:pqv4qZv6sub A{
&B;
}
sub B{
@array = @_;
print $array[0];
}
$a = "aaa";
&A($a);
この時、Aで引数を取得しないで飛ばしてBで取得しちゃってもいいんでしょうか。
0960nobodyさん
02/07/18 13:26ID:???0961ぽよぽようんこ(本物)
02/07/18 13:27ID:???おいっ! my と local の違いを勉強せいっ!
この場合、local でも使えるだろ!
0962nobodyさん
02/07/18 13:37ID:Rz8eDFr/グローバルな特殊変数。
0964nobodyさん
02/07/18 13:42ID:pqv4qZv6グローバル変数は引数を与えたり取得なんかしなくても
どこでも関係なく使えるってことだ!!
0965nobodyさん
02/07/18 13:42ID:???ネタ?
グローバルが最悪というが、状況次第だろ
それにこれはローカルが要求される程
莫大な規模ではないし
>>960
ダネ
Bが@_ではなく、$aで取得すれば問題ない
0967nobodyさん
02/07/18 13:43ID:???>グローバルが最悪というが、状況次第だろ
こんな小規模なプログラムかつ引数で渡せるものをわざわざグローバルにすべきではない。
0968nobodyさん
02/07/18 13:44ID:???0969nobodyさん
02/07/18 13:45ID:gTYoTB/Pどこでも使える=グローバル
局所でしか使えない=ローカル
0972nobodyさん
02/07/18 13:46ID:gTYoTB/Plocalだとそこから呼んだサブルーチンでも有効。
>>955だとlocalにしても使えるがmyだと引き渡されない。
0973nobodyさん
02/07/18 13:49ID:???0975nobodyさん
02/07/18 13:49ID:???じゃあさ、
sub a
{
local($x);
&c();
}
sub b
{
&c();
}
sub c
{
print $x
}
ってした場合はどうなるの?
0976nobodyさん
02/07/18 13:52ID:pqv4qZv60977nobodyさん
02/07/18 13:53ID:???どこかで読んだ場合よ。
localが呼び出しサブルーチンでも有効なら
場合によっては動かない組み合わせが出てくるだろうという話。
0978nobodyさん
02/07/18 13:58ID:So56onukだから一般的にはmyを使って、サブルーチンは引数使って呼ぶのがお勧めです。
0979nobodyさん
02/07/18 14:17ID:???$a = "aaa";
&a($a);
sub a{
&b;
}
sub b{
print $a;
}
これで、bの中の$aがちゃんと表示されちゃうんだけどなぜ。
0980nobodyさん
02/07/18 14:30ID:???つーかaはやめれ
0981nobodyさん
02/07/18 14:40ID:???ネタでやっているなら、ごめんね
あまりにも、ウザイので↓みて、調べてね♀
ttp://www5a.biglobe.ne.jp/~n_rieko/perl/9.htm
0984nobodyさん
02/07/18 15:14ID:???必ず使う変数を渡すして受け取って使うものだと思っていたのに
そんなことしなくても使えることがわかったので混乱しています。
で、myを使えば他のサブルーチンでは使えないはずなのに
使えるからさらに混乱しています。
0985nobodyさん
02/07/18 15:23ID:???0986nobodyさん
02/07/18 15:48ID:???ラクダ本p217より
このようなプライベート変数のスコープ内から呼び出されるサブルーチンからは
テキスト上で、サブルーチンがその変数のスコープ内で定義されている場合を除き
プライベート変数を見ることができない。
サブルーチンaおよびbがmy $aのスコープ内で定義されていますので、
表示されます。要するに仕様です。
>980
myで修飾された変数はパッケージ変数とは関係ありません。嘘は駄目です。
0988nobodyさん
02/07/18 16:05ID:???- use strict を使わないで使用した(宣言しなくても使用するだけでいい)Perlの変数は全て現在のパッケージのパッケージ変数になる。
- パッケージ変数は同パッケージ内ならどこからでも呼び出せる
以上を踏まえた上で元のコード(にちょっと手を加えたやつ)を
説明すると:
sub OUTER {
## この時点で$VARIABLEはパッケージ変数として宣言される
$VARIABLE = "aaa";
INNER();
}
sub INNER {
## OUTER()と同一パッケージ内なのでこの$VARIABLEもOUTER()で
## 宣言された$VARIABLEと同じ物を指す。よって"aaa"とプリントされる。
print $VARIABLE;
}
OUTER()
===
でも以上は悪いコードの見本みたいなもん。ちゃんとuse strictとmyを
使えば混乱しない:
use strict;
our $PACKAGE_VARIABLE = "foo";
sub INNER
{
my $inner_lexical_variable = shift;
print "PACKAGE_VARIABLE => $PACKAGE_VARIABLE\n";
print "LEXICAL_VARIABLE => $inner_lexical_variable\n";
}
sub OUTER
{
my $outer_lexical_variable = shift;
INNER( $outer_lexical_variable );
}
OUTER( "aaa" );
0989nobodyさん
02/07/18 16:06ID:???これは&SUBROUTINE;という表記がちょっと特殊だから起こる。
サブルーチン内で&SUBROUTINE;という表記でさらにサブルーチンを呼ぶと、
現在の@_の値をそのままそっくりSUBROUTINE()に渡す。
sub OUTER{ &INNER }
は
sub OUTER{ INNER(@_) }
と同じ事になるわけ。だから外側で呼んだサブルーチンの引数がそのまま
内側のサブルーチンで使えるわけ。これも特殊な状況でない限り使用は
お勧めしない。
0990nobodyさん
02/07/18 16:07ID:???これは実際に代入をしてみると差がでてわかる。
use strict;
my $GLOBAL = "ORIGINAL";
sub print_global
{
print "\$GLOBAL is $GLOBAL\n";
}
sub WITH_LOCAL
{
print "OUTSIDE of BLOCK\n";
print_global();
{
local $GLOBAL = "NEW VALUE";
print "local()ized \$GLOBAL\n";
print_global();
}
print "OUTSIDE of BLOCK (again)\n";
print_global();
}
【Perl】初心者コーナー Part14
http://pc.2ch.net/test/read.cgi/php/1026977659/
レス数が950を超えています。1000を超えると書き込みができなくなります。