[kansaipm] Re: 第2回無事終了 !
mishima at momo.so-net.ne.jp
mishima at momo.so-net.ne.jp
Mon May 22 20:05:22 CDT 2000
三嶋です。
講師の皆様、準備に携わってくださった皆様、お疲れ様でした。
今回は、開始時間は間違うわ、森若さんは別の予定と重なるわ、森若さんのファ
イルはダウンロードに苦労するわ、イバノフさんのマシンはいかれるわと、ト
ラブルが多かったですが、結果的には意外と(?)盛り上がって楽しかったで
す。
ところで、Perl 5.6 の open プラグマのことなんですが、
use open IN => ":crlf", OUT => ":raw";
と書く場合の IN と OUT は、ファイルハンドルではなくて、やっぱり
入力時と出力時デフォルトの指定ではないでしょうか。 > イバノフさん
open - perl pragma to set default disciplines for input and output
という標題ですし。
さてと...
From: Nagayoshi_Michio <cudjo at venus.dti.ne.jp>
Subject: Re: [kansaipm] 第2回無事終了 !
Date: Mon, 22 May 2000 05:58:23 +0900
> 00/05/22 02:39:08 に 福原 さんが曰く
> > > #あの時のソース、お持ちの方いませんか?
> > > #出来たら見せていただきたいんですが。
> > ということなので,添付します.
>
> すみません。添付していただいたのはわたしがでっち上げた
> C言語バージョンで、欲しかったのはPerl版の方だったり
> します。引き続き、Perl版お持ちの方にお願いします。
> #C版のほう、デバッグしてないのであまり信じないでください。
はーい、CUDJOさん。
Perl版のソースはお持ち帰りしなかったのですが、福原さんがCのソースを添
付してくださったおかげで再度翻訳できましたので、添付します。
今度は Tk の画面付きですよ。コメントも入れときました。
> > 「世界のパールショウ」楽しみです.
> > 昨日のCUDJOさんと三嶋さんのcoding を見ていて,
> > あーだこーだいいながらcoding という所が非常に新鮮でした.
>
> ふふふ、掛け合い漫才形式っつーのもよさげかも。
> #「君とはやっとられんわ」よりも「それでは皆様、ごきげんよぉ〜」
> #の方が平和かも。
おお、結構好評なんですね。
しかし、コーディングしながら漫才しようとなると、大変そう。
相当リハーサルが要りますね。(^^;)
二人羽折か、実況中継付きのほうがいいかもしれません。
対戦は遠慮しときます。Emacs起動しただけでブーイングとかされたら、
プレッシャーでつぶれちゃいます。(^^;)
> > 会場からの意見を取り入れながらのcoding というのも
> > 面白いですね.
>
> たとえば、「ある月の一日が何曜日か求める」というロジックを
> その場で公募する、っていうのはあります。
私は一度、適当なPerlスクリプトをよってたかってキレイにするというのをやっ
てみたいと思っています。基本的には、スタイルを揃え、コメントを入れ、冗
長なコードを簡潔に、あるいは簡潔すぎてわかりにくいコードを冗長に書き換
えていくわけですが、Perl は There's more than one thing to do it. のモッ
トーの通り、複数の書き方があって、好みの違いなんかもあるでしょう。
きっと、新しい発見があると思いますよ。
手始めに、whatsnew なんてどうかなー。 > 清香さん
--
$p='Perl'; $_='Masahiro Mishima'; sub _{pack'c*',$x=110+ at _*5,$x+1}
tr/oma/fa_/;s/./chr(ord($&)+2)/ge;@x=(sort(grep{!$_{$_}++}split//),
$p=~/(.(..).)/);$x[7]=~s/^/_/e;$x[8].=_ 1;for(@w=(47,1639,8,31259))
{s/\d/$x[$&+1]/g} print ucfirst "@w.\n";
-------------- next part --------------
#!/usr/local/bin/perl -w
use Tk;
use strict;
my $mw = MainWindow->new;
my($y,$m) = (localtime)[5,4];
$y += 1900; # localtime が返す年は「西暦−1900」なので注意
$m += 1; # localtime が返す月は「0〜11」なので注意
dispMonth($y,$m);
MainLoop;
##
## 西暦1年1月1日から数えた日数
##
sub from_1_1_1 {
my( $year, $month, $day ) = @_;
my $lastyear = $year - 1;
my $ans = 365 * $lastyear
+ $lastyear / 4
- $lastyear / 100
+ $lastyear / 400 # ここまでが昨年末までの日数
+ juldate($year, $month, $day); # 今年に入ってから今日までの日数
return $ans;
}
##
## 今年の1月1日から数えた日数
##
sub juldate {
my( $year, $month, $day ) = @_;
my @maxTbl = (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
# 今月初めから今日までの日数
my $ans = $day;
# 先月末までの日数を加算
for ( my $i = 0; $i < $month; $i++ ){
$ans += $maxTbl[$i];
}
# 閏年で、3月以降なら1を加算
if ( $month > 2 and leapYear($year) ){
$ans++;
}
return $ans;
}
##
## 閏年なら True を返す
##
sub leapYear {
my($year) = @_;
return( $year % 400 == 0 or
$year % 4 == 0 && $year % 100 != 0 );
}
##
## 曜日(日=0…土=6)
##
sub weekday {
my( $y, $m, $d ) = @_;
my $jd = from_1_1_1( $y, $m, $d );
return ( $jd % 7 );
}
##
## 月の表示
##
sub dispMonth {
my( $y, $m ) = @_;
my( $maxD );
if ( $m == 1 or $m == 3 or $m == 5 or $m == 7 or
$m == 8 or $m == 10 or $m == 12 ) {
$maxD = 31;
} elsif ( $m == 4 or $m == 6 or $m == 9 or $m == 11 ) {
$maxD = 30;
} else {
$maxD = ( leap( $y ) ? 29 : 28 );
}
my $r = 0; # 最初は0行目
my $c = weekday( $y, $m, 1 ); # 月曜が0列目として、1日の列から
for ( my $d = 1; $d <= $maxD; $d++, $c++ ) {
if ( $c >= 7 ) { # 最後の列を超えるようなら
$r++; # 次の行へ行って
$c = 0; # 最初の列に戻る
}
my $label = $mw->Label(-text=>$d);
$label->grid($label, -row => $r, -column => $c);
}
}
More information about the Kansai-pm
mailing list