ONO::IO

ONO::IO is responsible for all file and directory accesses, as long as they are located within the ONO document root directory. All I/O should either be handled by ONO::IO, or by ONO::Core::HostIO, you should not use low level Perl I/O stuff in your ONO projects.

Important I/O calls include:

load(), list(), store(), append(), dump(), ls() / dir(), mkdir(), mkpath(), exists(), mv(), cp(), cpr(), rm(), rmdir()

ONO::IO also allows to manage cache and configuration files for example:

cacheread(), cachewrite(), confread(), confwrite()

Most ONO::IO calls respect the presence of thumbnail and preview files, those can also be detected if necessary:

getthumbs(), getthumbs_ifexists()

Furthermore, the module offers access to system information and allows for system interaction:

os(), cpu(), mem(), disks(), domain(), sys(), exec(), http(), https(), http_domain_base(), sysload()

ONO::IO also helps with software development, by detecting development stations and offering appropriate tools, for example:

devstation(), devprint(), debug()

For file and directory I/O outside of the ONO document root, see ONO::Core::HostIO.

Functions

append();

Append data to a file, data can be a string or an array.

ONO::IO->append( $file,@data );

base();

Return the software base (if cgi-bin is not on the document root level, as in www.example.com/path/lang/cgi-bin/... for example). Note that the base always needs to be composed of 2 subdirectories.

ONO::IO->base( );
returns: $base

binary_dirs();

List UNIX directories that may contain useful UNIX binaries that can be used by certain ONO::Lib modules for example.

ONO::IO->binary_dirs( );
returns: ("/usr/bin","/usr/local/bin","/opt/local/bin")

cacheclean();

Removes a cache file.

Note that empty dirs in /var/tmp/cache are not being removed, which means that some sort of garbage collection will be required some day...

ONO::IO->cacheclean( $file );

cacheexists();

Check if a cache entry exists (returns 1 if yes, or 0 if not).

ONO::IO->cacheexists( $file );

cachefile();

Turn a file (directory/path plus filename) into a cache ID filename. This is usually not required, but it's used internally by other cache related functions.

ONO::IO->cachefile( $file );
returns: $file

cachelistsimple();

Simplified form of cachelist(), simple and fast, supplies no useful info, just returns the content of the cache, doesn't automatically manage or delete anything by itself.

ONO::IO->cachelistsimple( $file );
returns: &list("","var/tmp/cache/$file.txt")

cacheread();

Read a cache file, and do some cache management at the same time.

If $time is provided, then we'll only read the cache if it's not older than T minutes. if it's older, then the cache file will simply be removed.

Switches:

-d debugging mode
-L list mode, allows to read arrays
-S silent mode
-v verbose (can be useful when debuggin HTML)
-V verbose only if not empty

If no options and no cache management is required, then cachereadsimple() will be a better and faster option here.

ONO::IO->cacheread( $file,$time,$switches );

cachereadsimple();

Simplified form of cacheread(), simple and fast, supplies no useful info, just returns the content of the cache, doesn't automatically manage or delete anything by itself.

ONO::IO->cachereadsimple( $file,$verbose );

cachetimestamp();

Get the timestamp of a cache file, which may be useful to decide if it's time to remove or replace it.

ONO::IO->cachetimestamp( $file );
returns: &timestamp("","var/tmp/cache/$file.txt")

cachewrite();

Write a cache file, and do some cache management at the same time.

Switches:

-D delete if empty
-E don't write if empty
-L list mode, allows to store arrays, requires $data to be a hash reference
-v verbose
-V Verbose only if not empty

If no options and no cache management is required, then cachewritesimple() will be a better and faster option here.

ONO::IO->cachewrite( $file,$data,$switches );

cachewritesimple();

Simplified form of cachewrite(), simple and fast, doesn't do anything special. Just writes the data, doesn't automatically manage or delete anything by itself.

ONO::IO->cachewritesimple( $file,$data );

chmod();

Change file or directory permissions.

ONO::IO->chmod( $object,$mode );
returns: "chmod $mode $vpath/$object"

chomplist();

Similar to list(), but removes all carriage returns, lewlines and tabs.

ONO::IO->chomplist( $file );
returns: @new_data

cleanup();

The cleanup() function will remove all special characters form a filename, directory name, or a path. The override option may be used for any data stored within the /servers tree.

ONO::IO->cleanup( $file,$override );
returns: $file

