template::plugin::file(3)
NAME
Template::Plugin::File - Plugin providing information
about files
SYNOPSIS
[% USE File(filepath) %] [% File.path %] # full path [% File.name %] # filename [% File.dir %] # directory
DESCRIPTION
This plugin provides an abstraction of a file. It can be
used to fetch details about files from the file system, or
to represent abstract files (e.g. when creating an index
page) that may or may not exist on a file system.
- A file name or path should be specified as a constructor
argument. e.g. - [% USE File('foo.html') %]
[% USE File('foo/bar/baz.html') %]
[% USE File('/foo/bar/baz.html') %] - The file should exist on the current file system (unless
'nostat' option set, see below) as an absolute file when
specified with as leading '/' as per '/foo/bar/baz.html',
or otherwise as one relative to the current working direc
tory. The constructor performs a stat() on the file and
makes the 13 elements returned available as the plugin
items:
dev ino mode nlink uid gid rdev size
atime mtime ctime blksize blocks- e.g.
[% USE File('/foo/bar/baz.html') %]- [% File.mtime %]
[% File.mode %]
... - In addition, the 'user' and 'group' items are set to con
tain the user and group names as returned by calls to get_
pwuid() and getgrgid() for the file 'uid' and 'gid' ele ments, respectively. On Win32 platforms on which getp_
wuid() and getgrid() are not available, these values are undefined.
[% USE File('/tmp/foo.html') %]
[% File.uid %] # e.g. 500
[% File.user %] # e.g. abw- This user/group lookup can be disabled by setting the
'noid' option.
[% USE File('/tmp/foo.html', noid=1) %]
[% File.uid %] # e.g. 500
[% File.user %] # nothing- The 'isdir' flag will be set if the file is a directory.
[% USE File('/tmp') %]
[% File.isdir %] # 1- If the stat() on the file fails (e.g. file doesn't exists,
bad permission, etc) then the constructor will throw a
'File' exception. This can be caught within a TRY...CATCH
block.
[% TRY %][% USE File('/tmp/myfile') %]
File exists!- [% CATCH File %]
File error: [% error.info %]
- [% END %]
- Note the capitalisation of the exception type, 'File' to
indicate an error thrown by the 'File' plugin, to distin
guish it from a regular 'file' exception thrown by the
Template Toolkit. - Note that the 'File' plugin can also be referenced by the
lower case name 'file'. However, exceptions are always
thrown of the 'File' type, regardless of the capitalisa
tion of the plugin named used.
[% USE file('foo.html') %]
[% file.mtime %]- As with any other Template Toolkit plugin, an alternate
name can be specified for the object created.
[% USE foo = file('foo.html') %]
[% foo.mtime %]- The 'nostat' option can be specified to prevent the plugin
constructor from performing a stat() on the file speci
fied. In this case, the file does not have to exist in
the file system, no attempt will be made to verify that it
does, and no error will be thrown if it doesn't. The
entries for the items usually returned by stat() will be
set empty.
[% USE file('/some/where/over/the/rainbow.html', nos- tat=1)
[% file.mtime %] # nothing - All File plugins, regardless of the nostat option, have
set a number of items relating to the original path speci
fied. - path
- The full, original file path specified to the con
structor.
[% USE file('/foo/bar.html') %]
[% file.path %] # /foo/bar.html - name
- The name of the file without any leading directories.
[% USE file('/foo/bar.html') %]
[% file.name %] # bar.html - dir The directory element of the path with the filename
- removed.
[% USE file('/foo/bar.html') %]
[% file.name %] # /foo - ext The file extension, if any, appearing at the end of
- the path following a '.' (not included in the exten
sion).
[% USE file('/foo/bar.html') %]
[% file.ext %] # html - home
- This contains a string of the form '../..' to repre
sent the upward path from a file to its root direc
tory.
[% USE file('bar.html') %]
[% file.home %] # nothing[% USE file('foo/bar.html') %]
[% file.home %] # ..[% USE file('foo/bar/baz.html') %]
[% file.home %] # ../.. - root
- The 'root' item can be specified as a constructor
argument, indicating a root directory in which the
named file resides. This is otherwise set empty.
[% USE file('foo/bar.html', root='/tmp') %]
[% file.root %] # /tmp - abs This returns the absolute file path by constructing a
- path from the 'root' and 'path' options.
[% USE file('foo/bar.html', root='/tmp') %]
[% file.path %] # foo/bar.html
[% file.root %] # /tmp
[% file.abs %] # /tmp/foo/bar.html - In addition, the following method is provided:
- rel(path)
- This returns a relative path from the current file to
another path specified as an argument. It is con
structed by appending the path to the 'home' item.
[% USE file('foo/bar/baz.html') %]
[% file.rel('wiz/waz.html') %] #../../wiz/waz.html
EXAMPLES
[% USE file('/foo/bar/baz.html') %]
[% file.path %] # /foo/bar/baz.html
[% file.dir %] # /foo/bar
[% file.name %] # baz.html
[% file.home %] # ../..
[% file.root %] # ''
[% file.abspath %] # /foo/bar/baz.html
[% file.ext %] # html
[% file.mtime %] # 987654321
[% file.atime %] # 987654321
[% file.uid %] # 500
[% file.user %] # abw
[% USE file('foo.html') %]
[% file.path %] # foo.html
[% file.dir %] # ''
[% file.name %] # foo.html
[% file.root %] # ''
[% file.home %] # ''
[% file.abspath %] # foo.html
[% USE file('foo/bar/baz.html') %]
[% file.path %] # foo/bar/baz.html
[% file.dir %] # foo/bar
[% file.name %] # baz.html
[% file.root %] # ''
[% file.home %] # ../..
[% file.abspath %] # foo/bar/baz.html
[% USE file('foo/bar/baz.html', root='/tmp') %]
[% file.path %] # foo/bar/baz.html
[% file.dir %] # foo/bar
[% file.name %] # baz.html
[% file.root %] # /tmp
[% file.home %] # ../..
[% file.abspath %] # /tmp/foo/bar/baz.html
- # calculate other file paths relative to this file and
- its root
[% USE file('foo/bar/baz.html', root => '/tmp/tt2') %]
[% file.path('baz/qux.html') %] # - ../../baz/qux.html
[% file.dir('wiz/woz.html') %] # - ../../wiz/woz.html
AUTHORS
Michael Stevens <michael@etla.org> wrote the original
Directory plugin on which this is based. Andy Wardley
<abw@kfs.org> split it into separate File and Directory
plugins, added some extra code and documentation for VIEW
support, and made a few other minor tweaks.
VERSION
2.51, distributed as part of the Template Toolkit version
2.08, released on 30 July 2002.
COPYRIGHT
This module is free software; you can redistribute it
and/or modify it under the same terms as Perl itself.
SEE ALSO
- Template::Plugin, Template::Plugin::Directory, Tem
plate::View