pub struct Cop(/* private fields */);Expand description
Non-null pointer to a Perl COP. Same ABI as *mut COP.
Non-owning, like the other newtypes.
Implementations§
Source§impl Cop
impl Cop
Sourcepub unsafe fn from_raw_unchecked(p: *const COP) -> Self
pub unsafe fn from_raw_unchecked(p: *const COP) -> Self
Wrap a raw COP pointer without checking for null.
§Safety
Caller must guarantee p is non-null and points to a valid
COP for at least the lifetime of the resulting Cop. Prefer
Op::as_cop, which class-checks first.
Sourcepub fn from_raw(p: *const COP) -> Option<Self>
pub fn from_raw(p: *const COP) -> Option<Self>
Wrap a raw COP pointer, returning None on null input.
Sourcepub fn line(&self) -> u32
pub fn line(&self) -> u32
Source line of the statement this COP opens (CopLINE).
Examples found in repository?
More examples
examples/walker_subs.rs (line 37)
19fn main() {
20 let mut perl = Perl::new();
21 perl.parse_env_args(env::args(), env::vars());
22
23 let sv0 = perl.get_sv("0", 0).expect("$0 is always set");
24 let main_file = String::from_utf8_lossy(sv0.pv(&perl)).into_owned();
25 println!("$0 = {main_file:?}");
26
27 let mut walker = StashWalker::new(&perl);
28 walker.walk("main", &mut |e| {
29 if e.cv.file().as_deref() != Some(main_file.as_str()) {
30 return;
31 }
32 let qual = e
33 .cv
34 .names(&perl)
35 .map(|(full, _)| full)
36 .unwrap_or_else(|| format!("{}::{}", e.package, e.name));
37 let line = e.cv.first_cop(&perl).map(|c| c.line());
38 println!("sub {qual} (first statement at line {line:?})");
39
40 let lexicals: Vec<String> = e
41 .cv
42 .pad_names()
43 .flatten() // skip unnamed slots
44 .filter_map(|pn| {
45 // Target/temporary slots have a non-null but empty PV;
46 // only real `my`/`our` names are interesting here.
47 let pv = pn.pv().filter(|s| !s.is_empty())?;
48 Some(match pn.type_stash_name() {
49 Some(t) => format!("{pv}: {t}"),
50 None => pv,
51 })
52 })
53 .collect();
54 println!(" lexicals: {lexicals:?}");
55
56 let ops: Vec<&str> = e
57 .cv
58 .start_op()
59 .into_iter()
60 .flat_map(|s| s.next_iter())
61 .take(20)
62 .map(|o| o.name().unwrap_or("<custom>"))
63 .collect();
64 println!(" ops (execution order, first 20): {}", ops.join(" "));
65 });
66}Trait Implementations§
Auto Trait Implementations§
impl !Send for Cop
impl !Sync for Cop
impl Freeze for Cop
impl RefUnwindSafe for Cop
impl Unpin for Cop
impl UnsafeUnpin for Cop
impl UnwindSafe for Cop
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more