tabs.pm

来自「UNIX下perl实现代码」· PM 代码 · 共 98 行

PM
98
字号
package Text::Tabs;require Exporter;@ISA = (Exporter);@EXPORT = qw(expand unexpand $tabstop);use vars qw($VERSION $tabstop $debug);$VERSION = 98.112801;use strict;BEGIN	{	$tabstop = 8;	$debug = 0;}sub expand{	my (@l) = @_;	for $_ (@l) {		1 while s/(^|\n)([^\t\n]*)(\t+)/			$1. $2 . (" " x 				($tabstop * length($3)				- (length($2) % $tabstop)))			/sex;	}	return @l if wantarray;	return $l[0];}sub unexpand{	my (@l) = @_;	my @e;	my $x;	my $line;	my @lines;	my $lastbit;	for $x (@l) {		@lines = split("\n", $x, -1);		for $line (@lines) {			$line = expand($line);			@e = split(/(.{$tabstop})/,$line,-1);			$lastbit = pop(@e);			$lastbit = '' unless defined $lastbit;			$lastbit = "\t"				if $lastbit eq " "x$tabstop;			for $_ (@e) {				if ($debug) {					my $x = $_;					$x =~ s/\t/^I\t/gs;					print "sub on '$x'\n";				}				s/  +$/\t/;			}			$line = join('',@e, $lastbit);		}		$x = join("\n", @lines);	}	return @l if wantarray;	return $l[0];}1;__END__=head1 NAMEText::Tabs -- expand and unexpand tabs per the unix expand(1) and unexpand(1)=head1 SYNOPSISuse Text::Tabs;$tabstop = 4;@lines_without_tabs = expand(@lines_with_tabs);@lines_with_tabs = unexpand(@lines_without_tabs);=head1 DESCRIPTIONText::Tabs does about what the unix utilities expand(1) and unexpand(1)do.  Given a line with tabs in it, expand will replace the tabs withthe appropriate number of spaces.  Given a line with or without tabs init, unexpand will add tabs when it can save bytes by doing so.  Invisiblecompression with plain ascii!=head1 BUGSexpand doesn't handle newlines very quickly -- do not feed it anentire document in one string.  Instead feed it an array of lines.=head1 AUTHORDavid Muir Sharnoff <muir@idiom.com>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?