File Coverage

blib/lib/POSIX/2008.pm
Criterion Covered Total %
statement 31 39 79.4
branch 1 6 16.6
condition 2 3 66.6
subroutine 8 10 80.0
pod n/a
total 42 58 72.4


line stmt bran cond sub pod time code
1             package POSIX::2008;
2              
3 7     7   838985 use strict;
  7         13  
  7         242  
4 7     7   36 use warnings;
  7         11  
  7         325  
5 7     7   39 use Carp ();
  7         10  
  7         76  
6 7     7   3110 use IO::Dir ();
  7         101931  
  7         209  
7 7     7   46 use IO::File ();
  7         15  
  7         138  
8 7     7   26 use Time::HiRes qw(gettimeofday tv_interval);
  7         9  
  7         89  
9              
10             require Exporter;
11              
12             our $VERSION = '0.26';
13             our $XS_VERSION = $VERSION;
14             $VERSION = eval $VERSION; # so "use Module 0.002" won't warn on underscore
15              
16             our @_functions = qw(
17              
18             a64l abort abs access acos acosh alarm asin asinh atan atan2 atanh atof atoi
19             basename cabs cacos cacosh carg casin casinh catan catanh catclose catgets
20             catopen cbrt ccos ccosh ceil cexp chdir chmod chown cimag clock
21             clock_getcpuclockid clock_getres clock_gettime clock_nanosleep clock_settime
22             clog close confstr conj copysign cos cosh cpow cproj creal creat csin csinh
23             csqrt ctan ctanh dirname div dlclose dlerror dlopen dlsym drand48 endutxent
24             erand48 erf erfc execveat exp exp2 expm1 faccessat fchmodat fchownat fdatasync
25             fdim fdopen fdopendir feclearexcept fegetround feraiseexcept fesetround
26             fetestexcept fexecve ffs floor fma fmax fmin fmod fnmatch fpclassify fstatat
27             fsync futimens getdate getdate_err getegid geteuid getgid gethostid
28             gethostname getitimer getpriority getsid getuid getutxent getutxid getutxline
29             hypot ilogb isalnum isalpha isascii isatty isblank iscntrl isdigit isfinite
30             isgraph isgreaterequal isinf isless islessequal islessgreater islower isnan
31             isnormal isprint ispunct isspace isunordered isupper isxdigit j0 j1 jn jrand48
32             killpg l64a lchown ldexp lgamma link linkat log log10 log1p log2 logb lrand48
33             lround lstat mkdir mkdirat mkdtemp mkfifo mkfifoat mknod mknodat mkstemp
34             mrand48 nanosleep nearbyint nextafter nexttoward nice nrand48 open openat
35             openat2 pathconf poll posix_fadvise posix_fallocate pread preadv preadv2
36             psignal ptsname pwrite pwritev pwritev2 random raise read readlink readlinkat
37             readv realpath remainder remove removeat remquo rename renameat renameat2
38             rmdir round scalbn seed48 setegid seteuid setgid setitimer setpriority
39             setregid setreuid setsid setuid setutxent sighold sigignore signbit sigpause
40             sigrelse sin sinh srand48 srandom stat statvfs strptime strsignal symlink
41             symlinkat sync sysconf tan tanh tgamma timer_create timer_delete
42             timer_getoverrun timer_gettime timer_settime trunc truncate ttyname unlink
43             unlinkat utimensat write writev y0 y1 yn
44              
45             );
46              
47             our @_constants = qw(
48              
49             AT_EACCESS AT_EMPTY_PATH AT_FDCWD AT_NO_AUTOMOUNT AT_REMOVEDIR
50             AT_RESOLVE_BENEATH AT_SYMLINK_FOLLOW AT_SYMLINK_NOFOLLOW BOOT_TIME
51              
52             CLOCK_BOOTTIME CLOCK_BOOTTIME_ALARM CLOCK_HIGHRES CLOCK_MONOTONIC
53             CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC_FAST CLOCK_MONOTONIC_PRECISE
54             CLOCK_MONOTONIC_RAW CLOCK_PROCESS_CPUTIME_ID CLOCK_REALTIME
55             CLOCK_REALTIME_ALARM CLOCK_REALTIME_COARSE CLOCK_REALTIME_FAST
56             CLOCK_REALTIME_PRECISE CLOCK_SOFTTIME CLOCK_TAI CLOCK_THREAD_CPUTIME_ID
57             CLOCK_UPTIME CLOCK_UPTIME_FAST CLOCK_UPTIME_PRECISE
58              
59             DEAD_PROCESS FASYNC F_DUPFD F_DUPFD_CLOEXEC F_GETFD F_SETFD F_GETFL F_SETFL
60             F_GETLK F_SETLK F_SETLKW F_GETOWN F_SETOWN F_RDLCK F_UNLCK F_WRLCK FD_CLOEXEC
61             FE_TONEAREST FE_TOWARDZERO FE_UPWARD FE_DOWNWARD FE_DIVBYZERO FE_INEXACT
62             FE_INVALID FE_OVERFLOW FE_UNDERFLOW FE_ALL_EXCEPT FNM_CASEFOLD FNM_FILE_NAME
63             FNM_LEADING_DIR FNM_NOESCAPE FNM_NOMATCH FNM_PATHNAME FNM_PERIOD FP_INFINITE
64             FP_NAN FP_NORMAL FP_SUBNORMAL FP_ZERO INIT_PROCESS ITIMER_PROF ITIMER_REAL
65             ITIMER_VIRTUAL LOGIN_PROCESS NEW_TIME O_ACCMODE O_ASYNC O_APPEND O_CLOEXEC
66             O_CREAT O_DIRECT O_DIRECTORY O_DSYNC O_EMPTY_PATH O_EXEC O_EXCL O_EXLOCK
67             O_LARGEFILE O_NDELAY O_NOATIME O_NOCTTY O_NOFOLLOW O_NONBLOCK O_NOSIGPIPE
68             O_PATH O_RDONLY O_RDWR O_RESOLVE_BENEATH O_REGULAR O_RSYNC O_SEARCH O_SHLOCK
69             O_SYNC O_TMPFILE O_TRUNC O_TTY_INIT O_WRONLY OLD_TIME POSIX_FADV_NORMAL
70             POSIX_FADV_SEQUENTIAL POSIX_FADV_RANDOM POSIX_FADV_NOREUSE POSIX_FADV_WILLNEED
71             POSIX_FADV_DONTNEED PRIO_PROCESS PRIO_PGRP PRIO_USER RENAME_EXCHANGE
72             RENAME_NOREPLACE RENAME_WHITEOUT RESOLVE_BENEATH RESOLVE_IN_ROOT
73             RESOLVE_NO_MAGICLINKS RESOLVE_NO_SYMLINKS RESOLVE_NO_XDEV RESOLVE_CACHED
74             RTLD_DEEPBIND RTLD_GLOBAL RTLD_LAZY RTLD_LOCAL RTLD_MEMBER RTLD_NOAUTODEFER
75             RTLD_NODELETE RTLD_NOLOAD RTLD_NOW RUN_LVL RWF_DSYNC RWF_HIPRI RWF_SYNC
76             RWF_NOWAIT RWF_APPEND S_IFMT S_IFBLK S_IFCHR S_IFIFO S_IFREG S_IFDIR S_IFLNK
77             S_IFSOCK S_ISUID S_ISGID S_IRWXU S_IRUSR S_IWUSR S_IXUSR S_IRWXG S_IRGRP
78             S_IWGRP S_IXGRP S_IRWXO S_IROTH S_IWOTH S_IXOTH S_ISVTX SEEK_SET SEEK_CUR
79             SEEK_END SEEK_DATA SEEK_HOLE TIMER_ABSTIME USER_PROCESS UTIME_NOW UTIME_OMIT
80             F_OK R_OK W_OK X_OK
81              
82             INFTIM POLLERR POLLFREE POLLHUP POLLIN POLLINIGNEOF POLLMSG POLLNORM POLLNVAL
83             POLLOUT POLLPRI POLLRDBAND POLLRDHUP POLLRDNORM POLLREMOVE POLLSTANDARD
84             POLLWRBAND POLLWRNORM POLL_BUSY_LOOP
85              
86             ST_NOSUID ST_RDONLY
87              
88             ST_MANDLOCK ST_NOATIME ST_NODEV ST_NODIRATIME ST_NOEXEC ST_RELATIME
89             ST_SYNCHRONOUS
90              
91             ST_ASYNC ST_DEFEXPORTED ST_EXKERB ST_EXNORESPORT ST_EXPORTANON ST_EXPORTED
92             ST_EXPUBLIC ST_EXRDONLY ST_LOCAL ST_LOG ST_NOCOREDUMP ST_NODEVMTIME
93             ST_QUOTA ST_ROOTFS ST_SYMPERM ST_UNION
94              
95             _CS_GNU_LIBC_VERSION _CS_GNU_LIBPTHREAD_VERSION _CS_LFS64_CFLAGS
96             _CS_LFS64_LDFLAGS _CS_LFS64_LIBS _CS_LFS64_LINTFLAGS _CS_LFS_CFLAGS
97             _CS_LFS_LDFLAGS _CS_LFS_LIBS _CS_LFS_LINTFLAGS _CS_PATH
98             _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS _CS_POSIX_V6_ILP32_OFF32_CFLAGS
99             _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V6_ILP32_OFF32_LIBS
100             _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
101             _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LIBS
102             _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V6_LP64_OFF64_CFLAGS
103             _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V6_LP64_OFF64_LIBS
104             _CS_POSIX_V6_LP64_OFF64_LINTFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
105             _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
106             _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS
107             _CS_POSIX_V7_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
108             _CS_POSIX_V7_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
109             _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
110             _CS_POSIX_V7_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
111             _CS_POSIX_V7_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
112             _CS_POSIX_V7_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LINTFLAGS
113             _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
114             _CS_POSIX_V7_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
115             _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS _CS_V5_WIDTH_RESTRICTED_ENVS _CS_V6_ENV
116             _CS_V6_WIDTH_RESTRICTED_ENVS _CS_V7_ENV _CS_V7_WIDTH_RESTRICTED_ENVS
117             _CS_XBS5_ILP32_OFF32_CFLAGS _CS_XBS5_ILP32_OFF32_LDFLAGS
118             _CS_XBS5_ILP32_OFF32_LIBS _CS_XBS5_ILP32_OFF32_LINTFLAGS
119             _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_XBS5_ILP32_OFFBIG_LDFLAGS
120             _CS_XBS5_ILP32_OFFBIG_LIBS _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
121             _CS_XBS5_LP64_OFF64_CFLAGS _CS_XBS5_LP64_OFF64_LDFLAGS
122             _CS_XBS5_LP64_OFF64_LIBS _CS_XBS5_LP64_OFF64_LINTFLAGS
123             _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
124             _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
125              
126             _PC_2_SYMLINKS _PC_ALLOC_SIZE_MIN _PC_ASYNC_IO _PC_CHOWN_RESTRICTED
127             _PC_FILESIZEBITS _PC_LINK_MAX _PC_MAX_CANON _PC_MAX_INPUT _PC_NAME_MAX
128             _PC_NO_TRUNC _PC_PATH_MAX _PC_PIPE_BUF _PC_PRIO_IO _PC_REC_INCR_XFER_SIZE
129             _PC_REC_MAX_XFER_SIZE _PC_REC_MIN_XFER_SIZE _PC_REC_XFER_ALIGN _PC_SOCK_MAXBUF
130             _PC_SYMLINK_MAX _PC_SYNC_IO _PC_VDISABLE
131              
132             _SC_2_CHAR_TERM _SC_2_C_BIND _SC_2_C_DEV _SC_2_C_VERSION _SC_2_FORT_DEV
133             _SC_2_FORT_RUN _SC_2_LOCALEDEF _SC_2_PBS _SC_2_PBS_ACCOUNTING
134             _SC_2_PBS_CHECKPOINT _SC_2_PBS_LOCATE _SC_2_PBS_MESSAGE _SC_2_PBS_TRACK
135             _SC_2_SW_DEV _SC_2_UPE _SC_2_VERSION _SC_ADVISORY_INFO _SC_AIO_LISTIO_MAX
136             _SC_AIO_MAX _SC_AIO_PRIO_DELTA_MAX _SC_ARG_MAX _SC_ASYNCHRONOUS_IO
137             _SC_ATEXIT_MAX _SC_AVPHYS_PAGES _SC_BARRIERS _SC_BASE _SC_BC_BASE_MAX
138             _SC_BC_DIM_MAX _SC_BC_SCALE_MAX _SC_BC_STRING_MAX _SC_CHARCLASS_NAME_MAX
139             _SC_CHAR_BIT _SC_CHAR_MAX _SC_CHAR_MIN _SC_CHILD_MAX _SC_CLK_TCK
140             _SC_CLOCK_SELECTION _SC_COLL_WEIGHTS_MAX _SC_CPUTIME _SC_C_LANG_SUPPORT
141             _SC_C_LANG_SUPPORT_R _SC_DELAYTIMER_MAX _SC_DEVICE_IO _SC_DEVICE_SPECIFIC
142             _SC_DEVICE_SPECIFIC_R _SC_EQUIV_CLASS_MAX _SC_EXPR_NEST_MAX _SC_FD_MGMT
143             _SC_FIFO _SC_FILE_ATTRIBUTES _SC_FILE_LOCKING _SC_FILE_SYSTEM _SC_FSYNC
144             _SC_GETGR_R_SIZE_MAX _SC_GETPW_R_SIZE_MAX _SC_HOST_NAME_MAX _SC_INT_MAX
145             _SC_INT_MIN _SC_IOV_MAX _SC_IPV6 _SC_JOB_CONTROL _SC_LEVEL1_DCACHE_ASSOC
146             _SC_LEVEL1_DCACHE_LINESIZE _SC_LEVEL1_DCACHE_SIZE _SC_LEVEL1_ICACHE_ASSOC
147             _SC_LEVEL1_ICACHE_LINESIZE _SC_LEVEL1_ICACHE_SIZE _SC_LEVEL2_CACHE_ASSOC
148             _SC_LEVEL2_CACHE_LINESIZE _SC_LEVEL2_CACHE_SIZE _SC_LEVEL3_CACHE_ASSOC
149             _SC_LEVEL3_CACHE_LINESIZE _SC_LEVEL3_CACHE_SIZE _SC_LEVEL4_CACHE_ASSOC
150             _SC_LEVEL4_CACHE_LINESIZE _SC_LEVEL4_CACHE_SIZE _SC_LINE_MAX
151             _SC_LOGIN_NAME_MAX _SC_LONG_BIT _SC_MAPPED_FILES _SC_MB_LEN_MAX _SC_MEMLOCK
152             _SC_MEMLOCK_RANGE _SC_MEMORY_PROTECTION _SC_MESSAGE_PASSING _SC_MINSIGSTKSZ
153             _SC_MONOTONIC_CLOCK _SC_MQ_OPEN_MAX _SC_MQ_PRIO_MAX _SC_MULTI_PROCESS
154             _SC_NETWORKING _SC_NGROUPS_MAX _SC_NL_ARGMAX _SC_NL_LANGMAX _SC_NL_MSGMAX
155             _SC_NL_NMAX _SC_NL_SETMAX _SC_NL_TEXTMAX _SC_NPROCESSORS_CONF
156             _SC_NPROCESSORS_ONLN _SC_NZERO _SC_OPEN_MAX _SC_PAGESIZE _SC_PAGE_SIZE
157             _SC_PASS_MAX _SC_PHYS_PAGES _SC_PII _SC_PII_INTERNET _SC_PII_INTERNET_DGRAM
158             _SC_PII_INTERNET_STREAM _SC_PII_OSI _SC_PII_OSI_CLTS _SC_PII_OSI_COTS
159             _SC_PII_OSI_M _SC_PII_SOCKET _SC_PII_XTI _SC_PIPE _SC_POLL _SC_PRIORITIZED_IO
160             _SC_PRIORITY_SCHEDULING _SC_RAW_SOCKETS _SC_READER_WRITER_LOCKS
161             _SC_REALTIME_SIGNALS _SC_REGEXP _SC_REGEX_VERSION _SC_RE_DUP_MAX _SC_RTSIG_MAX
162             _SC_SAVED_IDS _SC_SCHAR_MAX _SC_SCHAR_MIN _SC_SELECT _SC_SEMAPHORES
163             _SC_SEM_NSEMS_MAX _SC_SEM_VALUE_MAX _SC_SHARED_MEMORY_OBJECTS _SC_SHELL
164             _SC_SHRT_MAX _SC_SHRT_MIN _SC_SIGNALS _SC_SIGQUEUE_MAX _SC_SIGSTKSZ
165             _SC_SINGLE_PROCESS _SC_SPAWN _SC_SPIN_LOCKS _SC_SPORADIC_SERVER _SC_SSIZE_MAX
166             _SC_SS_REPL_MAX _SC_STREAMS _SC_STREAM_MAX _SC_SYMLOOP_MAX _SC_SYNCHRONIZED_IO
167             _SC_SYSTEM_DATABASE _SC_SYSTEM_DATABASE_R _SC_THREADS
168             _SC_THREAD_ATTR_STACKADDR _SC_THREAD_ATTR_STACKSIZE _SC_THREAD_CPUTIME
169             _SC_THREAD_DESTRUCTOR_ITERATIONS _SC_THREAD_KEYS_MAX
170             _SC_THREAD_PRIORITY_SCHEDULING _SC_THREAD_PRIO_INHERIT _SC_THREAD_PRIO_PROTECT
171             _SC_THREAD_PROCESS_SHARED _SC_THREAD_ROBUST_PRIO_INHERIT
172             _SC_THREAD_ROBUST_PRIO_PROTECT _SC_THREAD_SAFE_FUNCTIONS
173             _SC_THREAD_SPORADIC_SERVER _SC_THREAD_STACK_MIN _SC_THREAD_THREADS_MAX
174             _SC_TIMEOUTS _SC_TIMERS _SC_TIMER_MAX _SC_TRACE _SC_TRACE_EVENT_FILTER
175             _SC_TRACE_EVENT_NAME_MAX _SC_TRACE_INHERIT _SC_TRACE_LOG _SC_TRACE_NAME_MAX
176             _SC_TRACE_SYS_MAX _SC_TRACE_USER_EVENT_MAX _SC_TTY_NAME_MAX
177             _SC_TYPED_MEMORY_OBJECTS _SC_TZNAME_MAX _SC_T_IOV_MAX _SC_UCHAR_MAX
178             _SC_UINT_MAX _SC_UIO_MAXIOV _SC_ULONG_MAX _SC_USER_GROUPS _SC_USER_GROUPS_R
179             _SC_USHRT_MAX _SC_V6_ILP32_OFF32 _SC_V6_ILP32_OFFBIG _SC_V6_LP64_OFF64
180             _SC_V6_LPBIG_OFFBIG _SC_V7_ILP32_OFF32 _SC_V7_ILP32_OFFBIG _SC_V7_LP64_OFF64
181             _SC_V7_LPBIG_OFFBIG _SC_VERSION _SC_WORD_BIT _SC_XBS5_ILP32_OFF32
182             _SC_XBS5_ILP32_OFFBIG _SC_XBS5_LP64_OFF64 _SC_XBS5_LPBIG_OFFBIG
183             _SC_XOPEN_CRYPT _SC_XOPEN_ENH_I18N _SC_XOPEN_LEGACY _SC_XOPEN_REALTIME
184             _SC_XOPEN_REALTIME_THREADS _SC_XOPEN_SHM _SC_XOPEN_STREAMS _SC_XOPEN_UNIX
185             _SC_XOPEN_VERSION _SC_XOPEN_XCU_VERSION _SC_XOPEN_XPG2 _SC_XOPEN_XPG3
186             _SC_XOPEN_XPG4
187              
188             );
189              
190             our @ISA = qw(Exporter);
191             our @EXPORT = ();
192             our @EXPORT_OK = (@_functions, @_constants);
193              
194             our %EXPORT_TAGS = (
195             # at: Older Perls don't have variable length lookbehind, hence two regexen
196             # for functions.
197             'at' => [
198             grep(/^(?:AT|RENAME|RESOLVE)_/, @_constants),
199             grep(/at2?$/ && !/^(?:creat|l?stat)$/, @_functions),
200             ],
201             'id' => [grep /^[gs]et.+id$/, @_functions],
202             'is' => [grep /^is/, @_functions],
203             'rw' => [qw(read write readv writev)],
204             'prw' => [qw(pread preadv preadv2 pwrite pwritev pwritev2)],
205             'clock' => [grep(/^(?:CLOCK_|TIMER_ABSTIME)/, @_constants), grep(/^clock/, @_functions)],
206             'fcntl' => [grep /^(?:[FORWX]|FD|POSIX_FADV|SEEK)_/, @_constants],
207             'fenv_h' => [grep(/^FE_/, @_constants), grep (/^fe/, @_functions)],
208             'fnm' => [grep(/^FNM_/, @_constants), 'fnmatch'],
209             'poll' => ['poll', grep /^(?:POLL|INFTIM)/, @_constants],
210             'stat_h' => [grep /^(?:S_I|UTIME_)/, @_constants],
211             'time_h' => [grep /^(?:CLOCK|TIMER)_/, @_constants],
212             'timer' => [grep(/^TIMER_/, @_constants), grep(/^timer_/, @_functions)],
213             'utmpx_h' => [
214             grep(/_(?:TIME|PROCESS)$/, @_constants),
215             grep(/^(?:ACCOUNTING|EMPTY|RUN_LVL)$/, @_constants),
216             grep(/utx/, @_functions),
217             ],
218             'confstr' => ['confstr', grep /^_CS_/, @_constants],
219             'pathconf' => ['pathconf', grep /^_PC_/, @_constants],
220             'sysconf' => ['sysconf', grep /^_SC_/, @_constants],
221             );
222              
223             my %deprecated = (
224             atol => 'atoi',
225             atoll => 'atoi',
226             ldiv => 'div',
227             lldiv => 'div',
228             fchdir => 'chdir',
229             fchmod => 'chmod',
230             fchown => 'chown',
231             ftruncate => 'truncate',
232             );
233             my %deprecated_warned;
234              
235             push @EXPORT_OK, keys %deprecated;
236              
237             our $AUTOLOAD;
238             sub AUTOLOAD {
239 0     0   0 my ($func) = ($AUTOLOAD =~ /.*::(.*)/);
240 0 0       0 die "POSIX::2008.xs has failed to load\n" if $func eq 'constant';
241 0         0 constant($func);
242             }
243              
244             sub import {
245 7     7   82 my $this = shift;
246              
247             # This is a hack that allows us to import only the non-XS portion of the
248             # module in Makefile.PL to get the constants for WriteConstants(). It's not
249             # intended for use in actual code!
250 7 50 66     37 if (@_ && $_[0] eq '-noxs') {
251 0         0 shift;
252             }
253             else {
254 7         38 require XSLoader;
255 7         15346 XSLoader::load('POSIX::2008', $XS_VERSION);
256              
257 7         99 while (my ($func, $repl) = each %deprecated) {
258 56         121 my $package_func = __PACKAGE__."::${func}";
259 56         107 my $package_repl = __PACKAGE__."::${repl}";
260 7     7   10694 no strict 'refs';
  7         13  
  7         1619  
261 56         267 *{$package_func} = sub {
262             Carp::carp(
263             "${package_func}() is deprecated, use ${package_repl}() instead"
264 0 0   0   0 ) unless $deprecated_warned{$func}++;
265 0         0 &{*{$package_repl}};
  0         0  
  0         0  
266             }
267 56         203 }
268             }
269              
270 7         298038 __PACKAGE__->export_to_level(1, $this, @_);
271             }
272              
273             1;