cpan beginner

How to write to file using Path::Tiny in Perl?

Question

How to write to file using Path::Tiny in Perl?

Path::Tiny is a convenient Perl module for file handling, providing easy-to-use methods like write and slurp. However, it is not a core module bundled with Perl by default, so trying to use it without installing will cause errors in pure sandbox or minimal environments.

Why the Original Code Fails in a Restricted Environment

The error Can't locate object method "write" via package "Path::Tiny" happens because Path::Tiny is simply not available in the Perl environment you're running, especially on sandboxes without CPAN module installation rights. Since it’s a non-core module (usually installed from CPAN), the code will fail to run unless Path::Tiny is installed and accessible.

How to Write to a File Without Using Path::Tiny

To write to files in pure core Perl (which runs safely in any sandbox), use built-in pragmas and functions. The standard way is to use open with a lexical filehandle, then print to it, and finally close it. This approach uses the familiar <> and generates concise and idiomatic Perl code without external dependencies.

use strict;
use warnings;

my $filename = "example.txt";
my $content = "Hello, core Perl file writing!\nThis works in any environment.\n";

# Open the file for writing ('>')
open my $fh, '>', $filename
  or die "Could not open '$filename' for writing: $!";

# Write content
print $fh $content;

# Close the filehandle
close $fh
  or warn "Could not close '$filename': $!";

# Read and print the content back
open my $in, '<', $filename
  or die "Could not open '$filename' for reading: $!";

print "File content written:\n";
while (my $line = <$in>) {
    print $line;
}

close $in
  or warn "Could not close '$filename': $!";

Perl Concepts Demonstrated

  • open uses a filehandle scalar $fh with the > mode for writing.
  • Sigils: $ for scalars, including filehandles and strings.
  • print $fh $content sends data to the open filehandle.
  • Use of lexical filehandles (my $fh) is safer and preferred since Perl 5.6+.
  • Robust error handling with die and warn.

Common Pitfalls to Avoid

  • Not checking the open call result—always test for success.
  • Forgetting to close filehandles, which can lead to data loss.
  • Mixing bareword filehandles with lexical ones—lexicals are recommended.
  • Assuming non-core modules like Path::Tiny will exist in all environments.

Summary

If your environment does not have Path::Tiny installed, the native Perl open/print/close workflow is the reliable, portable way to write to files. It works in any vanilla Perl installation and completes much faster and trouble-free in sandboxed or restricted environments.

Verified Code

Executed in a sandbox to capture real output. • v5.34.1 • 8ms

Tip: edit code and use “Run (Browser)”. Server runs always execute the published, verified snippet.
STDOUT
File content written:
Hello, core Perl file writing!
This works in any environment.
STDERR
(empty)

Was this helpful?

Related Questions