close();

This will simply close a file handle. Also see open().

ONO::IO->close( );

colread();

This allows to quickly read files in name:value list format, data will be returned in hash format.

ONO::IO->colread( );
returns: %conf

community();

Same as project().

ONO::IO->community( );
returns: &project()

compare();

Compare files.

Returns NULL if files are identical Returns difference details if NOT identical

$max: if file bigger than $max then only check file size (no diff)

$fast: avoid using diff if possible, does not always return differences though

ONO::IO->compare( $file1,$file2,$max,$fast );

confread();

Read an ONO configuration file.

Switches:

-L make value lower case

ONO::IO->confread( $file,$switches );
returns: %conf

confupdate();

Update an ONO configuration file, which replaces the $value of the $name entry. The remaining data will not be touched.

ONO::IO->confupdate( $file,$name,$value );

confwrite();

Write an ONO configuration file. This is basically the same as the store() function, which means that YOU will need to take care of formatting the data before sending it.

ONO::IO->confwrite( );

copy();

Create a copy of of filename.ext, at the same location. The new file will be named filename_copy.ext. If filename_copy.ext exists, the name will become filename_copy_X.ext, where X is a number starting at 1.

If present, thumbnails will also be copied.

ONO::IO->copy( $path );
returns: $new

count();

Count objects (directories and files) inside a directory. Note that this does NOT work recursively, only the first level of the directory is being taken into consideration.

Switches:

-d only directories
-f only files
-i only images
-S omit .setup
-t only txt files
-T omit .thumbs and previews

ONO::IO->count( $dir, $init, $switches );
returns: $init

cp();

Copy a file to a new target. Related thumbnails and setup files will also be taken into consideration.

ONO::IO->cp( $source,$target );

cpr();

Recursively copy a directory.

Switches:

-p preserve file properties
-n do not overwrite an existing file

ONO::IO->cpr( $source,$target,$switches );

cpu();

Return CPU info. This should display the type of processor, as well as the number of available cores (multithreading is being considered).

-b make bold

ONO::IO->cpu( );
returns: $cpu

create();

An intelligent version of "store" that will not overwrite existing files, but add a number to the filename, if the file already exists.

ONO::IO->create( $dir,$file,$ext,@data );
returns: $filename

curl();

Retrieve a file from the web, return the data as a stream. Be careful not to pass the input unchecked, and don't allow user input to be passed to this function!

ONO::IO->curl( $url );
returns: `curl -k '$url'`

curlstore();

Same as curl(), but dump / store the data into a file.

ONO::IO->curlstore( $url,$file );

debug();

Append to /__debug.txt. This should not be used on production systems, but only on development stations. It may be used temporarely on production systems to analyze problems that need a quick fix, but make sure to remove /debug.txt later on then.

ONO::IO->debug( $data );

deepdir();

Turns 'ABCXYZ' into 'A/AB/ABC'.

ONO::IO->deepdir( );
returns: substr($_[1],0,1).$sep.substr($_[1],0,2).$sep.substr($_[1],0,3)

deepdirs();

Turns 'ABCXYZ' into ('A','AB','ABC').

ONO::IO->deepdirs( );
returns: (substr($_[1],0,1),substr($_[1],0,2),substr($_[1],0,3))

deepnum();

ONO::IO->deepnum( );
returns: substr($id,0,3).$sep.substr($id,3,3).$sep.substr($id,6,3)

devdump();

Write to /__devdump.txt if we're on a devstation, so this can be used for debugging purposes. The file will be overwritten each time, so this should be used at the end of the script. Date and time will be automatically added to the top of the content.

ONO::IO->devdump( );
returns: $_[1]

devguessuri();

If we're on a devstation, then guess the absolute URI, based on the name of the input script. This can be use useful to debug links.

ONO::IO->devguessuri( );
returns: $URI

device();

Return the type of device in use.

3 ways to use this:

device() will return either computer, tablet or phone

device(type) will return either 0 or 1

device("useragent") will return the user agent

iPad Warning:

Note that current iPads identify themselves as Intel Macs. A dirty trick is needed to identify them correcty:      1. First test if it's a Mac, using ONO;;IO->device("mac")      2. The use if (navigator.maxTouchPoints > 1) {...} to execute JS

ONO::IO->device( );
returns: $device

devprint();

