The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Venus::Os - OS Class

ABSTRACT

OS Class for Perl 5

SYNOPSIS

  package main;

  use Venus::Os;

  my $os = Venus::Os->new;

  # bless({...}, 'Venus::Os')

  # my $name = $os->name;

  # "linux"

DESCRIPTION

This package provides methods for determining the current operating system, as well as finding and executing files.

INHERITS

This package inherits behaviors from:

Venus::Kind::Utility

METHODS

This package provides the following methods:

call

  call(string $name, string @args) (any)

The call method attempts to find the path to the program specified via "which" and dispatches to "mkcall" in Venus::Path and returns the result. Any exception throw is supressed and will return undefined if encountered.

Since 2.80

call example 1
  # given: synopsis

  package main;

  my $app = $os->is_win ? 'perl.exe' : 'perl';

  my $call = $os->call($app, '-V:osname');

  # "osname='linux';"
call example 2
  # given: synopsis

  package main;

  my $app = $os->is_win ? 'perl.exe' : 'perl';

  my @call = $os->call($app, '-V:osname');

  # ("osname='linux';", 0)
call example 3
  # given: synopsis

  package main;

  my $call = $os->call('nowhere');

  # undef
call example 4
  # given: synopsis

  package main;

  my @call = $os->call($^X, '-V:osname');

  # ("osname='linux';", 0)
call example 5
  # given: synopsis

  package main;

  my @call = $os->call($^X, 't/data/sun');

  # ("", 1)

find

  find(string $name, string @paths) (arrayref)

The find method searches the paths provided for a file matching the name provided and returns all the files found as an arrayref. Returns a list in list context.

Since 2.80

find example 1
  # given: synopsis

  package main;

  my $find = $os->find('cmd', 't/path/user/bin');

  # ["t/path/user/bin/cmd"]
find example 2
  # given: synopsis

  package main;

  my $find = $os->find('cmd', 't/path/user/bin', 't/path/usr/bin');

  # ["t/path/user/bin/cmd", "t/path/usr/bin/cmd"]
find example 3
  # given: synopsis

  package main;

  my $find = $os->find('zzz', 't/path/user/bin', 't/path/usr/bin');

  # []

is_bsd

  is_bsd() (boolean)

The is_bsd method returns true if the OS is either "freebsd" or "openbsd", and otherwise returns false.

Since 2.80

is_bsd example 1
  # given: synopsis

  package main;

  # on linux

  my $is_bsd = $os->is_bsd;

  # false
is_bsd example 2
  # given: synopsis

  package main;

  # on freebsd

  my $is_bsd = $os->is_bsd;

  # true
is_bsd example 3
  # given: synopsis

  package main;

  # on openbsd

  my $is_bsd = $os->is_bsd;

  # true

is_cyg

  is_cyg() (boolean)

The is_cyg method returns true if the OS is either "cygwin" or "msys", and otherwise returns false.

Since 2.80

is_cyg example 1
  # given: synopsis

  package main;

  # on linux

  my $is_cyg = $os->is_cyg;

  # false
is_cyg example 2
  # given: synopsis

  package main;

  # on cygwin

  my $is_cyg = $os->is_cyg;

  # true
is_cyg example 3
  # given: synopsis

  package main;

  # on msys

  my $is_cyg = $os->is_cyg;

  # true

is_dos

  is_dos() (boolean)

The is_dos method returns true if the OS is either "mswin32" or "dos" or "os2", and otherwise returns false.

Since 2.80

is_dos example 1
  # given: synopsis

  package main;

  # on linux

  my $is_dos = $os->is_dos;

  # false
is_dos example 2
  # given: synopsis

  package main;

  # on mswin32

  my $is_dos = $os->is_dos;

  # true
is_dos example 3
  # given: synopsis

  package main;

  # on dos

  my $is_dos = $os->is_dos;

  # true
is_dos example 4
  # given: synopsis

  package main;

  # on os2

  my $is_dos = $os->is_dos;

  # true

is_lin

  is_lin() (boolean)

