【Perl】初心者コーナー Part18
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
02/11/20 22:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【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あたりを見よう。
0894えり
03/01/08 10:27ID:RjcWJJ7/アンインストールしたいのですがどうすればいいですか?
アプリケーションの追加と削除で削除したのですがperlのフォルダーが残っており
又、フォルダーの中身ものこったままです
0896nobodyさん
03/01/08 13:03ID:3CJ1U7Ioたとえば、
テキストファイルに「青」、「うんこ」とあったら
perlで五十音順に並べ替えたりできるんですか?
0898896
03/01/08 14:05ID:???少なくとも読み仮名が無ければ厳しいんですね。
http://www.mytools.net/cgitools/dictionary0.html
こういうの見つけましたが、構成ファイルが多すぎてセッティングしてません。
0900えり
03/01/08 15:39ID:RjcWJJ7/ありがとうございました!!!
0901nobodyさん
03/01/08 20:51ID:OEI4EUTrkakasiを使えば、ある程度は、正しい読み仮名を付けれるよ。
0902nodody
03/01/08 22:13ID:1Pe5J1+Nしてみたいと思っています(スキルアップのために)。
ソースの見やすさを考える以外に気をつけておいた方がいいことが
あればご教授下さい。
Perlを使用します。
(特定の記述法は特に効率が悪いからやめろとか)
0905nobodyさん
03/01/08 22:24ID:???ローカルでテストする。
これ、最優先事項。
0906nodody
03/01/08 22:26ID:1Pe5J1+Nマジで見てくださるのですか!?
じゃあ、マッハでつくります。
>>904
ありがとうございます。
気をつけてみます。
0908nobodyさん
03/01/08 22:30ID:atnjxi5O参考書に載ってなかった。おしえてくだちい。
0909nobodyさん
03/01/08 22:32ID:???0910nobodyさん
03/01/08 22:32ID:???0911nobodyさん
03/01/08 22:53ID:???0913nodody
03/01/08 23:15ID:1Pe5J1+Nいや、少なくとも数日かかると思いますが…。
意気込みってやつですよ。
>>907
use strict と-w 調べて使ってみました。
out という名前でファイルを開いたあと、
print out "文章";
と書くとoutがクォートで囲まれていないという警告が出ます。
そこで
print "out" "文章";
とするとエラーがでて動作しません。
これは無視した方がいいのでしょうか?
0914913
03/01/08 23:18ID:1Pe5J1+NError 500
CGI エラー - Content-Type ヘッダが正しくありません。
というエラーです。
0916nobodyさん
03/01/08 23:40ID:???正直、様々な原因が考えられるエラーだ。
本気でデバッグしてもらいたいなら、
スクリプトをどっかに.txtにしてアップするくらいのことはしろ。
0918>>916
03/01/09 00:39ID:ve0CCzFGにソース(すごく簡略化してありますが、エラーメッセージは同じです)
とエラーメッセージをテキストにまとめてアップしました。
よろしければご教授下さい。
0919nobodyさん
03/01/09 00:56ID:???open OUT, ">test.dat";
print OUT $text;
close (OUT);
open IN ,"<test.dat";
my @a = <IN>;
close (IN);
0920913
03/01/09 01:01ID:ve0CCzFGありがとうございました。
0921nobodyさん
03/01/09 01:07ID:???これと比べてみな。
#!/usr/local/bin/perl -w
use strict;
my $text = <<'EOE';
テスト
です
EOE
open ( OUT, '>test.dat' );
print OUT $text;
close ( OUT );
open ( IN, 'test.dat' );
my @line = <IN>;
close ( OUT );
print "Content-type: text/html\n\n";
print "<html><head><title>test</title></head><body>";
print map { $_,'<br>' } @line;
print "</body></html>";
exit;
0922nobodyさん
03/01/09 01:13ID:???Perlの文法がどうこう以前に、
変数の名前のつけ方とかをもっとしっかりさせた方がいい。
http://www.rfs.jp/sitebuilder/perl/07/01.html
http://www.rfs.jp/sitebuilder/perl/07/02.html
こんなのでも読むべし。
0923nobodyさん
03/01/09 02:51ID:j8Nogs/Uime.nu/hoge.jp/だったらime.nuのあとにhoge.jp/というフォルダを作っているんですか?
それとhttp://ime.nu/test.com/
からtest.comをどうやって取得しているんですか?
リファは無理っぽいです。
0924nobodyさん
03/01/09 03:55ID:???#!/usr/bin/perl
use strict;
my $buf_size = 256;
my $query = substr $ENV{PATH_INFO}?$ENV{PATH_INFO}:$ENV{QUERY_STRING},0,$buf_size;
$query =~ tr{-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#}{}cd;
$query =~ s{^/+}{};
print <<HTML;
Content-type: text/html;charset=Shift_JIS\r\n\r
<html><head><title>jump</title></head><b><a href=${query}>${query}</a></b><br>
別のサイトにジャンプしようとしています。宜しければ上記のリンクをクリックしてください
HTML
__END__
0926nobodyさん
03/01/09 09:35ID:???以前実験したことがありますが、IE6では約2000bytes、Netscape7では約8000bytes送れました。
ネスケでは、Apacheから
400 Bad Request
Your browser sent a request that this server could not understand.
Size of a request header field exceeds server limit.
とか
414 Request-URI Too Large
The requested URL's length exceeds the capacity limit for this server.
request failed: URI too long
とか言われますた。
0927nobodyさん
03/01/09 10:32ID:???できますか?教えてください。
0928nobodyさん
03/01/09 10:57ID:???0930初心者
03/01/09 13:46ID:???cgiページの最上部にサイト共通のヘッダを表示したかったので
<!--#include file="header.html"-->
と記載しましたが、そのままコメント文として出力されました。
この場合はどんな方法を使用すればよいのでしょうか?
0931nobodyさん
03/01/09 13:59ID:???Perlとは一切関係ないので該当スレへ行ってください。
SSIスレとかかな?
Apacheの設定スレの方がいいかな?
どのスレへ行けばいいかわからないからと言って、マルチポストはするんじゃないぞ。
0932nobodyさん
03/01/09 14:11ID:???open(IN, "<header.html");
my @header = <IN>;
close(IN);
<!--#include file="header.html"-->
の代りに
@header
とでもしておけYO
0937nobodyさん
03/01/09 15:33ID:???Perlで排他制御を行うにはシンボリックリンクをフラグとして使いましょう。
とかまじめに書いてるサイトもあるので要注意だな。
0938nobodyさん
03/01/09 15:53ID:???マルチタスクでの排他処理は要注意。
0939nobodyさん
03/01/09 16:21ID:???http://www.hoge.co.jp/hoge.cgi?str=あいうえお
こんな風に日本語を引数にしてもいいんでしょうか。
試したらうまくいったんですけど。
なんか、検索エンジンとかでは、入力するとurlエンコードって言うんですかね、
そうなって訳のわからない文字に変換されますよね。
ああいう風にしなくてもいいんですかね、という事です。
0940nobodyさん
03/01/09 16:51ID:???良し悪しで言えば・・・悪し。
フォームでGET送信すれば自動的にエンコードしてくれるけど
直リンでの固有文字はその文字コードを使用していないと文字化けまくり。
しかも文字中に&や=などの区切り文字など混じった場合に対処出来なくなる罠。。
World Wideを意識しないでローカル派なのであればどうぞ。
0941nobodyさん
03/01/09 17:15ID:???もちろん必須です。理由はRFCで決まっているから。で良いと思われ。
特定のアルファベットと記号以外を全部%16進の形式にするだけなので割と簡単です。
formのinput要素とかはブラウザが変換する義務を負うので無視して良いです。
0942nobodyさん
03/01/09 17:18ID:???なぁ?
URLエンコードしてもそのエンコード前の文字コードに対応してなかったら結局化けると思うんだけれど。
あなた論理だと英語以外送っちゃいけないことに・・・。
SJIS -URLエンコード-> URLエンコードされたSJIS -URLデコード-> SJIS
0943nobodyさん
03/01/09 17:35ID:???現状ではまだ英数文字以外のURLは送るべきではない。
http://www.hoge.co.jp/hoge.cgi?str=あいうえお
書かれていたこのURLはただの例にすぎないが
URLを伝える過程(Webだけではなく)で文字化けしていては
第三者がURLを辿っていけない状況は多分にある。
そのURL先が文字化けしているか、はまた別の話。
0944nobodyさん
03/01/09 17:46ID:???「改行が2つ続いたら、それは改行1個に置き換える」をしたいんですが、
$value =~ s/\r\n\r\n|\r\r|\n\n/\n/g;
これじゃダメっぽいです。なぜでしょうか。
0946nobodyさん
03/01/09 18:00ID:???改行とおぼしきものを一旦違うものに置き換えてからってどうかしらん?
$value ~= s/\r\n|\r|\n/<br>/g;
$value ~= s/(<br>)+/$1/g;
とか。
他の凡例は >>946
0951nobodyさん
03/01/09 18:43ID:???s/\n\n+/\n/g;
0952nobodyさん
03/01/09 18:58ID:???0953nobodyさん
03/01/09 19:02ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0956nobodyさん
03/01/09 19:51ID:???0959nobodyさん
03/01/09 20:38ID:???http://tohoho.wakusei.ne.jp/wwwgif.htm#AnimatedGIF
0961nobodyさん
03/01/09 21:27ID:???どのようにすればいいんでしょうか?
0963nobodyさん
03/01/09 22:31ID:???0964nobodyさん
03/01/09 23:50ID:???(ループのさせ方)がありましたらお教え下さい。
−−−−−ここから−−−−−
#!/usr/bin/perl
for ($a=0; $a<9; $a++) {
for ($b=0; $b<9; $b++) {
for ($c=0; $c<9; $c++) {
for ($d=0; $d<9; $d++) {
for ($e=0; $e<9; $e++) {
for ($f=0; $f<9; $f++) {
for ($g=0; $g<9; $g++) {
for ($h=0; $h<9; $h++) {
for ($i=0; $i<9; $i++) {
for ($j=0; $j<9; $j++) {
$k = $a . $b . $c . $d . $e . $f . $g . $h . $i . $j;
}
}
}
}
}
}
}
}
}
}
−−−−−ここまで−−−−−
0968nobodyさん
03/01/10 00:18ID:???>>962は、「monaを含む要素」の数
>>963は、「monaそのものである要素」の数
この場合質問が複数の解釈を許すからこういうことが起こる。
質問をする方にも、質問をするスキルが求められていると言うことだな。
0969nobodyさん
03/01/10 02:37ID:bsKAU3F+にはどうしたらいいのですか?
`pwd`で得ようとしましたが、そのスクリプトを起動したパスになってしまいます。
どうかお願いします。
0971えせカミ
03/01/10 04:30ID:???例えば)
movf bittimc,w ;1bitタイマカウンタをwに格納し
addlw 2 ;+2
movwf bittimcb ;した値を控えに格納。
といったASM言語の各命令を1関数として
movfについて
sub movf ($$) {
my $freg = shift;
my $fw = shift ;
$REG::W = &LOADF($freg);
}
と定義したとして
movf bittimc,w ;
のbittimc と wが引数として評価されて当然エラーとなります。
この関数への引数を評価無しで関数にその文字を渡すような事を出来ないでしょうか?
’’で囲って文字列として指定すれば良いのですが極力実際のASMコーディングを生かしたいと、、
わがままですね。。。
0972
03/01/10 08:40ID:1IvfvcLause File::Basename;
use Cwd 'abs_path';
my ($name,$path,$suffix) = fileparse($0);
my $abs_path = abs_path($path);
print "($name,$path,$suffix),$abs_path\n";
0973nobodyさん
03/01/10 08:41ID:0QU3xkA6$0 : 実行している perl スクリプトのファイル名。
$0 に代入を行なうと、ps(1) プログラムが参照する引数領域を変更する。
覚え方:
sh や ksh と同じ。
ttp://www.cec.co.jp/usr/hasegawa/Docs/perl-jman/perl-4.019/perl_169.html#SEC234
0974nobodyさん
03/01/10 10:03ID:???今は普通に手書きの
if($ENV{ 'REQUEST_METHOD' } eq "POST"){
read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'});
}else{
$QUERY_DATA = $ENV{'QUERY_STRING'};
}
省略、
をやっています。初めて覚えた時このやり方だったんで。
CGI.pmといのを使うやり方もあるみたいなんですが
どっちでやった方がいいとかあるんでしょうか。
こっちの方が効率がいいとか、バグが無くなるとか。
プロトタイプを(**)にする。
そうすると裸のワードを受け付けるようになる。
…なんだけど、movf bittimc, w;としたときに
たとえばbittimcというサブルーチンが事前に宣言されていたり、
予約語だったりするとうまくいかないので注意してね。
他は、使用するシンボルを全て
use constant symbol => 'symbol';
として定数としておくという手もあるかな。
0976913
03/01/10 16:49ID:???http://cgi21.plala.or.jp/~tay/2chbbs/bbs.txt
↑がソースファイルです。
WIN2000、anhttp、ActivePerl5.6の環境下で動作確認済みです。
お時間がありましたら問題箇所(多すぎるとは思いますが)の指摘を
お願いいたします。
0977nobodyさん
03/01/10 16:55ID:???#▼グローバル変数は頭を大文字にして区別
my $value;
my $name;
my @query;
my $query;
our %Form;
our $Write;
うそつき・・・。
0978nobodyさん
03/01/10 16:57ID:???#▼JAVASCRIPT(クッキー読み出し・書き込み用)
そんなもん使わずとも$ENV{"HTTP_COOKIE"}に入ってるよ。
デコードはQUERY_STRINGのときとほぼ同じ。
0979nobodyさん
03/01/10 21:12ID:???直書き:関数呼び出しのオーバーヘッドとか汎用性を考慮しなくて良い分早いであろう。
CGI.pm:少なくともバグの発生を他人のせいにできる。
0980nobodyさん
03/01/10 21:21ID:???"ス"など2バイト目が\x5c(\記号)の文字だとエスケープされてしまい、
結果的に文字化けしてしまいます。
文字コードはそのままsjisを使う前提で、何か良い対処方法はありませんでしょうか。
0982nobodyさん
03/01/10 21:32ID:KddZS+XLuse strictでエラーを出さないようにすればいいっていうものじゃない。
スコープを最小?にしないと、myとかやる価値がない。
use strictは、一生懸命努力してるときに、うっかりミスが
発生することを防ぐ、ためのもの。
open "file" => open FILE
こんなファイルハンドルの使い方がちょっと変なところが数箇所
(my $sec,my $min,my $hour,my $mday,my $mon,my $year) => my ($sec,$min,$hour,$mday,$mon,$year)
(localtime)[0,1,2,3,4,5] => (localtime)[0..5]
lock.datの使い方が変
あと、Use of uninitialized value...の意味は、初期化されていない変数の使用、
っていうことだから。これだけ分かれば直せると思う。
0983えせカミ
03/01/10 21:53ID:0QU3xkA6おー感謝!
やっぱperlは神だった。。。
0985976
03/01/10 22:37ID:???今度は少し時間をかけて直してきたいと思います。
ご指摘、ありがとうございました。
0986Perl 3日目房
03/01/11 03:14ID:7w0GJrTJが、mkdir(filename, mode) でデレクトリを作成できると書いてあるんですが
ファイルの作成については何も書いて無いのです。
試しに toucth(filename, mode)と書いてみましたがエラー。
で、結局新規にファイルを生成するにはどう書けば良いんですか?
0988nobodyさん
03/01/11 08:11ID:???0989nobody
03/01/11 08:27ID:WMCRUM05大量の数値を1つのファイルから読み込み、3〜4カ所の関数で使用する場合、
&work($a,$b,$c)
のようにメイン関数からいちいち引数を渡してやるのと
$main::a
などと大域変数にしてしまうのとはどちらが良いのでしょうか?
なお、読み込んだデータのほとんどは1つの関数でしか使用されません。
0991nobodyさん
03/01/11 11:31ID:hHeUjYJr例えば
$"/dir1/dir2/dir3/file"
てあるときに"file"を取り除いて"/dir1/dir2/dir3"を得るには
どうしたら出来ますか?
ちなみにこの時点で"file"は何かは分かっていません。
0992nobodyさん
03/01/11 11:38ID:bB6C4Xxsprint $1;
レス数が950を超えています。1000を超えると書き込みができなくなります。