package Acme::Tabify; use strict; use warnings; our $VERSION = '0.01'; use Module::Compile -base; my %DefaultConfig = ( Tabify => 1, Space => 4, ); my %Config = %DefaultConfig; sub import { my $self = shift; %Config = (%DefaultConfig, @_); my ($module, $line) = (caller(Module::Compile->pmc_caller_stack_frame))[1, 2]; return if $Module::Compile::filtered->{$module}++; my $callback = sub { my ($class, $content, $data) = @_; my $output = $class->pmc_template($module, $content, $data); $class->pmc_output($module, $output); }; Module::Compile->pmc_filter($module, $line, $callback); } sub unimport { %Config = %DefaultConfig; } sub pmc_compile { my ($class, $source) = @_; my $compiled; for my $line (split(/\n/, $source)) { unless ($line =~ /^([ \t]+)(.*)$/) { $compiled .= "$line\n"; next; } my ($head, $code) = ($1, $2); my $space = ' ' x ($Config{Space} =~ /^\d+$/ ? $Config{Space} : $DefaultConfig{Space}); $Config{Tabify} ? $head =~ s/\t/$space/g : $head =~ s/$space/\t/g; $compiled .= "$head$code\n"; } $compiled; } 1; =head1 NAME Acme::Tabify - Tab Taidy =head1 SYNOPSIS use Acme::Tabify; # !tabify code use Acme::Tabify (Space => 8, Tabify => 1);#tab to space8 use Acme::Tabify (Space => 8, Tabify => 0);#space8 to tab =head1 DESCRIPTION =head1 AUTHOR Kazuhiro Osawa =head1 COPYRIGHT Copyright (c) 2006. Kazuhiro Osawa. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L =cut