Return content only if we're in devstation mode. This allows to print debugging info on a web page on a development station, this info will not be displayed on production systems for example. Args(int): disable, replace return/linefeed by HTML br, bold

ONO::IO->devprint( );

devstation();

This will return 1 if we're on a devstation, or 0 if we're on a production system. This will only work if...

... we're in a local network and a file named /cgi-bin/devstation.txt is available, or ...

... the file /mnt/ono/cgi-bin/devstation.txt is present on the UNIX root level.

Note that the devstation.txt file should contain the devstation client's IP address as content.

ONO::IO->devstation( );

devstation_refresh();

Only refresh if devstation - probably deprecated ?

ONO::IO->devstation_refresh( );

devstore();

Like store, but will only execute on a devstation, which may be useful when debugging code.

ONO::IO->devstore( );

dir();

List dirs and files.

Switches:

-B omit Base directory from list
-C cleanup (remove slashes at beginning)
-D only directories
-H no hidden files (starting by a dot)
-L list (option list for HTML forms)
-O option list -> shorten names if very long
-R recursive (does NOT work with sort mode! -- the -H switch is automatically enabled -- use -X to improve speed and to reduce CPU load)
-s sort (works with both list and string)
-S return list as a string (useful when using the -L option for example)
-W RAW mode allows special characters
-X use UNIX ls command to get recursive directories (only affects the -R switch)

Note that the RX modes will ONLY list directories, NOT files!

ONO::IO->dir( $dir,$filter,$ext,$sort,$opts,$excluded,$prefix );

dirfile();

Is this a directory (returns 'dir') or a file (returns 'file') ?

ONO::IO->dirfile( );
returns: $type

dirisfile();

Extensions that will always be treated as files, even if they're dirs.

ONO::IO->dirisfile( );

dirprotect();

Protect a directory by putting an index.shtml into it. This will still allow access to files within the directory, but listing it will be prohibited. Also see htaccess() for additional protection.

ONO::IO->dirprotect( );

dirsize();

Return the size of a directory (including all files and directories contained in it).

Switches:

-M machine mode in megabytes (disable human readable)

ONO::IO->dirsize( $dir,$switches );

disks();

List hard drives, display disk usage (percentage).

ONO::IO->disks( );
returns: sort @disks

domain();

Return the domain, remove stuff like 'www' and other subdomains.

ONO::IO->domain( );
returns: $domain

domain_full();

Return the domain, including 'www' or subdomains for example. The domain can also be set via a configuration file (etc/domain.conf), which may be required in some proxy environments.

ONO::IO->domain_full( );
returns: $domain

dump();

Dump data to a file, without any processing. Use this only if store() stoesn't work for some reason. This may be used to store uploaded files containing special data for example.

ONO::IO->dump( $file,$data );

dump_append();

Dump data to a file, without any processing. Use this only if append() stoesn't work for some reason.

ONO::IO->dump_append( $file,$data );

dump_load();

Load an entire file, return as string, don't process anything. Use this only if load() stoesn't work for some reason.

ONO::IO->dump_load( $file );
returns: $DATA

exec();

Execure a UNIX command, via ONO::Core::Kernel's exec() function.

ONO::IO->exec( $exec );
returns: ONO::Core::Kernel->exec($exec)

exec2();

