Perl コーディング初心者質問コーナー Part37
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/22 01:41ID:???誰もが最初は初心者。
だからって、初心者に甘んじた質問の仕方は意味がないよ。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0237nobodyさん
04/09/04 23:09ID:mKo8NLNsそのソフトが終わらないと、そのコンソールがperlに乗っ取られた
まま使えなくなっちゃうんですが、これは仕方ないのでしょうか。
exit;入れてもダメですた。
system("Desktopmem.exe");
exit;
0239nobodyさん
04/09/04 23:51ID:DfAuufFlありがとうございます
>>234 >>238
http://www.hippo2000.info/cgi-bin/KbWiki/KbWiki.pl?cmd=disp&page=%B8%C5%A4%AF%A4%CA%A4%C3%A4%BF%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB
GDGraphってのに統合されたっぽいです
0241nobodyさん
04/09/05 00:05ID:???perlで変更して保存、それをdesktopmemoに読み込ませて起動と
いうことをやりたいので(スタートアップに登録)、すると、
バッチファイルかシェルスクリプトしかないですかね。
0243nobodyさん
04/09/05 00:13ID:???ありがとうございます。
今は、GDGraphなんですね。実は、オライリーの「perlによるwebプログラミング」
とかいう本、かなり前に買ってあって、あれには、GifGraph、Gimpが中心に説明
してあったので、うーむ、ちょっと隔世の感。やってないのがいけないんだけど。
0244210
04/09/05 00:15ID:7pvSYkfOスレ違いなのに回答ありがとうございます。
ただ、結局何をおっしゃりたいのか今ひとつよくわからなかったんですが
プログラムの想定外の事態が起こったということでしょうか?
0246nobodyさん
04/09/05 06:56ID:???0247nobodyさん
04/09/05 10:26ID:gdlM8Pd7どのように実現したら良いか方法をお教えください。
例えば、変数$textに下記のデータが入っているとして
--------------------------
> 引用元のテキスト1
> 引用元のテキスト2
> 引用元のテキスト3
返信テキスト
--------------------------
1桁目に半角の'>'があった行を下記のようなデータに置き換えたいと
考えております。
--------------------------
<span class="quoted">> 引用元のテキスト1
> 引用元のテキスト2
> 引用元のテキスト3</span>
返信テキスト
--------------------------
また、スレ違いの質問でしたら誘導していただけると嬉しいです。
0249nobodyさん
04/09/05 11:49ID:???俺なら一行ごとに
<span class="quoted">> 引用元のテキスト1</span>
ってやってから
</span><BR>\n<span class="quoted">
だのを削除するかもなあ。
正規表現ひとつだとややこしくなりそう。
0251nobodyさん
04/09/05 14:09ID:???$text =~ s|(^>.*(?:\n^>.*)*)|<span class="quoted">$1</span>|gm;
0252247
04/09/05 19:15ID:???おお、>>247の条件はバッチリでした。
ただ引用ブロックが複数あると、2つ目以降に適用されないので、
もう1条件つけ加えることで、完全に期待通りの動作ができました。
>>248 >>249 >>251さん、とても助かりました。ありがとうございます。
0253nobodyさん
04/09/06 00:59ID:WMpYnmeW今VIPで伝説の機能を検討中ですが、、、よいアイデアが出ません。(andスキル不足)
良いアイデアがあってかつスクリプト提供していただけるなら非常に嬉しいのですが・・・
■ VIP に伝説の機能をつけよう。。。
http://ex7.2ch.net/test/read.cgi/news4vip/1094337276/
■ VIP に伝説の機能をつけよう。。。2
http://ex7.2ch.net/test/read.cgi/news4vip/1094394603/
■ VIP に伝説の機能をつけよう。。。3
http://ex7.2ch.net/test/read.cgi/news4vip/1094396742/
0254nobodyさん
04/09/06 01:05ID:???0257nobodyさん
04/09/06 16:26ID:???何かプレゼントするとか。●とか
0258nobodyさん
04/09/06 21:56ID:???0259nobodyさん
04/09/06 22:24ID:Oq1gFU4V2:
3: for my $s (1..10)
4: {
5: print $s."\n";
6: }
これをやると、3行目でエラーになります。
Missing $ on loop variable at C:\hoge\test.pl line 3.
2: my $s
3: for $s (1..10)
とすれば正常に動くのですが、上のようにforの後ろでmyを使用しているサンプルを良く見るので、原因を知りたいです。
OSはWinXPです。お願いします。
0260nobodyさん
04/09/06 22:32ID:???俺んとこの ActivePerl 5.6.0 build623 (我ながらクソ古いバージョンだな) では
for my $s (1..10) でも問題なく動くんだが
君んとこの perl はどのバージョンのを使ってるんだ?
0261nobodyさん
04/09/06 22:49ID:xItUojLf0262253
04/09/06 23:31ID:anPS9KLr・1001の文章変更
・おみくじ機能:メール欄に!omikuji
・Load Average表示機能:メール欄に!uptime
・レベル表示:メール欄に!power
・名前のカラー機能:名前欄に@XXXXXX@(XXXXXXは16進カラーコード)
・スレ立てた1が名無しの名前を決められる機能
(派生で強制フシアナスレ、強制名無しスレ、名無しフシアナスレ、ID非表示スレなどが可能)
・IDがひらがな
・ひらがなトリップ
・本文で<tt><pre>タグ使用可能(!tt, !pre使用で)
詳細はまとめサイトで
http://www3.tokai.or.jp/ss295/vip/
便利な機能等ができれば他板にも導入されるかも。
公開テストみたいな感じになってます。
0264nobodyさん
04/09/06 23:34ID:???↑は新機能と言えるのだろうか。
0266259
04/09/06 23:44ID:Oq1gFU4V5.003_07
でした。今から新しいのに変えてみます。
0267259
04/09/06 23:57ID:Oq1gFU4V動きました!有難うございます。
ちなみにバージョンは5.8.4が最新だったのでそっちを入れました。
0269259
04/09/07 09:16ID:vClBsqv3Perlのバージョンによる機能の差分を紹介しているページを知りたいのですが、どなたかご存じないでしょうか?
サーバのPerlがv5.00502なので、色々とエラーが出て困ってます。
0271nobodyさん
04/09/07 14:04ID:???http://perldoc.com/perl5.8.4/pod/perl.html
perldelta
0272nobodyさん
04/09/07 18:54ID:???perlの処理で、”Enterキーを押す”っていう操作は
perlでは、どう記述するのでしょうか?
ご存知の方是非教えて頂きたいのですが?
0273nobodyさん
04/09/07 19:17ID:???0274nobodyさん
04/09/07 19:18ID:???偶然似たような質問がありましたのでご参考にされてはいかがでしょうか
ttp://pc5.2ch.net/test/read.cgi/tech/1090889189/961-963
0275nobodyさん
04/09/07 19:19ID:???質問です。
1分も経たないうちにCGIとかPerlとか超初心者なんだけどスレとマルチポストしちゃうのは
どういう狙いがあるのでしょうか?
0276nobodyさん
04/09/07 19:24ID:???マルチ杉
http://pc5.2ch.net/test/read.cgi/tech/1037383722/263
0277nobodyさん
04/09/07 19:44ID:MmA4CFyc>>642
こ こ は 質 問 ス レ で は あ り ま せ ん
質問です。
1分も経たないうちにPerlコーディングスレとマルチポストしちゃうのは
どういう狙いがあるのでしょうか?
0278nobodyさん
04/09/07 20:23ID:???おながします
0279nobodyさん
04/09/07 20:27ID:KfcdHICt0280nobodyさん
04/09/07 21:52ID:???↑ここまで独り言↑
↓ここから質問↓
0281nobodyさん
04/09/07 22:54ID:???PHP:
$str = "3SHRUNYAXA";
print strtr(\$str,"AIUEO", "aiueo"), " ", $str;
Perl:
$str = "3SHRUNYAXA";
print $str =~ tr/AIUEO/aiueo/ . " " . $str;
どちらも3 3SHRuNYaXaと表示。
0282259
04/09/08 00:54ID:mcKNZ5q4有難うございます。
って、全部英語なんですね・・・ 読めません(w;
0283nobodyさん
04/09/08 01:43ID:???0285nobodyさん
04/09/08 08:57ID:???0286nobodyさん
04/09/08 09:00ID:???0289nobodyさん
04/09/08 21:38ID:bxg/BX6l[email protected]
[email protected]
・・・
などのメールアドレスを読み込ませて、
一致しなければ、”未登録です”と表示させたいのですが、
ファイルに登録してあるメールアドレスも未登録だと表示されてしまいます。
もう半日以上いろんなサイトを見ながら試行錯誤していますが、
一向に解りませんでした。
どなたかご教授ください。
#メールアドレスの登録チェック
$a=0;
open(IN,"$mailfile") || &error("Open Error: $mailfile");
while (<IN>) {
($eml) = split(/\n/);
if ($in{'eml1'} ne $eml) { $a++; last; }
}
close(IN);
if ($a) {
&error("$in{'eml1'}は未登録です。");
0291289
04/09/08 21:53ID:bxg/BX6l素早いレスありがとうございます!
長時間悩んでいた自分が馬鹿でした・・・orz
0292nobodyさん
04/09/09 00:28ID:???0293nobodyさん
04/09/09 00:29ID:???0294nobodyさん
04/09/09 00:37ID:???引数が空なのにわざわざ()を付ける意味はあるんですか?
()は書いても書かなくても同じですか?
ということです。
0295nobodyさん
04/09/09 00:51ID:???0296nobodyさん
04/09/09 00:53ID:???納得しました。
0297nobodyさん
04/09/09 02:56ID:???挙動も違うがな。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html
0298nobodyさん
04/09/09 08:53ID:???&foo; # &foo(@_) と同じ
よって、&foo ≠ &foo()
0299nobodyさん
04/09/09 17:36ID:wkS7yjyl$tim = time;
で$timに「1094716247」といった10桁の数字が入りますが
この数字の内訳(? というかしくみを教えて欲しい・・・
やりたいことは
$dat = date('Y.m.d H:i', time());
で$datに入る「2002.09.09 15:00」といった文字列を
上の10桁の数字に変換することなのですが。
おねがいします。
0302nobodyさん
04/09/09 21:24ID:???sub timelocal {
my ($sec,$min,$hour,$day,$mon,$year) = @_;
my @month = (31,28,31,30,31,30,31,31,30,31,30,31);
$year += int($mon/12); $mon = $mon%12; $hour -= (localtime(0))[2];
my $days = -719162;
$year += 1899; $days += $year*365 + int($year/4) - int($year/100) + int($year/400);
++$year; if ($mon > 1 && (!($year%400) || (!($year%4) && ($year%100)))) {++$days}
while (--$mon >= 0) {$days += $month[$mon]}
$days += $day-1;
return((($days*24+$hour)*60+$min)*60+$sec);
}
0305nobodyさん
04/09/09 22:16ID:???0308弱杉
04/09/10 03:32ID:+ZeQb9+rperl (ver.5.00503)で、特定デレクトリを丸ごと圧縮(zipかlzhが希望)する必要が在り調べたのですが、
Archive::zipというモジュールが必要らしいと分りました。
しかし、このスクリプトの置き場所はレンタルサーバ(ア_ル)で、モジュールの追加インストールが出来ません。
zipもしくはlzh圧縮が可能なライブラリって無いでしょうか?
ご存知の方がいらっしゃったら教えていただけると大変、大変助かります。
どうぞよろしくお願いします。
(この質問はモジュール板の方が適切なのでしょうか? それさえも分らんのデス...)
0309nobodyさん
04/09/10 04:27ID:???0310弱杉
04/09/10 04:49ID:+ZeQb9+rア_ルから、ちょっと前にもらったモジュール一覧にも入ってなかったでんす。
私の勘違いでしょうか。。。
0311nobodyさん
04/09/10 05:24ID:???ActivePerl Build 810 (5.8.4 相当) なら入っているが、Build 522
(5.005_03 相当) には入っていないし、(素の) Perl ではどのヴァージョン
でも入っていない。ActivePerl 系でも lib/ の方ではなく site/lib/ の
方に入っているから標準モジュールでないと分かる。
http://perl.infoware.ne.jp/documents.html
>>310
Archive::Zip 自体は Pure Perl なモジュールだからコピーすればいいが、
中で非標準モジュール且つ要コンパイルの Compress::Zlib を使っている。
サーバに用意されていなければこれを Compress::Zlib::Perl に置き換え、
必要なモジュール一式を任意のディレクトリに置いて使えばいい。
もしくは、サーバに zip や lha がインストールされているなら system() で
呼ぶ方が楽だろう。
http://perldoc.com/perl5.8.4/pod/func/system.html
0315nobodyさん
04/09/10 13:50ID:???Time::ParseDate使えば一発だよ。
use Time::ParseDate;
print parsedate("2002.09.09 15:00");
0316弱杉
04/09/10 19:31:54ID:+ZeQb9+rお返事ありがとうございます&カメレスですんませんです。
Archive::Zipで必要とされているモジュールで、やはりCompress::Zlibのみありませんでした。
そこで、Compress::Zlib::perl ver.0.02 (不安なバージョンですが..)をCPANからDLしました。
でも、解凍するとMakefile.PLとかPerl.pmとかが入っていてそこでお手上げです...(レンタル鯖しかいじった事無い厨なので、Makeとか分らんのです)
Zip.pmとcompress_zip.pm(?) を置いて、Zip.pmからuseの代わりにrequireするだけとか勘違いしてました。
Compress::Zlib::perlはMake(?)しないとライブラリファイルにはならないのでしょうか?
また、鯖内のコマンド検索をしたら、gzipというのがは使えるみたいですが(pathは /usr/bin/gzip)、これは通信時の圧縮専用のものでアーカイブを作るのには使えないのでしょうか?
引き続きご指南いただければ幸いです。宜しくお願いします。
0317nobodyさん
04/09/10 20:20:41ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html
http://www.linux.or.jp/JM/html/GNU_gzip/man1/gzip.1.html
ちなみに gzip は Windows や Mac で良く使われる ZIP (PKZIP)
とは別形式。圧縮のみを担当し、複数ファイルをまとめる
(アーカイヴ) 機能は無いので、tar と連携させる事が多い。
Perl と関係ないので詳しくは余所で尋ねて。
0318弱杉
04/09/10 20:46:34ID:+ZeQb9+rお返事ありがとうございます。gzipに関しては参考URLで理解出来ました。
もう一点の『perlでのzipアーカイブの作成方法』についても
余所で訪ねた方がよろしいでしょうか?(モジュール関連スレとかに行けばよろしいですか?)
いちいちつまらん質問ですみません。。。
0319nobodyさん
04/09/11 02:24:58ID:???http://pc5.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc5.2ch.net/test/read.cgi/php/1030548610/
0320弱杉
04/09/11 02:38:55ID:cyd1fAb1ご指南ありがとうございました。そちらの板にいってきます。
スレ汚し、大変失礼しました。
0321nobodyさん
04/09/11 05:03:25ID:???しかし、以下のソースだと何故かクッキーには書き込まれるのにフォームに既入力の状態になりません。
何がおかしいのか見ていただけないでしょうか?一つ目のソースはこれです。
$cookie_id = 'regist';
&get_cookie();
$name = $cookie{ 'name' };
print "<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>\n\n";
print <<"HTML_TAG";
<html><head></head><body>
<Form action="registration.cgi" method="POST">
<table width="600">
<tr><td><input type="text" name="name" size="20" value="$name"><input type="submit" name="regist" value="確認画面"></td></tr>
</table>
</FORM>
</body>
</html>
0322nobodyさん
04/09/11 05:03:54ID:???sub get_cookie {
my( $cookie_name, $value );
foreach ( split( /; /, $ENV{ 'HTTP_COOKIE' } ) ) {
( $cookie_name, $value ) = split( /=/ );
$cookies{ $cookie_name } = $value;
}
foreach ( split( /&/, $cookies{ $cookie_id } ) ) {
( $cookie_name, $value ) = split( /:/ );
$cookie{ &unescape( $cookie_name ) } = &unescape( $value );
}
}
sub unescape {
my( $data ) = @_;
$data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
return $data;
}
exit;
0323nobodyさん
04/09/11 05:04:18ID:???sub get_cookie {
my( $cookie_name, $value );
foreach ( split( /; /, $ENV{ 'HTTP_COOKIE' } ) ) {
( $cookie_name, $value ) = split( /=/ );
$cookies{ $cookie_name } = $value;
}
foreach ( split( /&/, $cookies{ $cookie_id } ) ) {
( $cookie_name, $value ) = split( /:/ );
$cookie{ &unescape( $cookie_name ) } = &unescape( $value );
}
}
sub unescape {
my( $data ) = @_;
$data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
return $data;
}
exit;
0324nobodyさん
04/09/11 05:05:28ID:???クッキーには確かに情報が入っているにもかかわらず、テキストボックスには何も表示されません…。
require "./sub_getparam.pl";# データ取得用サブルーチン
require 'jcode.pl';
$cookie_id = 'regist';
read( STDIN, $query, $ENV{ 'CONTENT_LENGTH' } );
&getparam( $query );
$name = $param{ 'name' };
$cookie{ 'name' } = $name;
&set_cookie();
print "<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>\n\n";
print <<"END";
<html><head></head><body>
<p><B><font color="red">内容を確認してください。</font></B></p>
<Form action="registration_complete.cgi" method="POST">
<table><tr><td>名前</td><td>$name</td></tr></table>
<input type="hidden" name="name" value="$name">
</form></BODY></HTML>
END
0325nobodyさん
04/09/11 05:06:02ID:???my( $new_cookie, $date );
@pairs = ();
foreach( sort keys %cookie ) {
push( @pairs, &escape( $_ ).":".&escape( $cookie{ $_ } ) );
}
$new_cookie = join( '&', @pairs );
$date = &gmt_date( time + 86400 * 120 );
if ( $new_cookie ne $cookies{ $cookie_id } ) {
print "Set-Cookie: $cookie_id=$new_cookie; expires=$date\n";
}
}
sub escape {
my( $data ) = @_;
$data =~ s/(\W)/sprintf( "%%%02X", unpack('C', $1 ) )/ge;
return $data;
}
sub gmt_date {
my( $data ) = @_;
( $sec, $min, $hour, $day, $mon, $year, $wday ) = gmtime( $data );
return sprintf( "%s, %02d %s %04d %02d:%02d:%02d GMT",
( Sun, Mon, Tue, Wed, Thu, Fri, Sat )[ $wday ], $day,
( Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec )[ $mon ],
$year + 1900, $hour, $min, $sec );
}
exit;
0326nobodyさん
04/09/11 05:07:00ID:???my( $new_cookie, $date );
@pairs = ();
foreach( sort keys %cookie ) {
push( @pairs, &escape( $_ ).":".&escape( $cookie{ $_ } ) );
}
$new_cookie = join( '&', @pairs );
$date = &gmt_date( time + 86400 * 120 );
if ( $new_cookie ne $cookies{ $cookie_id } ) {
print "Set-Cookie: $cookie_id=$new_cookie; expires=$date\n";
}
}
sub escape {
my( $data ) = @_;
$data =~ s/(\W)/sprintf( "%%%02X", unpack('C', $1 ) )/ge;
return $data;
}
sub gmt_date {
my( $data ) = @_;
( $sec, $min, $hour, $day, $mon, $year, $wday ) = gmtime( $data );
return sprintf( "%s, %02d %s %04d %02d:%02d:%02d GMT",
( Sun, Mon, Tue, Wed, Thu, Fri, Sat )[ $wday ], $day,
( Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec )[ $mon ],
$year + 1900, $hour, $min, $sec );
}
exit;
0328nobodyさん
04/09/11 05:24:21ID:???0329nobodyさん
04/09/11 05:45:52ID:???ソースを見ずにレス。
(´-`).。oO(見る気がおきねーよ)
「一つ前に戻ると」と書いてある。
つまりキャッシュされたページを見てると…
0330nobodyさん
04/09/11 09:03:38ID:???0331nobodyさん
04/09/11 09:30:58ID:???ソースみてないから推測だが
0332nobodyさん
04/09/11 10:37:18ID:???0333nobodyさん
04/09/11 11:28:31ID:???値を取り出して表示させるとか切り分けしてみ。
読む気にならんからこんなとこだな。
0334nobodyさん
04/09/11 19:54:24ID:3nx87n19以下の様なsprintfを含んだスクリプトが使用できずエラーと
なってしまいます。どなたか、Perlの環境は変えずに、代わり
となるスクリプトがあれば教えて頂けませんか?
&SUB(sprintf "%02", $a - 1);
sub SUB{
my $value = shift @_;
system "$SHELL_COMMAND $value";
}
0335nobodyさん
04/09/11 19:58:22ID:3nx87n19すいません。スクリプトが間違えていました。
&SUB(sprintf "%02d", $a - 1);
sub SUB{
my $value = shift @_;
system "$SHELL_COMMAND $value";
}
0336nobodyさん
04/09/11 20:06:17ID:???■ このスレッドは過去ログ倉庫に格納されています