トップページ⇒php
1001コメント328KB

【Perl】初心者コーナーPart10

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。02/02/24 22:18ID:zOj6Yq/3
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

1:自分はこう言う事がしたい。
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を見よう。
0039わかりません02/02/27 11:33ID:/Q61BdR8
if($i_photo_chk eq 'url'){
@photo_urls=("$i_photo_url1","$i_photo_url2","$i_photo_url3");
foreach(@photo_urls){
if($_ ne ''){
if($_ =~ /^http.*jpg$/){
$i_comment = "$i_comment<br><IMG src=\"$_\">";
}else{
&print_error("写真URLの入力が正しくありません。注意&解説を参照して確かめてください。<br>Macintosh環境でも拡張子(.jpg)をつけて下さい。");
}


すみません。
↑ここらへんで拡張子JPGだけしか選べなくなってるのを、gifも選べるようにしてあげたいんですが、
どうしたらいいですか?つまり、JPGとGIFを認めてあげたいんですが・・・。
エラーばっかりでわけわかめです。
誰か教えて下さい。お願いします。
0040名無しさん@お腹いっぱい。02/02/27 11:35ID:???
>>39
スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/l50
0041わかりません02/02/27 12:00ID:/Q61BdR8
逝ってきます!
0042名無しさん@お腹いっぱい。02/02/27 12:47ID:Sg/A5twO
お忙しい中すみません。
http://www.e-words.ne.jp/
にあるような、先頭文字での見出し(A B C D ・・・)による
検索ってどのようにするのでしょうか?

もしかしてログファイルに先頭の文字をひとつずつ
手動入力しなくてはならないのでしょうか・・・
0043名無しさん@お腹いっぱい。02/02/27 12:50ID:???
>>42
$sata =~ /^$sentou/;
0044名無しさん@お腹いっぱい。02/02/27 13:45ID:???
>>38
お、私も一瞬悩みました。
で、カレントディレクトリが変更されてるんじゃないかと思って、
perldoc File::Find してみたら、その通りだそうです。

You are chdir()'d to $File::Find::dir when the function is called.

だってー。
00453802/02/27 17:02ID:???
>>44
ああああ、やっぱり大ポカだった(笑)。
open(IN, $_) or die;
に変えたらサクッと動きました。ありがとー! 一生恩に来ます。
00464202/02/27 17:43ID:Sg/A5twO
43さんありがとうございました。
やはり手動入力が一番速いのかな、、、
0047 02/02/27 23:55ID:KPo4U5H6
すみません。
JAVAスクリプト、JAVAをOFFにしてアクセスした人に、
「JAVAをONにしてください」と表示して、
アクセスさせないためのス8クリプトを、教えてください。
よろしくおねがいします。
0048名無しさん@お腹いっぱい。02/02/27 23:56ID:???
>>47
<NOSCRIPT>Java on plz</NOSCRIPT>
00494702/02/28 00:04ID:Xg1/i20o
ありがとう!

ええと、
JAVA SCRIPTの場合はどうなるのでしょうか?
ありがとうございます。
それと、
「JAVA、(スクリプト)をONにしてください」
と表示させたいのですが、どうしたらよいでしょうか?
掲示板にその機能を追加するには、サブルーチンにすればよいのでしょうか?
どうもありがとうございます!
0050名無しさん@お腹いっぱい。02/02/28 00:06ID:???
>>49
あんた、CGI組んだこと無いだろ。
もしかしたらHTML書いたこと無いだろ。
0051 02/02/28 00:12ID:Xg1/i20o
49さん、レンタルしか使った事が無いのです。
htmlで、それを表示させるように書いたあと、
そのあと、JAVA OFF で相手を飛ばした時にどうしたらよいのでしょうか・・。
0052名無しさん@お腹いっぱい。02/02/28 00:13ID:???
>>51
CGIわかってない奴には説明が出来ない。
意地悪ではなく必然的に。
0053名無しさん@お腹いっぱい。02/02/28 00:18ID:Xg1/i20o
わかりました・・。

それでは最後に、コンパイルの遣り方を教えてください・・。
JAVAのソフトをダウンロードして設置する事は、
「JAVAを理解していないけど、CGI、PERLは完全に理解している」
人には可能でしょうか?
コンパイルは、コンパイラを使うだけなので、
JAVAを解っていなくても出来るでしょうか?
(PERLとかを理解していればです。)
よろしくご回答お願いします。
レス感謝であります。
0054名無しさん@お腹いっぱい。02/02/28 00:19ID:???
>>53
何を訳のわからんことを・・・。
0055エフェドリンながヰ02/02/28 00:21ID:lx9+LUUJ
どうでもいいが、これ読めば問題解決だろ。
http://www.puchiwara.com/hacking/
韓国バージョンも出るらしいし。
0056名無しさん@お腹いっぱい。02/02/28 00:23ID:Xg1/i20o
つまり、
JAVAアプレットのソフトを設置するのに、
「コンパイル」という作業があった時に、
JAVAを理解していない人(但しPERLなどは理解している)に、
設置は可能でしょうか?ということです。;
宜しくお願いします。
0057手まん02/02/28 00:25ID:micBAvGr
レンタルサバとかでさ、
使えるモジュール調べるにはどうしたらいい?
一覧とかだせんかね?
0058名無しさん@お腹いっぱい。02/02/28 00:26ID:???
素人の「つまり」ほど要点がまとまっていないものはない
0059名無しさん@お腹いっぱい。02/02/28 00:26ID:???
>>56
はぁ。。。
0060手まん02/02/28 00:27ID:micBAvGr
>>56
いくらなんでも、そのくらい出来るべ、
アップレットだろ、変わったクラス使ってないだろ、
サーブレットになると、色々めんどいけどな、
0061名無しさん@お腹いっぱい。02/02/28 00:27ID:Xg1/i20o
すみません。
JAVAアプレットのプログラムをコンパイルして設置する時、
JAVAアプレットを理解していない人に設置は可能なのでしょうか?
よろしくおねがいします。
0062手まん02/02/28 00:29ID:micBAvGr
>>61
だいジョブ、できる、できる、
問題無い、
駄目だったら、漏れがやってやる、
金取るけど、
時給1万だけどな
0063名無しさん@お腹いっぱい。02/02/28 00:29ID:???
>>61
=日本語を理解出来ていませんが私は手紙を出せるでしょうか?
0064 02/02/28 00:30ID:Xg1/i20o
ありがとうございます。
ついでに、掲示板のソースから、
JAVAアプレットの仕掛けがあることを解らないように隠すには、
どうしたらよいのでしょうか?
宜しくお願いします。
0065名無しさん@お腹いっぱい。02/02/28 00:31ID:Xg1/i20o
>63さん

手紙は、日本語じゃなくても出せますよね・・説明お願いします。
自給1万ですか・・。
全部込みで5000円ならどうでしょう。
0066名無しさん@お腹いっぱい。02/02/28 00:32ID:???
ネタは止めて欲しいなあ。つまんないし。
0067名無しさん@お腹いっぱい。02/02/28 00:32ID:???
>>64
前来たIPアドレス抜き野郎か。

みんな放置。さんざん荒らしやがって。
なんかレベルの低いのが混ざってると思ったらあいつだったか。
0068名無しさん@お腹いっぱい。02/02/28 00:34ID:???
>>49
http://sound.jp/jun88/java/myjjava.html
の「強制ジャンプ」がいんじゃない?JavaスクリプトがONの人だけ、
どっかのページにジャンプできる。
Offの人は、そのページに取り残されたまま。

次に、JavaがONの人だけ飛ばしたい場合は、
強制ジャンプするアプレットを貼っとけばいんじゃない?
JavaがOffの人は、そのページに取り残される。

組み合わせるってーと、Javaスクリプトで強制ジャンプするアプレットの
タグを出力すればいんじゃないでしょうか。
0069名無しさん@お腹いっぱい。02/02/28 00:35ID:???
>>68
放置ですよ。
00706802/02/28 00:36ID:???
>>67
あうぅ一歩遅かった。マジレスしちゃったよー・・・
ちなみに、前スレどのへんですか?
0071名無しさん@お腹いっぱい。02/02/28 00:39ID:Xg1/i20o
ありがとうございました。
0072名無しさん@お腹いっぱい。02/02/28 00:40ID:???
>57
@INCを順番に readdirで見ていくとか。
File::Findとかモジュール使えばもっと簡単にできるかも。
0073手まん02/02/28 00:46ID:micBAvGr
>>57
もよろしく頼むよ。
しっかしここ、すっげぇ〜イキヨイであがってくなぁ〜
まだまだPerlの需要ってあるみたいだなぁ〜
0074名無しさん@お腹いっぱい。02/02/28 01:01ID:???
>>73
>イキヨイ
勢い。

>まだまだPerlの需要ってあるみたいだなぁ〜
その通り。
0075 02/02/28 01:23ID:???
http://sound.jp/jun88/
0076名無しさん@お腹いっぱい。02/02/28 02:38ID:???
perlほど簡単で使い勝手のいい言語なら当分生き残るだろ。
正規表現の入門にもちょうど良いわい。
0077名無しさん@お腹いっぱい。02/02/28 09:55ID:???
>>76
RE-C(正規表現C)が出たら迷わず乗り換えるw。
0078名無し02/02/28 18:12ID:SOksZdMX
掲示板を作りたいんだけど、ログファイルに
書き込むルーチンみたいなのが分からないので誰か教えてください。
0079名無しさん@お腹いっぱい。02/02/28 18:13ID:???
>>78
それを考えるのがおもしろい。
0080名無し02/02/28 18:17ID:SOksZdMX
>>79
マジレス希望。
0081名無しさん@お腹いっぱい。02/02/28 18:18ID:???
>>80
マジレスじゃん。
0082名無し02/02/28 18:28ID:SOksZdMX
・・・。
掲示板作りたいので
内容をログファイルに書き込む
ルーチン教えてください。
0083名無しさん@お腹いっぱい。02/02/28 18:34ID:???
ファイルを書き込みモードで開く
ファイルにログを書き込む
ファイルを閉じる
0084名無しさん@お腹いっぱい。02/02/28 18:37ID:???
>>82
BBS Re-Designっていい本が出てる、読む。買って。
0085名無し02/02/28 20:26ID:SOksZdMX
>>84
買えるほど金無いです。
0086名無しさん@お腹いっぱい。02/02/28 20:28ID:???
本読まない奴プログラマとして大成しない。
0087名無しさん@お腹いっぱい。02/02/28 20:28ID:???
>>85
で、>>83じゃだめなの?
0088名無しさん@お腹いっぱい。02/02/28 20:30ID:???
>>87
ファイルを操作するにはどうしたらいいんですか?
ソースで教えてほしいのですが。
00898702/02/28 20:33ID:???
>>88
open(OUT,">logifle");print OUT $log;close(OUT);
てかんじだよー。
0090名無しさん@お腹いっぱい。02/02/28 20:34ID:???
>88
もう一度>>1を読んできなさい。
0091名無しさん@お腹いっぱい。02/02/28 20:35ID:???
>>89
いい人過ぎ。
0092名無しさん@お腹いっぱい。02/03/01 00:20ID:X6rC0lr1
ファイルをアップロードしたいんですが、
モジュールとかインストールしないで
さくっと転送するにはどんな方法がありますか?
どれも結構ややこしそうで挫折しかかってます…
0093名無しさん@お腹いっぱい。02/03/01 00:35ID:???
>>92
formのほうに
<form enctype="multipart/form-data" method="POST" action="ほげ">
って書いて、CGIのほうは標準入力から読み込むだけだよ。
0094名無しさん@お腹いっぱい。02/03/01 00:38ID:???
>92
FTP。

フォーム使ったアップロードならRFC読んで自分でデータ切り分けたりしないと
いけないから,素直にモジュール使っちゃえば?
0095名無しさん@お腹いっぱい。02/03/01 00:55ID:DUUG9VQm
perl5 でtie を使ってデータベースを構築したいのですが、tie の使い方が
さっぱりわかりません。dbmopen だと(これも使ったことないんで
よくわかりませんが)

#%hash は定義済みとして
dbmopen(%hash, "data_base", 0644);
while (($key, $value) = each %hash) {
$hash{"$key"} = $value;
}
close(%hash);

こんな感じで外部ファイル化したいんですが、tie の場合、どういうふうに
書けばいいんでしょうか?
0096名無しさん@お腹いっぱい。02/03/01 03:45ID:uLWuBwxz
use Fcntl ;
use 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; の部分が怪しい。
仮に書いただけにしても、意味のあるコード書くのが普通と思われ。
00979502/03/01 09:30ID:dR5S0Mwb
>>96
おかげ様でうまくいきました。実は質問する前に丸一日googleで色々
調べて見よう見まねでやってたんですが、use Fcntl;が抜けてたせいで
うまくいかなかったようです。
ありがとうございました。
0098名無しさん@お腹いっぱい。02/03/01 12:49ID:???
・Perl依存症

世の中何でもPerlでやればいいと思ってしまう罠。
例えばエディタの置換機能を忘れていて

s/<td><\/td>/<td>a<\/d>/g;

してしまう罠。
00999202/03/01 23:43ID:X6rC0lr1
>>94
素直に使っちゃいたい、んですが、
モジュールのインストールが不可能なので無理です…。

現在、どっかのアップロード式BBSから切り出す方向で検討しています。
jcode.plみたいな引数渡したら勝手にやってくれる
ライブラリがあればいいんだけど、ないよなぁ…。
0100名無しさん@お腹いっぱい。02/03/01 23:48ID:???
CGI.pmは標準モジュールだろ?インストールしなくていいよ。
01019202/03/01 23:52ID:???
>>100
CGI.pmでできたんだ…。
ありがとうございました。googleに逝ってきます…。
0102名無しさん@お腹いっぱい。02/03/02 00:17ID:???
>>92
cgi-lib.plはイヤ?
0103名無しさん@お腹いっぱい。02/03/02 00:21ID:7JCmBc0W
文字列検索の構文で、オプションを2つ付けたいのですが
たとえば
・文字列を複数行として扱う
・大文字、小文字を区別しないで検索
の場合

変数 =~ /文字列/i/m;

でOKでしょうか?
0104名無しさん@お腹いっぱい。02/03/02 00:24ID:???
>>103
/〜/im;
0105名無しさん@お腹いっぱい。02/03/02 00:29ID:7JCmBc0W
>104 さんく
0106nobodyさん02/03/02 02:34ID:Lu4QyfYX
perlでftpアクセスの自動化ってできる?サンプル探したり
したけど、見つけられんかった。
0107nobodyさん02/03/02 02:39ID:???
>>106
もしかしたらモジュールであるのかもしれないけど、
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/) {}などとすると全部のメタ文字にマッチしてしまうの
で、どうにかしたいのですが、良い方法が思い付きません。[^\+\=\-\!\?]辺り
で試してるんですが、どうもうまく行かなくって・・・。
0109nobodyさん02/03/02 07:26ID:???
>>108
正規表現スレでも逝って勉強した方が良いよ。
でも、まぁ。
die if /[^-+=!?\w]/;
0110nobodyさん02/03/02 07:42ID:???
&test("aaa");
sub test {
 print $x;
}

ここで"aaa"を$xに入れるには
$x = $_[0];
としないと駄目でしょうか?

sub test($x : $_[0]){}のように変数名を指定したいのです
0111nobodyさん02/03/02 08:02ID:???
残念ながら、無理です。
> $x = $_[0]
そのようにして下さい。お好みで $x = shift;

引数を保証したいならプロトタイプ。
011211002/03/02 08:29ID:???
有難うございます。
$x = $_[0]; でいくことにします。
0113nobodyさん02/03/02 08:53ID:???
再帰するサブでプロトタイプは使用できる?
0114nobodyさん02/03/02 10:08ID:???
>>110
ハッシュを使う
$hiki{'x'} = 'aaa';
&test(\%hiki);
sub test{
%hiki = %$_[0];
print $hiki{'x'};
}
0115nobodyさん02/03/02 12:50ID:???
>>114
それは何かの解決になってるのか?
0116名無し02/03/02 14:46ID:FrK2+WoO
>>115
同意。
114のやり方だと容量増えるだけだと思われ。
0117nobodyさん02/03/02 15:43ID:???
ハッシュ使うなら、漏れはこっちのが好みだ。
sub x
{
%arg = @_;
print "$arg{a}\n";
print "$arg{b}\n";
}

x(a => 10, b => 100);
0118nobodyさん02/03/02 15:46ID:???
>>117
再帰してる?
0119nobodyさん02/03/02 16:15ID:???
>>118
はぁ?
まさかsubは呼び出しより前方に書かなきゃいけないとでも思ってる?
0120nobodyさん02/03/02 16:18ID:???
>>119
いや、厨房質問くさいんだけど、

再帰って

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 正解
012211902/03/02 18:59ID:???
>>121
この文脈で前方つーたら前方参照の意味なんだが誤解してないかい?
01239202/03/02 19:41ID:???
>>102
イヤじゃないです。迷ってます。
CGI.pmはでかくて評判悪いので、
CGI_Lite.pmかcgi-lib.plを使おうと思ってるんですが、
どっちを使おうかなぁと…。

実際問題、この二つってどう違うんですか?
もちろん全然違うプログラムってのはわかってるんですが、
用途が似てるから…。
01249202/03/02 19:43ID:???
googleしてたらこんなの見つけました。
CGI.pmもcgi-libも使わずにアップロードできるスクリプト。
http://tohoho.wakusei.ne.jp/cgi/wwwupl2.txt

ちなみにとほほ氏謹製です(w
0125nobodyさん02/03/02 19:43ID:???
なるほど、再帰してるsubの中の呼び出しは&でプロトタイプチェック回避させるのか。
012610802/03/02 20:14ID:???
>>109
おお!できたできた!
ありがとうございます。

はい。正規表現スレッドに逝ってきます。
0127nobodyさん02/03/02 20:39ID:???
ファイルのヘッダーを見て拡張子を返すようにするにはどうすればいいのでしょうか?
ファイルのどこにヘッダーがあるのかわからん。。
0128nobodyさん02/03/02 20:44ID:???
>>127
ファイルの先頭以外にヘッダがあることはあえない。
もし、先頭に無ければそれはヘッダとは呼ばない。
0129nobodyさん02/03/02 21:06ID:MILA+IA2
簡単な暗号化ルーチンってないすか?
単に生URL見せたく無いだけなんで、
簡単なロジックで、encode,decode出来ればいんすけど、
どでしょ?
0130nobodyさん02/03/02 21:10ID:???
>>129
すべての文字にNOTかける。
013111502/03/02 21:18ID:???
>>120
他の言語みたく
void Hoge (int n) {}
って渡し方が出来るかってことじゃねーの?
だからハッシュでってのは見当違いかなと。

まぁいいけどさ。
013211502/03/02 21:18ID:???
しまった、>>121ね。
>>120さん、すまん。
013312002/03/02 21:22ID:???
>>131
うん、死ぬほど悩んだw。
0134nobodyさん02/03/02 22:05ID:???
>>129
1バイトずつ0xFFと排他的論理和をとる(bit反転)。
0135asahi02/03/02 22:15ID:???
・・・ここでいいのかな?
あぷろだでアップ時の残り時間を
表示させるのにはどうすればよいのでしょうか?
スレ違いだったならごめんなさい
0136nobodyさん02/03/02 22:16ID:???
>>135
それはCGI側じゃなくてアップする方がやることでしょ。
0137nobodyさん02/03/02 22:18ID:???
>>135
適当なところに以下の文を追加
print scalar localtime;


これで分からなきゃCGI改造スレ行け。
その際はそのアップローダのソースをどこかに上げろよ。
013813702/03/02 22:19ID:???
って何か勘違いしてたらしい。
残り時間はサーバー側じゃ無理だわな。
0139nobodyさん02/03/02 22:30ID:???
なじぇ? アップ開始から完了までCGIプロセスは生き続けるし、サイズはわかってる
から無理じゃないっしょ?
■ このスレッドは過去ログ倉庫に格納されています