【Perl】初心者コーナー Part15
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
02/08/08 23:19ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【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あたりを見よう。
0856nobodyさん
02/09/12 18:22ID:V0oL4dfDsub Filerock {
my $now = time();
my $lockfile = "lock";
my $locking = "lock.now";
for($_=5; $_>=0; $_--){
if(rename($lockfile, $locking)){
utime($now, $now, $locking);
$SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "intProc"; # 割り込みで中断するときの処理を定義
&Dbmopen;
return;
}
sleep 1 if $_;
}
&Header("フォームエラー");
print "<h2>ロックちう</h2>\n<hr>\n";
&Footer;
exit;
}
こんなんで良いんでしょうか。
もっと効率の良いコードがあればアドヴァイス願います。
0857nobodyさん
02/09/12 18:25ID:???0858nobodyさん
02/09/12 18:31ID:NNUPZyEk0861初心者厨房
02/09/12 19:24ID:jvK2X5HWどうしてなんでしょうか。教えてください。お願いします。
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print 10+5 # 足し算
print " / "; # 区切り
print 10-5; # 引き算
print " / "; # 区切り
print 10*5; # 掛け算
print " / "; # 区切り
print 10/5; # 割り算
print " / "; # 区切り
print 10%5; # 剰余算
_END_
0862nobodyさん
02/09/12 19:26ID:???0863nobodyさん
02/09/12 19:27ID:???↓
print 10+5; # 足し算
エラーメッセージぐらい読め
0869nobodyさん
02/09/12 19:39ID:???0870初心者厨房
02/09/12 19:54ID:ODncwTzE0871nobodyさん
02/09/12 20:01ID:???もう(#・∀・)カエレ!
http://pc.2ch.net/test/read.cgi/php/1028646335/
↑みてこい
#!/usr/local/bin/perl -w
か
perl -wc hoge.pl
print 10/5;
print " / ";
↑きもい書き方やめれ
$f=10/5;print "$f /";
0872名無しさん@Meadow
02/09/12 20:07ID:???荒らしさん、こんにちは
あなたの存在がエラーです
0873初心者厨房
02/09/12 20:08ID:ODncwTzE0875nobodyさん
02/09/12 20:15ID:???これはいろんなとこにコピペしてください。
みんなで台風を起こしましょう。
東京駅を中心に右回りです。
9月22日夜9時にみんなでいっせいに「フゥー」と吹くのです。
注意
周りに障害物のないところでやりましょう(なるべく高いところ)
「フゥー」以外に扇風機やうちわを使ってもかまいません。
!東京を壊しましょう!
0876初心者厨房
02/09/12 20:15ID:ODncwTzE0877nobodyさん
02/09/12 21:03ID:???print "Content-type: text/html\n\n;
$atai='値';
print '「$atai」(シングルクォート文字列では展開されない)/';
print "「$atai」(ダブルクォート文字列では展開される)";
_END_
何がまちがってんの?
0878nobodyさん
02/09/12 21:11ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0882nobodyさん
02/09/12 21:54ID:???上級者ぶってツッコミ入れてるのも知ったかぶりだからとんちんかんだし
とりあえず初心者嘲笑いたいなら的確に回答してやってからにするのが筋ってもんじゃないの
0883nobodyさん
02/09/12 22:47ID:???0884nobodyさん
02/09/12 23:03ID:???0885nobodyさん
02/09/12 23:03ID:???そいつ自身答えられないパターン多すぎなのも見ててうざ
0886nobodyさん
02/09/12 23:28ID:???0888nobodyさん
02/09/12 23:39ID:???いや今まで無視してたよ リアクションしてあげないのが一番だから。
ここに来て立て続けで軽く荒れてきたから
ちょうどいいかと思ってつっこんでみただけ。
0889nobodyさん
02/09/12 23:54ID:???0890888
02/09/13 00:03ID:???−−−−−−−−−−−−−−−−−−−−−−−−−−−
以下、普通のスレに戻って下さいませ。
0891nobodyさん
02/09/13 00:08ID:???0892nobodyさん
02/09/13 00:16ID:???これ以上乱れないように882で釘さした形だと思うが。887とかが俺を煽ってきただけだし
申し訳ないがもうレスらないんでよろ
0893nobodyさん
02/09/13 00:16ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
~~~~~~~~~~~~~~~~~~~~~~~~~~
0894nobodyさん
02/09/13 03:15ID:R5wD3hCHスクリプトを書こうと思ってます。
mbxは複数のメールが1つのファイルになっていて
ピリオドだけが書かれた行がメールの区切りになっ
てます。そのmbxファイルを1つ1つのメールに
ばらして連番で出力したいのです。
#書いたプログラム-mbx.pl
open(OUT,">$n");
while(<STDIN>){
unless(/^\.$/){
print OUT;
}
else{
++$n;
}
#ここまで
で、実際にperl mbx.pl < hoge.mbx
とすると1に全て出力されてしまいます。
なにがいけないんでしょう?
0896nobodyさん
02/09/13 03:17ID:???改行文字忘れてるよ
0898nobodyさん
02/09/13 03:29ID:???unless(/^\.\n$/){
かな?
0900nobodyさん
02/09/13 03:43ID:???てか unless( $_ eq ".\n" ) でいいんじゃ...
0901nobodyさん
02/09/13 03:56ID:???と思ったんだけど。。。
0903nobodyさん
02/09/13 04:05ID:???こういう事か?
$n = 0;
while(<STDIN>){
next if($_ eq ".\n");
++$n;
open(OUT,">$n".'.mh');
print OUT;
close(OUT);
}
>>901
区切りに使われてるものが本文中に無変換で置かれてることは
ないだろう。もしあったらシステムが破綻する。
0904nobodyさん
02/09/13 04:05ID:???こんな感じでどう?
$n = 0;
loop: {
$n++;
open( OUT, ">$n" );
while ( <> ) {
if ( $_ eq ".\n" ) {
close OUT;
redo loop;
}
print OUT;
}
}
0906nobodyさん
02/09/13 04:16ID:????
0907905
02/09/13 04:29ID:???0908nobodyさん
02/09/13 04:30ID:???>ないだろう。もしあったらシステムが破綻する。
よく考えたらそうですよね。
>>903>>904
両方試したけど各行ばらばらになって出力されてしまいます。
.mbxの改行コードはlfなんですが。
なんでだろう。。
0909nobodyさん
02/09/13 04:32ID:???ばらばらって?
0910894
02/09/13 04:35ID:???open(OUT,">$n");
while(<STDIN>){
unless(/^\.\n/){
print OUT;
}
else{
++$n;
open(OUT,">$n");
}
}
で自己解決しました。
説明が下手でちゃんと伝わらなかったみたいでスマソ。
0912nobodyさん
02/09/13 04:42ID:???そんなはずは......ちゃんとコピペしてくれた?
0914nobodyさん
02/09/13 04:51ID:???あ 904 なんだけどね......
うちではちゃんと動いたんだけどなぁ
まぁいいんだけど
0915894
02/09/13 05:05ID:???はじめてのperlって本を一通り終えただけの
初心者だからredoとかloopが分からないのレス。
動かない理由がよく分からないけどサンクス!
0916nobodyさん
02/09/13 15:55ID:???if ($xx ne "aa"|"bb"){
print "cc";
}
これじゃいつでも"cc"と表示します。何でですか?
0917nobodyさん
02/09/13 15:57ID:???print "cc";
}
0918905
02/09/13 16:15ID:???| > MBXファイルのフォーマットを公開して頂けないでしょうか?
|
|次の通りです。
|
|ヘッダ
|(ブランク行) --- CRLF1個だけの行
|本文
| --- 行頭に1個のピリオド(メール間の区切り文字)
|ヘッダ
|(ブランク行) --- CRLF1個だけの行
|本文
| --- 行頭に1個のピリオド(メール間の区切り文字)
|
|
| (注意)本文の行頭に「.」がある場合は、「..」というように「.」を1
| 個余分につけて保存されます。
0919nobodyさん
02/09/13 16:48ID:+7b38iG7コード書いてみたんですが、いくつかディレクトリが存在するにも関わらず
「.」(ルート)と「..」(上)のディレクトリしか拾えないんですが、何かおかしな
点などありますでしょうか・・・
opendir(DIR, "data");
while($dir = readdir(DIR)){
if(-d $dir){
#処理・・・
}
}
closedir(DIR);
0920919
02/09/13 16:51ID:+7b38iG7if(-d $dir){
は
if(-d "data/$dir"){
としないとダメですね。
0921nobodyさん
02/09/13 17:50ID:???特に気にする必要はない?
0922nobodyさん
02/09/13 17:57ID:???数十行でも重い処理は書けるからね。
>>921
まず気にするほどのことは無いと思う。多分1MBくらなら問題ないでしょう。
プログラムが重いと感じたら処理の流れを見直すべし。
それと、「CGIファイル」じゃ意味が通じないんで「Perlスクリプト」や「スクリプトファイル」と表現するように。
上記の回答もそのような意図と解釈して書いてます。
0925名無しさん
02/09/13 20:11ID:dJSmRC1Rhttp://natto.2ch.net/test/read.cgi/off/1031911920/l50
キタ━━━━━━━(゚∀゚)━━━━━━━!!!!!
0926nobodyさん
02/09/13 20:56ID:MTIQ7Fw0$xx_(ここも変数)
()の変数は$yy
どう表記したらいいでしょうか?
0927nobodyさん
02/09/13 21:07ID:???my $xx_1 = "foo";
my $yy = 1;
no strict 'refs'; # シンボリックリファレンスを許可する(デフォルト)
print ${"xx_$yy"};
}
0930nobodyさん
02/09/14 08:14ID:???Can't use an undefined value as a symbol reference at test.3.pl line 8.
>>928
fooが出力されるべきところ何もでてこない
結局、どれでやってもだめレスが・・・
0931930
02/09/14 08:21ID:???>>928は、myを取ったら出力されました
わしの考えたのは
$var = "xx_" . $yy;
print $$var;
分かりやすくていいでしょ
0934nobodyさん
02/09/14 14:58ID:bLV5ATcLデータ数が多い場合はやはり幾つかのDBMに分けた方が良いのでしょうか。
それとも全部一括りにして1つのファイルにまとめた方が効率が良いのでしょうか。
ちと分からないので質問です。
0935nobodyさん
02/09/15 00:34ID:???ファイル1枚
・壊れやすそう
・壊れたら致命的そう
・サイズがでかそう
ファイル複数
・壊れにくそう
・壊れても被害は少なそう
・余計なデータは読まずに済むから軽そう
0936nobodyさん
02/09/15 05:43ID:sdGpPtiVどうしたらよかとでしょうか?
0937nobodyさん
02/09/15 07:30ID:iaBuYHci1900年からの経過秒数が知りたいの?
だったら、
use Time::Local;
print timelocal(0,0,0,15,8,102);
で9月15日0時0分0秒のそれが出てくる
0938nobodyさん
02/09/15 11:34ID:???ライブラリルーチンのインクルードは、requireを使った方が良いといわれていますが、
その理由がよくわからないので言う事を聞く気になりません。
うまい具合に違いを説明して僕を説得してください。
0939あ ◆4WVJTVm.
02/09/15 11:47ID:7pMxPAY1途中である条件が一致した場合、現在処理している変数が何番目の変数なのかを知り、変数に数値を格納したいのです。
どなたかご回答よろしくお願いします
0940あ ◆4WVJTVm.
02/09/15 11:51ID:7pMxPAY1>現在処理している変数が何番目の変数なのかを知り、 ↓
>現在処理している配列が何番目なのかを知り、
すみません
0941nobodyさん
02/09/15 11:54ID:???わたしは初心者なのですが、ライブラリをインクルードするのはdoではできな
いと思うのですが、具体例を示していただけませんでしょうか。
0942nobodyさん
02/09/15 12:01ID:???配列の番号は$array[$i]の$iです
for $i (0 .. $#array) {
if ($array[$i] == 0) {
$array[$i] = $num;
print "$i番目の配列要素の値に$numを代入しますた\n";
}
}
0943nobodyさん
02/09/15 12:02ID:???require "hoge.pl";
となっているところを
do "hoge.pl";
と置き替えるだけです。
一応平気で動作しています。
0944nobodyさん
02/09/15 12:09ID:???if ($array[$i] == 0) { って??
$array[$i] = $num; って$numはどこからでてきたの?
それにそんなことしたら配列の内容書き換えてるんじゃ?
doは%INCをチェックしない。つまり、同じライブラリを何度も読んでしまう。
そうなると、サブルーチンの再定義など、いろいろ不都合が生じると。
0947944
02/09/15 12:17ID:???for $i (0 .. $#array) {
if($array[$i] eq $arujouken){
$hensuu = $i
last;
}
}
かな?>>939
0948nobodyさん
02/09/15 12:18ID:???>>939は、配列要素が何らかの条件に合致した場合、
その要素(>>939は変数といってるが)に何らかの
数値を格納したいって言うんでしょ
それなら、>>942で合ってるよ
>>944は>>939を別の解釈をしてるなら、それに
従って答えるべし
0950942
02/09/15 12:25ID:???じゃ、同じ質問を返そう
$arujoukenって??
$array[$i] = $i; って?
>>939は数値を格納したいっていってるのよ
配列の番号を格納していなんて言ってないよ
0951944
02/09/15 12:27ID:???わかりやすくしたつもりだが…<$arujouken
もちろんマッチングだとは思うので仮にこうしたまでだが。
$array[$i] = $i;
なんて書いてません。
0954938
02/09/15 12:36ID:???そうなのですか。一応検索はかけていたのですが
そこまで説明しているとこは見つけられなかったもので。
説得されました。require使います。
>>946
だそうです。
レス数が950を超えています。1000を超えると書き込みができなくなります。