404 motivation not found | t_ishidaのブログ

2月/08

15

懐かしいソース

吉野家のオーダーを自動で決めるやつ

#!/usr/bin/perl
use strict;
sub say { print $_[0], "\n" }
my %order = (
'丼' => ['牛', '豚' , '豚キムチ',
['カツ','チャーシュー','牛焼肉']->[rand(5)] , ##これらは無い可能性が有るので添え字5
]->[rand(4)] . ' 丼 '               .
['並', '大盛', '軽め', '特盛']->[rand(4)]  . ' ' .       ##サイズ
  sub{$a='つゆ';$a .= 'だく'for 0..rand(3)}->() . ' 1丁' , ##つゆだく度
'サラダ' => ['ごぼう', 'ポテト','生野菜','おしんこ']->[rand(4)] . 'サラダ 1つ' ,
'卵'     => ['生'    , '半熟']->[rand(2)]     . '卵 1個'                        ,
'汁'     => ['味噌'  , 'けんちん']->[rand(1)] . '汁 1杯'                        ,
);
$order{'丼'} =~/^\s/ and die 'やっぱ帰る' ;
say $order{$_} for keys %order;

WZエディタでタグジャンプ

PCを整理していたらこんなのが出てきた。先輩に頼まれて作った、PerlのコンパイルエラーをWZエディタで飛べるタグに整形して出力する奴だね。

懐かしい

#!/usr/bin/perl

#------------------------------#
#	環境設定
#------------------------------#
my $TEMP_TAGS  = 'tmp.tags';													## tags ファイルの名称
my $HEADER     = q/*------------Press [CTRL] + [SHIFT] + [G]------------*/;		## 出力内容の最上部に出力する帯です
my $MSG1       = '引数が有りません。-hでsyntaxを確認して下さい。';				## エラーメッセージ1が気に入らなかったら変更してください
my $MSG2       = '指定のファイルは存在しません。';								## エラーメッセージ2が気に入らなかったら変更してください
my $DRIVE_NAME = 'Z:';															## 指定しているネットワークドライブ名(ネットワークドライブを利用してSAMBA等でCGI開発を想定)
my $ENV_NAME   = 'WZ_TAGPATH';													## $DRIVE_NAMEを環境変数で上書きする場合にはその対象の環境変数名を変更してください。
$DRIVE_NAME =  $ENV{$ENV_NAME} if $ENV{$ENV_NAME};								## 環境変数に値が存在するときにはその値で上書き

# HELPメッセージが気に入らない場合には、HELPメッセージを変更して下さい。 #
my $HELP       = q/
syntax
	perlc.pl [-h] [fname] [args1] ・・・・・

概要
	このスクリプトはPerlのコンパイルを行った結果を
	WZエディタ向けのtagsファイルに出力するスクリプトです。

引数
	<コンパイル対象のPerlファイル>
	-h    ヘルプ表示(他のパラメータは無視されます)
	fname ファイル名
	args  対象のPerlに渡す引数

コマンド例
	1:ファイルを出力する
m	ex ) perlc.pl "c:\a.pl"

	2:このヘルプを表示する
	ex ) perlc.pl -h
/;
#######################↓処理部(挙動が気に入らない場合には↓を変更してください)###############################
use strict;		## 悪いコードを書かないためのおまじない
use Cwd;		## カレントディレクトリを取得するためのモジュール

# ---------------------------------------- #
# 変数宣言
# ---------------------------------------- #
$| =1;
my ( $fname   , @perl_args        );				## 引数を格納する  (ファイル名、対象Perl用引数)
my ( @comment , @file     , @line );				## エラー出力解析用(文章部、ファイル名、行数)
my ( $out     , $prev_file        );				## 一時変数        (出力結果作成用、前回ファイル名)

# ---------------------------------------- #
# パラメータのの解析
# ---------------------------------------- #
my $mode = '';
my $file = '';
if ( !@ARGV ){ print $MSG1; exit; }					## 引数チェック(引数がそもそもない)
while ( $_ = shift( @ARGV ) ){

if ( $_ =~ /^-h$/ && !$fname)   { print $HELP; exit; }		## ヘルプモードならヘルプを表示して終了
if ( $_ =~ /^-c$/ && !$fname)   { $mode = 'c'; }				## perl -cw $file
if ( $_ =~ /^-p$/ && !$fname)   { $mode = 'p'; }				## perl $file
if ( -e $_        && !$fname)   { $fname = $_; }				## ファイル名
else                            { push @perl_args, $_ ; }	## Perl実行用のパラメータ
}
# ---------------------------------------- #
# シンタックスエラーの解析
# ---------------------------------------- #
my $cmd = "";
if    ($mode eq 'c'){ $cmd = "perl -cw $fname". ' 2>&1'; }
elsif ($mode eq 'p'){ $cmd = "perl $fname " . join(' ',@perl_args) . ' 2>&1'; }
else                { $cmd = "$fname " . join(' ',@perl_args) . ' 2>&1'; }

foreach ( split( /\n/ , `$cmd` ) ){
## 標準出力
print "$_\n";
## コメント部・ファイル名・行数を取得
if( $_ =~/(.*)\s*at\s+(.+)\s+line\s*(\d+).*/ ) {
push @comment, $1; push @file, $2; push @line, $3;
} elsif( $_ =~/(\S+): line (\d+): (.+)/ ) {
push @file, $1; push @line, $2; push @comment, $3;
}
}

# ---------------------------------------- #
# 出力内容の作成
# ---------------------------------------- #
@file = sort @file;
for( my $i=0; $i<=$#comment; $i++ ){
##ファイル名の出力
## TODO ) ネットワークドライブ接続専用になっちゃってるのでこの辺は変える必要あり
if( $file[$i] ne $prev_file  ) {
my $path = $file[$i];
$path = getcwd() . '/' . $path if ($file[$i] !~/^\/.+/);
$path =~ s/$ENV{HOME}//g;
$path ='.'. "\"$DRIVE_NAME$path\"\n";
$path =~ s!/+!/!g;
$out .= $path . ':';
$prev_file = $file[$i];
}
## 行ぞろえ
my $line_wk = $line[$i];
#	$line_wk    = ' '  . $line_wk while( length( $line_wk ) < 5);
$out       .= ':' . "$line_wk : $comment[$i]\n";
}
if($out eq ''){ print "\n\n perlcで解析可能なエラーは有りませんでした\n"; exit();}
$out =  "$HEADER\n$out";
print $out;
# --------------------------------------- #
# 出力
#---------------------------------------- #
#mkdir "$ENV{HOME}/tmp" if( ! -e "$ENV{HOME}/tmp" );
#open( tags_file,'> '. "$ENV{HOME}/tmp/$ENV{REMOTEHOST}$TEMP_TAGS" ) 
#|| die( "ファイルの書き込みに失敗しました : $! \n" );
#print tags_file $out;
#close tags_file;
#my $count =$#file+1;
#print "\n\n$ENV{HOME}/tmp/$ENV{REMOTEHOST}$TEMP_TAGS に$count件の検出エラーを出力しました\n"; 
1;
Share and Enjoy:
  • Digg
  • del.icio.us
  • Google Bookmarks
  • Tumblr
  • email
  • Facebook
  • FriendFeed

RSS Feed

コメントはまだありません。

Leave a comment!

<< 初出社日

テストの自動化 >>

Find it!

Theme Design by devolux.org

Tag Cloud