行数に応じてlessとcatを切替えてくれるスクリプト

30分プログラム、その658。行数に応じてlessとcatを切替えてくれるスクリプトを書いてみました。
ボクは、ファイルの中身を見るとき、画面に収まるならcat、収まらないならlessを使う派です。lessを使うとqを押さないといけないのが面倒なのです。
で、そうなると、まずはcatをして、それでダメならlessをするというムダな手順を踏むことになります。
というわけで、画面に収まるならcatを、収まらないならlessを使うスクリプトを書いてみました。標準入力には対応してないので、パイプに継げることはできませんけど、まあパイプに継げたいことはないと思います。

使い方

# 画面のサイズとhoge.txtの行数に応じて、lessとcatを切り替える
$ scat hoge.txt

ソースコード

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

use strict;
use warnings;
use Data::Dumper;
use List::Util qw();
sub rows(){
    my $s = `stty -a`;
    $s =~ /(\d+) rows/ or die "row error";
    $1;
}

sub is_over($){
    my ($rows) = @_;
    my $n = 0;
    for(<>){
	$n ++;
	if($rows < $n){ return 1; }
    }
    return 0;
}

my @orig = @ARGV;
if(is_over(rows)){
    system "less @orig";
}else{
    system "cat @orig";
}