【Perl】初心者コーナーPart10
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
02/02/24 22:18ID:zOj6Yq/31:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0080名無し
02/02/28 18:17ID:SOksZdMXマジレス希望。
0081名無しさん@お腹いっぱい。
02/02/28 18:18ID:???マジレスじゃん。
0082名無し
02/02/28 18:28ID:SOksZdMX掲示板作りたいので
内容をログファイルに書き込む
ルーチン教えてください。
0083名無しさん@お腹いっぱい。
02/02/28 18:34ID:???ファイルにログを書き込む
ファイルを閉じる
0084名無しさん@お腹いっぱい。
02/02/28 18:37ID:???BBS Re-Designっていい本が出てる、読む。買って。
0085名無し
02/02/28 20:26ID:SOksZdMX買えるほど金無いです。
0086名無しさん@お腹いっぱい。
02/02/28 20:28ID:???0087名無しさん@お腹いっぱい。
02/02/28 20:28ID:???で、>>83じゃだめなの?
0088名無しさん@お腹いっぱい。
02/02/28 20:30ID:???ファイルを操作するにはどうしたらいいんですか?
ソースで教えてほしいのですが。
0090名無しさん@お腹いっぱい。
02/02/28 20:34ID:???もう一度>>1を読んできなさい。
0091名無しさん@お腹いっぱい。
02/02/28 20:35ID:???いい人過ぎ。
0092名無しさん@お腹いっぱい。
02/03/01 00:20ID:X6rC0lr1モジュールとかインストールしないで
さくっと転送するにはどんな方法がありますか?
どれも結構ややこしそうで挫折しかかってます…
0093名無しさん@お腹いっぱい。
02/03/01 00:35ID:???formのほうに
<form enctype="multipart/form-data" method="POST" action="ほげ">
って書いて、CGIのほうは標準入力から読み込むだけだよ。
0094名無しさん@お腹いっぱい。
02/03/01 00:38ID:???FTP。
フォーム使ったアップロードならRFC読んで自分でデータ切り分けたりしないと
いけないから,素直にモジュール使っちゃえば?
0095名無しさん@お腹いっぱい。
02/03/01 00:55ID:DUUG9VQmさっぱりわかりません。dbmopen だと(これも使ったことないんで
よくわかりませんが)
#%hash は定義済みとして
dbmopen(%hash, "data_base", 0644);
while (($key, $value) = each %hash) {
$hash{"$key"} = $value;
}
close(%hash);
こんな感じで外部ファイル化したいんですが、tie の場合、どういうふうに
書けばいいんでしょうか?
0096名無しさん@お腹いっぱい。
02/03/01 03:45ID:uLWuBwxzuse AnyDBM_File ;
$db_flag = O_RDONLY ;
tie ( %hash , 'AnyDBM_Files' , 'database' , $flags , 0644 ) ;
while ( ( $key , $value ) = each ( %hash ) ) {
push @array , "$key\t$value" ;
}
untie ( %hash );
こんな感じ。tieもdbmopenもほとんど変わらない。
使い方はgoogleででも検索したらいっぱい出てくると思う。
もし、tieでもうまく行かないのならそのコードが変。
特に$hash{"$key"} = $value; の部分が怪しい。
仮に書いただけにしても、意味のあるコード書くのが普通と思われ。
009795
02/03/01 09:30ID:dR5S0Mwbおかげ様でうまくいきました。実は質問する前に丸一日googleで色々
調べて見よう見まねでやってたんですが、use Fcntl;が抜けてたせいで
うまくいかなかったようです。
ありがとうございました。
0098名無しさん@お腹いっぱい。
02/03/01 12:49ID:???世の中何でもPerlでやればいいと思ってしまう罠。
例えばエディタの置換機能を忘れていて
s/<td><\/td>/<td>a<\/d>/g;
してしまう罠。
009992
02/03/01 23:43ID:X6rC0lr1素直に使っちゃいたい、んですが、
モジュールのインストールが不可能なので無理です…。
現在、どっかのアップロード式BBSから切り出す方向で検討しています。
jcode.plみたいな引数渡したら勝手にやってくれる
ライブラリがあればいいんだけど、ないよなぁ…。
0100名無しさん@お腹いっぱい。
02/03/01 23:48ID:???0102名無しさん@お腹いっぱい。
02/03/02 00:17ID:???cgi-lib.plはイヤ?
0103名無しさん@お腹いっぱい。
02/03/02 00:21ID:7JCmBc0Wたとえば
・文字列を複数行として扱う
・大文字、小文字を区別しないで検索
の場合
変数 =~ /文字列/i/m;
でOKでしょうか?
0104名無しさん@お腹いっぱい。
02/03/02 00:24ID:???/〜/im;
0105名無しさん@お腹いっぱい。
02/03/02 00:29ID:7JCmBc0W0106nobodyさん
02/03/02 02:34ID:Lu4QyfYXしたけど、見つけられんかった。
0107nobodyさん
02/03/02 02:39ID:???もしかしたらモジュールであるのかもしれないけど、
http://www.google.com/search?hl=ja&q=perl%82%C5ftp&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
とりあえずどんぞ。
0108nobodyさん
02/03/02 06:20ID:LaOqrqUmただし『+』『-』『=』『!』『?』は使えるようにしたいです。
if ($password =~ /\W/) {}などとすると全部のメタ文字にマッチしてしまうの
で、どうにかしたいのですが、良い方法が思い付きません。[^\+\=\-\!\?]辺り
で試してるんですが、どうもうまく行かなくって・・・。
0110nobodyさん
02/03/02 07:42ID:???sub test {
print $x;
}
ここで"aaa"を$xに入れるには
$x = $_[0];
としないと駄目でしょうか?
sub test($x : $_[0]){}のように変数名を指定したいのです
0111nobodyさん
02/03/02 08:02ID:???> $x = $_[0]
そのようにして下さい。お好みで $x = shift;
引数を保証したいならプロトタイプ。
0112110
02/03/02 08:29ID:???$x = $_[0]; でいくことにします。
0113nobodyさん
02/03/02 08:53ID:???0114nobodyさん
02/03/02 10:08ID:???ハッシュを使う
$hiki{'x'} = 'aaa';
&test(\%hiki);
sub test{
%hiki = %$_[0];
print $hiki{'x'};
}
0116名無し
02/03/02 14:46ID:FrK2+WoO同意。
114のやり方だと容量増えるだけだと思われ。
0117nobodyさん
02/03/02 15:43ID:???sub x
{
%arg = @_;
print "$arg{a}\n";
print "$arg{b}\n";
}
x(a => 10, b => 100);
0120nobodyさん
02/03/02 16:18ID:???いや、厨房質問くさいんだけど、
再帰って
sub x
{
my($hh) = @_;
if($hh != 0)
{
return &x($hh - 1) * 2;
}
else
{
return 1;
}
じゃないの?}
0121川o・-・)
02/03/02 17:44ID:BzlXRQCM>>110 は「複数ある、それぞれが省略可能な引数を渡したいので、呼び出し元で名
前をつけたいんだが、どうすればいいわけ?」と聞きたいのだと思う。で、回
答は>>114と>>117で。
>>113 できます
>>114 どうせコピーするならリファレンスじゃなくていいんじゃない。
で、サブルーチン内で引数を書き換えないのなら、
コピーせずに$hiki->{x}でいいね。
>>115 110の問題を解決しているわけだが、、、
>>116 猫の額程度の容量を気にしてどうする、、、
>>117 保守的なコピーが必要ならこれで
>>118 「再帰」を勉強しましょう
>>119 プロトタイプ宣言の恩恵を受けるには呼び出しより前に書かなきゃね
>>120 正解
012392
02/03/02 19:41ID:???イヤじゃないです。迷ってます。
CGI.pmはでかくて評判悪いので、
CGI_Lite.pmかcgi-lib.plを使おうと思ってるんですが、
どっちを使おうかなぁと…。
実際問題、この二つってどう違うんですか?
もちろん全然違うプログラムってのはわかってるんですが、
用途が似てるから…。
012492
02/03/02 19:43ID:???CGI.pmもcgi-libも使わずにアップロードできるスクリプト。
http://tohoho.wakusei.ne.jp/cgi/wwwupl2.txt
ちなみにとほほ氏謹製です(w
0125nobodyさん
02/03/02 19:43ID:???0127nobodyさん
02/03/02 20:39ID:???ファイルのどこにヘッダーがあるのかわからん。。
0129nobodyさん
02/03/02 21:06ID:MILA+IA2単に生URL見せたく無いだけなんで、
簡単なロジックで、encode,decode出来ればいんすけど、
どでしょ?
0131115
02/03/02 21:18ID:???他の言語みたく
void Hoge (int n) {}
って渡し方が出来るかってことじゃねーの?
だからハッシュでってのは見当違いかなと。
まぁいいけどさ。
0135asahi
02/03/02 22:15ID:???あぷろだでアップ時の残り時間を
表示させるのにはどうすればよいのでしょうか?
スレ違いだったならごめんなさい
0137nobodyさん
02/03/02 22:18ID:???適当なところに以下の文を追加
print scalar localtime;
これで分からなきゃCGI改造スレ行け。
その際はそのアップローダのソースをどこかに上げろよ。
0138137
02/03/02 22:19ID:???残り時間はサーバー側じゃ無理だわな。
0139nobodyさん
02/03/02 22:30ID:???から無理じゃないっしょ?
0141nobodyさん
02/03/02 23:03ID:???表示できるじょ。
0142nobodyさん
02/03/02 23:07ID:???が効いて送り終わって無くても応答取ってるかも。
実験してみよう。
0143nobodyさん
02/03/03 04:22ID:???表示させたいという場合はどのように記述すればいいのか教えてください。
例
a1,a2,a3,a4,a5,a6,a7,a8,a9,
b1,b2,b3,b4,b5,b6,b7,b8,b9,
とデータがある時に左から5列目、つまりa5とb5を取り出す。
よろしくお願いします。
0145129
02/03/03 05:00ID:IQ08Jes1URLでパラメータで渡したいから、URLで使える文字だけにしたいんよね、
エスケープシーケンスだと長くなっちまうから、ちょっとねぇ〜
0146nobodyさん
02/03/03 05:20ID:vLChsjTspush @array , (split /,/)[4] ;
}
print @array ;
こんな感じかな?
0147nobodyさん
02/03/03 06:25ID:???0148nobodyさん
02/03/03 07:54ID:qCUfXnEh指定した長さのランダムな文字列って事?
使用する文字列の範囲を教えて。
0149nobodyさん
02/03/03 08:09ID:+mcyIDOm$str =~ s/$str1/$str2/;
なのですが $str1,$str2 にも "/" "." などが入っているのが問題なのだと思うのですが
うまくいきません(というか無限にループしているみたいになっています)
$str =~ s/\Q$str1/\Q$str2/;
というのを見つけたのですが、$strが"\"マークだらけになってしまいます
どうしたらうまく置換できるのでしょうか?
0152nobodyさん
02/03/03 14:11ID:IQ08Jes1perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "ja_JP.ujis",
LC_ALL = "ja_JP.ujis",
LC_MESSAGES = "ja_JP.ujis",
LC_CTYPE = "ja_JP.ujis",
LANG = "ja_JP.ujis"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
This is perl, v5.6.1 built for i586-linux
Copyright 1987-2001, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.
って感じで、localeでしかられちゃうんだけど、どしたらええのかね、
ちなみに、環境変数は
export LANGUAGE=ja_JP.ujis
export LANG=ja_JP.ujis
export LC_CTYPE=ja_JP.ujis
export LC_ALL=ja_JP.ujis
export LC_MESSAGES=ja_JP.ujis
こんな感じにしてます
0155152
02/03/03 14:21ID:IQ08Jes1Linux(slackware)
0156暗号化だが
02/03/03 14:29ID:IQ08Jes1漏れは、URLで使える文字に変えるってのが知りたい
極力、1バイト、一文字に抑えて、足りない分は、
!Aとかで、2文字にしていく、ハフマンのエンコード部なんか
参考になりそうだなぁ〜とか、思ったりしてた。
暗号化ってより、圧縮、変換の話か・・・
0157IQ=8 だって --->
02/03/03 14:30ID:???0159nobodyさん
02/03/03 15:30ID:???長さが長くなるのくらいあきらめろ、って気がしてきた。
URLに使われる文字がABCDEFGHだけだとして、
tr/ABCDEFGH/DGFHCEAB/;
ってのはどうだ?
0161156
02/03/03 15:59ID:IQ08Jes1必要に感じた事無い?
0163143=151
02/03/03 16:42ID:K6uur/rZcsvから情報を選び出すことは出来たのですが、
次はそのデータを比較して、条件に合ったときだけ取り込みたくて
以下のようにしたのですがうまくいきません。
アドバイスお願いします。
open(DATAFILE,"data.csv");
while (<DATAFILE>) {
push @TMPDATA ,(split /,/)[0,5] ;
if (@TMPDATA[0] < @TMPDATA[1])
{
push @TIME ,(split /,/)[1];
}
}
それとスペースも入ってない空欄
1,2,,4,←こんな状態
の部分はどのように判別すればいいのですか?
よろしくお願いします。
0165163
02/03/03 17:27ID:K6uur/rZ参考にして
push my @TMPDATA ,(split /,/)[0,5] ;
としてみると、思い通りに動きました。
空欄の処理の仕方も何方かアドバイスお願いします。
0166nobodyさん
02/03/03 19:22ID:zlwT/08tCGIを動かそうとしたらエラーになってしまいます。
原因は何が考えられますか?
Win2K(SP2)+Apache1.3.24+Perl5.6.620です。
0172nobodyさん
02/03/03 21:08ID:???例えば、以下のコードはSynax OKだが実行した瞬間死ぬ。
#!/usr/bin/perl
foo()
__END__
0173nobodyさん
02/03/03 21:14ID:/fm96Lfbのplファイルが黄色いボールのアイコンになってしまいました。
この関連付けを解除する方法は無いですか?このままでも問題無し?
あと、いずれはCGIスクリプト書けるようになりたいですが、まず最初の
段階ではActivePerlをインスコして参考書読みながらコマンド打っていくの
がいいんでしょうか?サーバソフトとかまだ入れてないんですが・・
0175166
02/03/03 21:16ID:zlwT/08tApacheのログを見たら分かりました。
print "Content-type: text/html\n\n"を忘れてBad headerでした。
超初心者的ミス、鬱だ。
0176173
02/03/03 21:24ID:/fm96Lfbそんな事言わずにお願いします。
>インストールして
訂正します。すみませんでした。
ちなみに参考書は「すぐわかるPerl 深沢千尋/著」を買ってきました。
0177nobodyさん
02/03/03 21:26ID:???その本は素晴らしいよ。
基本的にはコマンドプロンプトでPerl a.cgiとするのが王道。
俺は秀丸マクロで開発環境作ったけど。
0179163
02/03/03 23:17ID:K6uur/rZCSVデータの中に空欄があったら処理を実行せずにデータがあればそれから処理を実行したいんです。
0180163=179
02/03/03 23:22ID:K6uur/rZopen(DATAFILE,"data.csv");
while (<DATAFILE>) {
push my @TMPDATA ,(split /,/)[0,5] ;
if (@TMPDATA[0] < @TMPDATA[1])
{
push @TIME ,(split /,/)[1];
}
}
のifのところで@TMPDATA[0] 、@TMPDATA[1]のどちらかが空欄なら以下の処理をせずに終わりたいんです。
■ このスレッドは過去ログ倉庫に格納されています