Perlコーディング初心者質問スレ Part 52
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2006/09/15(金) 14:01:51ID:gobry0n2【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0884nobodyさん
2006/11/20(月) 23:04:46ID:???0885nobodyさん
2006/11/20(月) 23:12:06ID:???use strict;
use Math::BigInt;
use Tie::LazyList;
tie my @seq, 'Tie::LazyList', [ 1 ], sub { my($array_ref, $n) = @_; $n };
for my $n (1..20) {
my $x = Math::BigInt->new($seq[$n]);
print "$x\n" if $x->is_even;
}
0886nobodyさん
2006/11/20(月) 23:15:17ID:???0887nobodyさん
2006/11/20(月) 23:17:56ID:???ただ、4 % 2 = 0 じゃなくて 4 % 2 == 0
0891nobodyさん
2006/11/20(月) 23:32:48ID:???my @Array = ( 1.. 1000 );
my %number;
@number{@Array} = (1) x @Array;
printf qq|%d\n|, $_ for grep not( $_ % 2), keys %number;
# 乱数っぽく♪
0893nobodyさん
2006/11/20(月) 23:50:32ID:???print $_ if !($_ % 2);
}
0894nobodyさん
2006/11/21(火) 00:03:52ID:???0895TORA
2006/11/21(火) 00:11:22ID:???みなさんの出してくれているソースがまったく理解できずにいます。
まだ勉強して無いところが多かったみたいです。
本当に迷惑かけてすいません。
0896nobodyさん
2006/11/21(火) 00:11:36ID:???0897nobodyさん
2006/11/21(火) 00:12:35ID:???だったら0から勉強しなおしなよ
0898nobodyさん
2006/11/21(火) 00:19:46ID:???0899TORA
2006/11/21(火) 00:20:49ID:???0900nobodyさん
2006/11/21(火) 00:21:52ID:???1. <a href=~>
2. </a>
上記の二つを簡潔に表すのに、</?a\s*.*?>としてみたものの<a>というのにもマッチしてしまいます。
/があったら属性なし、/がなければ属性必須にするような後方参照は可能でしょうか。
よろしくお願いします!
# <a>がHTMLの文法として正しいのかどうかは知りません
0901nobodyさん
2006/11/21(火) 00:25:44ID:???そんなんググるか、リファレンスとか持ってれば必ず載ってるべ?
理解しようとしない・調べようとしないでは、ここで聞くだけ無駄では?
>990
</?a\s*.+?>
はどう?
0902nobodyさん
2006/11/21(火) 00:27:05ID:???.*?←文字が無くてもマッチ
0903900
2006/11/21(火) 00:32:26ID:???/の有無で分岐するみたいな巧妙な文法ってないでしょうかね。
0904nobodyさん
2006/11/21(火) 00:34:33ID:???0905nobodyさん
2006/11/21(火) 00:39:43ID:???テキトーすぎですまそ
0906nobodyさん
2006/11/21(火) 00:40:40ID:???0907900
2006/11/21(火) 00:51:46ID:???ひょっとしてと思ったんですが。ありがとうございます。
0908nobodyさん
2006/11/21(火) 00:53:27ID:???実直に書いてみた。
my @str = ('<a href=...>', '</a>' , '<a>', '</a hoge>' ) ;
for my $str ( @str ){
my $flag = 0 ;
if ( $str =~ m{\<
(/(?{ $flag = 1 })|(?{ $flag = 0 }))
a
(??{ $flag == 0 ? '\s+\S+.*?' : '' })
\>}x ){
print $str . "\n" ;
}
}
アホす。
0909nobodyさん
2006/11/21(火) 00:59:54ID:???> (/(?{ $flag = 1 })|(?{ $flag = 0 }))
なるほど、|を使ってマッチしなかったときはフラグを上書きすりゃいいのか。勉強になった
0910nobodyさん
2006/11/21(火) 01:13:46ID:???0912900
2006/11/21(火) 01:28:08ID:???これだ!2つ目の?がif文になってるんですね。勉強になりました。
aを何とか一回に収めたいところですが、自分で考えてみます。
0913nobodyさん
2006/11/21(火) 02:08:28ID:???CPANでモジュールをインストールしたいのですが、File::Copyというモジュールがインストールできません。
エラーコードは以下の通りでした。
cpan > install File::Copy
CPAN: Storable loaded ok
Going to read /home/account/.cpan/Metadata
Database was generated on Mon, 20 Nov 2006 05:24:36 GMT
Running install for module File::Copy
Running make for N/NW/NWCLARK/perl-5.8.8.tar.gz
The most recent version "2.09" of the module "File::Copy"
comes with the current version of perl (5.8.8).
I'll build that only if you ask for something like
force install File::Copy
or
isntall N/NW/NWCLARK/perl-5.8.8.tar.gz
Running make test
Make had some probrem, maybe interrupted?Won't test
Has no own directory
Running make install
Has no own directory
Make had some probrem, maybe interrupted?Won't install
サーバはさくらサーバです。
LWPモジュールはインストールできました。そのモジュールは5.8.4というフォルダ以下に入っています。
ご回答お願い致します。
0914nobodyさん
2006/11/21(火) 02:39:03ID:???0916nobodyさん
2006/11/21(火) 09:06:09ID:???0918JAPU ◆lVJAPUTeX.
2006/11/22(水) 01:29:50ID:???ずばりのメッセージが出てますよ?
一応大雑把に解説。
> [The most recent version "2.09" of the module "File::Copy"]
> comes with [the current version of perl (5.8.8)].
モジュール "File::Copy"の最新版である "2.09" は現行版のperl (5.8.8) に含まれます。
> I'll build that [only if you ask for something like
> force install File::Copy
> or
> isntall N/NW/NWCLARK/perl-5.8.8.tar.gz]
"force install File::Copy" や、"install N/NW/NWCLARK/perl-5.8.8.tar.gz" のような
(通常とは違う) 要求があったあった場合にだけビルドします。
http://www.excite.co.jp/world/english/
上手く解釈できない単語をちょっと置き換えるだけでそれなりの日本語が出てきます。
File::Copy -> File_Copy
"2.09" -> 2.09
(5.8.8) -> 5.8.8
など。
0919nobodyさん
2006/11/22(水) 11:14:05ID:???何行目でエラーでたのかわかりません。
どんなエラーか知る方法ありますでしょうか。
0920nobodyさん
2006/11/22(水) 11:33:50ID:???それかブラウザにエラーを表示するモジュールがある
それかKENTでスクリプトエラーを表示するスクリプトが置いてある
お好きなのをどうぞ
0923nobodyさん
2006/11/22(水) 17:29:09ID:???use strict;
use warnings;
最初にこの2行を入れておけ。
CGI書いてるんなら、
use CGI::Carp qw/fatalsToBrowser/;
これも追加。
0924nobodyさん
2006/11/22(水) 19:01:32ID:???Perl のバージョンは v5.8.6 です。
Apache の設定で 「LogLevel debug」 にしても (warnの場合でも)、Apache のログに Perl のエラー箇所が出力されません。
何行目にエラーがある、といった情報が欲しいのですが、この程度のエラーのみとなります。
[Wed Nov 22 18:51:19 2006] [error] [client 127.0.0.1] Premature end of script headers: test.cgi
詳しいエラーを出力する方法は無いでしょうか?
CGI/Perl のソースは次の通りです。
-----------------------------------
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
hoge; # 意図的にエラーを発生させてます。
-----------------------------------
0925924
2006/11/22(水) 19:03:09ID:???Apache のエラーログには [Wed Nov 22 18:51:19 2006] [error] [client 127.0.0.1] Premature end of script headers: test.cgi が出力されるだけです。
0926924
2006/11/22(水) 19:06:27ID:???0927924
2006/11/22(水) 19:15:19ID:???use warnings;
use CGI::Carp qw/fatalsToBrowser/;
のどちらも書かなくても、Apache のエラーログにはCGIエラーが記録されていたようです。
CGIエラーなんてもんはバーチャルホストのエラーログに記録されるに決まっている、と考えていたのですが
Apache全体のエラーログに出力されていたようです。
0928nobodyさん
2006/11/22(水) 19:24:33ID:???use strict; は 宣言されていない変数の使用などをエラーとするなどの厳格な処理をするということであることは分かっていて、
use CGI::Carp qw/fatalsToBrowser/; はエラーをブラウザに出力する、ってことは分かるんだけど、
use warnings; って具体的にどういう時に役にたつんでしょうか?
ヘルプを見た限りでは可能な限り警告を出力する、だそうですが、
use strict; のみで出ないエラーが use warnings; で出たという経験はありません。
0930nobodyさん
2006/11/22(水) 23:29:23ID:???> use strict; のみで出ないエラーが use warnings; で出たという経験はありません。
大丈夫。そのうち経験できるから。
0931nobodyさん
2006/11/23(木) 00:06:00ID:???ブラウザを閉じてもスクリプトを動かし続けるにはどうしたらいいの?
0932nobodyさん
2006/11/23(木) 00:10:18ID:???0934nobodyさん
2006/11/23(木) 01:26:43ID:???cron使えないので、そのある時間以降の最初のアクセス時に消すようにしたいです
例えば毎日6時とすると
if( $now_date{'hour'} < 6){
$dtp = 1;
}
if( $now_date{'hour'} >= 6 && $dtp == 1){
unlink 'log.dat';
$dtp = 0;
}
個別に時間の取得やフラグ判定では削除はできるのですが
これを組み合わせるとうまくいきません
どうすればいいでしょうか?
0935nobodyさん
2006/11/23(木) 01:49:14ID:???あと、2つのif文の間に何かの処理があるのか知らないけど、2つ目のif文に
時刻の判定は不要では?一回目でフラグたったんだから。
0936nobodyさん
2006/11/23(木) 01:52:56ID:???0937nobodyさん
2006/11/23(木) 02:00:56ID:???その日にちで判断しかない?
0938934
2006/11/23(木) 02:14:59ID:???6時過ぎてフラグが1だったらログを消す
フラグを0にする
それ以降の6時過ぎのアクセスはフラグは0なので
ログ削除は実行されない
これじゃだめなのかな
0939nobodyさん
2006/11/23(木) 02:21:18ID:???0940nobodyさん
2006/11/23(木) 02:22:35ID:???フラグは外部にファイルか何かで残さないとだめ。下記、雰囲気のみ。
### タイムスタンプの古いフラグを削除
(-d 'flag' and (stat('flag'))[10] < $threshold_time) and rmdir 'flag';
### フラグがなければ最初のアクセス
unless (-d 'flag') {
unlink 'log.dat';
mkdir 'flag';
}
0941934
2006/11/23(木) 03:11:45ID:???ありがとうございます
0942nobodyさん
2006/11/23(木) 16:00:23ID:???#!/usr/bin/perl
...
あなたの記述したperlコード
...
↓上のコードを下のように書き換えればエラーがブラウザで見えるから。
注:エラーの行数は__END__の真下の行を1行目としてカウントされるよ。
#!/usr/bin/perl
use strict;
use warnings;
print "Content-Type: text/html\n\n";
eval join'',<DATA>;
print $@;
__END__
...
あなたの記述したperlコード
...
0943nobodyさん
2006/11/23(木) 20:42:06ID:Hjnm2TEJあれを掲示板につけたいんですけど
掲示板の文の中になにかの文字を入れて、オミクジの結果を表示するところまではできるんですけど
それは書き込むたびにランダムに表示が変わっちゃうんですけど。
それを1日ごとに変わるようにできないでしょうか?
0944nobodyさん
2006/11/23(木) 21:09:52ID:???0945JAPU ◆lVJAPUTeX.
2006/11/23(木) 21:12:01ID:???とか? ただし、深夜の12時が区切りになるけど。
正確に24時間以上、という条件なら cookie でホゲ。
0946nobodyさん
2006/11/23(木) 21:13:07ID:Hjnm2TEJフムフム
ありがとう
0947nobodyさん
2006/11/23(木) 21:13:49ID:Hjnm2TEJフムフム
やってみます
0948nobodyさん
2006/11/23(木) 21:14:19ID:Hjnm2TEJありがとうございます。
0949nobodyさん
2006/11/23(木) 22:13:47ID:???1度しか入力できません
何がいけないのでしょうか?簡単にやるのはどうしたらいいのでしょうか?
use strict;
my $key = 'r';
do{
#色々と
print "再実行はrを入力\n";
$key = getc;
}while($key eq 'r');
0950nobodyさん
2006/11/23(木) 23:03:59ID:???0951nobodyさん
2006/11/23(木) 23:05:01ID:???\nが、ではなく、\nまで
0952nobodyさん
2006/11/24(金) 00:08:52ID:???1key コマンドをやりたいなら Term::ReadKey の利用も検討してみよう。
結局使わなかったとしても、調べる過程でいくつかの事を学べるよ。
0953nobodyさん
2006/11/24(金) 17:09:36ID:???スクリプトにサイトAのアドレスが入力された場合に、
サイトBのアドレスを表示するにはどうしたらいいの?
0954nobodyさん
2006/11/24(金) 17:36:11ID:???0955nobodyさん
2006/11/24(金) 17:52:00ID:???転送URLだったら転送後のURLとして処理
非転送URLだったらそのまま
見たいな感じ
0956nobodyさん
2006/11/24(金) 18:34:51ID:???0957nobodyさん
2006/11/24(金) 19:07:04ID:???0959949
2006/11/24(金) 22:01:46ID:???ありがとうございました
chomp($key = <STDIN>);でうまくいきました
Term::ReadKey;の使った方もできました
でも仕組みはよくわかりませんが
がんばって勉強します・・・
0961nobodyさん
2006/11/25(土) 02:40:29ID:???0962nobodyさん
2006/11/25(土) 02:41:15ID:???0963nobodyさん
2006/11/25(土) 09:10:31ID:???0964nobodyさん
2006/11/25(土) 13:24:40ID:???$value =~ tr/+/ /;
がよく使われてるんだけど、
複数の文字じゃないのに「$value =~ s/+/ /;」を使わない理由、
そもそもなぜ「+」をスペースに変換する必要があるのか
教えて
0965nobodyさん
2006/11/25(土) 13:51:10ID:???0966nobodyさん
2006/11/25(土) 14:29:50ID:???「+」をスペースに変換する必要があるのは、スペースが「+」に変換されてるからだろ・・・
0967nobodyさん
2006/11/25(土) 16:06:45ID:5hW/EMoWあれってどうすればいいですかね?
0968nobodyさん
2006/11/25(土) 16:08:05ID:???0969nobodyさん
2006/11/25(土) 16:11:17ID:???0970nobodyさん
2006/11/25(土) 16:23:19ID:5hW/EMoWそのやりかたを詳しく
0971nobodyさん
2006/11/25(土) 16:32:40ID:???0973nobodyさん
2006/11/25(土) 16:54:42ID:5hW/EMoWすべて
0975nobodyさん
2006/11/25(土) 20:26:36ID:Nft95t5xありがとう
0977nobodyさん
2006/11/26(日) 10:21:34ID:???jcode.pmとjcodeのディレクトリをアップしてuse libでパスを指定したら動いた
この使い方は推奨されてない?
0978nobodyさん
2006/11/26(日) 10:24:05ID:???0979nobodyさん
2006/11/26(日) 10:44:06ID:???Encode で期待する動作が得られないならそれも仕方無いかと思う。
あと、Encode はコスト高いって聞くし、Jcode.pm が軽いならいいんじゃないかな。
0980JAPU ◆lVJAPUTeX.
2006/11/26(日) 11:36:06ID:???Jcodeに限らず、必要なモジュールが導入されていない場合に自前で用意して use lib して使用するのは普通です。
ただし、>>979で書かれている通り、可能であればEncodeを利用するべきでしょう。
>>979
2.0 <= $Jcode::VERSION and 5.008001 <= $] の環境では、JcodeはEncodeのwrapperとして動作します。
したがって、速度はほぼ変わりません。
# Encodeが標準ではない環境もまだあるので、一概にEncodeを使うべきとは言い切れないところ。
0981nobodyさん
2006/11/26(日) 12:07:09ID:Y4Eo2nyoレス数が950を超えています。1000を超えると書き込みができなくなります。