【Perl】初心者コーナー Part12
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/04/27 23:17ID:1NNXdNspいらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
CGIの質問は【CGIだけどなんか質問ある Pert 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を見よう。
0721nobodyさん
02/05/17 16:18ID:???0723時雨
02/05/18 22:28ID:T/2gJeJW0724nobodyさん
02/05/18 23:38ID:???掲示板のフラットボタン?こういうことですか?
<input type="submit" value="送信" style="border:solid 1px #000000">
これはスタイルシートつかってます。
Web制作板のCSSスレに載ってるサイト見て勉強してください。
0725nobodyさん
02/05/18 23:41ID:???たぶん平べったく見えるボタンの事だよね。それならスタイルシート。
border: 1px solid silver; とか。板違いなのでWeb製作板へ。
0726nobodyさん
02/05/18 23:41ID:???0727nobodyさん
02/05/19 01:22ID:AQpyLtDPsub a
{
my %hash = (a=>0,b=>1,c=>2) ;
return %hash ;
}
my %myHash = a() ;
こんな感じなんですけど、添削してくれませんか、ねた無しで・・・
0729727
02/05/19 01:45ID:AQpyLtDPレスありがとう御座います、確認不足でした。
うまくいけてました。
0730nobodyさん
02/05/19 08:13ID:???それはCGIの一部でローカルでテストする環境無いヤシが質問しているのか?
0731nobodyさん
02/05/19 12:20ID:fEY33UPf0734nobodyさん
02/05/19 16:04ID:Y5d1n8OFスクリプトを見られないように文字化けさせるやりかたがあるときいたのですが、
変換させる用にマクロメディアかマイクロソフトかで何かを
ダウンロードしてこないといけないと裏技の本に書いてあったそうです。
書店に本を探しに行ったのですが見つからず。もしご存じでしたら教えて下さい。
0735727
02/05/19 16:09ID:???自分の事?、
あるよ、Vine Linux2.?と、Slackware8、WinじゃCygwinも
自分の今回の確認ミスは、結果のハッシュ構造の確認をDumoer使っていたため、
リファレンス先のハッシュは問題無く表示されるけど、
直接ハッシュ指定すると正しく表示してくれないみたい、
常識?
0737nobodyさん
02/05/19 16:18ID:???0738734
02/05/19 18:53ID:81BFGvHeすみません。
おっしゃるとおりJavascriptのことです。
ソースのJavascriptを文字化けさせて、読めなくする方法だとききました。
わかりますでしょうか?
0739
02/05/19 19:02ID:2IiQOx1u情報お待ちしてます。
0740nobodyさん
02/05/19 19:11ID:???そこまでわかってんならスレ違い,というよりも板違い
0741nobodyさん
02/05/19 19:24ID:F0t0o3W7(WINのユーザー・FREEBSD上のcgi)
HPでデバックするため、
読み込んだファイルを
¥r¥nを¥¥rに書き換えて処理して、
¥¥rを¥r¥nに直して
改めてファイルに書き込んでいます。
1回目はちゃんと処理するのですが、
2回目以降、¥r¥nを¥¥rに書き換えて処理の部分が実行されていないようです。
書き換えられたファイルも一見何も変わってないようなものはないので
八方ふさがりになっています。
ファイルを書き込むときに
BSD上で¥r¥nが何かに変更されているとかしか考えられません。
そのようなことは起こりうるのでしょうか?
0742741
02/05/19 19:39ID:F0t0o3W70D0Aが、0A0Aに変わってしまっていました。
でも、
s/\\r/\r\n/ig;
してるんですよね。
何でだろう。
0743734,738
02/05/19 20:47ID:gBCciPdKあああ、すみませんでした!
今気付きました!
ここは[Perl]の初心者コーナーだったのですね。
「初心者」という部分しか目に入ってませんでした。
申し訳ありませんでした。
0745nobodyさん
02/05/19 21:01ID:???バックスラッシュと小文字の r ってこと?
なんでそんなことするのか理解に苦しみます。
0747nobodyさん
02/05/19 23:50ID:CPJQ1VYR@list=(102,105,111,205,245,250,297,312,322,456,473,479,482,499);
こんなかたちに分解したいんですけど
@list1=(102,105,111);#----------頭が1
@list2=(205,245,250,297);#------頭が2
@list3=(312,322);#--------------頭が3
@list4=(456,473,479,482,499);#--頭が4
出来るだけシンプルにやりたいなぁと思ったわけです。
で初心者の僕ががんばって考えたのは
$i=1
foreach(@list){
while($_ !~ /^$i/){#--$iの値を配列要素の先頭の数字とマッチするまで増やす
$i++;
}
push(eval("\@list"."$i"),$_);#---新しい配列「@list+$i」に配列要素を追加
}
というもので、当然というか配列と変数をくっつけるevalが
効かなかったんですよね。
なんかよい方法はないものかと。
いっぱい間違ってるかもしれませんが、簡潔な方法があればよろしくおねがいします。
0748nobodyさん
02/05/20 00:09ID:???for (@list) {
die 'あほ' unless(/^(\d)/);
push @{"list$1"}, $_;
}
0749747
02/05/20 00:49ID:dmmb40il大変短くして頂いてありがたいのですがエラーがでました。
スミマセン
0751nobodyさん
02/05/20 00:58ID:???@list=(102,105,111,205,245,250,297,312,322,456,473,479,482,499);
foreach (@list) {
next if !/^(\d)/;
eval sprintf 'push @list%s,$_',$1;
}
print @list1,"\n";
print @list2,"\n";
print @list3,"\n";
print @list4,"\n";
<>;
0752747
02/05/20 01:00ID:dmmb40ilpush @{"list$1"}, $_;
ココだけコピって使ったんですけどね
0753nobodyさん
02/05/20 01:01ID:???#!/usr/local/bin/perl
use IO::Socket;
use IO::Select;
@servers = ('www.zdnet.co.jp','www.asahi.com',);
print "Content-type: text/html\n\n";
foreach $server (@servers){
$socket = IO::Socket::INET->new(PeerAddr => $server,
PeerPort => 80,
Proto => 'tcp',
);
print $socket "GET /index.html\r\n";
print $socket "Host: $server:80\r\n";
$socket->flush();
print <$socket>;
}
これでページを取得出来るんですが、
ページを全部読み込んでしまいます。
これを一部のみ読み込むにはどうすればいいのでしょうか?
と、、、
print <$socket>;
これを変数にあてはめて表示するにはどうすれば、、、。
0754747
02/05/20 01:01ID:???0755747
02/05/20 01:05ID:???でもよーわからん、、、
ノートに書き写して後でゆっくり考えてみます。
ありがとう!
0756nobodyさん
02/05/20 01:11ID:???0758741
02/05/20 05:06ID:VDOXGDf5実際、\r・\r\n(あと\t)がどのような状態で入っているのか
cgiのコンソールで書かせて、HPに表示させるためです。
ただ長いスペースが空いているのではわからないので、
表示できる形に直しているのです。
>>746
そのとおり。XMLソースを加工しています。
問題をはっきりするため、読みこんだ$ファイルを
$a=~s/\r\n/\\r/ig;
$a=~s/\t/\\t/ig;
##デバック
$a=~s/\\r/\r\n/ig;
$a=~s/\\t/\t/ig;
して書きこんでいるだけなのですが、
書きこみ前と後のXMLファイルをVCでバイナリで開いてみると、
どうやら0D0Aが0Aに変わってしまっているようなのです。
何が問題なのでしょうか?
0759関係ないけど
02/05/20 05:30ID:???s///になんでiを付けてるのでちゅか?
デバッ ク ってなんでちゅか?
<pre>じゃだめでちゅか?
表示させるために置換したものを、なんで再びファイルに書くのれちゅか?
0760あとね
02/05/20 05:36ID:???0762とんちんかん
02/05/20 14:27ID:827vrQS8してるんですが、ちょっとした理由でこのログ ファイルが Unicode 形式になってしまいまいた。
でこのスクリプトで読み込んでみたら案の定白紙のテキスト ファイルを作ってくれました。
Perl で UCS2 のファイルの読み書きってできるんでしょうか?
Jcode.pmとかって使うんですか?
教えて君ですみません。
0763nobodyさん
02/05/20 16:08ID:???yes.
0764nobodyさん
02/05/20 20:31ID:???例えば
a==bで尚且つcの場合"あいうえお"を返す。a==bで尚且つcで無い場合"アイウエオ"を返す。
a==bでなかったら"123"を返す。それ以外は"---"を返す。
それで
if(a==b){if(c){z="あいうえお"}else if{(c){z="アイウエオ"}
}
else if{(a!=b){z="123"}
}
}
else{z="---"}
だと、当たり前のようにエラーになります。教えて君ですみませんが皆さんの力を貸して下さい。
0766nobodyさん
02/05/20 21:08ID:???もし $A eq $B かつ $A eq $C のとき $Z="あいうえお";
そうじゃなくて $A eq $B かつ $A ne $C のとき $Z="アイウエオ";
そうじゃなくて $A ne $B のとき $Z="123";
それ以外のとき $Z="---";
if && elsif else
0769nobodyさん
02/05/20 21:38ID:yMovYRK1$img = Image::Magick->new;
$img->Read( $file );
$img->Crop( $w, $h, $x, $y );
$img->Write( $file2 );
とやることで一ヶ所の切りだしはできるのですが、
格納している画像をカットしてしまうので、部分コピーするか、
元画像をコピーしようと思います。
ループの中に
$img2= $img->Clone;
を入れて、 $img2 に対して処理を行うことにしましたが、
Cropが有効にならなかったり、前回と同じ位置が吐き出されたりと
うまくいきません。
指定範囲を別の変数にコピーして、そこから書き出すということを
やりたいのですが、どのようにしたらいいでしょうか?
0771長瀬 愛
02/05/20 22:16ID:95UXUtUeカッコの数があわないのではないか。
それはともかく、この判定条件ではz="---"の文には
至らない気がするがまあいいや。
if(a==b){
if(c){
z="あいうえお";
}else if(c){
z="アイウエオ";
}
}else if(a!=b){
z="123";
}else{
z="---";
}
>>768
グレシャムの法則というのがあってね以下略
0772nobodyさん
02/05/20 22:17ID:???0773771 長瀬 愛
02/05/20 22:30ID:95UXUtUeくどいけど旅の恥はかきすて。
if($a==$b){
if($c){
$z="あいうえお";
}elsif($c){
$z="アイウエオ";
}
}else{
$z="123";
}
初心者は何がわからないかもわからなくて、検索もできません。
答える気がねーなら、煽ってんじゃねーヴォケが
ここは”一応”初心者スレなんだから。
オレモナー。
0775nobodyさん
02/05/21 02:20ID:iePDZE0bSSI/.htaccessが使用できないサーバ上にPerlで作成した単純なテキストを返すCGIをアップロードしました。
IEのアドレスエディットボックスに直接CGIのアドレスを入力すると正常動作しています。
これをindex.htmlがロードされると同時に読み込みたいのですが
CGIの参考書に載っている<!--exec cmd="hoge.cgi"-->や<img src="hoge.cgi">の呼び出し方が出来ません。
この他にindex.htmlと同時にhoge.cgiを読み込む方法がありますでしょうか?
0777nobodyさん
02/05/21 02:58ID:OppOtViG「SSI/.htaccessが使用できないサーバ」ですから
<!--exec cmd="hoge.cgi"-->
は使えません。
「単純なテキストを返すCGI」ですから
<img src="hoge.cgi">
はイメージデータが返さなければ意味がないです。
<script src="hoge.cgi"></script> で呼び出して、
ソースを下記のように javascript に書き換えましょう。
$text = "出力する文字列";
print "Content-type: text/plain\n\n";
print "document.write('$text')\;\n";
exit;
0778775
02/05/21 03:11ID:iePDZE0bご丁寧なレスありがとうございました。
早速試してみます。m(__)m
0780nobodyさん
02/05/21 03:53ID:1dGqnG5G学内BBS作ってるんですが、全員同じプロクシなので、
ほかに手っとり早く個人識別する方法はありますでしょうか。
0781nobodyさん
02/05/21 04:01ID:???(1)全員に固有のIDとパスワードを配布する。
(2)書き込みは係りの人に紙に書いて手渡しにする。
(3)自分だけ書き込み出来るようにすれば、おそらく書き込んだのは君だ。
(4)名前を書かせ、それを信じる。
0782775
02/05/21 04:04ID:iePDZE0b試して見ましたが、どうやらそのようですね。
ASAHIネットがCGIのβサービスを開始したからCGIの勉強を始めようとしたのですが・・・
うーん、他の人達は一体どのように対応しているのかなぁ???
もう少し調べて見ます。
ご指摘ありがとうございました。
0784nobodyさん
02/05/21 04:11ID:1dGqnG5Gうーん、2chのIDみたいなのとかつけたら
面白がると思うんだよね。
5) 300カ国の人間が300人自分の言語で書く。
0786nobodyさん
02/05/21 06:14ID:???今度IISでPerl使うんですけど、選択に迷ってまして、
どんなもんでしょ?
0790nobodyさん
02/05/21 10:59ID:???ActivePerl → 処理系名
ですよ。
0794nobodyさん
02/05/21 13:04ID:???どうしてもうまくいかない箇所があるのでどなたか教えてください。
書き込まれる本文を「$message」としたとき、
$message =~ s/(http:\/\/[ほげほげ]+)/<a href=\"$1\">$1<\/a>/ig;
こんな感じになると思うんです。
そこで、
$message =~ s/(http:\/\/[\w\.\,\/\~\-\+\=\#\%\&\?\(\)]+)/<a href="$1" target="_blank">$1<\/a>/ig;
こういう記述でやってみました。
ところが、どうしても以下のような「,」が続くURLや、
ttp://k-tai.impress.co.jp//cda/article/news_toppage/0,,9441,00.html
以下のような「&」が入るときに、URLのリンクがそこで途切れてしまうのです。
ttp://news.lycos.co.jp/company/story.html?q=20bloombergki1580637&cat=10
試行錯誤してみたのですが、詰まってしまいました。
どなたか教えて頂けませんか?
0795nobodyさん
02/05/21 13:50ID:???http://www.din.or.jp/~ohzaki/perl.htm#httpURL
0797とんちんかん
02/05/21 14:30ID:+ltjKcZFJcode,pMの実装例がみたいのですが、サンプルどこかにないでしょうか。
けっこうしつこく検索してるんですが。。。
UCS2をよみこむスクリプトつくりたいのdせうが。
0798nobodyさん
02/05/21 14:34ID:???DzSoft Perl Editorは良さそうだね。
(ただし、フリー版は行数制限あり)
http://www.dzsoft.com/dzperl.htm
0799nobodyさん
02/05/21 16:11ID:???最初はSocketを使って、レスポンスが帰ってきたらUpというようにしていましたが、
性質上どうも動作が重いので、代わりにpingで見ようとしましたが、全然資料が無くてよくわかりません。
どなたかご教授願います。
0800800?
02/05/21 16:21ID:???普通のテキストファイルはちゃんとできるのですが。
有用なリンクなどがあれば教えていただきたいです。
0801nobodyさん
02/05/21 16:44ID:???0802nobodyさん
02/05/21 16:50ID:???binmodeは多分やってるはずですが・・・。
以下ソースです。
$addr = (gethostbyname("www.2ch.net"))[4];
$name = pack("S n a4 x8", 2, 80, $addr);
socket(S, 2, 1, 0);
connect(S, $name);
binmode(S);
select(S); $| = 1; select(stdout);
print S "GET /back.jpg HTTP/1.0\n\n";
open(A,">>back.jpg");
while (<S>) {print A;}
close(A);
close(S);
0803nobodyさん
02/05/21 17:13ID:???ダメすぎです。
0804nobodyさん
02/05/21 17:37ID:Eo1hAg2d"ー"は日本語のハイホン
これが走らないのですが、ーはできないのですか?
0805nobodyさん
02/05/21 17:41ID:???【Perl】FAQを敢えて質問するネタ心者コーナー
に変更されますた。
0806nobodyさん
02/05/21 18:08ID:???http://www.google.co.jp/search?num=100&hl=ja&safe=off&q=%83%6E%83%43%83%7A%83%93&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
ハイフン
http://www.google.co.jp/search?num=100&hl=ja&safe=off&q=%83%6E%83%43%83%74%83%93&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
ハイプン
http://www.google.co.jp/search?num=100&hl=ja&safe=off&q=%83%6E%83%43%83%76%83%93&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0807nobodyさん
02/05/21 18:18ID:???ttp://www.warbirds.nu/heiki/42000.htm
0809nobodyさん
02/05/21 22:04ID:???参考サイト(http://x68000.startshop.co.jp/~68user/)
書き出すファイルのファイルハンドルもbinmodeにしてね。
それとHTTPの応答は邪魔だから捨てると。
IO::SocketやLWPもチェック。
================================
use Socket;
$port = getservbyname('http', 'tcp');
$iaddr = inet_aton("www.2ch.net") or die "www.2ch.netは存在しないホストです。\n";
$sock_addr = pack_sockaddr_in($port, $iaddr);
socket(SOCKET, PF_INET, SOCK_STREAM, 0) or die "ソケットを生成できません。\n";
connect(SOCKET, $sock_addr) or die "www.2ch.netのポート$portに接続できません。\n";
select(SOCKET); $|=1; select(STDOUT);
binmode(SOCKET);
print SOCKET "GET /back.jpg HTTP/1.0\r\n";
print SOCKET "\r\n";
while (<SOCKET>){
m/^\r\n$/ and last;
}
open(FH, "> tmp.jpg");
binmode(FH);
while (<SOCKET>){
print FH $_;
}
close(FH);
0813nobodyさん
02/05/22 09:31ID:???0814nobodyさん
02/05/22 11:42ID:o5bpVYAL配列のサイズを求めたいのですが、length(@arry)や(-s @arry)で取れません。
サイズを求める記述を教えてください。
0815nobodyさん
02/05/22 12:29ID:TrskWj5Vforeach (@arry){$length = length;}
0816nobodyさん
02/05/22 12:30ID:???配列をスカラーコンテキストで評価すると要素数になります。
my @array = 0..99;
my $c = @array;
print $c;
それともこういうこと?
my @array = 0..99;
my $length = 0;
map { $length += length } @array;
print $length;
どちらにしろまともな参考書を読むのをお勧めします。
0817nobodyさん
02/05/22 14:29ID:FKXAo2H10818nobodyさん
02/05/22 14:31ID:FKXAo2H1$length=keys %hash_name;
0819nobodyさん
02/05/22 14:34ID:dip8mLbFuse MLDBM 'GDBM_File';
tie (%db, 'MLDBM', 'data.pag', O_CREAT|O_TDWR, 0644) || die;
としましたが、
MLDBM:error Second level tie failed 'ファイルもディレクトリもありません'
と出て止まってしまいます。
スカラーを格納する時は、use GDBM_File ですぐできたのですが、
このエラーの原因が解りません ;;
Diedは上記エラーの次に出ます。MLDBMは最新です。
どなかた勘所の解る方、ヒントでも教えていただけませんか。 よろしくお願いいたします。
0820nobodyさん
02/05/22 14:35ID:LbPQIjeDContent-type: text/html\n\n
書いて、HTMLを表示したものを、処理の終わりがけに消して
Location: jump_url\n\n
したいのだが、どうすればいいのれすか
■ このスレッドは過去ログ倉庫に格納されています