【Perl】初心者コーナー Part13
■ このスレッドは過去ログ倉庫に格納されています
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あたりを見よう。
0554nobodyさん
02/07/02 17:11ID:???部分マップを別配列に切り出す方向で考えてみた。
my $map_width = length($map[0]);
my $map_height = scalar(@map);
sub max { $_[$_[0] < $_[1]]; }
sub min { $_[$_[0] > $_[1]]; }
sub trim_map {
my ($x, $y) = @_;
my $x1 = max(0, $x - 2);
my $x2 = min($map_width, $x + 2);
my $y1 = max(0, $y - 2);
my $y2 = min($map_height, $y + 2);
return map { substr($_, $x1, $x2 - $x1 + 1) } @map[$y1 .. $y2];
}
my @mini_map = trim_map(5, 3);
print "$_\n" foreach @mini_map;
0556nobodyさん
02/07/02 18:08ID:???0557526
02/07/02 20:12ID:???0558nobodyさん
02/07/02 20:46ID:???$host = $ENV{'REMOTE_HOST'};
で取得したホスト名$hostがaaa.bbb.ccc.dddとなっている場合に
bbb.ccc.dddの部分だけを表示する方法を教えてください。
0559nobodyさん
02/07/02 21:20ID:???0560558
02/07/02 23:20ID:???ありがとうございました。
0561nobodyさん
02/07/02 23:33ID:???0562nobodyさん
02/07/03 05:04ID:???第三者からは見れない入力ページから文章を打ち込み、公になるのはcgiが吐き出した更新履歴ページのみ。
2.で、スクールに通った時作成した、掲示板を改良したが、タグが禁止なのと、<br>が吐き出されて改行位置がおかしくなるので、
以下の処理を丸ごと削除しました。
foreach($text1,$cont){
s/&/&/g;
s/"/"/g;
s/</</g;
s/>/>/g;
s/\r\n/<br>/g;
s/\n/<br>/g;
s/\r/<br>/g;
s/,/、/g;
}
3.構文エラーはなく、動作はしますが、一行置きに改行が入ったり、更新する度に一番新しい記事が何度も表示されたり
と言った具合でお手上げです。超初心者ですみません。この部分だけでは判断できないものでしょうか?
何か解決策ありましたらよろしくお願いします。
0563nobodyさん
02/07/03 05:36ID:???それと、君の質問内容だと perl がほとんど解ってないように見受けられるし、
基本的な所から勉強しようという姿勢も見られないから、まともな解答を
得るのは難しいと思われ
0565nobodyさん
02/07/03 12:18ID:???0566nobodyさん
02/07/03 12:35ID:6OBUBtcaうまくいきません。どうすればよいですか?
$buffer = $ENV{'QUERY_STRING'};
@buf = split( /&/ , $buffer );
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
};
0568nobodyさん
02/07/03 12:45ID:???@buf = split( /&/ , $buffer );
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
};
0569nobodyさん
02/07/03 12:51ID:???0570nobodyさん
02/07/03 13:02ID:???もう過去の遺物か?
0572566
02/07/03 13:20ID:6OBUBtcaなんと便利なものが・・・知りませんでした
勉強してみます。
>>568-569
それで漏れのヴァージン作品がやっと動きました。感激
Thanx ALL
0573562
02/07/03 15:37ID:???どうもすいませんでした。
perlは確かに初心者ですが、何ぶん急いでたもので、、。
御指摘もっともです、すみません。もうちょっと初歩から勉強してみます。
ちなみに改行の件はperlの方ではなくhtmlの
<textarea>タグ内のwrap="hard"をとったら、解決しました。
出直してきます。
0575nobodyさん
02/07/03 20:49ID:???( ´,_ゝ`)プッ
0576nobodyさん
02/07/03 21:51ID:???書き方わかんなきゃ検索でもしてみろ。2510件ヒットしたぞ。
まぁ、ほとんどはたいしたこと書いてないページだが比較的ましなページが
3つほどあるだろう。
0578nobodyさん
02/07/04 06:54ID:wzRa2QN/JavaScriptのrefferが使えないので困っています
他にはどんな方法がありますか?
教えて下さいおながいします。
0579578
02/07/04 06:58ID:wzRa2QN/どのページに戻るかは、そのときによって違いますので
<a herf="リンク元のURL">は使えません
0580nobodyさん
02/07/04 07:17ID:M5QBoHcZActivePerl-5.6.1.633-MSWin32-x86.msi
をインストールして
start ppm3 install http://www.activestate.com/PPMPackages/5.6plus/DBI.ppd
とすると
Can't call method "name" without a package or object reference at D:/ActivePerl/561/site/lib/PPM/UI.pm line 984.
と言うメッセージが出てモジュールのインストールが出来ません。
ActivePerl-5.6.1.633のppm3に何か欠陥があるのでしょうか?
何か私が大間違いをしているのでしょうか?
情報あれば教えてください。
戻るページの数だけ同じCGIを置く
0583578
02/07/04 08:19ID:wzRa2QN/リンクフリーのcgiなので
何ページからリンクされるのか、
どこからリンクされるのかもわからないんです
0584nobodyさん
02/07/04 08:26ID:???REFERER取れないんだからどこから来てるかはわからんよ。仕方ない。
BACKボタンで戻ってくれとかいう説明を書いといたら?
0585nobodyさん
02/07/04 10:01ID:n+YIWuSL000
111
<!---->
222
333
<!---->
444
555
<!---->で区切っている部分を3つに効率よく
切り分けるにはどうしたら良いですか?
元のデータは後で利用しない
分けた変数は$,@どちらでも良い
3パターンあるのですが、より効率のよい
コーディングを教えてください
0586nobodyさん
02/07/04 10:01ID:n+YIWuSL$line = join('',<FH>);
colse(FH);
($top,$middle,$buttom) = split /<!---->/,$line;
open(FH,file.txt);
$/ = '<!---->';
while(<FH>){
$i++
$top = $_ if $i == 1;
$middle = $_ if $i == 2;
$bottom = $_ if $i == 3;
}
colse(FH);
open(FH,file.txt);
$j = \@top;
while(<FH>){
if (/<!---->/) {
$i++;
if ($i == 1) { $j = \@middle; next; }
if ($i == 2) { $j = \@bottom; next; }
}
push(@$j,$_);
}
colse(FH);
0589578=583
02/07/04 13:21ID:???i-modeではJavaScriptが使えないんです
>>584
漏れのスキルでは妥当な線ですね
>>588
なんだか使えそうな・・・それ調べてみます
みなさん有難うございます
0590nobodyさん
02/07/04 13:43ID:???吐く端末もあるけど少数だし。Ezwebはやろうと思えば出来たような気が
しないでもない。携帯端末で普通にREFERER吐くのはドットiだけだった
と思う。
0591578=583 =589
02/07/04 14:30ID:???なるほど、HTTP_REFERERも無理ですか、
「バックボタンで戻ってください」と書く方向にします。
0593nobodyさん
02/07/04 14:35ID:???おれだったら3番目を選びます。
しかし>>587が気になる。なんだろう…。そういや"..."演算子ってあるのよね。
0596585
02/07/04 20:34ID:???すいませんがもっと詳しく書いていただけると
ありがたいです。
>>592
この中では3番目が一番効率よさそうですが
人のソースのもろコピペになってしまうので
あんまり使いたく有りません
別の方法があったらぜひ教えてください
0597nobodyさん
02/07/04 21:18ID:???こんなのはどうすか。586の最後のやつと同じだけど、ややすっきり。
my @arrays = (\@top, \@middle, \@bottom);
my $i = 0;
while (<FH>) {
$i++ if /<!---->/;
push @{$arrays[$i]}, $_;
}
0599nobodyさん
02/07/04 21:42ID:gX+umWUsif ($name eq "りんご") {$img = apple ;}
0600nobodyさん
02/07/04 21:46ID:zS7n4jKKif ($name eq "りんご") {$img = "apple" ;}
0601nobodyさん
02/07/04 21:58ID:gX+umWUsありがとうございました。
0602585
02/07/04 22:05ID:???同じことをするプログラムで
処理まで一緒だとパクリになるので
別の方法は無いかと思って
同じカテゴリーのプログラムが
少ないので同じものを使うと
すぐ分かってしまいます
この処理のやり方が肝になっているので
0604nobodyさん
02/07/04 22:16ID:???書き方変えても処理同じにするんだからきみの嫌うパクリになるんじゃないか?
パクリが嫌ならソースを教えてもらう前に自分で勉強しろ。
0605nobodyさん
02/07/04 22:37ID:ru7/Ktroすみません、うまく説明できないのですが宜しくお願いします。
0606nobodyさん
02/07/04 22:38ID:???0607585
02/07/04 22:49ID:???603は考えて下さった御礼という意味です
ちなみに私は
出てくるものは同じでも、実装方法がちがったら良いのじゃないか
と思っています。
全く同じものを作っても面白みが無いので、+αはしますが
(商業関係は別です特許が絡んでくるし)
0609nobodyさん
02/07/04 22:53ID:gX+umWUs0610nobodyさん
02/07/04 22:55ID:???0611nobodyさん
02/07/04 22:56ID:gX+umWUs0612nobodyさん
02/07/04 22:57ID:GRf17RXg<A HREF="tel:$tel">$tel</A> があるんですが、
Phone to機能のない方だけに、cgiをくっつけたいんですが、
$myd = "http://www.○○○.co.jp/";
if ($myd =~ /<A HREF=\"/) {
$myd =~ s/(\<A HREF=\")(tel:)/moji($1.$2)/eg;
}
moji($1.$2) {
if (!$2) {
$myd =~ s/(\<A HREF=\")/$1test0701_2.cgi?$query/ g;
}
}
print $myd;
うまく切り分けられません 泣)
0613nobodyさん
02/07/04 23:01ID:???Ans ↓の前にカーソルを移動させ[Delete]キーで改行が外れます
0614nobodyさん
02/07/04 23:02ID:gX+umWUsそうじゃなくて、プログラムの中で実行したいのですが・・・。
0616nobodyさん
02/07/04 23:08ID:gX+umWUsすみません
0617nobodyさん
02/07/04 23:13ID:???0619nobodyさん
02/07/04 23:18ID:gX+umWUsif ($name eq "千葉" or "神奈川" or "東京")
0620578=583 =589
02/07/04 23:19ID:???すみません、気付けません(鬱
教えて下さい
0621nobodyさん
02/07/04 23:19ID:???0622nobodyさん
02/07/04 23:23ID:gX+umWUs何度もすみません。ありがとうございました。
0623nobodyさん
02/07/04 23:27ID:???0625nobodyさん
02/07/04 23:30ID:???http://pc.2ch.net/test/read.cgi/php/1019487717/87-
0626nobodyさん
02/07/04 23:46ID:???+ JavaScript の質問用スレッド vol.10 +
http://pc.2ch.net/test/read.cgi/hp/1022077876/l50
「何」にマウスが乗ると音がなるのかも言って聞いてみて・・・
「タグ」と言っている時点で怒られる怖れもあるから
1>>をよく読んでから質問してね。
0627nobodyさん
02/07/05 01:00ID:???もう解決してるみたいだけど、orと||の優先順位に違いを考慮して
if ($name eq "千葉" || "神奈川" || "東京")
こうだと大丈夫だと思うよ。
ヴァカ
0633長文
02/07/05 06:14ID:xwCvs6jwフォルダの中に、
「番号」「単語」「単語の解説」の入ったデータファイルがいくつかあります。
そのデータファイルをまとめる親データを作りたいです。
親データには、
単語に対応する番号を単語を辞書的にソートしたものを入れたいです。
具体的には
ファイル1→01 モナー 「オマエモナー」
ファイル2→02 ギコ 「逝ってよし」
ファイル3→03 ジサクジエン 「イイ!」
親データ→02 03 01
みたいな感じです。分かりづらいでしょうか、、
長文すぎたようなので分割します;
0634長文2
02/07/05 06:15ID:xwCvs6jw$cufld = './';
opendir(DIR, $cufld) or die;
@file1 = sort readdir(DIR);
closedir(DIR);
で、フォルダの中のファイルをリストアップして
foreach (@files) {
で、ファイルをひとつひとつ開いて
open(IN,"$_");
$data = <IN>;
close (IN);
($ind,$word) = split(/\t/, $data);
push (@word , $word);
$NO{$word} = $ind;
}
foreach (sort { $a cmp $b } @word){
print "$NO{$_}\t";
}
という風に出力したかったんですが、
3:それだとこんなエラーが出て上手く行かなかった。
なんだかopendir〜の所で止まってしまいます。
ディレクトリのパーミッションは777にしてるんですが
他にこうやった方が、とか根本的にここが間違ってる、とか
いうところがあったら指摘お願いします。
0635nobodyさん
02/07/05 06:21ID:???@file1を表示してみれば分かるんだけど、opendir() は実際のファイルのほかに
「. (カレントディレクトリ)」「.. (ひとつ上のディレクトリ)」も含まれる。
なのでgrepでもかけて実際のファイルだけ取り出してやらないといけない。
っていうか @file1 と @files って・・書き間違い? (@file1 = @files ?)
0636nobodyさん
02/07/05 06:25ID:???0637長文
02/07/05 07:22ID:xwCvs6jw@file1は写し間違いでした。すみません
grep、調べてみました。頭に入れときます。
>>636
そうですね、自身も含まれちゃうんで
ファイル名ではじこうと思います。
でも、@filesを表示する以前に
opendir()でdieしてるみたいなんですが……
ローカルでも、アップした状態でもやってみましたが
結果は同じでした。
環境によっては使えないとか、そういうことってあるんでしょうか。
サーバはxreaを使ってます。ローカルではMacのWEB共有です。
0638長文
02/07/05 07:24ID:xwCvs6jwこんな時間にありがとうございますです。
0639nobodyさん
02/07/05 07:26ID:q2MOJvqj$line = join('',@lines);
$line = s/***/****/g;
for (0 .. $#lines) {
my($tmp) = $lines[$_];
$tmp = s/***/****/g;
$line .= $tmp;
}
どちらが最適か教えて下さい。
(元のデータは残しておく)
0640japh ◆J.5V8ta6
02/07/05 08:30ID:???Benchmark使ってみろ。
そうすればどっちを使うべきかは一目瞭然。
#!/usr/bin/perl -w
use Benchmark;
use IO::File;
my @lines = IO::File->new(__FILE__)->getlines;
timethese 100000 => {
1 => sub{
my $line;
$line = join('',@lines);
$line =~ s/$/:/g;
},
2 => sub{
my $line;
for (0 .. $#lines) {
my($tmp) = $lines[$_];
$tmp = s/$/:/g;
$line .= $tmp;
}
},
};
0641
02/07/05 12:27ID:L0bSs9Akmod_perl用のディレクトリ以下にあるファイルは全てCGIとして使われちゃうと聞きました。
他のディレクトリに画像を移そうかとも考えましたが、スクリプトの修正個所が多くて大変なんです。
Apacheのhttpd.confの設定とかで利用できる用に出来ませんか?
0642nobodyさん
02/07/05 14:44ID:???できるよ。perldoc cgi_to_mod_perl読め。
あとは下記スレで。
[mod_perlを使おう!]
http://pc.2ch.net/test/read.cgi/php/1005122528/l50
0643nobodyさん
02/07/05 19:28ID:???できるならやり方を教えて下さい。
0644nobodyさん
02/07/05 19:35ID:???opendirとreaddirを使う。
使い方は自分で調べてみよう。
0645nobodyさん
02/07/05 19:36ID:???@readlist = readdir(DIR);
closedir(DIR);
ただ、 . と .. も入るから注意。って、他にもあったな、やりかた。
0646nobodyさん
02/07/05 20:25ID:???@readlist = grep ! /^\.\.?$/, readdir(DIR);
closedir(DIR);
0647nobodyさん
02/07/05 21:05ID:???{
my @dir;
opendir( DIR, $_[0] ) || return 0;
@dir = grep( !/^\.\.?$/, readdir( DIR ) );
closedir( DIR );
foreach ( @dir ) {
if ( -d "$_[0]$_\/" ) {
push( @all, "$_[0]$_\/" );
&filescan( "$_[0]$_\/" );
}
else {
push( @all, "$_[0]$_" );
#print "$_[0]$_\n";
}
}
return 1;
}
0648nobodyさん
02/07/05 23:25ID:St7kmpIx{
}
とかくバカは死ね
0649nobodyさん
02/07/05 23:26ID:???@readlist = readdir(DIR);
closedir(DIR);
splice(@readlist, 0, 2);
0650nobodyさん
02/07/05 23:49ID:???@readlist = <*>;
を愛用してる。こっちは逆にドットファイルが出てこないけど。
0651nobodyさん
02/07/06 01:52ID:???http://pc.2ch.net/test/read.cgi/php/1024741312/71-
0652nobodyさん
02/07/06 05:36ID:???0653nobodyさん
02/07/06 10:20ID:???アナル → <*>
0654643
02/07/06 13:09ID:???ファイルの取得ができました。
さらに、この配列を、最終更新日時順にソートする、、なんてことはできますか?
よろしくお願いします。。
■ このスレッドは過去ログ倉庫に格納されています