The is_lin method returns true if the OS is "linux", and otherwise returns false.

Since 2.80

is_lin example 1
  # given: synopsis

  package main;

  # on linux

  my $is_lin = $os->is_lin;

  # true
is_lin example 2
  # given: synopsis

  package main;

  # on macos

  my $is_lin = $os->is_lin;

  # false
is_lin example 3
  # given: synopsis

  package main;

  # on mswin32

  my $is_lin = $os->is_lin;

  # false

is_mac

  is_mac() (boolean)

The is_mac method returns true if the OS is either "macos" or "darwin", and otherwise returns false.

Since 2.80

is_mac example 1
  # given: synopsis

  package main;

  # on linux

  my $is_mac = $os->is_mac;

  # false
is_mac example 2
  # given: synopsis

  package main;

  # on macos

  my $is_mac = $os->is_mac;

  # true
is_mac example 3
  # given: synopsis

  package main;

  # on darwin

  my $is_mac = $os->is_mac;

  # true

is_non

  is_non() (boolean)

The is_non method returns true if the OS is not recognized, and if recognized returns false.

Since 2.80

is_non example 1
  # given: synopsis

  package main;

  # on linux

  my $is_non = $os->is_non;

  # false
is_non example 2
  # given: synopsis

  package main;

  # on aix

  my $is_non = $os->is_non;

  # true

is_sun

  is_sun() (boolean)

The is_sun method returns true if the OS is either "solaris" or "sunos", and otherwise returns false.

Since 2.80

is_sun example 1
  # given: synopsis

  package main;

  # on linux

  my $is_sun = $os->is_sun;

  # false
is_sun example 2
  # given: synopsis

  package main;

  # on solaris

  my $is_sun = $os->is_sun;

  # true
is_sun example 3
  # given: synopsis

  package main;

  # on sunos

  my $is_sun = $os->is_sun;

  # true

is_vms

  is_vms() (boolean)

The is_vms method returns true if the OS is "vms", and otherwise returns false.

Since 2.80

is_vms example 1
  # given: synopsis

  package main;

  # on linux

  my $is_vms = $os->is_vms;

  # false
is_vms example 2
  # given: synopsis

  package main;

  # on vms

  my $is_vms = $os->is_vms;

  # true

is_win

  is_win() (boolean)

The is_win method returns true if the OS is either "mswin32" or "dos" or "os2", and otherwise returns false.

Since 2.80

is_win example 1
  # given: synopsis

  package main;

  # on linux

  my $is_win = $os->is_win;

  # false
is_win example 2
  # given: synopsis

  package main;

  # on mswin32

  my $is_win = $os->is_win;

  # true
is_win example 3
  # given: synopsis

  package main;

  # on dos

  my $is_win = $os->is_win;

  # true
is_win example 4
  # given: synopsis

  package main;

  # on os2

  my $is_win = $os->is_win;

  # true

name

  name() (string)

The name method returns the OS name.

Since 2.80

name example 1
  # given: synopsis

  package main;

  # on linux

  my $name = $os->name;

  # "linux"

  # same as $^O

paths

  paths() (arrayref)

The paths method returns the paths specified by the "PATH" environment variable as an arrayref of unique paths. Returns a list in list context.

Since 2.80

paths example 1
  # given: synopsis

  package main;

  my $paths = $os->paths;

  # [
  #   "/root/local/bin",
  #   "/root/bin",
  #   "/usr/local/sbin",
  #   "/usr/local/bin",
  #   "/usr/sbin:/usr/bin",
  # ]

quote

  quote(string $data) (string)

The quote method accepts a string and returns the OS-specific quoted version of the string.

Since 2.91

quote example 1
  # given: synopsis

  package main;

  # on linux

  my $quote = $os->quote("hello \"world\"");

  # "'hello \"world\"'"
quote example 2
  # given: synopsis

  package main;

  # on linux

  my $quote = $os->quote('hello \'world\'');

  # "'hello '\\''world'\\'''"
quote example 3
  # given: synopsis

  package main;

  # on mswin32

  my $quote = $os->quote("hello \"world\"");

  # "\"hello \\"world\\"\""
