[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 08/25 20:07 / Filesize : 271 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlコーディング初心者質問スレ Part 56



1 名前:nobodyさん mailto:sage [2007/09/16(日) 19:49:43 ID:???]
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/

925 名前:nobodyさん mailto:sage [2008/02/19(火) 12:05:44 ID:???]
宿題は自分でやろうな。

926 名前:nobodyさん mailto:sage [2008/02/19(火) 12:06:11 ID:???]
print "aAbB.....yYzZ\n";

を10個コピペでおk


927 名前:exe [2008/02/19(火) 14:24:58 ID:L1DAdjnk]
すいません。10回出力はわかるんですが、for文を使ってaAbBcC...zZの表示方がわからないのでどなたかお願いします。

928 名前:nobodyさん mailto:sage [2008/02/19(火) 14:25:28 ID:???]
for(1..10) {
  for(65..90) {
    print pack("C*",$_);
    print pack("C*",$_+32);
  }
  print "\n";
}


929 名前:exe [2008/02/19(火) 14:42:37 ID:L1DAdjnk]
nobody さんありがとうございます。

ちなみに↓の形で書くと、どうしたらよいでしょうか。
何度もすいません。

open (FILE, '>test1.txt') or die "$!";

for my $count (0..9) {
for my $i ("a".."z") {


}
print FILE "\n";
}

close(FILE);

930 名前:nobodyさん mailto:sage [2008/02/19(火) 14:59:33 ID:???]
#
# $countってなんぞ?
#
open (FILE, '>', 'test1.txt') or die "$!";
binmode(FILE);
for my $count (0..9) {
  for my $i('a'..'z') {
    print $i;
    print uc($i);
  }
  print FILE "\n";
}
close(FILE);


931 名前:nobodyさん mailto:sage [2008/02/19(火) 15:01:42 ID:???]
#
# ↑はウソ
#
open (FILE, '>', 'test1.txt') or die "$!";
binmode(FILE);
for my $count (0..9) {
  for my $i('a'..'z') {
    print FILE $i;
    print FILE uc($i);
  }
  print FILE "\n";
}
close(FILE);

932 名前:exe [2008/02/19(火) 15:06:17 ID:L1DAdjnk]
ありがとうございます。$Countは適当においてる変数です。

933 名前:exe [2008/02/19(火) 15:54:07 ID:L1DAdjnk]
先ほど↑で作ったファイルを出力として、小文字のみを取り除いた結果を標準出力に表示するにはどうしたらよいでしょうか?
自力でやらないといけないのはわかっているのですが、時間がなくて・・どなたかお願いします。



934 名前:nobodyさん mailto:sage [2008/02/19(火) 16:04:55 ID:???]
#
# そういうウンコみたいな仕事を漏れにも回してくれよ
#
$sent = 'dTgZtyYthSGetLt';
$sent =~ s/[a-z]//g;
print $sent;

935 名前:nobodyさん mailto:sage [2008/02/19(火) 16:31:12 ID:???]
馬鹿だな、まずはおっぱいうpしてからだろjk・・・

936 名前:exe [2008/02/19(火) 16:55:41 ID:L1DAdjnk]
仕事では無いです。笑われてるかもしれませんが初心者の
自分にとっては色々難しくて。時間もありませんでしたので・・

937 名前:nobodyさん mailto:sage [2008/02/19(火) 17:15:11 ID:???]
perlで外部サーバー上のファイルを読み込む方法はありますか?

OPEN("www.aa.com/a.cgi") みたいにして
a.cgiの出力結果を元にさらに処理をしたいと思っています



938 名前:nobodyさん [2008/02/19(火) 17:30:48 ID:gLoGL0Ae]
>>937
いい手じゃないが、Linuxでwgetが入ってる状態で漏れが使ってる方法

$foo = `wget -O- www.aa.com/a.cgi`;


939 名前:nobodyさん mailto:sage [2008/02/19(火) 17:45:18 ID:???]
いやそれが最強。wgetのWIN版もあるからな。-qも付けると良い。

940 名前:nobodyさん mailto:sage [2008/02/19(火) 17:55:56 ID:???]
LWP

941 名前:937 mailto:sage [2008/02/19(火) 19:26:35 ID:???]
>>938
ありがとうございました
無事 取得することが出来ました。
あと[`]でくくるのはなぜなのでしょう?


942 名前:938 mailto:sage [2008/02/19(火) 20:13:58 ID:???]
>939
モジュール使った方が互換性高いし、そっちの方が良いと思ったんで。
>940のLWPを使うのが最良だと思うが、使い方調べてる気分的な余裕がないんで、
wget使ってそのまま今に至る感じだ。

>941
外部コマンド実行だから。``で囲むと外部コマンドを実行して標準出力が戻ってくる。

ちなみに"perl -T"でやってると、そのままじゃ外部コマンド動かない事があるんで注意。
$ENV{'IFS'}, $ENV{'CDPATH'}, $ENV{'ENV'}, $ENV{'BASH_ENV'}, $ENV{'PATH'}を
退避・削除してから外部コマンドを実行し戻す必要がある。

943 名前:nobodyさん mailto:sage [2008/02/19(火) 20:26:04 ID:???]
LWP



944 名前:nobodyさん mailto:sage [2008/02/20(水) 08:23:23 ID:???]
>>937-942
search.cpan.org/~gaas/libwww-perl-5.808/lib/LWP/Simple.pm

945 名前:937 mailto:sage [2008/02/20(水) 12:35:11 ID:???]
>>938-944
ありがとうございます。
LWPも使えました 研究してみます。


946 名前:nobodyさん mailto:sage [2008/02/20(水) 13:15:09 ID:???]
@urlの中に500くらいのサイトのURLが入っています。
そのURLのページにキーワードか書かれているかどうか調べるとき、

foreach (@url) {
  LWPで取得してキーワードが見つかったら、$count++;
}

みたいにすると一つずつなので物凄く時間が掛かります。
10個くらい一気に取得する方法はないでしょうか?

947 名前:nobodyさん mailto:sage [2008/02/20(水) 13:35:03 ID:???]
同じプログラムを10個並列に走らせてそれぞれに50サイトずつ担当させるのが一番楽だと思うよ。


948 名前:nobodyさん mailto:sage [2008/02/20(水) 13:43:09 ID:???]
こういう場合ってほとんどはLWPで取得するのが一番時間かかってるのかな?

949 名前:nobodyさん mailto:sage [2008/02/20(水) 13:59:11 ID:???]
>>947
そうですか…分割してみます。

>>948
応答待ちが長いと停止状態です。

950 名前:nobodyさん mailto:sage [2008/02/20(水) 14:34:00 ID:???]
fork

951 名前:nobodyさん mailto:sage [2008/02/20(水) 15:01:34 ID:???]
プロセスで並列化するとプロセスAは終わってるけど
プロセスBは重いサイトがリストにあって終わってないとか
無駄に待ち時間増えるから、threads使える環境ならthreadsのが楽でない?


952 名前:nobodyさん mailto:sage [2008/02/20(水) 15:03:07 ID:???]
JISの文から携帯電話の絵文字部分を退避させたいと思っています。
正規表現について教えてください。

通常の2バイト文字と同様に絵文字[\x75-\x7B][\x21-\x7E]がエスケープシーケンス
\x1b\x24\x42と\x1b\x28\x42に囲まれます。

エスケープシーケンスをそれぞれ
$esc_in = "\x1b\x24\x42";
$esc_out = "\x1b\x28\x42";
とし、絵文字を
$emoji = "[\x75-\x7B][\x21-\x7E]";
とします。

元の文を
$str="今日は晴れでした■気温は10度です。";(■は笑顔の絵文字 \x79\x79 )

この$strは
$esc_in今日は晴れでした■気温は$esc_out10$esc_in度です。$esc_out
とエスケープされます。

やりたい事はこれを
$esc_in今日は晴れでした$esc_out[7979]$esc_in気温は$esc_out10$esc_in度です。$esc_out

というように[]で絵文字コードを囲い、エスケープシーケンスの整合性をとるというものです。

どなたかご教授いただけないでしょうか?

953 名前:nobodyさん mailto:sage [2008/02/21(木) 00:49:43 ID:???]
それのどこがWeb Programmingなんだ?



954 名前:nobodyさん mailto:sage [2008/02/21(木) 02:07:00 ID:???]
JISコードは加工には向かないので、Encode::JP::Mobileあたり使って
いったんutf8文字列にしてから加工して戻す方がたぶん見通しいいよ。


955 名前:952 mailto:sage [2008/02/21(木) 03:31:08 ID:???]
>>954

ありがとうございます。そちらの方で検討させていただきます。

このような複雑な置換について私は苦手でして、もしこれがお分かりになられるなら後学のためにも教えていただきたいのですが、ご無理でしょうか?



956 名前:nobodyさん mailto:sage [2008/02/21(木) 10:36:05 ID:???]
マッチした文字列の前後は$esc_inで囲って
マッチした文字列はルールに沿って変換
ってことかな?

957 名前:nobodyさん mailto:sage [2008/02/21(木) 10:36:46 ID:???]
×$esc_inで囲って
○$esc_inと$esc_outで囲って

958 名前:nobodyさん mailto:sage [2008/02/21(木) 10:39:56 ID:???]
無理に書くとこんな感じ? 全くお勧めしない。

# 絵文字部分を1文字ずつ加工。
# 1バイトずれてマッチしたり、ascii部分にマッチしないようにしてるので面倒
$str =~ s{
(
(?:\G | ^[^\1b]*\x1b\x24\x42)
(?:[^\x1b]{2}|\x1b\x28\x42[^\x1b]*\x1b\x24\x42)*?
)
([\x75-\x7b])([\x21-\x7e])
}{
sprintf "%s\x1b\x28\x42[%02x%02x]\x1b\x24\x42", $1, ord($2), ord($3)
}gex;

# 冗長なエスケープシーケンスの並びを除去
$str =~ s/(\x1b\x24\x42)+/$1/g;
$str =~ s/(\x1b\x28\x42)+/$1/g;
$str =~ s/\x1b\x28\x42\x1b\x24\x42//g;
$str =~ s/\x1b\x24\x42\x1b\x28\x42//g;


959 名前:952 mailto:sage [2008/02/21(木) 14:20:04 ID:???]
>>958
ありがとうございます。
やはりすごい複雑になってしまうんですね。
(
(?:\G | ^[^\1b]*\x1b\x24\x42)
(?:[^\x1b]{2}|\x1b\x28\x42[^\x1b]*\x1b\x24\x42)*?
)

を見てもさっぱり理解できません。
これが絵文字でない文字を指すというのはわかるのですが、詳しく教えていただけないでしょうか?
または参考になる書籍などがありましたら教えていただけないでしょうか。

960 名前:952 mailto:sage [2008/02/21(木) 14:25:02 ID:???]
書き忘れましたが、Encode::JP::Mobileを使い無事utf8にできました。

これを作った方すごいですね。こんな便利なものがあると知りませんでした。



961 名前:初心者 [2008/02/21(木) 14:43:22 ID:eHzrHpy8]
perlでカレンダーを作るのですが、プログラミングする内容としては何がひつようでしょうか?
何から書いていいやらとっかかりがわかりません。どなたかアドバイス等をお願いします。

962 名前:nobodyさん mailto:sage [2008/02/21(木) 14:48:53 ID:???]
ggrks

963 名前:nobodyさん mailto:sage [2008/02/21(木) 14:49:53 ID:???]
とりあえず以下のサブルーチンを作る

1. 本日の年・月・日・曜日を返す
2. x年y月z日の曜日を返す
3. x年y月1日の曜日を返す
4. x年y月の月末日を返す
5. x年y月の前月を返す
6. x年y月の翌月を返す
7. x年y月z日の前日を返す
8. x年y月z日の翌日を返す



964 名前:初心者 [2008/02/21(木) 15:13:33 ID:eHzrHpy8]
ありがとうございます。

965 名前:初心者 [2008/02/21(木) 15:26:58 ID:eHzrHpy8]
今年のようなうるう年かどうかを調べるにはどうしたらよいのでしょうか?

966 名前:nobodyさん [2008/02/21(木) 15:35:05 ID:/bZGgDSr]
閏年の定義に当てはまるかどうかを調べればよい。>>965
西暦が4で割り切れて、100で割り切れなければ閏年。
西暦が4で割り切れて、400でも割り切れれば、100で割り切れても閏年。

967 名前:nobodyさん mailto:sage [2008/02/21(木) 15:35:25 ID:???]
いちいち相手にするからググればわかるような質問が絶えないんだよな

968 名前:nobodyさん [2008/02/21(木) 15:38:45 ID:/bZGgDSr]
悪かった。今は反省している。

969 名前:nobodyさん mailto:sage [2008/02/21(木) 16:23:42 ID:???]
閏年を知る必要は無いはず。
月末=翌月1日の1日前( x年y月の月末日=(x年y+1月1日)-1日 )だから、
PerlインタプリタとOSとライブラリにバグがなけりゃ閏年だろうが、平年だろうが
関係なく計算できる。

Date::Calc使って計算すりゃ一発で出るだろ。

970 名前:nobodyさん mailto:sage [2008/02/21(木) 16:35:43 ID:???]
ググっても分からないような初心者質問って?

971 名前:nobodyさん mailto:sage [2008/02/21(木) 17:03:05 ID:???]
>>1

972 名前:nobodyさん mailto:sage [2008/02/21(木) 18:08:27 ID:???]
>>969
ggrksには同意だが、
たとえば誕生日の入力で2/29が妥当かどうかってのは閏年を判別しなきゃいかんだろ。

質問者の意図は知らんが。

973 名前:969 mailto:sage [2008/02/21(木) 18:13:29 ID:???]
>>972
名前: 初心者 ID:eHzrHpy8 が継続的に質問してるんで、
ID:eHzrHpy8 : 「>961 カレンダーを作りたい。」
nobodyさん: 「>963」
ID:eHzrHpy8 : 「>965 月末日を知るのに閏年を知りたい」

って一連の流れだと思ったんだが、違うのか?



974 名前:nobodyさん mailto:sage [2008/02/21(木) 18:21:25 ID:???]
要するに2月のカレンダーを作るときには、3月1日の日付から−1してやって、日付を取得すれば
いいってことを>>969は言ってるんだね。

カレンダーを書くルーチンを考えたことないから、参考になるね。

975 名前:nobodyさん mailto:sage [2008/02/21(木) 19:03:40 ID:???]
localtime使う前提だよね?
末日計算を前提としてる話とごっちゃになっとる

976 名前:nobodyさん mailto:sage [2008/02/21(木) 19:18:16 ID:???]
もちろん。

でもさ、カレンダーを書くcgiくらい、散々ソースが転がっていそうな気がするんだけどね。
その辺の中から、適当に拾ってアレンジすれば目的は果たせるんじゃないの?

977 名前:nobodyさん mailto:sage [2008/02/21(木) 19:26:16 ID:???]
自分が使うカレンダーならどっかから拾ってくればいいが、
課題ともなるとそうもいかないんじゃない?

978 名前:nobodyさん mailto:sage [2008/02/21(木) 19:33:08 ID:???]
というか、今更perlの課題とか出す大学とかあるの?

979 名前:nobodyさん mailto:sage [2008/02/21(木) 20:55:28 ID:???]
>>952とまったく同じ文章が今日MLに流れてきてたけど、同一人物?

980 名前:nobodyさん mailto:sage [2008/02/21(木) 23:37:02 ID:???]
>>978
専門学校とかじゃね?

981 名前:ID消し挑戦w mailto:000 [2008/02/23(土) 16:05:17 ID:???]
テスト^^;

982 名前:nobodyさん mailto:sage [2008/02/23(土) 16:40:22 ID:???]
自分用モジュールつくってるんだけどさ

package hoge;

use strict;

my $test = 'ABC';

sub new {
 my $pkg = shift;
 bless { hoge => $test, },$pkg;
}

みたいに先頭で定数定義してメソッド内で使いまくるのって問題ありますか?
これならuse strictしない方が良かったりする?

983 名前:nobodyさん mailto:sage [2008/02/23(土) 16:46:25 ID:???]
外部値で初期化したいなら引数として渡せば?



984 名前:nobodyさん mailto:sage [2008/02/23(土) 17:07:54 ID:???]
>>982
問題ないとおも。
ただ、定数として明示したければ、
use Readonly;
Readonly my $test = 'ABC';
しといた方が

985 名前:nobodyさん mailto:sage [2008/02/23(土) 17:09:32 ID:???]
定数は大文字にする習し

986 名前:nobodyさん mailto:sage [2008/02/23(土) 18:07:36 ID:???]
(・∀・)

987 名前:nobodyさん mailto:sage [2008/02/23(土) 18:54:14 ID:???]
>>983
箱から出したくないしので、blessに絡めたくないんです。
ちなみに全メソッドで使います。

>>984
CPAN配布物ですかね?
名前からして便利そうですが、標準で入ってないのは遠慮したいです。

>>985
おk

コールバックあたりも調べてみます。

とりあえずみなさんありがとうです。

988 名前:nobodyさん mailto:sage [2008/02/23(土) 19:03:14 ID:???]
use Vars, oursなんてあったのか。

989 名前:nobodyさん mailto:sage [2008/02/23(土) 19:57:03 ID:???]
>>987
標準ならconstantプラグマ

990 名前:nobodyさん mailto:sage [2008/02/23(土) 21:32:08 ID:???]
以前は値を返すだけのsub使ってた。

991 名前:nobodyさん mailto:sage [2008/02/23(土) 21:46:40 ID:???]
>>987
CPAN配布物だけど、純Perlソースだから、インスコしなくても、
下記からダウソして自分のモジュールと同じディレクトリに入れればよさげ。
search.cpan.org/src/ROODE/Readonly-1.03/Readonly.pm


992 名前:nobodyさん mailto:sage [2008/02/23(土) 21:47:49 ID:???]
空のプロトタイプ付きサブルーチンはコンパイル時に展開されるので
効率はいい。constant プラグマはいわばその構文糖。
www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html#Constant_Functions

変数展開コンテキストに埋め込みたいなら、リテラルのリファレンスに
名前を付ける方法もある。
www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html#Symbol_Tables

パッケージグローバルな my 変数も、そのパッケージ内でうっかり
書き換える心配が無いのなら別に悪い選択肢じゃない。

993 名前:982 mailto:sage [2008/02/23(土) 22:24:31 ID:???]
>>991
ダウソしました。できるだけ理解してから使ってみます。

>>990,>>992
サブルーチンでやるならsub Readonly () { 'ABC' }でおkですね。
とりあえず自分用はそうします。

もし他人に配布するような事があれば>>989,>>991が良いっす

短時間ですごい勉強になりました。ありがとう



994 名前:nobodyさん mailto:sage [2008/02/24(日) 18:30:29 ID:???]
保 守

995 名前:nobodyさん mailto:sage [2008/02/25(月) 16:37:54 ID:???]
 次スレ希望

996 名前:nobodyさん mailto:sage [2008/02/25(月) 17:52:22 ID:???]
テンプレ貼るなら立ててやるよ

997 名前:nobodyさん mailto:sage [2008/02/25(月) 19:27:13 ID:???]
ほらよ

Perlコーディング初心者質問スレ Part 57
pc11.2ch.net/test/read.cgi/php/1203935151/

998 名前:nobodyさん mailto:sage [2008/02/25(月) 20:00:31 ID:???]
乙です。
埋め

999 名前:nobodyさん mailto:sage [2008/02/25(月) 20:07:07 ID:???]
埋め

1000 名前:nobodyさん mailto:sage [2008/02/25(月) 20:07:31 ID:???]
埋め

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<271KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef