パイプでも複数行のlsが使いたい

30分プログラム、その388。
普通にlsをパイプで使うと、一行になってしまう。

$ ls  | head
13.pl
180-croquis_file.pl
181-hello.oz
182-mapreduce.ml
183-p4.ml
184-tarai.hs
184-tarai.rb
185-auto_insert.rb
186-url.rb

ls -Cを使えば複数行になるけど、幅が80行になってしまう。

$ ls -C  | head
                          359-cal.py                   kaibun.pl
3n1.pl                    360-sh.scm                   keitai.pl
...

というわけで、行幅を認識しつつ複数行を出力するスクリプトを作ってみた。

$ perl ls.pl | head
                          320-problem46.scm            db                  newton.py
13.pl                     321-problem47.py             db.pl               normal.rb
...

使い方

$ perl ls.pl 
$ perl ls.pl /

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# ls.pl -
#
# Copyright(C) 2008 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2008/10/12 21:53:41
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#

use strict;
use warnings;
use Data::Dumper;

my $stty = `stty -a`;
if($stty =~ /columns (\d+)/){
    print `ls -w $1 -C @ARGV`;
}