quote example 4
  # given: synopsis

  package main;

  # on mswin32

  my $quote = $os->quote('hello "world"');

  # '"hello \"world\""'

type

  type() (string)

The type method returns a string representing the "test" method, which identifies the OS, that would return true if called, based on the name of the OS.

Since 2.80

type example 1
  # given: synopsis

  package main;

  # on linux

  my $type = $os->type;

  # "is_lin"
type example 2
  # given: synopsis

  package main;

  # on macos

  my $type = $os->type;

  # "is_mac"
type example 3
  # given: synopsis

  package main;

  # on mswin32

  my $type = $os->type;

  # "is_win"
type example 4
  # given: synopsis

  package main;

  # on openbsd

  my $type = $os->type;

  # "is_bsd"
type example 5
  # given: synopsis

  package main;

  # on cygwin

  my $type = $os->type;

  # "is_cyg"
type example 6
  # given: synopsis

  package main;

  # on dos

  my $type = $os->type;

  # "is_win"
type example 7
  # given: synopsis

  package main;

  # on solaris

  my $type = $os->type;

  # "is_sun"
type example 8
  # given: synopsis

  package main;

  # on vms

  my $type = $os->type;

  # "is_vms"

where

  where(string $file) (arrayref)

The where method searches the paths defined by the PATH environment variable for a file matching the name provided and returns all the files found as an arrayref. Returns a list in list context. This method doesn't check (or care) if the files found are actually executable.

Since 2.80

where example 1
  # given: synopsis

  package main;

  my $where = $os->where('cmd');

  # [
  #   "t/path/user/local/bin/cmd",
  #   "t/path/user/bin/cmd",
  #   "t/path/usr/bin/cmd",
  #   "t/path/usr/local/bin/cmd",
  #   "t/path/usr/local/sbin/cmd",
  #   "t/path/usr/sbin/cmd"
  # ]
where example 2
  # given: synopsis

  package main;

  my $where = $os->where('app1');

  # [
  #   "t/path/user/local/bin/app1",
  #   "t/path/usr/bin/app1",
  #   "t/path/usr/sbin/app1"
  # ]
where example 3
  # given: synopsis

  package main;

  my $where = $os->where('app2');

  # [
  #   "t/path/user/local/bin/app2",
  #   "t/path/usr/bin/app2",
  # ]
where example 4
  # given: synopsis

  package main;

  my $where = $os->where('app3');

  # [
  #   "t/path/user/bin/app3",
  #   "t/path/usr/sbin/app3"
  # ]
where example 5
  # given: synopsis

  package main;

  my $where = $os->where('app4');

  # [
  #   "t/path/user/local/bin/app4",
  #   "t/path/usr/local/bin/app4",
  #   "t/path/usr/local/sbin/app4",
  # ]
where example 6
  # given: synopsis

  package main;

  my $where = $os->where('app5');

  # []

which

  which(string $file) (string)

The which method returns the first match from the result of calling the "where" method with the arguments provided.

Since 2.80

which example 1
  # given: synopsis

  package main;

  my $which = $os->which('cmd');

  # "t/path/user/local/bin/cmd",
which example 2
  # given: synopsis

  package main;

  my $which = $os->which('app1');

  # "t/path/user/local/bin/app1"
which example 3
  # given: synopsis

  package main;

  my $which = $os->which('app2');

  # "t/path/user/local/bin/app2"
which example 4
  # given: synopsis

  package main;

  my $which = $os->which('app3');

  # "t/path/user/bin/app3"
which example 5
  # given: synopsis

  package main;

  my $which = $os->which('app4');

  # "t/path/user/local/bin/app4"
which example 6
  # given: synopsis

  package main;

  my $which = $os->which('app5');

  # undef

AUTHORS

Awncorp, awncorp@cpan.org

LICENSE

Copyright (C) 2022, Awncorp, awncorp@cpan.org.

This program is free software, you can redistribute it and/or modify it under the terms of the Apache license version 2.0.