Execure a UNIX command. This is a less restrictive version of exec() (allows (\',\",\@,\:,\[,\])).

ONO::IO->exec2( $exec );
returns: `$exec`

exec3();

Execure a UNIX command. This is a zero restrictions version of exec (allows everything) THIS MAY BE DANGEROUS TO USE - especially if you're using it in a script that's running with root privileges.

ONO::IO->exec3( $exec );
returns: `$exec`

exists();

Check if file or path exists. Returns 1 if exists, or nothing if the object doesn't exist.

ONO::IO->exists( $file );
returns: $exists

exists_wait();

Wait until a file has been created, which is useful if complex file generation tools are being used. Waiting for up to 3 secs is default, higher values can be set manually.

ONO::IO->exists_wait( $file,$secs );

fileisdir();

Extensions used by files that are actually not files, but dirs

ONO::IO->fileisdir( );

getdir();

Transform /my/path/to/file.ext into /my/path/to/.

Only works correctly if the input is using a correct /my/path/to/file.ext format.

ONO::IO->getdir( $path );
returns: $1

getdirfile();

Transform /my/path/to/file.ext into ('/my/path/to/','file.ext').

Only works correctly if the input is using a correct /my/path/to/file.ext format.

ONO::IO->getdirfile( $path );
returns: ($dir,$file)

getdirfileext();

ONO::IO->getdirfileext( $path );
returns: ($dir,$1,$2)

getfileext();

Return the file and its extension, eg file.ext becomes ('file','ext').

ONO::IO->getfileext( );
returns: ($1,$2)

getfiletype();

Return file type: image, audio, video or pdf. Will be empty if it's none of those.

ONO::IO->getfiletype( );
returns: $filetype

getimage();

Replace an image URL into a preview or thumbnail URL if the required files exist, and if the image dimensions are adequate.

ONO::IO->getimage( $img,$w,$h );
returns: $img

getsetup();

Returns the path to an optional setup file.

Switches:

-x override exists check (required for creating a new file)

ONO::IO->getsetup( $path,$flags );

getthumbs();

Returns paths to preview and thumbnail files. Returns nothing if the file type does not allow for thumbnail files.

ONO::IO->getthumbs( $path );

getthumbs_ifexists();

Returns paths to preview and thumbnail files, but onyl if they exist, and if the file type supports them.

ONO::IO->getthumbs_ifexists( $path );

hashread();

Return file data as a hash. This works for lists separated by semicolon.

ONO::IO->hashread( );
returns: %hash

hashwrite();

Write a hash to a file, using semicolon separation. Input needs to be a hash reference in this case.

ONO::IO->hashwrite( );

htaccess();

Password management and protection only. See dirprotect to prevent directory listing.

You need to specify $key, if this is empty then the protection will be removed. To protect without any login option, simply use ':' as $key.

ONO::IO->htaccess( $dir,$key );

htaccess_ip();

Restrict access to a directory only for one IP address.

ONO::IO->htaccess_ip( $dir,$ip );

htaccess_rewrite();

Add a rewrite rule via .htaccess, simply indicate the target, which must be a path to a script.

ONO::IO->htaccess_rewrite( $dir,$com );

htmlencode();

Encode a string by replacing HTML lt, gt and quot. This will be useful in input fields for example.

ONO::IO->htmlencode( );
returns: $input

http();

Returns 'http' or 'https', depending on the current SSL status of the domain.

ONO::IO->http( );
returns: $HTTP

http_domain_base();

Returns http(s)://www.example.com/ono/path/. This basically glues the http(), domain() and base() functions.

ONO::IO->http_domain_base( );
returns: &http()."://".&domain().&base()

https();

Returns 1 if SSL is available, or 0 is SSL is not available. Returning 1 can be forced, by adding a dedicated setup file (etc/https.conf), which may be required in certain proxy environments.

ONO::IO->https( );

image();

Returns 1 if file extension is image, or 0 if not. This works for both filenames, and directory/filename combinations.

ONO::IO->image( );

imageexts();

Return a list of common (not all) image extensions.

ONO::IO->imageexts( );
returns: ('jpg','jpeg','png','gif','webp')

imagefile();

Same as image(), but does not work for preview and thumbnail files.

ONO::IO->imagefile( );

inputfilter();

Filter and return input, by removing a number of special characters

ONO::IO->inputfilter( );
returns: $input

inputfilters();

Like inputfilter(), but for arrays.

ONO::IO->inputfilters( @inputs );
returns: @new

ip();

Return the IP address of the host.

ONO::IO->ip( );
returns: $ip

is_local_ip();

Is the provided IP a local IP ? Returns 1 of local, or 0 if not local. Also see local().

Not to be confused with local(), which tells you if the host's IP is local.

ONO::IO->is_local_ip( );
returns: $res

list();

List a file. Similar to load(), but returns lines as an array.

Switches:

-E don't return lines that don't contain numbers or letters

ONO::IO->list( $file,$switches );
returns: @new_data

list_line();

Like list(), but returns only one specific line from the file, which must be indicated as a number.

ONO::IO->list_line( $file,$line );

list_raw();

List_raw() is identical to list(), but allows to load files without checking the file name, which means that it also loads files with special characters.

ONO::IO->list_raw( $file );
returns: @new_data

load();

Load a file, return its content.

Switches:

-n remove new lines
-h HTML: replace \n by

ONO::IO->load( $file, $switches );
returns: $dump

local();

Are we in a local network? Returns 1 = yes, 0 = no. This will only work if the SERVER_NAME is an IP address, not a domain, unless the domain will be of type example.local.

ONO::IO->local( );

ls();

Same as dir().

ONO::IO->ls( $dir,$filter,$ext,$sort,$opts,$excluded,$prefix );

lst();

List directory items by timestamp. This will simply dump the UNIX ls output.

ONO::IO->lst( $dir );
returns: @objects

mem();

Return the total amount of RAM available, in GB / GigaBytes.

ONO::IO->mem( );
returns: $mem

mkdir();

Create a new directory. Permissions may be set at the same time. Also see mkpath() for a more powerful alternative.

ONO::IO->mkdir( $dir,$mode );

mkdir_new();

This will create a new subdir, add a number if such a subdir already exists, and return the created name. The new subdir will always have permissions set to 777.

ONO::IO->mkdir_new( $dir,$new );
returns: $name

mkpath();

Like mkdir(), but generates the entire path, including all of its subdirs. Permissions may be set at the same time.

ONO::IO->mkpath( $dir,$mode );

mv();

Move or rename a file or a directory. Related thumbnails and setup files will also be taken into consideration.

ONO::IO->mv( $source,$target );

mvdirty();

Like mv(), but for "dirty" sources containing bad characters. Related thumbnails and setup files will also be taken into consideration.

ONO::IO->mvdirty( $source,$target );
returns: "mv '$vpath/$source' '$vpath/$target'"

objtype();

Return the type of a object:

'none' if object doesn't exist 'dir' if object is a directory 'file' if object is a file

Also see dirfile(), which does more or less the same thing (only the 'none' option is missing), only better.

ONO::IO->objtype( );
returns: $ret

open();

This will simply open a file handle, as required by ONO_Lib_Image_Check for example. Also see close().

ONO::IO->open( );
returns: $FH

os();

Return the OS of the host ('linux' or 'macos'). This is similar to ONO::Core::HostOS->host_os(), although the output is different.

ONO::IO->os( );
returns: $os

path();

Returns the UNIX path to the ONO document root directory. This is the same as ONO::Core::Kernel->vpath, so you may simply get this info via ONO::IO.

ONO::IO->path( );
returns: ONO::Core::Kernel->vpath

path2dir();

Demove everything behind the last slash (including the last slash itself). This will remove any file info from the directory and return the pure directory path.

Also see getdir(), getdirfile(), and getdirfileext(), which will be more useful in most cases.

ONO::IO->path2dir( );
returns: $path

pixel();

Returns a pixel image as a data stream.

ONO::IO->pixel( );
returns: $PIXEL

project();

Return the name of an ONO project, as in www.example.com/cgi-bin/local/perl/project_name/... for example.

ONO::IO->project( );
returns: $community

quicklist();

Return file as content as an array, without doing anything else.

ONO::IO->quicklist( $file );
returns: @data

readsetup();

Read a setup file.

-H no HTML parsing (preserve
)

ONO::IO->readsetup( $object, $flags );
returns: \%hash

refresh();

HTML refresh, this will simply auto-redirect to a different page. In most cases, you will simply push refresh($url) to the client.

You may specify seconds to wait, and you may also force using SSL/https for the destination.

For testing purposes, the 'auto' feature is disabled on development stations, which will display a clickable link displaying the entire URL instead. Using $devstation_overrule will override this behaviour and enable the 'auto' features on development stations too.

ONO::IO->refresh( $URL, $SECS, $HTTP_FORCE, $devstation_overrule );

renumber();

Renumber files and/or directories in a directory, shtml/setup files as well as pt/tn files will be ignored. Note that all thumbs and previews will be removed during this process.

-d renumber directories
-f renumber files
-u keep string after underscore
-U collect numbering if underscore (001_x and 001_y will be kept as is)

ONO::IO->renumber( $dir, $start, $step, $switches );

rm();

Remove (aka delete) a file, including its (optional) thumbnails and setup files.

ONO::IO->rm( $file );

rmdir();

Remove directory, including all of its contents. Recursive and with force delete enabled, use rmdirsoft() for a less dangerous operation.

ONO::IO->rmdir( $dir );

rmdirsoft();

Like rmdir(), but without force.

ONO::IO->rmdirsoft( $dir );

rmimage();

Like rm(), but a special version that will additionally remove the file with multiple possible image extensions.

ONO::IO->rmimage( $file );

save();

ONO::IO->save( $file,@data );

savesetup();

Save / store a setup file.

-m multi-line mode for meta data, replaces newline/return by HTML

ONO::IO->savesetup( $object, $vars_ref, $switches );
returns: $DEBUG

size();

Return the size of a file, by default this will simply return the number of bytes.

Switches:

-d recursive directory mode
-h human readable (add "bytes", "kb", or "mb")
-k kb
-l count lines
-w count words

ONO::IO->size( $file,$switches );
returns: $size

split();

Split a file into pieces.

ONO::IO->split( $source,$target,$size );

stat();

Returns file or directory stats as an array.

ONO::IO->stat( $file );
returns: ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)

store();

Store a file. If the file exists, it will be overwritten. Data can be a string, or an array.

ONO::IO->store( $file,@data );

store_rm();

Store a file if data is provided (just like store()), remove the file if data is empty. Unlinke store(), data cannot be an array, online strings are supported.

ONO::IO->store_rm( $file,$data );

symlink();

Create a symlink.

ONO::IO->symlink( $file,$symlink );

sys();

Direct access to the UNIX system, via ONO::Core::Kernel's sys() function.

ONO::IO->sys( $mode,$opts );
returns: ONO::Core::Kernel->sys($mode,$opts)

sysload();

Returns the current system load (percent of total available), CPU cores and multithreading are taken into consideration.

This can be used to run or disable code depending on the system load of the host, sysload(50) is true if current load is LOWER than 50 for examaple.

This uses cached system load info, which will be updated about every 5 seconds.

Note that the threshold feature is NOT working on development stations, which makes developing under high load conditions a lot easier (devstations always return 1).

ONO::IO->sysload( );

sysloadmsg();

Returns a system overload message. Note that this function only dumps some text, it does not do or detect anything. It may be a good idea to use this in combination with sysload().

ONO::IO->sysloadmsg( );
returns: qq~<div class="lh125">$MSG</div>~

tar();

ONO::IO->tar( $source,$target );
returns: "tar -zcf $vpath/$target $vpath/$source"

timestamp();

Return the modification (or creation) timestamp of a file or directory.

ONO::IO->timestamp( $file );
returns: $mtime

touch();

Update the modification timestamp of a file or directory.

ONO::IO->touch( $file,$time );

type();

This is a file or a directory? Returns 'dir' or 'file'. Please use dirfile() instead, or objtype(), which do the same thing.

ONO::IO->type( $file );
returns: $type

uname();

Return the host's uname string, which offers some host system information.

ONO::IO->uname( );
returns: `uname -a`

unlink();

Remove a symlink.

ONO::IO->unlink( $symlink );

unzip();

Unzip a file or directory.

ONO::IO->unzip( $source,$target );
returns: "unzip unzip $vpath/$source -d $vpath/$target"

upload();

CGI upload, which allows single file upload directly via ONO::IO. In most cases, you will avoid this and use ONO::ToolBox::Upload and ONO::Lib::Web::Upload instead.

$max = file size limit (absolute limit = 4 MB)

-g only accept GIF
-i only accept images (JPG, PNG, GIF, WEBP)
-j only accept JPG
-p only accept PNG
-P only accept PDF
-w only accept WebP

ONO::IO->upload( $handle,$dir,$file,$max,$switches );

upload_url();

Returns the rawdata.pl upload script URL.

ONO::IO->upload_url( );
returns: $URL

which();

Find a UNIX binary. Accepts the binary name as input, returns the path to the binary.

ONO::IO->which( $source );
returns: $res

xmlget();

Get / extract XML data. This only works for very simple XML files, and it will only return the first instance of the data.

ONO::IO->xmlget( );

zip();

Compress a file. Warning: gzip only works with single files, use 'tar' to zip entire directories

ONO::IO->zip( $file );

Internal Functions

_dir_recursive();

Do NOT use this routine if possible, we recommend using the simple 'dir' with option -R instead note that this routine ignores hidden files and folders, and it does not support directories with dots in their names (which would be ONO-incompatible anyway).

&_dir_recursive( $basedir,$dir );
returns: @new

_dir_recursive_ux();

Do NOT use this routine if possible, we recommend using the simple 'dir' with option -RX instead

&_dir_recursive_ux( $basedir,$dir );
returns: @new

Sub-Modules

none

Dependencies