Perlコーディング初心者質問スレ Part 56at PHP
Perlコーディング初心者質問スレ Part 56 - 暇つぶし2ch949:nobodyさん
08/02/20 13:59:11
>>947
そうですか…分割してみます。

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

950:nobodyさん
08/02/20 14:34:00
fork

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


952:nobodyさん
08/02/20 15:03:07
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さん
08/02/21 00:49:43
それのどこがWeb Programmingなんだ?

954:nobodyさん
08/02/21 02:07:00
JISコードは加工には向かないので、Encode::JP::Mobileあたり使って
いったんutf8文字列にしてから加工して戻す方がたぶん見通しいいよ。


955:952
08/02/21 03:31:08
>>954

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

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



956:nobodyさん
08/02/21 10:36:05
マッチした文字列の前後は$esc_inで囲って
マッチした文字列はルールに沿って変換
ってことかな?

957:nobodyさん
08/02/21 10:36:46
×$esc_inで囲って
○$esc_inと$esc_outで囲って

958:nobodyさん
08/02/21 10:39:56
無理に書くとこんな感じ? 全くお勧めしない。

# 絵文字部分を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
08/02/21 14:20:04
>>958
ありがとうございます。
やはりすごい複雑になってしまうんですね。
(
(?:\G | ^[^\1b]*\x1b\x24\x42)
(?:[^\x1b]{2}|\x1b\x28\x42[^\x1b]*\x1b\x24\x42)*?
)

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

960:952
08/02/21 14:25:02
書き忘れましたが、Encode::JP::Mobileを使い無事utf8にできました。

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



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

962:nobodyさん
08/02/21 14:48:53
ggrks

963:nobodyさん
08/02/21 14:49:53
とりあえず以下のサブルーチンを作る

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:初心者
08/02/21 15:13:33 eHzrHpy8
ありがとうございます。

965:初心者
08/02/21 15:26:58 eHzrHpy8
今年のようなうるう年かどうかを調べるにはどうしたらよいのでしょうか?

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

967:nobodyさん
08/02/21 15:35:25
いちいち相手にするからググればわかるような質問が絶えないんだよな

968:nobodyさん
08/02/21 15:38:45 /bZGgDSr
悪かった。今は反省している。

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

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

970:nobodyさん
08/02/21 16:35:43
ググっても分からないような初心者質問って?

971:nobodyさん
08/02/21 17:03:05
>>1

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

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

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

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

974:nobodyさん
08/02/21 18:21:25
要するに2月のカレンダーを作るときには、3月1日の日付から-1してやって、日付を取得すれば
いいってことを>>969は言ってるんだね。

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

975:nobodyさん
08/02/21 19:03:40
localtime使う前提だよね?
末日計算を前提としてる話とごっちゃになっとる

976:nobodyさん
08/02/21 19:18:16
もちろん。

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

977:nobodyさん
08/02/21 19:26:16
自分が使うカレンダーならどっかから拾ってくればいいが、
課題ともなるとそうもいかないんじゃない?

978:nobodyさん
08/02/21 19:33:08
というか、今更perlの課題とか出す大学とかあるの?

979:nobodyさん
08/02/21 20:55:28
>>952とまったく同じ文章が今日MLに流れてきてたけど、同一人物?

980:nobodyさん
08/02/21 23:37:02
>>978
専門学校とかじゃね?

981:ID消し挑戦w
08/02/23 16:05:17
テスト^^;

982:nobodyさん
08/02/23 16:40:22
自分用モジュールつくってるんだけどさ

package hoge;

use strict;

my $test = 'ABC';

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

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

983:nobodyさん
08/02/23 16:46:25
外部値で初期化したいなら引数として渡せば?

984:nobodyさん
08/02/23 17:07:54
>>982
問題ないとおも。
ただ、定数として明示したければ、
use Readonly;
Readonly my $test = 'ABC';
しといた方が

985:nobodyさん
08/02/23 17:09:32
定数は大文字にする習し

986:nobodyさん
08/02/23 18:07:36
(・∀・)

987:nobodyさん
08/02/23 18:54:14
>>983
箱から出したくないしので、blessに絡めたくないんです。
ちなみに全メソッドで使います。

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

>>985
おk

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

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

988:nobodyさん
08/02/23 19:03:14
use Vars, oursなんてあったのか。

989:nobodyさん
08/02/23 19:57:03
>>987
標準ならconstantプラグマ

990:nobodyさん
08/02/23 21:32:08
以前は値を返すだけのsub使ってた。

991:nobodyさん
08/02/23 21:46:40
>>987
CPAN配布物だけど、純Perlソースだから、インスコしなくても、
下記からダウソして自分のモジュールと同じディレクトリに入れればよさげ。
URLリンク(search.cpan.org)


992:nobodyさん
08/02/23 21:47:49
空のプロトタイプ付きサブルーチンはコンパイル時に展開されるので
効率はいい。constant プラグマはいわばその構文糖。
URLリンク(www.kt.rim.or.jp)

変数展開コンテキストに埋め込みたいなら、リテラルのリファレンスに
名前を付ける方法もある。
URLリンク(www.kt.rim.or.jp)

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

993:982
08/02/23 22:24:31
>>991
ダウソしました。できるだけ理解してから使ってみます。

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

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

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

994:nobodyさん
08/02/24 18:30:29
保 守

995:nobodyさん
08/02/25 16:37:54
 次スレ希望

996:nobodyさん
08/02/25 17:52:22
テンプレ貼るなら立ててやるよ

997:nobodyさん
08/02/25 19:27:13
ほらよ

Perlコーディング初心者質問スレ Part 57
スレリンク(php板)

998:nobodyさん
08/02/25 20:00:31
乙です。
埋め

999:nobodyさん
08/02/25 20:07:07
埋め

1000:nobodyさん
08/02/25 20:07:31
埋め

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


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch