sortみたいに$aや$bで引数を渡したい
30分プログラム、その609。sortみたいに$aや$bで引数を渡したい。
Perlのsort関数は変った仕様になっていて、引数を$aと$bで受け取ります。
@articles = sort {$a cmp $b} @files;
でも普通に定義したら、こんなことできない。
どうやったら、こんなことができるか気になるよね。
というわけで、$aや$bで引数を渡せるようにがんばってみた。最終的に、グローバル変数まで持ち出すはめになってしまった。
と、ここまで書いて思ったんだけど、"歴史的理由"とかでsort関数だけが特別扱いされてるだけだったら、どうしよう。Perlならやりかない・・・。
使い方
# 引数が$valueになってるよ my_map { $value+1 } (1,2,3);
ソースコード
#! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- # # map.pl - # # Copyright(C) 2009 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2009/06/24 21:22:02 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # use strict; use warnings; use Data::Dumper; our $value; sub my_map(&@){ my ($f,@xs) = @_; my @ys = (); foreach my $x (@xs) { local $value = $x; push @ys,$f->(); } @ys; } print Dumper(my_map { $value+1 } (1,2,3));