【Perl 】初心者コーナーPart7
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい
01/09/12 13:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988809842&ls=50
CGIの質問はこちら【CGIだけど、なんか質問ある?part3】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833&ls=50
過去ログ、その他の役立ち情報は>>2-5を見よう。
0448名無しさん@お腹いっぱい。
01/09/30 15:15ID:???テキストカウンターらしいよ。
>>443
IMGタグでtext/htmlを出力しようとしてもね…。
0449443じゃないけど
01/09/30 15:43ID:WrCS3j3.0450名無しさん@お腹いっぱい。
01/09/30 15:48ID:???それはどういう意味ですか?
0451名無しさん@お腹いっぱい。
01/09/30 15:52ID:mtebbK2kみんな不親切すぎ。俺が答えるYO!
(1) SSIが使えるサーバなら
<!--#include file="hehehe.cgi"-->
(2) SSIが使えないサーバなら
<iframe src="hehehe.cgi" width=200 height=50>ブラウザ古い!カウンタ表示不能!</iframe>
0452名無しさん@お腹いっぱい。
01/09/30 16:00ID:???最初よくまちがえるんだけど、
「print<< というヒアドキュメント命令」があったり、
「=<< というヒアドキュメント代入記号」があるわけじゃないですぜ。
<<"HOGE" から HOGEまでが「ヒアドキュメント形式の文字列」で、
それをprintしたり代入してるわけ。
0453名無しさん@お腹いっぱい。
01/09/30 16:01ID:???親切そうに見せといて、不親切この上ない素晴らしい回答。
0454名無しさん@お腹いっぱい。
01/09/30 22:52ID:5nFULihcさせたいのですがダウソロードのダイアログにサーバ名と
ファイル名が表示されません。ちなみにファイルのダウソ
ロードは問題なくできます。
$filename="hoge.csv";
$|=1;
print "Content-type: application/x-csv\n";
print 'Content-Disposition: attachment; filename='.$filename."\n\n";
#csvファイルをダウンロードさせる
open(FH, $filename) || die;
binmode(FH);
#ファイルに適したMIMEタイプを出力
while(read(FH, $buffer, 512)){
print $buffer;
}
close(FH);
exit;
0455太田@モナー板固定
01/10/01 03:32ID:???いかがなものでしょう?
<form method=POST action="a2gif.cgi"><input type=submit value="A2GIFで表示" name=submit>
<br><textarea rows=5 cols=70 wrap=off name=MESSAGE></textarea></form>
>>446
回答ありがとうございます。
表面的にはなんとなく分かるんですが内部でどんな動作になっているのか
全く知らないので・・・(1)ポスト用のhtmlで上のコードを入れておく、
(2)ポスト先のcgiファイルでA2GIFに変換して表示 って感じになるんでしょうか。
質問ばかりでは始まらないので、とりあえず掲示板スクリプトを見て勉強したいと思います・・・。
モナー板のこっちのスレでもA2GIFの話をしています。
http://piza2.2ch.net/test/read.cgi/mona/989849855/l50
0456win32
01/10/01 12:31ID:???に変更しないといけないんですか?
友達に聞かれたんですけど、今Linuxな環境しかないんで。。。
識者の方、教えてくださいませ
0457名無しさん@お腹いっぱい。
01/10/01 12:33ID:???0458名無しさん@お腹いっぱい。
01/10/01 13:37ID:kD.LVvDkそんなことないよ。
それはただ単に変換がLinuxとWin32で違うだけでWin32で¥を押すと
¥がでるけどLinuxとかで¥と押すと逆スラッシュに変換されるだけで
一緒ですよ
0459名無しさん@お腹いっぱい。
01/10/01 14:13ID:???>>457 大丈夫、俺は識者じゃ無いけどPerlforWINやACTIVEPerlは
ディレクトリの区切り子を変換してくれる。Cygwinだと先にCygwinが
面倒見てくれるから問題無し。WIN <=> UNIX互換 の場合まず気に
しなくて良いと思う。
因みにMACの : は駄目、死にます
0460名無しさん@お腹いっぱい。
01/10/01 14:36ID:???>>>457 大丈夫、俺は識者じゃ無いけどPerlforWINやACTIVEPerlは
いや俺に言うたかて、とマジレス入れてみる。
0461名無しさん@お腹いっぱい。
01/10/01 15:29ID:???MACって2つ上は ::: なんだよなぁ・・・
0462名無しさん@お腹いっぱい。
01/10/01 16:09ID:rWEZiHhg0464暇人
01/10/01 16:27ID:???===== 初心者質問スレ =====
462 名前:名無しさん@お腹いっぱい。 :01/10/01 16:09 ID:rWEZiHhg
macは糞
===== aspがうとしいですが =====
4 名前:名無しさん@お腹いっぱい。 :01/10/01 12:18 ID:rWEZiHhg
>>3
とても傷つきました。
慰謝料請求しますので。
===== JAPUをドキュソと罵る =====
106 名前:名無しさん@お腹いっぱい。 :01/10/01 12:23 ID:rWEZiHhg
DQNプログラマーの素質アリですね。
どうやら2番目のasp教えてスレにレスが無い事にご立腹の様子 ワラ
みんなレスしてあげてね♪
0465名無しさん@お腹いっぱい。
01/10/01 17:03ID:???基準パスは、
1:実行者のカレント
2:スクリプトの置かれたディレクトリ
のどちらになるかは決まっていますか?
それと、これはある程度OSに依存するものなんでしょうか。
/usr/hoge/に
foo.pl、foo.txt foo2.txt
/usr/hoge/huga/
bar.txt bar2.txt
この状態で/usr/hoge/huga/からfoo.plを実行した時に
カレントディレクトリは/usr/hoge/huga/ と思って間違いないですか?
0466名無しさん@お腹いっぱい。
01/10/01 17:05ID:???上の状態でスクリプトから ./ をreaddirすると
bar.txt bar2.txt が読まれると思って良いでしょうか
0467名無しさん@お腹いっぱい。
01/10/01 17:34ID:???0468名無しさん@お腹いっぱい。
01/10/01 17:46ID:???テストしたから聞いています。
「家の環境じゃそうはならないぞ」と言ったご意見を頂きたいのです。
それとも全ての環境をテストしなければ質問は許されませんか?
0469名無しさん
01/10/01 18:03ID:???アホはほっとけよ 疲れるだろ p
それはともかく当然俺の環境でも同じようになったよ
Linux と Cygwinだけど
つーか今まで俺のツールはそれを前提に書いてきたから通用しない環境があると困るなー
0470名無しさん@お腹いっぱい。
01/10/01 18:13ID:???もしくは絶対パスで指定。
0471名無しさん@お腹いっぱい。
01/10/01 18:20ID:???>1:実行者のカレント
>2:スクリプトの置かれたディレクトリ
Win, Unixは全て1です。
0472名無しさん@お腹いっぱい。
01/10/01 18:53ID:IQ6dfID2シンプルなカウンタだな
どやって使うんだ?フレームか?
0473Petit Perl style
01/10/01 19:02ID:???上級者のみなさんはスパゲッチになりがちなperlのソースを書くとき
どんな事を心掛けてますか
漏れが自分ルールにしてるのは、、
変数名は5文字まで、ただし変数名の説明を入れる
ヒアドキュメントはインデントが崩れるからキライ
大域変数は大文字 くらいッス!
0474名無しさん@お腹いっぱい。
01/10/01 19:41ID:???変数名は意味が通じれば多少長くてもいいと思われ。
一般に言われてる Perlプログラマへの推奨スタイルはこれ。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlstyle.html
俺がやるようにしてるのは上と,関係ある変数はハッシュにする,
作業ごとにラベルつけて{}で括るか関数にするくらいか。
0475名無しさん@お腹いっぱい。
01/10/01 21:05ID:1S1Hyahg>変数名は5文字まで、ただし変数名の説明を入れる
説明ってコメントで?
というか、説明入れないとわからない変数名は最悪。
0476名無しさん
01/10/01 21:12ID:1nBk41eoインデント崩したくないのに激しく同意なんだけど、
printを並べるのも、なんか見栄えはともかく
繰り返し呼ぶことのオーバーヘッドがちょっときになったり。
473はどうしてんの。
0477名無しさん@お腹いっぱい。
01/10/01 22:11ID:???ありがとうございます。安心しました ^^
実は自分の書いたファイル管理スクリプトを人に上げたらどうも上手く動いて無い
様なので、そういう可能性を考えたのです。PC初心者さんなんであてにならないけど。。
470さんの言う通りなんですが、例えば ls.pl ./ ってされた時
ls.plでARGVを引っ張ってきたとして、ls.plディレクトリを
基準にされちゃうと非常に困るんです。
他にも方法が有るかもしれませんが、ここは仕様を理解した方が
良いかなと思ったんで。
ありがとうございました。 m(_ _) m
0478名無しさん@お腹いっぱい。
01/10/02 04:48ID:ISbv0fVM>2:スクリプトの置かれたディレクトリ
を取得するほうが難しいよ。特にOS依存なくそうとすると。
実はこれ、自分じゃ書けなかったのでFindBin.pmを見たら、
やっぱ結構苦労している。
CGIを実行するときApacheが自動的にchdirしてくれるってのは
かなりありがたいことだと思った。
0479名無しさん@お腹いっぱい。
01/10/02 07:10ID:puwr6ecIこれってcgiファイルの文字は検索対象に入らないのでしょうか?
掲示板の書き込みとかもトップページから検索できるようにしたいので。
どなたかご存じの方は教えて下さい。
0480名無しさん@お腹いっぱい。
01/10/02 07:35ID:???検索対象ファイルに加えてやれば出来ると思うよ。
でもログそのまんまだと読み難いんじゃないかなあ。
読み出しスクリプト通した方が良くない?
0481名無しさん@お腹いっぱい。
01/10/02 08:31ID:???例えばどうするんでしょうか?
(すみません、無知なもので..)
0482
01/10/02 10:22ID:80rCzk0osub location{
print "Location: $url\n";
exit;
}#location END
こんな感じで飛ばすと、表示したブラウザの下に
Location: ero.cgi?zap
と表示されます。表示しないようにする方法はありますか?
宜しくおねがいします
0483名無しさん@お腹いっぱい。
01/10/02 10:27ID:???0484482
01/10/02 10:32ID:80rCzk0oブラウザの一番下(ページ内)です
urlが出たりする所じゃないです
0485482
01/10/02 10:37ID:80rCzk0oあっと、解決しました
すまんですたぃ
0486名無しさん@お腹いっぱい。
01/10/02 10:41ID:???必要ないのにlocationサブルーチンを呼び出してる。
どこだか分からなかったら、適当なところにアプすれば見るよ。
0487名無しさん@お腹いっぱい。
01/10/02 10:41ID:???04881
01/10/02 15:21ID:LK1d/L0Ihttp://www.h2.dion.ne.jp/~goldman/
0489バイトコードの取得方法について
01/10/02 15:36ID:ZBXcT.qc一バイトずつループ処理をする方法はありますか?
「ファイルハンドル」を用いて指定位置のキャラクタコードを
取得する方法はありますか?
(getcだと位置を指定できません)
正に初心者のなのでよろしくお願いします。
0490名無しさん@お腹いっぱい。
01/10/02 15:47ID:???$value =~ tr/+/ /;
で躓いています。
実データの「+」をそのまま「+」で表示し、
半角スペースのみを変換するにはどうしたらいいのでしょう?
0491490
01/10/02 15:59ID:???デコードの順番が逆でした。
逝ってきます。
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$value =~ tr/+/ /;
↓
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
0492JAPU
01/10/02 17:36ID:???seek と getc の組合わせで解決?
seek FH, 100, 0;
$c = getc FH;
# seek の使い方は perldoc -f seek を参照。
# または "プログラミングPerl 第2版" or "Programming Perl 3rd Ed." を買う。
0493名無しさん@お腹いっぱい。
01/10/02 17:50ID:RaZaDOV60494489
01/10/02 18:51ID:???レス有難うございます。帰宅してから試してみます。
0495名無しさん@お腹いっぱい。
01/10/02 20:05ID:???http://で始まる文字列を抽出したいのですが
http://www.gc-inside.com/news/20010927am2.html
のようなURLは正常に処理されるのですが
http://choco.2ch.net/test/read.cgi?bbs=tvd&key=998696750
のような=?!&が混入したURLがマッチしません
よそのサイトのを参考にしてしまったので
正規表現部分の内容を余り理解して無くて困ってます
ちなみに下がソースです
#正規表現により配列に展開される
@http = $text =~ /s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/g;
http://choco.2ch.net/test/read.cgi?bbs=tvd&key=998696750
のようなURLでもマッチするようにしたいのですが
できればアドバイス下さい
よろしくおねがいします。
0496JAPU
01/10/02 20:28ID:???04971
01/10/02 20:29ID:LK1d/L0I0498名無しさん@お腹いっぱい。
01/10/02 20:37ID:W6pnxjhI0499名無しさん@お腹いっぱい。
01/10/02 20:38ID:W6pnxjhI0500名無しさん@お腹いっぱい。
01/10/02 20:52ID:6OIJd9Gg(たとえば全ての拡張子を.tmpに変更する)
なんかやりかたがあったような…
0501名無しさん@お腹いっぱい。
01/10/02 20:54ID:gYYU4i1ssystem("command par");
で、ユーザーの追加をperlでやろうと思うんだけど
$username = 'hogehoge';
system("useradd $username");
system("passwd $username");
とすれば確かにユーザ追加されるが、パスワードは何か?と聞かれる(当然だけど)
そこでパスワードをパラメータとして入力するにはどう記述すれば良いんですか?
$userpass = 'xxxxx';
って感じで変数にしてやりたいんですが。
0502JAPU
01/10/02 22:39ID:???foreach (<*.moe>) {
($x = $_) =~ s/\.moe/.tmp/;
rename $_, $x
}
とか?
csh 系なら、
foreach f (*.moe)
mv $f ${f:r}.tmp
end
bsh系なら、for .. done で。
>>501
chpass -p CRYPTEDPASSWD userなんてのはどう?
http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.sbin/adduser/adduser.perl?rev=.
とかも参考になるかも。
0503名無しさん@お腹いっぱい。
01/10/03 01:59ID:VWQvA4GEDOSなら ren *.moe *.hoe
0504FREAKES
01/10/03 02:32ID:iOlT3Zggうまく掲示板のCGIが動作しません
どうしてでしょう、自分では、みれるのに
0505名無しさん@お腹いっぱい。
01/10/03 02:38ID:???0506名無しさん@お腹いっぱい。
01/10/03 03:42ID:???マルチポストうざい。
0507名無しさん@お腹いっぱい。
01/10/03 05:39ID:xNIE/jvQしかし以下のようなスクリプトだとどうもうまく行きません。
$counterlogのファイルを作成して一度目、二度目は1、2とカウントされ、表示
もされるのですが、三回目はいきなり13となります。4回目は1214、5回目は
12131215という具合です。
sub counter {
open(COUNTER, "+<$counterlog");
$counter = <COUNTER>;
++$counter;
print COUNTER $counter;
close(COUNTER);
}
どこがおかしいのか分かりません。
よろしくお願いします。
0508名無しさん
01/10/03 05:52ID:xwMhor1s0509名無しさん@お腹いっぱい。
01/10/03 06:27ID:7VPeoMkk0510名無しさん@お腹いっぱい。
01/10/03 07:00ID:???投稿したあとで検索エンジンで調べてみるとtruncate(COUNTER, 0);と
seek(COUNTER, 0, 0);との組合せを発見しました。
seek(COUNTER, 0, 0);だけでもいいのか・・・。
いろいろ試してみます。
ありがとうございます。
0511名無しさん@お腹いっぱい。
01/10/03 07:03ID:1Z0sNt2wWindows用のgzipをGETせよ → http://www.gzip.org/
0512名無しさん@お腹いっぱい。
01/10/03 07:12ID:???『出来る』と答えりゃ良いのか?
えすぱってみると、mod_gzipかCygwin辺り?
何をしたいのか書いとらんから、さぱ〜り分らん。
> 良い回答は良い質問から
>>1 を良く読んでくれ。
0513509
01/10/03 07:32ID:7VPeoMkk0514509
01/10/03 08:46ID:???apache for win32を入れないと駄目なのでしょうか?
0515名無しさん@お腹いっぱい。
01/10/03 09:20ID:???ANHTTPDは触ったことないんですけど、
Win2000 + Apache for Win32 ならmod_gzip入れるのは簡単ですよ。
ていうか513を読んで、試しに↓からダウンロードしてみたら
あんまり簡単に動いてびっくりした。
http://www.remotecommunications.com/apache/mod_gzip/
0516ファイルの新規作成
01/10/03 12:36ID:???まだ存在しないので open ができずファイルハンドルが
取得できません。
0517516
01/10/03 12:41ID:???他のエラーが原因でした。
0518えび
01/10/03 12:41ID:tut8CQIEseek(COUNTER, 0, 0);で良いと思います。
seek(COUNTER, 0, 0);はファイルポインタを先頭までまき戻す。
truncate(COUNTER, 0);はファイルを0バイトまで切り詰める。
という処理ですが、
カウンターファイルに新しく数値を記入する場合であれば
seekで先頭にまき戻して新しいカウントの数を上書きすれば良いと
思います。
カウンターは桁が増えても桁が減るという事はないので
以前のデータから上書きしても以前のデータの切れ端とかが
残る事はないのでseekだけで問題はないでしょう。
0519初心者だけど検索くらいは出来る人
01/10/03 12:49ID:???0521名無しさん@お腹いっぱい。
01/10/03 12:54ID:???ブチュゥ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
0522名無しさん@お腹いっぱい。
01/10/03 13:34ID:6LJeEkqsまじで背筋がゾッとしたからやめてくれ
理想ならその業界の技術書を熟読するのが一番なの。
サバ構築だって然り。ネットとは何か?と言うこと。
書店にあるものを読んでるうちは中級どまり。
高校の微積分を学ぶときは決してニュートンやライプニッツの原書を読まないのは単に難易度の問題。
機会があれば読むべき。
0524名無しさん@お腹いっぱい。
01/10/03 14:20ID:???ハードにはしぶしぶ使う。
けどアキバで部品単位でBSテレビが作れるなら
それに超したことはない
故障のたんびに悪対応の窓口は死ね!
0528名無しさん@お腹いっぱい。
01/10/03 14:43ID:???0529名無しさん@お腹いっぱい。
01/10/03 15:01ID:HFewZhw6これってcgiファイルの文字は検索対象に入らないのでしょうか?
掲示板の書き込みとかもトップページから検索できるようにしたいので。
どなたかご存じの方は教えて下さい。
05301
01/10/03 15:11ID:1nsRDm4c0531名無しさん@お腹いっぱい。
01/10/03 15:57ID:???スレ違い。つかマルチポスト死ね。
0532名無しさん@お腹いっぱい。
01/10/03 16:41ID:???0533丸出し
01/10/03 17:23ID:eJHCCMAcところで話を戻しますが、
なんかナイスタイミングで529と似てるんですけど
文字列検索する時って正規表現じゃなくて
index使う利点ってあるんですか?
これだと大文字小文字区別しない風にできないと
今の知識だと思うんですけども…?あほな事いってます?
0534a'x
01/10/03 17:35ID:???0535名無しさん@お腹いっぱい。
01/10/03 17:40ID:???0536a'x
01/10/03 17:43ID:???ら辺読め。
0537名無しさん@お腹いっぱい。
01/10/03 17:44ID:???カウンタは自前で用意する必要がありますか?
$xxx みたいにあらかじめ使える変数が用意されているとか
ないですか?持っている本には出ていないのですが
あればいいなと。
0538名無しさん@お腹いっぱい。
01/10/03 17:46ID:???0539名無しさん@お腹いっぱい。
01/10/03 17:46ID:???0540名無しさん@お腹いっぱい。
01/10/03 17:46ID:???ないよん。
0541名無しさん@お腹いっぱい。
01/10/03 17:47ID:???Benchmarkやindexの使い方分からない猿 ププ
0542名無しさん@お腹いっぱい。
01/10/03 17:48ID:???>>541
そんな奴いない。
0543名無しさん@お腹いっぱい。
01/10/03 17:51ID:???0544名無しさん@お腹いっぱい。
01/10/03 18:02ID:???半角カナで入力された場合、全角カナに自動的に直して
表示する環境変数を教えて下さい。バイト数をチェックすれば
いいんでしょうか?
0545名無しさん@お腹いっぱい。
01/10/03 18:02ID:???use Benchmark;
open FH, "./seek.dat";
@lines = <FH>;
close FH;
timethese(16, {
'REGEXP ' => \&find_by_regexp,
'INDEX ' => \&find_by_index,
} );
sub find_by_regexp {
my $count = 0;
foreach (@lines) {
if (/an/) {
$count++;
}
}
}
sub find_by_index {
my $count = 0;
foreach (@lines) {
if (index($_, "an") >= 0) {
$count++;
}
}
}
Benchmark: timing 16 iterations of INDEX , REGEXP ...
INDEX : 3 wallclock secs ( 3.31 usr + 0.00 sys = 3.31 CPU) @ 4.83/s (n=16)
REGEXP : 4 wallclock secs ( 4.02 usr + 0.00 sys = 4.02 CPU) @ 3.98/s (n=16)
2万行のデータで検証。
0546名無しさん@お腹いっぱい。
01/10/03 18:03ID:???0547名無しさん@お腹いっぱい。
01/10/03 18:05ID:???これを使えばいいですよ?
検索して頑張って下さい?
0548名無しさん@お腹いっぱい。
01/10/03 18:05ID:???■ このスレッドは過去ログ倉庫に格納されています