Perl コーディング初心者質問コーナー Part26
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/07/24 19:48ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0782nobodyさん
03/08/09 23:51ID:???#! /usr/local/bin/perl
print qq|Content-type: text/html; charset=Shift_JIS
<HTML>
<HEAD>
<TITLE>JUMP</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF" text="#000000">
<B><A href=$ENV{'QUERY_STRING'}>$ENV{'QUERY_STRING'}</A></B>
<HR>
次のサイトにジャンプしようとしています。
</BODY>
</HTML>|;
exit;
これでいいかね
0783あぼーん
NGNG0785あぼーん
NGNG0786あぼーん
NGNG0787あぼーん
NGNG0788あぼーん
NGNG0789nobodyさん
03/08/10 02:36ID:c9slSjrq# CGIヘッダの出力
print "Content-type: text/html\n\n";
while($HP1 > 0) and ($HP2 > 0){
srand1;
srand2;
}
# Player1
$HP1 = 400 - $kougeki1;
$KIK1 = 60;
$PAN1 = 20;
$DF1 = 10;
# Player2
$HP2 = 300 - $kougeki2;
$KIK2 = 100;
$PAN2 = 40;
$DF2 = 0;
# Player1
$kougeki1 = srand;
# Player2
$kougeki2 = srand2;
0790nobodyさん
03/08/10 02:36ID:c9slSjrqif($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN1'} - $defense->{'$DF2'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK1'} - $defense->{'$DF2'};
}
0791nobodyさん
03/08/10 02:37ID:c9slSjrqif($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN2'} - $defense->{'$DF1'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK2'} - $defense->{'$DF1'};
}
($damage < 0) and ($damage = 0);
$defense->{'HP1'} -= $damage;
($damage < 0) and ($damage = 0);
$defense->{'HP2'} -= $damage;
0792nobodyさん
03/08/10 02:39ID:c9slSjrqprint "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>対戦バトル</title></head>\n";
print "<body>
<p>Player1:体力は$HP1です</p>
<p>Player2:体力は$HP2です</p>
<p>Player1は<big>$kougeki1</big>のダメージを与えたため、
Player1は喜んだ。「命!!」</p>
<p>Player2は<big>>$kougeki2</big>のダメージを与えたため、
Player1は喜んだ。「炎!!」</p></body>\n";
「つまんねー、馬鹿!」とやじが飛んだ。
print "</html>";
0793あぼーん
NGNG0795nobodyさん
03/08/10 03:16ID:???削除人は何やってる?
0796nobodyさん
03/08/10 03:34ID:???削除依頼だけしっかりやっときましょう。
0797nobodyさん
03/08/10 03:43ID:???所定の回数に達したらアク禁になるわけだし
俺と同じISPじゃなきゃいいが・・・
0799nobodyさん
03/08/10 09:57ID:???俺の書き込みも削除依頼されとる・・・
0800nobodyさん
03/08/10 10:05ID:???変換前の形式は、ちょっと特殊で年月日時分となってます。
0308100000
変換後は、クッキー形式にしたいです。
Thu, 01-Jan-1970 00:00:00 GMT;
年、月、日、時、分は、ほぼそのままでOKですが、曜日とGMTへの変換はどのように
すればよいのでしょうか?
よろしくお願いします。
0801あぼーん
NGNG0802nobodyさん
03/08/10 10:31ID:9Q9rpSmQuse ABC; と @ISA = ('ABC'); とは何が違うのですか?
0803nobodyさん
03/08/10 10:38ID:???0804nobodyさん
03/08/10 10:39ID:???自前で計算して用意するか、
time()みたいに、1970年1月1日からの秒数に変換して、そこからlocaltimeで変換するか
0805nobodyさん
03/08/10 10:40ID:???http://books-support.softbank.co.jp/pn/fumo01.html
>>802
http://www.rfs.jp/sitebuilder/perl/04/03.html
0806nobodyさん
03/08/10 10:50ID:???後者の方法はサブクラス化という方法で ABC 内の関数を
オーバーライドしたい時などその方法を使用する
…ぐらいしか思いつかないな
0807nobodyさん
03/08/10 13:03ID:????あれにかかわったレスも削除して「なかったことに」してもらうのが一番。
ついでに削除屋さんは広告も一括して削除してくれたらありがたいなぁ。
0808nobodyさん
03/08/10 13:25ID:???依頼者と違いますが、>>73に追加です。削除理由は同じです
削除対象アドレス:
http://pc2.2ch.net/test/read.cgi/php/1059043704/744-750
http://pc2.2ch.net/test/read.cgi/php/1059043704/759-761
http://pc2.2ch.net/test/read.cgi/php/1059043704/768-788 ←ここ!
http://pc2.2ch.net/test/read.cgi/php/1059043704/793
削除理由・詳細・その他:
巨大AA連続投稿(ほぼ同一人物)
荒らしをしている人物は夏の風物詩で、暫く粘着しそうなので、こまめに削除依頼出すのでよろしく。
0809nobodyさん
03/08/10 14:29ID:???my ($year, $mon, $mday, $hours, $min) = unpack('A2A2A2A2A2', $packed_data);
で返った値をtimegm();につっこむ。$mon-1と$year+100を忘れずに。
>>802
useは@INCを辿ってモジュールを探して、
見つけたら読み込んでimportメソッドを実行する。
importされた関数、変数などが別名(エイリアス)で扱えるようになる。
コンパイル時に処理される。
@ISAはクラス内に呼び出されたメソッドがない場合、
@ISAを辿って目的のメソッドを探して実行するようになる。
実行時に処理される。
0810nobodyさん
03/08/10 16:29ID:???作ってみました。
package AB;
sub aloc {
my ($pkg, $a, $b) = @_;
my $obj = bless {"a" => $a, "b" => $b}, $pkg;
return $obj;
}
1;
0811nobodyさん
03/08/10 16:30ID:???package X;
use AB;
@ISA = ('AB');
sub new {
my ($pkg, $a, $b, $x) = @_;
my $obj = $pkg->aloc($a, $b);
$obj->{"x"} = $x;
return $obj;
}
1;
#!/usr/bin/perl
use X;
$q = X->new('A', 'B', 'X');
$ans = $q->{'x'};
print "$ans\n"; # Xと表示、OK
試しに、パッケージXの@ISAの行をコメントにしてみると、alocが見つから
ないと言われます - 当然です。
そこで、パッケージABの2行目に、
use Exporter; @ISA = ('Exporter'); @EXPORT_OK = ('aloc');
を挿入し、パッケージXのuseを
use AB('aloc');
に変更してみたら、上手く行きました。
ということで、useと@ISAの機能は分かりましたが、今度は、ABやXのような
クラスを実装する場合、Exporterで輸出するのが良いのか、それとも@ISAで
継承するのが良いのか、が分からなくなりました。
0812あぼーん
NGNG0813nobodyさん
03/08/10 16:31ID:c9slSjrqif($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN1'} - $defense->{'$DF2'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK1'} - $defense->{'$DF2'};
}
0814nobodyさん
03/08/10 16:32ID:c9slSjrqif($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN2'} - $defense->{'$DF1'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK2'} - $defense->{'$DF1'};
}
($damage < 0) and ($damage = 0);
$defense->{'HP1'} -= $damage;
($damage < 0) and ($damage = 0);
$defense->{'HP2'} -= $damage;
0815nobodyさん
03/08/10 16:32ID:c9slSjrqprint "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>対戦バトル</title></head>\n";
print "<body>
<p>Player1:体力は$HP1です</p>
<p>Player2:体力は$HP2です</p>
<p>Player1は<big>$kougeki1</big>のダメージを与えた。</p>
<p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p></body>\n";
print "</html>";
0816あぼーん
NGNG0817nobodyさん
03/08/10 16:37ID:???↓ハイ、次の方どうぞ
0818あぼーん
NGNG0819あぼーん
NGNG0820あぼーん
NGNG0821あぼーん
NGNG0822あぼーん
NGNG0823nobodyさん
03/08/10 17:21ID:???にゅ速で美味しんぼ連載してるひと?
0824nobodyさん
03/08/10 17:28ID:???0825nobodyさん
03/08/10 17:47ID:???0826nobodyさん
03/08/10 19:14ID:???0827nobodyさん
03/08/10 20:43ID:???継承が必要なら@ISAを使う、隠蔽したいなら使わない。かな。
(深く考えた事ないですね。オブジェクト指向なら継承しとけみたいな。)
モジュールはexportした方が便利かと。
(というか、するべきものだと思ってました。)
# 蛇足ですがalocはallocでは。
0828nobodyさん
03/08/10 21:37ID:???「そこで、パッケージABの2行目に、
use Exporter; @ISA = ('Exporter'); @EXPORT_OK = ('aloc');
を挿入し、パッケージXのuseを
use AB('aloc');
に変更してみたら、上手く行きました。」
と書きましたが、実行できるようにするだけなら、ここまでしなくても、
alocの呼び出しを、AB::alocとするだけで、充分ですよね。
「継承」の意味が良く分からないです(@ISA使わなくても、useで充分じゃない
のかなって思ってしまいます)。
オブジェクト指向の本質が分かってないんでしょうね。
# ご指摘のとおり、alocはallocのつもりでした。
0829nobodyさん
03/08/10 22:08ID:???Hoge.pm
--------------------------------
package Hoge;
import{ エクスポートな処理 }
--------------------------------
というものがあったとしたら、
use Hoge;
は、
BEGIN{
require Hoge;
Hoge->import;#または、import Hoge;と書いてもあり。
}
を実行しているだけ。
importメソッドがなけりゃ、
BEGIN{ require Hoge; }
と同じ。
だから、クラスによって違うのさ。
0830nobodyさん
03/08/10 22:21ID:???例えば10.99時間を10.59時間という風に小数点以下の部分を
きちんと分にする方法ってありませんか。
今は
my(@time_temp) = split(/\./, $time);
$time_temp[1] = int(60 * $time_temp[1] / 100);
$time = $time_temp[0].'.'.$time_temp[1];
とかやってるのですがもう少しすっきり出来たら良いなあと。
0831nobodyさん
03/08/10 22:27ID:???何がしたいのか意味不明
0832nobodyさん
03/08/10 22:27ID:???$time_temp[0]時間$time_temp[1]分
としたので三行目は無しで。
0833nobodyさん
03/08/10 22:48ID:???これ加えたほうがいいかと
0834nobodyさん
03/08/10 22:54ID:???$time =<>;
chomp($time);
my(@time_temp) = split(/\./, $time);
if(length($time_temp[1]) eq "1"){$time_temp[1] = $time_temp[1] * 10;}
$time_temp[1] = int(60 * $time_temp[1] / 100);
print "$time_temp[0]時間$time_temp[1]分\n";
0835nobodyさん
03/08/10 22:56ID:???0838nobodyさん
03/08/10 23:00ID:???http://perl.infoware.ne.jp/documents/perlboot.ja.html
>>830
$time = sprintf '%02d 時間 %02d 分', $time, ($time * 60) % 60, $time;
0839nobodyさん
03/08/10 23:18ID:64afxySW一つのファイルで、1500 行
を超えてしまいました。
行数が多いと何か不都合は起きますでしょうか?
お教え下さい。
0840nobodyさん
03/08/10 23:27ID:STOMuStSprint qq|<a href="hoge">fuga</a>|;
ってやればコードが見やすいのに、
いちいち
print "<a href=\"hoge\">figa></a>";
ってやってる人が多いんですか?
qqのほうが、コーディングもよけいなことあんまり考えなくて、はやくすむと思うんだけど
0841nobodyさん
03/08/10 23:30ID:???それを見やすいと思うのはPerlユーザーだけ。
俺は使い分けてるけどね。
0842nobodyさん
03/08/10 23:30ID:???最後の$time要らん。
>>839
そのスクリプトを保守する人間が困らないのなら別に問題無し。
>>840
最初に覚えた方法が一番分かり易いと思い込んでいる人は多い。
もちろんその方法しか知らない人も多い。
0843840
03/08/10 23:41ID:???なるほどねー。
自分最初にPerlおぼえて、
そのあとちょっとPHPかじって、
Javaおぼえようかなーて思ってる程度だからなー。
0845nobodyさん
03/08/11 00:55ID:???$time =<>;
my(@time_temp) = split(/\./, $time);
chomp($time);
if(length($time_temp[1]) eq "1"){$time_temp[1] = $time_temp[1] * 10;}
time = sprintf '%02d 時間 %02d 分', $time, ($time * 60) % 60, $time;
print "<a href=\"hoge\">figa></a>";
$time_temp[1] = int(60 * $time_temp[1] / 100);
print "$time_temp[0]時間$time_temp[1]分\n";
0846あぼーん
NGNG0847あぼーん
NGNG0848nobodyさん
03/08/11 00:59ID:???# CGIヘッダの出力
print "Content-type: text/html\n\n";
while($HP1 > 0) and ($HP2 > 0){
srand1;
srand2;
}
# Player1
$HP1 = 400 - $kougeki1;
$KIK1 = 60;
$PAN1 = 20;
$DF1 = 10;
# Player2
$HP2 = 300 - $kougeki2;
$KIK2 = 100;
$PAN2 = 40;
$DF2 = 0;
# Player1
$kougeki1 = srand;
# Player2
$kougeki2 = srand2;
0849nobodyさん
03/08/11 00:59ID:???if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN1'} - $defense->{'$DF2'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK1'} - $defense->{'$DF2'};
}
0850nobodyさん
03/08/11 01:00ID:???if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN2'} - $defense->{'$DF1'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK2'} - $defense->{'$DF1'};
}
($damage < 0) and ($damage = 0);
$defense->{'HP1'} -= $damage;
($damage < 0) and ($damage = 0);
$defense->{'HP2'} -= $damage;
0851nobodyさん
03/08/11 01:02ID:???print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>対戦バトル</title></head>\n";
print "<body>
<p>Player1:体力は$HP1です</p>
<p>Player2:体力は$HP2です</p>
<p>Player1は<big>$kougeki1</big>のダメージを与えた。</p>
<p>Player1は<big>$kougeki1</big>のダメージを受けて混乱した。
<p>Player1は<big>$kougeki1</big>のダメージで野原でクソをし始めた。
<p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p>
<p>Player2は<big>>$kougeki2</big>のダメージを受けて裸踊りを始めた。
<p>Player2は<big>>$kougeki2</big>のダメージで光浦なみの女にレイプし始めた。</p></p></body>\n";
print "</html>";
0853nobodyさん
03/08/11 10:23ID:???0855nobodyさん
03/08/11 12:03ID:vd5Ibrol∧_∧∩ /
( ´∀`)/<真珠のPerlと何が違うんですか!?
_ / / / \___________________
\⊂ノ ̄ ̄ ̄ ̄\
||\ \
||\|| ̄ ̄ ̄ ̄ ̄||
|| || ̄ ̄ ̄ ̄ ̄||
.|| ||
0856nobodyさん
03/08/11 12:04ID:???/"""''/ーナ-t----|
. / ,.‐ ⌒ /ヘ
{入|(・) (・) ||||||| / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|⊂⌒◯-------9) < まだ、動かないぜ!ベイビー!!
| |||||||||_ | \_______
\ ヘ_/ \ / ̄`\、
. \、__ i⌒i/, -'"~ `ヽ、
,.‐'´ i--i \
`〈ヽ, -'"~T ヽ、 , -'" ~ `ヽ、
/ ( ̄ T iヽ、__ \.
/ ( ̄T | `ヽ、 }
く  ̄ `ヽ、/__ /
0857nobodyさん
03/08/11 12:07ID:???|| ($damage < 0) and ($damage = 0);
|| $defense->{'HP1'} -= $damage;はダメージ
|| ∧_∧ 。
|| ( ^^ )/
 ̄ ̄ ̄ ̄ ̄ ̄ ( つ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/  ̄ ̄ ̄ ./| lヽ──────────────
| ̄ ̄ ̄ ̄| | | ダメージを受けると、糞をもらします
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|____|/ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧ ∧ ∧,,∧ ∧ ∧
(・,, ∧▲ ミ ∧ ∧ ( ∧ ∧
〜(_( ∧ ∧_( ∧ ∧_ミ・д・∧ ∧
@(_(,,・∀・)@ ( *)〜ミ_ ( ,,)
@(___ノ 〜(___ノ 〜(___ノ
0858nobodyさん
03/08/11 13:19ID:???でアクセスして表示しますよね?
これってこの全てのディレクトリの下にindex.htmlか.cgiかなにかを置いてあって、
それを表示してるってことですよね?
でも
鯖/カテゴリ/.../dat/
これでアクセスしたときと、
鯖/カテゴリ/.../dat/index.htmlでアクセスしたときと、
表示が微妙に違うんです。
どういう仕組みで表示させてるんでしょうか?
0860nobodyさん
03/08/11 13:56ID:???http://pc2.2ch.net/test/read.cgi?bbs=php&key=1059043704
http://pc2.2ch.net/test/read.cgi/php/1059043704/
0861nobodyさん
03/08/11 14:06ID:???0862nobodyさん
03/08/11 14:08ID:???あ、なるほど本来(?)なら
bbs=php&key=1059043704
と引数を渡すところを、
PATH_INFOってのを使って、
/php/1059043704/
こういう形で引数を渡すように設定できる
そういうことですね。勉強になりました。
0864nobodyさん
03/08/11 18:26ID:???改行だけなら1〜2バイトだし。
行数よりもファイルサイズが重要でないかい?
0865nobodyさん
03/08/11 18:41ID:???0866nobodyさん
03/08/11 19:59ID:???0867nobodyさん
03/08/11 20:01ID:???0868863
03/08/11 20:02ID:???サイズは623KBだ。
サクサク。
>>854
はマシンのスペックがよっぽどしょぼいか、
しょっぱいスクリプトの書き方してるんじゃないかな。
0869nobodyさん
03/08/11 20:04ID:???ってことは、10000行の改行だけのスクリプトってことだな
0870nobodyさん
03/08/11 20:04ID:???KBとBの単位をまちごた。
0871nobodyさん
03/08/11 21:26ID:???で素朴な疑問ですがやはりEUCでないとどこかで不都合起きたりしますか?
今のところ何も起きてないけど気になって。
0872nobodyさん
03/08/11 21:34ID:???さらに
perl5.8を使って、
use Encode;
でさらに幸せになれます。
0873nobodyさん
03/08/12 04:00ID:???パソコンの環境によっては500行以下にしなさいってことだ。
0874あぼーん
NGNG0875あぼーん
NGNG0876あぼーん
NGNG0877あぼーん
NGNG0878あぼーん
NGNG0879あぼーん
NGNG0880あぼーん
NGNG0881あぼーん
NGNG■ このスレッドは過去ログ倉庫に格納されています