ç¥ã£ã¦ããã§æå¤ã¨ç¥ããã¦ããªãperlã®å°æ 10é¸
æå¤ã¨ç¥ããã¦ããªãperlãã¯ã£ã¦ã®ããæå¤ã¨ããããã§ããã
æè¿èº«ã®åãã§ããã¤ã話é¡ã«ä¸ãã£ããã®ããã£ãã®ã§ãã¡ãã£ã¨æ¸ãã¦ã¿ã¾ãã
ã©ããææ°ã®ã¢ããçãªã¢ãã§ã¯ãªããã©ããç¥ã£ã¦ããã¨å°å³ã«ä¾¿å©ãããããªããã¦ãã¦ã§ãã
ä¸ç´ã¬ãã«ä»¥ä¸ã®perlã¦ã¼ã¶ã®äººãã¡ã§ãããããããªã®ç¥ããªãã£ããã¨ããã®ããããããã
è¤æ°é ç®ã§ã®ã½ã¼ã
ããã¨ã¯ã»ã«ãªããã§ãAåãéé ãBåãæé ã«ãã¦ä¸¦ã³æ¿ããã¿ãããªãã¨ãã¾ãããï¼
perlã§è¤æ°é
ç®ã®sortã§ã¯ã©ãããã°ã§ããã§ããããï¼
ãã¤ã¯ã¨ã£ã¦ãç°¡åãsortã®æ¬¡ã«ç¶ããããã¯ã®ä¸ã§orããã ãã§ãã
ä¾ãã°ä»¥ä¸ã®ãããªï¼äººã®åä¾ãã¡ã®ãã¼ã¿ãå¹´é½¢é ãä½éé ã§ã½ã¼ããã¦ã¿ã¾ãã
use strict; my @data = ( { name => '太é', age => 10, weight => 25, }, { name => 'è±å', age => 9, weight => 23, }, { name => '次é', age => 10, weight => 27, }, { name => 'ããå', age => 9, weight => 21, }, ); my @sorted = sort { $b->{age} <=> $a->{age} || $b->{weight} <=> $a->{weight} } @data; for (@sorted) { print $_->{name}, "\t", $_->{age}, "æ³\t", $_->{weight}, "ãã\n"; }
次é 10æ³ 27ãã
太é 10æ³ 25ãã
è±å 9æ³ 23ãã
ããå 9æ³ 21ãã
ãããç°¡åã§ããã
ãããç¥ããªãã¨ãã£ããèªåã§é¢æ°ãæ¸ãã¦ãã¾ãããã«ãªãã¾ããã²ãã¼ã
ã©ã³ãã ã·ã£ããã«
ç¶ãã¦ãããã½ã¼ãããã
é
åãã©ã³ãã ã«ã·ã£ããã«ãã¾ãã
use Data::Dumper; my @data = qw( 0 1 2 3 4 5 6 7 8 9 ); my @shuffle = sort { rand() <=> 0.5 } @data; print Dumper \@shuffle; #çµæã¯ã©ã³ãã ã«ã·ã£ããã«ããã¦ãã
ããããã ãï¼ãªãã§ï¼ã£ã¦æãããããã¾ãããããã¼ãèãã¦ã¿ã¦ãã ããã
ãµã¼ããããèããããã ï¼
GUIã¢ããªãã¤ãã
ããã£ã¨å¿åãå¤ãã¦ã¿ã¾ãã
å®ã¯perlã§windowsã¢ããªãä½ããã£ã¦ç¥ã£ã¦ã¾ãããï¼
Win32::GUIã¨Win32::GUI::Loftã使ãã°ç°¡åã«GUIã¢ããªã±ã¼ã·ã§ã³ãä½ãã¦ãã¾ãã¾ãã
ãããã¯Gtkã¨Gtk2::GladeXMLã使ãã°windowsã ãã§ãªãmacãlinuxãªç°å¢ã§ãåä½ããGUIã¢ããªãä½ããã¾ãã
ãããã®ãã¼ã«ã§æ¸ããã¹ã¯ãªãããPARã§å®è¡å¯è½ãªãã¤ããªå½¢å¼ã«ããã¯ããã°ãperlã¤ã³ã¿ããªã¿ãå ¥ã£ã¦ããªãç°å¢ã«ãé å¸ã§ãããï¼
å ·ä½çã«æ¸ãã¦ããã¨ãããéã«ãªã£ã¦ãã¾ãã®ã§åèãµã¤ããæ¸ãã¦ããã¾ãã
http://blog.remora.cx/2010/03/gui-programming-with-win32-gui-loft.html
http://perl-mongers.org/2008/06/perl-and-gtk.html
ãã¨ã¤ãã§ã«Win32::GuiTestãç´¹ä»ãã¦ããã¾ãã
ããã®SendKeysã¨ããé¢æ°ããã¾ã使ãã°ããã©ã¼ã ãªã©ã¸ã®ãã¼ã¿ã®æµãè¾¼ã¿ã¨ããã§ãã¦é¢ç½ãã§ãã
å¨ãã®äººã«è¦ããã¨ããã¶ãã³ã£ããããã¾ãã
http://perldoc.jp/docs/modules/Win32-GuiTest-1.3/GuiTest.pod
ããã·ã¥ã¨é åã®ç¸äºå¤æ
perlã®ä¸ç´è
ãããã®äººã§ã以å¤ã¨ç¥ããªãäºå®ã
å®ã¯ããã·ã¥ãã¢ã¬ã¤ã³ã³ããã¹ãã§è©ä¾¡ããã¨é
åã«ãªãã¾ãã
éããããã§ãã
my %hash = ( 'ãã¬ã³ã' => 540, 'ã¢ã¡ãªã«ã³' => 540, 'ã«ãã§ãªã¼ã¬' => 650 ); my @array = %hash; # @arrayã®ä¸èº«ã¯ qw( 'ãã¬ã³ã' 540 'ã¢ã¡ãªã«ã³' 540 'ã«ãã§ãªã¼ã¬' 650 ) my %hash2 = @array; #%hash2ã®ä¸èº«ã¯ã¯%hashã¨åã
ãã®æ§è³ªã¯ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã§ãã使ããã¦ãããã¯ã ã£ãããã¾ãã
sub new { my $class = shift; my %args = @_; return bless \%args, $class; }
ããã©ã«ãå¼æ°ãè¨å®ããå ´åãªããããããã風ã«æ¸ããããããã¾ãã
sub new { my $class = shift; my %args = ( foo => 'bar', hoge => 'fuga', @_ ); return bless \%args, $class; }
ãªãã»ã©ããã£ã¦æãã§ã¯ãªãã§ããããã
evalã®ãã¶ãªã使ãæ¹
evalã¨è¨ãã°ä¾å¤å¦çãã¨ããåºå®è¦³å¿µã¯ããã¾ãããï¼
evalã¯ãã£ã¨ã¨ããµã¤ãã£ã³ã°ãªç¨éã§ã使ãã¾ãã
evalã¯æ¸¡ãããããã¯ãperlã¹ã¯ãªããã¨ãã¦å®è¡ãã¾ãã
ãªã®ã§åçã«æååã¨ãã¦ããã°ã©ã ã³ã¼ããçæãã¦ããããå®è¡ããããã¨ãã§ããããã§ãã
ããã¨ãããä¾ãï¼ã¤ããã¾ãã
ãã°ãéè¨ããå ´åã«ãåºèå¥ã®æå¥ã®ååå¥ã®è²©å£²åæ°ãéè¨ããããã¨ãããããªã¿ã¹ã¯ããã£ãã¨ãã¾ãã
ã§ããã®ãâå¥ã®â³å¥ã®ããã¨ãã£ãéè¨é
ç®ãä½åããããããã°ã©ã ãå®è¡ããã¾ã§ããããªããããªæ¡ä»¶ã§ãã£ãã¨ãã¾ãããã
ï¼ç¾å®çã«ã¯ãããªæ¡ä»¶ã£ã¦ãªãã¨æããã©ï¼
use strict; use Data::Dumper; my $data; while (<DATA>) { chomp $_; # ä¸çªæå¾ã®ã«ã©ã ã«æ°å¤ãå ¥ã£ã¦ããã¤ãã # ãã以å¤ã®ã«ã©ã ã¯éè¨è»¸ã¨ãã¦ä½¿ãã¨ããåæ my @f = split( "\t", $_ ); my $value = pop @f; # åçã«ãã¼ã¿æ§é ãä½ã my $string = '$data'; for (@f) { $string .= '->{\'' . $_ . '\'}'; } $string .= '+=' . $value . ';'; # ã¨ãã eval $string; } print Dumper $data; __DATA__ 横æµåº 2010å¹´05æ ååA å²å¼ãªã 2 横æµåº 2010å¹´06æ ååA å²å¼ãã 7 ç°çºåº 2010å¹´06æ ååA å²å¼ãªã 2 ç°çºåº 2010å¹´05æ ååB å²å¼ãªã 4 横æµåº 2010å¹´06æ ååC å²å¼ãªã 8 横æµåº 2010å¹´06æ ååC å²å¼ãã 12
ãªãã¨ãäºåã«å®ç¾©ãããã¨ãªãåçã«å¤æ®µã®ããã·ã¥ãªãã¼ã¿æ§é ãã§ãã¦ãã¾ãã¾ããã
ã§ããããæå³ã§ããã¯ã¨ã¦ãå±éºãªè¡çºã§ãããã°ã®æååã«ã¸ããªã³ã¼ããæ··å ¥ãã¦ããã¢ã¦ããï¼è¡ãã¨ã®evalããã®ã§å®è¡é度ãé ãããã
ããããã¯ãã¡ããè¦ã¦ãã ããã
http://blog.livedoor.jp/dankogai/archives/51175261.html
ããããªã¹ã¯ãååããã£ãä¸ã§ã使ãã©ãããééããªããã°ãevalã¯ååã«ä¾¿å©ãªéå
·ã§ããç§ã¯evalã以å¤ã¨ããã§ãã
perltidy
ã©ããªã«ããã³ã¼ããæ¸ãã¦ãã¤ã³ãã³ãã®å¹ ãã¾ã¡ã¾ã¡ã ã£ããããããªã¼ãæãã®ã½ã¼ã¹ã ã¨ã¤ãã¤ãã§ãããã
ãããªã¨ãã¯Perl::Tidyã§ã½ã¼ã¹ã³ã¼ããæ´å½¢ãã¦ããã¾ããããä¸çºã§ããã£ã½ãè¦æ ãã«å¤èº«ãã¾ãã
ãããä»ãã cpan -i Perl::Tidy ãã¾ããããperltidyã¨ããã³ãã³ãã使ããããã«ãªãã¾ãã
use strict; use warnings; for(1.. 10){ print $_; print "\n"; }
ãããªæ²ãããªãã»ã©ãããªãã³ã¼ãã
use strict; use warnings; for ( 1 .. 10 ) { print $_; print "\n"; }
ãããã¾ã£ã¨ããªè¦æ ãã«ãªãã¾ããã
vimã¤ãã£ã¦ããªãã° :%!perltidy ã¨ããã ãã©OKï¼
ã¨ã¦ã便å©ã§ãã
perlã¨ã ãå©ããã
perlã¯ã³ã¼ããæ¸ãã¦ãã¡ã¤ã«ã«ä¿åãã¦å®è¡ããããã-e ãªãã·ã§ã³ã§ã¯ã³ã©ã¤ãã¼ã¨ãã¦å®è¡ãããããã©ã¡ããã§åãããã®ã¨èãã¦ãã¾ãããï¼
ãããªããªãã¯ãã¾ãã³ã³ã½ã¼ã«ã«åãã£ã¦ãperlãã¨ã ãæã£ã¦ãªã¿ã¼ã³ãã¦ã¿ã¦ãã ããã
ç¶ã㦠print "hello world\n";ãã¨å©ãã¦ã¿ã¦ãã ããã
æå¾ã«Ctrl-Dã
ããï¼ãããªåãããããã£ãã®ãï¼
ã£ã¦ç¥ã£ã¦ã¾ãããï¼å¸¸èã ã£ãããªï¼
ã¢ã¸ã¥ã¼ã«ã®æ ¼ç´å ´æããã
@INCã¯ã¨ã¦ãæåãperlã¦ã¼ã¶ãªãã ãããç¥ã£ã¦ãç¹æ®å¤æ°ã§ããã
ã¤ã³ã¯ã«ã¼ããã¹ãæ ¼ç´ããã¦ãã¾ãã
ä¸æ¹ããªãã %INC ã¯ç¥å度ãä½ãããã§ãã
%INCã«ã¯ãã®ããã°ã©ã ã§ãã¼ããã¦ããã¢ã¸ã¥ã¼ã«ã®ãã¹ãããã·ã¥ã¨ãã¦æ ¼ç´ããã¦ãã¾ãã
use LWP::Simple; while ( my ( $key, $value ) = each %INC ) { print $key, "\t", $value, "\n"; }
ããããã£ãããã¨ãããªãã¾ãã
Godzilla:Hacks miki$ perl test.pl
warnings.pm /System/Library/Perl/5.10.0/warnings.pm
warnings/register.pm /System/Library/Perl/5.10.0/warnings/register.pm
LWP/Simple.pm /System/Library/Perl/Extras/5.10.0/LWP/Simple.pm
Exporter/Heavy.pm /System/Library/Perl/5.10.0/Exporter/Heavy.pm
Exporter.pm /System/Library/Perl/5.10.0/Exporter.pm
HTTP/Status.pm /System/Library/Perl/Extras/5.10.0/HTTP/Status.pm
vars.pm /System/Library/Perl/5.10.0/vars.pm
strict.pm /System/Library/Perl/5.10.0/strict.pm
ã¢ã¸ã¥ã¼ã«ãæ¸ãã¦ãã¦ããã®ã¢ã¸ã¥ã¼ã«èªèº«ãã¤ã³ã¹ãã¼ã«ããã¦ããå ´æãç¥ãããããªãã¦æã«ã¯ãã®ããã·ã¥ããèªåèªèº«ã®ããã±ã¼ã¸åãæ¢ãã°ãã¹ããããã¾ãã
ç¥ã£ã¦ããã¨ã¡ãã£ã¨ä¾¿å©ã§ãã
ã¢ã¸ã¥ã¼ã«ã®ã¡ã½ãããä¸æ¸ããã
CPANã¢ã¸ã¥ã¼ã«ã使ã£ã¦ãã¦ããããã®ã¡ã½ããã®ãã®å¦çãã©ããã¦ãã¡ãã£ã¨ã ãå¤ããããã ããªããã¨ãããããªã±ã¼ã¹ã£ã¦ããã¾ãããï¼
ããããç¶æ¿ããã®ã大ããã£ã¦ãããããªå ´åã¯æãåã£ã¦ãã®ã¯ã©ã¹ã®å½è©²ã¡ã½ãããåå®ç¾©ãã¦ãã¾ãã¾ãããï¼
use strict; use warnings; package Foo; sub do_something { print "ãªã«ãå¦çãã¾ã", "\n"; } package main; # ãªãªã¸ãã«ã®ã¡ã½ããã®ã³ã¼ããªãã¡ã¬ã³ã¹ãä¿æãã¦ãã my $origin = Foo->can('do_something'); # åã°ããã§ä¸æ¸ã no warnings 'redefine'; *Foo::do_something = sub { print "ãã®ã¡ã½ããã¯ããããã¿ã¼ï¼", "\n"; }; # å®è¡ãã¦ã¿ã Foo->do_something(); #ãããã¿ã¬ã¿ã¼ï¼ # ãã¨ã«æ»ã no warnings 'redefine'; *Foo::do_something = sub { $origin->(); }; # ããï¼åå®è¡ãã¦ã¿ã Foo->do_something(); # ãªã«ãå¦çãã¾ã
å®è¡çµæã¯ãããªãã¾ãã
ãã®ã¡ã½ããã¯ããããã¿ã¼ï¼
ãªã«ãå¦çãã¾ã
ã¡ãã£ã¨ãè¡åãããããããã¾ããããç¥ã£ã¦ããã¨ä¾¿å©ãªãã¯ã§ããã
perldocãããå°ã
perldocã£ã¦ä¾¿å©ã§ãããããããããã©ã¦ã¶ã§CPANãµã¤ãã«è¡ããªãã¦ãPODã®ããã¥ã¡ã³ããã³ã³ã½ã¼ã«ã§é²è¦§ã§ããããã§ãã
ãããªä¾¿å©ãªperldocãããå°ãã ã便å©ã«ä½¿ããªãã·ã§ã³ã§ãã
ã¢ã¸ã¥ã¼ã«ã®æ ¼ç´ããã¦ãããã¹ãç¥ãããã«ã¯ -l ãªãã·ã§ã³ãã¤ãã¾ãã
perldoc -l
Godzilla:Hacks miki$ perldoc -l JSON
/Library/Perl/5.10.0/JSON.pm
ããã«ã½ã¼ã¹ãç´æ¥ã¿ããå ´å㯠-m ãªãã·ã§ã³ã§ã½ã¼ã¹ãéããã¨ãã§ãã¾ãã
perldocã¯ä¾¿å©ã ãªãã
以ä¸ããªãã®è絡ããªãï¼ï¼åã®ãæå¤ã¨ç¥ããã¦ããªããã¯ããã¯ããç´¹ä»ãã¦ã¿ã¾ããã
enjoy!